目 录
第1章 微服务概念 1
1.1 理解应用程序 2
1.1.1 领域驱动设计 2
1.1.2 单一职责原则 4
1.1.3 显式发布的接口 5
1.2 独立部署、更新、扩展以及替换 7
1.2.1 独立部署 7
1.2.2 更新 7
1.2.3 可扩展性 8
1.3 轻量级通信 12
1.3.1 同步 13
1.3.2 异步 13
1.4 异质/多语言 14
1.5 通信的文档化 14
1.6 Web应用程序端点 15
1.7 移动应用程序端点 15
1.8 缓存客户端 16
1.9 调节客户端 17
1.10 确定贫血域 17
1.11 确定fat域 18
1.12 针对业务确定微服务域 18
1.13 从域到实体 19
1.14 本章小结 20
第2章 微服务工具 21
2.1 编程语言 21
2.1.1 熟练程度 22
2.1.2 性能 22
2.1.3 实践开发 23
2.1.4 生态圈 23
2.1.5 扩展性的开销 24
2.1.6 选取编程语言 24
2.2 微服务框架 27
2.2.1 Python语言 27
2.2.2 Go语言 29
2.3 二进制通信—服务间的直接通信 31
2.3.1 理解通信方式 31
2.3.2 直接通信间的警示信息 35
2.4 消息代理—服务间的异步通信 37
2.4.1 ActiveMQ 38
2.4.2 RabbitMQ 39
2.4.3 Kafka 40
2.5 缓存工具 40
2.5.1 Memcached 42
2.5.2 Redis 42
2.6 故障警示工具 44
2.6.1 性能 44
2.6.2 构建 45
2.6.3 组件 46
2.6.4 实现鸿沟 47
2.7 数据库 47
2.8 本地性能度量 48
2.8.1 Apache Benchmark 49
2.8.2 WRK 50
2.8.3 Locust 51
2.9 本章小结 53
第3章 内部模式 55
3.1 开发结构 55
3.1.1 数据库 55
3.1.2 编程语言和工具 56
3.1.3 项目结构 56
3.2 缓存策略 71
3.2.1 缓存机制的应用 72
3.2.2 缓存优先 78
3.2.3 队列任务 79
3.2.4 异步机制和worker 81
3.3 CQRS—查询策略 87
3.3.1 CQRS的概念 87
3.3.2 理解CQRS 88
3.3.3 CQRS的优点和缺陷 90
3.4 事件源—数据完整性 91
3.5 本章小结 92
第4章 微服务生态环境 93
4.1 容器中的分离机制 93
4.1.1 分层服务架构 95
4.1.2 分离UsersService 96
4.2 存储分布 103
4.2.1 折旧数据 103
4.2.2 区域化数据 103
4.3 隔离—使用生态系统防止故障的出现 104
4.3.1 冗余设计 104
4.3.2 临界分区 109
4.3.3 隔离设计 110
4.3.4 快速故障 111
4.4 断路器 112
4.5 本章小结 113
第5章 共享数据微服务设计模式 115
5.1 理解模式 115
5.2 将单体应用程序划分为微服务 116
5.2.1 定义优先级 117
5.2.2 设置期限 117
5.2.3 定义应用程序域 117
5.2.4 试验操作 117
5.2.5 制定标准 118
5.2.6 构建原型 118
5.2.7 发送产品 118
5.2.8 开发新的微服务 118
5.3 数据编排 130
5.4 响应整合 132
5.5 微服务通信 132
5.6 存储共享反模式 133
5.7 最佳实践 133
5.8 测试机制 133
5.9 共享数据模式的利弊 135
5.10 本章小结 136
第6章 聚合器微服务设计模式 137
6.1 理解聚合器设计模式 137
6.2 使用CQRS和事件源 139
6.2.1 分离数据库 139
6.2.2 重构微服务 140
6.3 微服务通信 153
6.3.1 创建编排器 154
6.3.2 使用消息代理 159
6.4 模式扩展 163
6.5 瓶颈反模式 164
6.6 最佳实践 166
6.7 测试 167
6.7.1 功能测试 167
6.7.2 集成测试 168
6.8 聚合器设计模式的优缺点 170
6.8.1 聚合器设计模式的优点 170
6.8.2 聚合器设计模式的缺点 170
6.9 本章小结 170
第7章 代理微服务设计模式 171
7.1 代理方案 171
7.1.1 哑代理 172
7.1.2 智能代理 172
7.1.3 理解当前代理 173
7.2 编排器的代理策略 175
7.3 微服务通信 176
7.4 模式扩展性 176
7.5 最佳实践 177
7.5.1 纯粹的模式 177
7.5.2 瓶颈问题 178
7.5.3 代理制的缓存机制 178
7.5.4 简单的响应 178
7.6 代理设计模式的优缺点 179
7.7 本章小结 179
第8章 链式微服务设计模式 181
8.1 理解模式 181
8.2 数据编排和响应整合 184
8.3 微服务通信 185
8.4 模式扩展性 185
8.5 “大泥球”反模式 186
8.6 最佳实践方案 188
8.6.1 纯微服务 188
8.6.2 请求一致性数据 188
8.6.3 深入理解链式设计模式 189
8.6.4 关注通信层 189
8.7 链式设计模式的优缺点 189
8.8 本章小结 190
第9章 分支微服务设计模式 191
9.1 理解模式 191
9.2 数据编排和响应整合 194
9.3 微服务通信 195
9.4 模式扩展 197
9.5 最佳实践方案 198
9.5.1 域定义 198
9.5.2 遵守规则 198
9.5.3 关注物理组件 198
9.5.4 简化行为 199
9.6 分支设计模式的优缺点 199
9.7 本章小结 199
第10章 异步消息微服务 201
10.1 理解当前模式 201
10.2 域定义—RecommendationService 203
10.3 域定义—RecommendationService 204
10.4 微服务编码 204
10.5 微服务通信 211
10.5.1 使用消息代理和队列 211
10.5.2 准备pub/sub结构 212
10.6 模式的可扩展性 214
10.7 进程序列反模式 214
10.8 最佳实践方案 215
10.8.1 应用程序定义 215
10.8.2 不要尝试创建响应 216
10.8.3 保持简单性 216
10.9 异步消息传递设计模式的优缺点 216
10.10 本章小结 217
第11章 微服务间的协同工作 219
11.1 理解当前应用程序状态 219
11.1.1 公共饰面层 220
11.1.2 内部层 222
11.1.3 理解通用工具 223
11.2 通信层和服务间的委托 224
11.2.1 理解服务间的数据合约 225
11.2.2 使用二进制通信 228
11.3 模式分布 235
11.4 故障策略 236
11.5 API集成 237
11.6 本章小结 239
第12章 微服务测试 241
12.1 单元测试 241
12.2 针对集成测试配置容器 249
12.3 集成测试 251
12.4 端到端测试 253
12.5 发布管线 259
12.6 签名测试 259
12.7 Monkey测试 260
12.8 Chaos Monkey 260
12.9 本章小结 262
第13章 安全监测和部署方案 263
13.1 监测微服务 263
13.1.1 监测单一服务 264
13.1.2 监测多项服务 266
13.1.3 查看日志 267
13.1.4 应用程序中的错误 268
13.1.5 度量方法 271
13.2 安全问题 272
13.2.1 理解JWT 272
13.2.2 单点登录 275
13.2.3 数据安全 276
13.2.4 预防恶意攻击—识别攻击行为 277
13.2.5 拦截器 277
13.2.6 容器 278
13.2.7 API网关 279
13.3 部署 279
13.3.1 持续集成和持续交付/持续部署 280
13.3.2 蓝/绿部署模式和Canary发布 281
13.3.3 每台主机包含多个服务实例 282
13.3.4 每台主机的服务实例 283
13.4 本章小结 285