分布式服务框架:原理与实践

分布式服务框架:原理与实践
作 者: 李林锋
出版社: 电子工业出版社
丛编项:
版权说明: 本书为出版图书,暂不支持在线阅读,请支持正版图书
标 签: 计算机?网络 网络与数据通信
ISBN 出版时间 包装 开本 页数 字数
未知 暂无 暂无 未知 0 暂无

作者简介

  李林锋,现任华为PaaS平台架构师,8年JavaNIO通信框架、平台中间件架构设计和开发经验,主导设计和开发的华为分布式服务框架已经在全球数十个国家成功商用。精通Netty、Mina、RPC框架、企业ESB总线、分布式服务框架等技术,公司总裁技术创新奖获得者。

内容简介

《分布式服务框架:原理与实践》作者具有丰富的分布式服务框架、平台中间件的架构设计和实践经验,主导设计的华为分布式服务框架已经在全球数十个国家成功商用。《分布式服务框架:原理与实践》依托工作实践,从分布式服务框架的架构设计原理到实践经验总结,涵盖了服务化架构演进、订阅发布、路由策略、集群容错和服务治理等多个专题,全方位剖析服务框架的设计原则和原理,结合大量实践案例与读者分享作者对分布式服务框架设计和运维的体会。同时,对基于Docker部署微服务以及基于微服务架构开发、部署和运维业务系统进行了详细介绍。

图书目录

第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