第1章 分布式发展史 1
1.1 单机小型机时期 1
1.1.1 互联网的诞生 2
1.1.2 复杂应用拆分 3
1.1.3 遭遇性能问题 3
1.2 集群化时期 4
1.2.1 从高端设备到普通PC 4
1.2.2 硬件负载均衡设备 5
1.2.3 资源配置问题 5
1.2.4 积少成多的优势 6
1.2.5 集群化架构 6
1.2.6 软件负载设备 7
1.3 服务化时期 8
1.3.1 应用到服务 8
1.3.2 远程调用 8
1.3.3 虚拟IP地址 9
1.3.4 复杂的调用关系 10
1.3.5 服务治理 11
1.3.6 旁路负载 12
1.4 微服务时期 13
1.4.1 服务细化 13
1.4.2 架构轻量化 14
1.5 服务网格(Service Mesh)新时期 15
1.5.1 多语言的困难 15
1.5.2 指数级增加的系统复杂度 15
1.5.3 Linkerd诞生 16
1.5.4 第一代服务网格架构 17
1.5.5 第二代服务网格架构 18
1.5.6 生产应用情况 19
1.6 本章小结 20
第2章 Service Mesh:以Istio为例 21
2.1 Istio的设计理念 21
2.1.1 Istio的诞生背景 22
2.1.2 控制一切的两个平面 23
2.1.3 接口与平台化 24
2.1.4 中心化与分散化的抉择 25
2.2 数据平面 27
2.2.1 xDS-API 27
2.2.2 服务负载及流量控制 28
2.2.3 入口与出口网关 31
2.2.4 故障应急机制 32
2.2.5 故障注入 32
2.3 控制平面 33
2.3.1 Pilot结构及功能 33
2.3.2 Mixer结构及功能 34
2.3.3 稳定性与容灾能力 37
2.3.4 请求属性(Attribute) 37
2.3.5 操作配置(Operator Config) 38
2.4 安全控制 40
2.4.1 Citadel结构及功能 42
2.4.2 Istio身份(Identity) 42
2.4.3 认证(Authentication) 43
2.4.4 鉴权(Authorization) 44
2.5 Hello,Istio! 45
2.5.1 安装Docker 45
2.5.2 安装Kubernetes 47
2.5.3 初始化Master节点 48
2.5.4 配置weave网络插件 49
2.5.5 安装Istio 49
2.5.6 向Istio部署第一个应用 50
2.5.7 部署BookInfo系统 51
2.6 动手体验Istio 53
2.6.1 几个基本概念 53
2.6.2 体验1:按版本路由 55
2.6.3 体验2:按权重分流 56
2.7 BookInfo示例分析 57
2.7.1 IngressGateway 57
2.7.2 IngressGateway配置 58
2.7.3 Sidecar路由配置 59
2.8 本章小结 62
第3章 理解Istio服务网格 65
3.1 Kubernetes服务组网原理 65
3.1.1 四层服务部署结构 66
3.1.2 Node内部流量路由 67
3.1.3 Pause容器 69
3.1.4 节点间通信接口CNI 72
3.1.5 服务发现与DNS 74
3.2 Sidecar流量接管原理 76
3.2.1 Sidecar注入方式 76
3.2.2 优雅的容器调试方式 78
3.2.3 Sidecar流量劫持配置 79
3.3 Istio服务组网 81
3.3.1 链路优势总结 81
3.3.2 服务传输路径全览 82
3.4 组建零信任安全网络(Zero Trust Network) 83
3.4.1 点对点的安全传输 84
3.4.2 身份认证(Authentication) 86
3.4.3 安全命名(Secure Naming) 89
3.4.4 服务鉴权(Authorization) 89
3.4.5 启用Istio服务网格安全 91
3.5 Istio的扩展设计 96
3.5.1 Sidecar对接适配&. 96
3.5.2 平台适配 100
3.5.3 扩展模板(Template) 104
3.6 本章小结 108
第4章 Istio周边生态一览 109
4.1 链路跟踪Jaeger巭Zipkin 110
4.1.1 链路跟踪诞生的前因后果 110
4.1.2 Jaeger能做什么 110
4.1.3 如何在Istio中使用Jaeger 112
4.1.4 使用Trace ID来查询跟踪信息 115
4.2 分布式监控Prometheus 117
4.2.1 监控需求的由来及现状 117
4.2.2 Prometheus的功能及特点 118
4.2.3 Prometheus架构简介 118
4.2.4 如何在Istio中使用Prometheus 120
4.2.5 配置监控报警来实时掌握应用状态 124
4.3 监控大盘Grafana 129
4.3.1 什么是Grafana 129
4.3.2 如何在Istio中使用Grafana 130
4.3.3 生成新的Grafana仪表盘 132
4.3.4 配置Grafana报警通道 135
4.4 分布式日志Fluentd 137
4.4.1 什么是Fluentd 137
4.4.2 如何在Istio中使用Fluentd 139
4.4.3 在Kibana中查看日志 147
4.4.4 Elasticsearch映射配置 149
4.5 服务图谱 156
4.6 本章小结 157
第5章 Istio部分源码剖析 159
5.1 Sidecar(Envoy)源码分析 160
5.1.1 准备编辑器 160
5.1.2 编译Envoy调试版本 161
5.1.3 配置Envoy调试环境 162
5.1.4 整体架构 168
5.1.5 过滤链与HTTP代理 171
5.1.6 xDS相关逻辑 182
5.2 Pilot源码分析 187
5.2.1 Go语言简介 187
5.2.2 编译Istio调试版本 188
5.2.3 配置Istio调试环境 192
5.2.4 用单元测试快速调试 195
5.2.5 如何进行启动调试 196
5.2.6 Pilot初始化与平台对接 198
5.2.7 模型数据映射及CRD监听 203
5.2.8 Envoy xDS对接服务 206
5.3 Mixer源码分析 211
5.3.1 Mixer初始化逻辑 213
5.3.2 前置检查逻辑详解 217
5.3.3 适配器数据流及模板原理 223
5.3.4 缓存原理与实现 233
5.4 本章小结 244
第6章 服务网格企业实践 245
6.1 升级,值得吗 246
6.1.1 升级服务网格的基本要求 246
6.1.2 如何评估是否需要升级 247
6.2 从架构上考虑的问题 248
6.2.1 当前系统所处的状态 248
6.2.2 迁移中需要考虑的几点 249
6.3 蚂蚁金服SOFAMesh简介 251
6.3.1 项目组成 251
6.3.2 特色功能 252
6.4 蚂蚁金服渐近式迁移最佳实践 253
6.4.1 制定总体路线 253
6.4.2 保证迁移前后服务网络互通 256
6.4.3 透明拦截带来的弹性升级 256
6.4.4 遗留架构在迁移过程中的问题 257
6.5 本章小结 260
第7章 结语 261
7.1 服务网格在整体架构中的定位 261
7.1.1 现代软负载应具备的功能 261
7.1.2 服务网格在系统技术栈中的定位 262
7.2 软负载发展方向与未来 263
7.2.1 技术发展的本质 263
7.2.2 再谈软负载的发展 264