第一部分 概述
第1章 微服务的设计与运行
1.1 什么是微服务应用
1.1.1 通过分解来实现扩展
1.1.2 核心原则
1.1.3 谁在使用微服务
1.1.4 为什么微服务是一个明智的选择
1.2 微服务的挑战
1.2.1 设计挑战
1.2.2 运维挑战
1.3 微服务开发生命周期
1.3.1 微服务设计
1.3.2 微服务部署
1.3.3 服务监控
1.4 有责任感和运维意识的工程师文化
1.5 小结
第2章 SimpleBank公司的微服务
2.1 SimpleBank公司的业务范围
2.2 微服务是否是正确的选择
2.2.1 金融软件的风险和惰性
2.2.2 减少阻力和持续交付价值
2.3 开发新功能
2.3.1 通过领域建模识别微服务
2.3.2 服务协作
2.3.3 服务编排
2.4 向外界开放服务
2.5 将功能发布到生产环境中
2.5.1 高质量的自动化部署
2.5.2 可恢复性
2.5.3 透明性
2.6 大规模微服务开发
2.6.1 技术分歧
2.6.2 孤立
2.7 接下来的内容
2.8 小结
第二部分 设计
第3章 微服务应用的架构
3.1 整体架构
3.1.1 从单体应用到微服务
3.1.2 架构师的角色
3.1.3 架构准则
3.1.4 微服务应用的4层架构
3.2 微服务平台
3.3 服务层
3.3.1 功能
3.3.2 聚合与多元服务
3.3.3 关键路径和非关键路径
3.4 通信
3.4.1 何时使用同步消息
3.4.2 何时使用异步消息
3.4.3 异步通信模式
3.4.4 服务定位
3.5 服务边界
3.5.1 API网关
3.5.2 服务于前端的后端
3.5.3 消费者驱动网关
3.6 客户端
3.6.1 前端单体
3.6.2 微前端
3.7 小结
第4章 新功能设计
4.1 SimpleBank的新功能
4.2 按业务能力划分
4.2.1 能力和领域建模
4.2.2 创建投资策略
4.2.3 内嵌型上下文和服务
4.2.4 挑战和不足
4.3 按用例划分
4.3.1 按投资策略下单
4.3.2 动作和存储
4.3.3 编配与编排
4.4 按易变性划分
4.5 按技术能力划分
4.5.1 发送通知
4.5.2 何时使用技术能力
4.6 处理不确定性
4.6.1 从粗粒度服务开始
4.6.2 准备进一步分解
4.6.3 下线和迁移
4.7 组织中的服务所有权
4.8 小结
第5章 微服务的事务与查询
5.1 分布式应用的事务一致性
5.2 基于事件的通信
5.3 Saga
5.3.1 编排型Saga
5.3.2 编配型Saga
5.3.3 交织型Saga
5.3.4 一致性模式
5.3.5 事件溯源
5.4 分布式世界中的查询操作
5.4.1 保存数据副本
5.4.2 查询和命令分离
5.4.3 CQRS挑战
5.4.4 分析和报表
5.5 延伸阅读
5.6 小结
第6章 设计高可靠服务
6.1 可靠性定义
6.2 哪些会出错
6.2.1 故障源
6.2.2 连锁故障
6.3 设计可靠的通信方案
6.3.1 重试
6.3.2 后备方案
6.3.3 超时
6.3.4 断路器
6.3.5 异步通信
6.4 最大限度地提高服务可靠性
6.4.1 负载均衡与服务健康
6.4.2 限流
6.4.3 验证可靠性和容错性
6.5 默认安全
6.5.1 框架
6.5.2 服务网格
6.6 小结
第7章 构建可复用的微服务框架
7.1 微服务底座
7.2 微服务底座的目的
7.2.1 降低风险
7.2.2 快速启动
7.3 设计服务底座
7.3.1 服务发现
7.3.2 可观测性
7.3.3 平衡和限流
7.4 探索使用底座实现的特性
7.5 差异性是否是微服务的承诺
7.6 小结
第三部分 部署
第8章 微服务部署
8.1 部署的重要性
8.2 微服务生产环境
8.2.1 微服务生产环境的特点
8.2.2 自动化和速度
8.3 部署服务的快捷方式
8.3.1 服务启动
8.3.2 配置虚拟机
8.3.3 运行多个服务实例
8.3.4 添加负载均衡器
8.3.5 开发者学到了什么
8.4 构建服务工件
8.4.1 工件的组成
8.4.2 不可变性
8.4.3 服务工件的类型
8.4.4 配置
8.5 服务与主机关系模型
8.5.1 单服务主机
8.5.2 单主机多静态服务
8.5.3 单主机多调度化服务
8.6 不停机部署服务
8.7 小结
第9章 基于容器和调度器的部署
9.1 服务容器化
9.1.1 镜像使用
9.1.2 构建镜像
9.1.3 运行容器
9.1.4 镜像存储
9.2 集群部署
9.2.1 pod的设计与运行
9.2.2 负载均衡
9.2.3 快速揭秘
9.2.4 健康检查
9.2.5 部署新版本服务
9.2.6 回滚
9.2.7 连接多个服务
9.3 小结
第10章 构建