第1 章应用架构演进 1
1 1 传统垂直应用架构 2
1 1 1 垂直应用架构介绍 2
1 1 2 垂直应用架构面临的挑战 4
1 2 RPC 架构 6
1 2 1 RPC 框架原理 6
1 2 2 最简单的RPC 框架实现 8
1 2 3 业界主流RPC 框架 14
1 2 4 RPC 框架面临的挑战 17
1 3 SOA 服务化架构 18
1 3 1 面向服务设计的原则 18
1 3 2 服务治理 19
1 4 微服务架构 21
1 4 1 什么是微服务 21
1 4 2 微服务架构对比SOA 22
1 5 总结 23
第2 章分布式服务框架入门 25
2 1 分布式服务框架诞生背景 26
2 1 1 应用从集中式走向分布式 26?
2 1 2 亟需服务治理 28
2 2 业界分布式服务框架介绍 29
2 2 1 阿里Dubbo 30
2 2 2 淘宝HSF 33
2 2 3 亚马逊Coral Service 35
2 3 分布式服务框架设计 36
2 3 1 架构原理 36
2 3 2 功能特性 37
2 3 3 性能特性 39
2 3 4 可靠性 39
2 3 5 服务治理 40
2 4 总结 41
第3 章通信框架 42
3 1 关键技术点分析 43
3 1 1 长连接还是短连接 43
3 1 2 BIO 还是NIO 43
3 1 3 自研还是选择开源NIO 框架 46
3 2 功能设计 47
3 2 1 服务端设计 48
3 2 2 客户端设计 50
3 3 可靠性设计 53
3 3 1 链路有效性检测 54
3 3 2 断连重连机制 56
3 3 3 消息缓存重发 57
3 3 4 资源优雅释放 58
3 4 性能设计 59
3 4 1 性能差的三宗罪 59
3 4 2 通信性能三原则 60
3 4 3 高性能之道 61
3 5 最佳实践 61
3 6 总结 64
第4 章序列化与反序列化 65
4 1 几个关键概念澄清 66
4 1 1 序列化与通信框架的关系 66
4 1 2 序列化与通信协议的关系 66
4 1 3 是否需要支持多种序列化方式 67
4 2 功能设计 67
4 2 1 功能丰富度 67
4 2 2 跨语言支持 68
4 2 3 兼容性 69
4 2 4 性能 70
4 3 扩展性设计 71
4 3 1 内置的序列化/反序列化功能类 71
4 3 2 反序列化扩展 72
4 3 3 序列化扩展 75
4 4 最佳实践 77
4 4 1 接口的前向兼容性规范 77
4 4 2 高并发下的稳定性 78
4 5 总结 78
第5 章协议栈 79
5 1 关键技术点分析 80
5 1 1 是否必须支持多协议 80
5 1 2 公有协议还是私有协议 80
5 1 3 集成开源还是自研 81
5 2 功能设计 82
5 2 1 功能描述 82
5 2 2 通信模型 82
5 2 3 协议消息定义 84
5 2 4 协议栈消息序列化支持的字段类型 85
5 2 5 协议消息的序列化和反序列化 86
5 2 6 链路创建 89
5 2 7 链路关闭 90
5 3 可靠性设计 90
5 3 1 客户端连接超时 90
5 3 2 客户端重连机制 91
5 3 3 客户端重复握手保护 91
5 3 4 消息缓存重发 92
5 3 5 心跳机制 92
5 4 安全性设计 92
5 5 最佳实践—协议的前向兼容性 94
5 6 总结 95
第6 章服务路由 96
6 1 透明化路由 97
6 1 1 基于服务注册中心的订阅发布 97
6 1 2 消费者缓存服务提供者地址 98
6 2 负载均衡 98
6 2 1 随机 98
6 2 2 轮循 99
6 2 3 服务调用时延 99
6 2 4 一致性哈希 100
6 2 5 粘滞连接 101
6 3 本地路由优先策略 102
6 3 1 injvm 模式 102
6 3 2 innative 模式 102
6 4 路由规则 103
6 4 1 条件路由规则 103
6 4 2 脚本路由规则 104
6 5 路由策略定制 105
6 6 配置化路由 106
6 7 最佳实践—多机房路由 107
6 8 总结 108
第7章集群容错 109
7 1 集群容错场景 110
7 1 1 通信链路故障 110
7 1 2 服务端超时 111
7 1 3 服务端调用失败 111
7 2 容错策略 112
7 2 1 失败自动切换(Failover) 112
7 2 2 失败通知(Failback) 113
7 2 3 失败缓存(Failcache) 113
7 2 4 快速失败(Failfast) 114
7 2 5 容错策略扩展 114
7 3 总结 115
第8 章服务调用 116
8 1 几个误区 117
8 1 1 NIO 就是异步服务 117
8 1 2 服务调用天生就是同步的 118
8 1 3 异步服务调用性能更高 120
8 2 服务调用方式 120
8 2 1 同步服务调用 120
8 2 2 异步服务调用 121
8 2 3 并行服务调用 125
8 2 4 泛化调用 129
8 3 最佳实践 130
8 4 总结 131
第9章服务注册中心 132
9 1 几个概念 133
9 1 1 服务提供者 133
9 1 2 服务消费者 133
9 1 3 服务注册中心 133
9 2 关键功能特性设计 134
9 2 1 支持对等集群 135
9 2 2 提供CRUD 接口 136
9 2 3 安全加固 136
9 2 4 订阅发布机制 137
9 2 5 可靠性 138
9 3 基于ZooKeeper 的服务注册中心设计 139
9 3 1 服务订阅发布流程设计 139
9 3 2 服务健康状态检测 141
9 3 3 对等集群防止单点故障 142
9 3 4 变更通知机制 144
9 4 总结 144
第10 章服务发布和引用 145
10 1 服务发布设计 146
10 1 1 服务发布的几种方式 146
10 1 2 本地实现类封装成代理 148
10 1 3 服务发布成指定协议 148
10 1 4 服务提供者信息注册 149
10 2 服务引用设计 150
10 2 1 本地接口调用转换成远程服务调用 150
10 2 2 服务地址本地缓存 151
10 2 3 远程服务调用 151
10 3 最佳实践 152
10 3 1 对等设计原则 152
10 3 2 启动顺序问题 153
10 3 3 同步还是异步发布服务 153
10 3 4 警惕网络风暴 154
10 3 5 配置扩展 154
10 4 总结 156
第11 章服务灰度发布 157
11 1 服务灰度发布流程设计 158
11 1 1 灰度环境准备 158
11 1 2 灰度规则设置 159
11 1 3 灰度规则下发 160
11 1 4 灰度路由 161
11 1 5 失败回滚 162
11 1 6 灰度发布总结 163
11 2 总结 163
第12 章参数传递 164
12 1 内部传参 165
12 1 1 业务内部参数传递 165
12 1 2 服务框架内部参数传递 168
12 2 外部传参 169
12 2 1 通信协议支持 169
12 2 2 传参接口定义 170
12 3 最佳实践 171
12 3 1 防止参数互相覆盖 171
12 3 2 参数生命周期管理 171
12 4 总结 172
第13 章服务多版本 173
13 1 服务多版本管理设计 174
13 1 1 服务版本号管理 174
13 1 2 服务提供者 175
13 1 3 服务消费者 175
13 1 4 基于版本号的服务路由 176
13 1 5 服务热升级 177
13 2 与OSGi 的对比 178
13 2 1 模块化开发 179
13 2 2 插件热部署和热升级 184
13 2 3 不使用OSGi 的其他理由 185
13 3 总结 185
第14 章流量控制 186
14 1 静态流控 187
14 1 1 传统静态流控设计方案 187
14 1 2 传统方案的缺点 188
14 1 3 动态配额分配制 188
14 1 4 动态配额申请制 190
14 2 动态流控 191
14 2 1 动态流控因子 192
14 2 2 分级流控 192
14 3 并发控制 193
14 3 1 服务端全局控制 193
14 3 2 服务消费者流控 194
14 4 连接控制 195
14 4 1 服务端连接数流控 195
14 4 2 服务消费者连接数流控 195
14 5 并发和连接控制算法 195
14 6 总结 197
第15 章服务降级 198
15 1 屏蔽降级 199
15 1 1 屏蔽降级的流程 199
15 1 2 屏蔽降级的设计实现 200
15 2 容错降级 202
15 2 1 容错降级的工作原理 202
15 2 2 运行时容错降级 204
15 3 业务层降级 205
15 4 总结 205
第16 章服务优先级调度 207
16 1 设置服务优先级 208
16 2 线程调度器方案 209
16 3 Java 优先级队列 210
16 4 加权优先级队列 211
16 5 服务迁入迁出 212
16 6 总结 213
第17 章服务治理 214
17 1 服务治理技术的历史变迁 215
17 1 1 SOA Governance 215
17 1 2 分布式服务框架服务治理 217
17 1 3 AWS 云端微服务治理 217
17 2 应用服务化后面临的挑战 218
17 2 1 跨团队协作问题 219
17 2 2 服务的上下线管控 220
17 2 3 服务安全 220
17 2 4 服务SLA 保障 221
17 2 5 故障快速定界定位 221
17 3 服务治理 222
17 3 1 服务治理架构设计 223
17 3 2 运行态服务治理功能设计 225
17 3 3 线下服务治理 232
17 3 4 安全和权限管理 234
17 4 总结 237
第18 章分布式消息跟踪 239
18 1 业务场景分析 240
18 1 1 故障的快速定界定位 240
18 1 2 调用路径分析 241
18 1 3 调用来源和去向分析 242
18 2 分布式消息跟踪系统设计 242
18 2 1 系统架构 243
18 2 2 埋点日志 244
18 2 3 采样率 247
18 2 4 采集和存储埋点日志 248
18 2 5 计算和展示 249
18 2 6 调用链扩展 251
18 3 总结 251
第19 章可靠性设计 253
19 1 服务状态检测 254
19 1 1 基于服务注册中心状态检测 254
19 1 2 链路有效性状态检测机制 255
19 2 服务健康度检测 256
19 3 服务故障隔离 257
19 3 1 进程级故障隔离 257
19 3 2 VM 级故障隔离 259
19 3 3 物理机故障隔离 260
19 3 4 机房故障隔离 261
19 4 其他可靠性特性 262
19 4 1 服务注册中心 262
19 4 2 监控中心 262
19 4 3 服务提供者 262
19 5 总结 263
第20 章微服务架构 264
20 1 微服务架构产生的历史背景 265
20 1 1 研发成本挑战 265
20 1 2 运维成本高 267
20 1 3 新需求上线周期长 268
20 2 微服务架构带来的改变 268
20 2 1 应用解耦 268
20 2 2 分而治之 270
20 2 3 敏捷交付 271
20 3 微服务架构解析 271
20 3 1 微服务划分原则 272
20 3 2 开发微服务 272
20 3 3 基于Docker 容器部署微服务 274
20 3 4 治理和运维微服务 277
20 3 5 特点总结 278
20 4 总结 279
第21 章服务化最佳实践 280
21 1 性能和时延问题 281
21 1 1 RPC 框架高性能设计 281
21 1 2 业务最佳实践 285
21 2 事务一致性问题 286
21 2 1 分布式事务设计方案 287
21 2 2 分布式事务优化 288
21 3 研发团队协作问题 289
21 3 1 共用服务注册中心 290
21 3 2 直连提供者 290
21 3 3 多团队进度协同 291
21 3 4 服务降级和Mock 测试 291
21 3 5 协同调试问题 292
21 3 6 接口前向兼容性 292
21 4 总结 292