微服务架构设计模式
2021-07-31 14:55:51 1 举报
AI智能生成
《微服务架构设计模式》思维导图笔记
作者其他创作
大纲/内容
1. 逃离单体地狱
单体地狱
FTGO 应用程序的架构
单体架构的好处
开发简单
易于大规模更改
测试简单
部署简单明了
易于横向扩展
什么是单体地狱
过度的复杂性吓退开发者
开发速度缓慢
代码提交到部署的周期长,并容易出问题
难以扩展
难于交付可靠软件
被迫限制于可能过时的技术栈
拯救之道:微服务架构
扩展立方体和服务
微服务作为模块化的一种形式
每个服务都有自己的DB
FTGO 的微服务架构
微服务架构与SOA 的异同
微服务架构的好处和弊端
好处
使大型应用可以持续交付和部署
每个服务都相对较小并容易维护
服务可以独立部署
服务可以独立扩展
可以实现团队的自治
更容易实验和采纳新技术
更好的容错性
弊端
服务的拆分和定义是一项挑战
分布式系统带来的各种复杂性
开发、测试和部署更困难
需要跨团队的协调
什么阶段使用微服务架构
微服务架构的模式语言
微服务架构不“银弹”
模式和模式语言
模式
针对特定上下文中发生的问题的可重用解决方案
模式语言
解决特定领域内问题的相关模式的集合
模式结构
需求(Forces)
必须解决的问题
结果上下文(Resulting context)
采用模式后可能带来的后果
三部分
好处
弊端
引入的新问题
相关模式(Related patterns)
这个模式与其他模式之间的关系
5 种关系
前导(Predecessor)
后续(Successor)
替代(Alternative)
泛化(Generalization)
特化(Specialization)
微服务架构的模式语言概述
微服务之上:流程和组织
软件开发和交付的组织
软件开发和交付的流程
采用微服务架构时的人为因素
2. 服务的拆分策略
微服务架构到底是什么
what 软件架构,why 重要
what 架构风格
微服务架构是一种架构风格
为应用程序定义微服务架构
识别系统操作
根据业务能力进行服务拆分
根据子域进行服务拆分
拆分的指导原则
拆分单体应用为服务的难点
定义服务API
3. 进程间通信
概述
交互方式
在微服务架构中定义API
API 的演化
消息的格式
基于同步远程过程调用模式
使用REST
使用gRPC
使用断路器模式处理局部故障
使用服务发现
基于异步消息模式
what 消息传递
使用消息机制实现交互方式
为基于消息机制的服务API 创建API 规范
使用消息代理
处理并发和消息顺序
处理重复消息
事务性消息
消息相关的类库和框架
使用异步消息提高可用性
同步消息会降低可用性
消除同步交互
4. 使用Saga 管理事务
微服务架构下的事务管理
微服务架构对分布式事务的需求
分布式事务的挑战
使用Saga 模式维护数据一致性
Saga 的协调模式
协同式Saga
编排式 Saga
解决隔离问题
缺乏隔离导致的问题
Saga 模式下实现隔离的对策
Order Service 和 Create Order Saga 的设计
OrderServier 类
Create Order Saga 的实现
OrderCommandHandlers 类
OrderServiceConfiguration 类
5. 业务逻辑设计
业务逻辑组织模式
事务脚本模式
领域模型模式
关于领域驱动设计
使用聚合模式设计领域模型
模糊边界带来的问题
聚合拥有明确的边界
聚合的规则
聚合的粒度
使用聚合设计业务逻辑
发布领域事件
why 需要发布领域事件
what 领域事件
事件增强
识别领域事件
生成和发布领域事件
消费领域事件
Kitchen Service 的业务逻辑
Order Service 的业务逻辑
Order 聚合
Order Service 类
6. 使用事件溯源开发业务逻辑
概述
传统持久化技术的问题
what 事件溯源
使用乐观锁处理并发更新
事件溯源和发布事件
使用快照提升性能
幂等方式的消息处理
领域事件的演化
事件溯源的好处
事件溯源的弊端
实现事件存储库
Eventaute Local 事件存储库的工作原理
Eventuate 的 Java 客户端框架
同时使用Saga 和事件溯源
使用事件溯源实现协同式Saga
创建编排式Saga
实现基于事件溯源的Saga 参与方
实现基于事件溯源的Saga 编排器
7. 实现查询
使用API 组合模式进行查询
findOrder() 查询操作
what 组合API 模式
使用API 组合模式实现 findOrder() 查询操作
API 组合模式的设计缺陷
API 组合模式的好处和弊端
使用CQRS 模式
why 使用CQRS
what CQRS
CQRS 的好处
CQRS 的弊端
设计CQRS 视图
选择视图存储库
设计数据访问模块
添加和更新CQRS 视图
实现基于AWS DynamoDB 的CQRS
OrderHistoryEventHandlers 模块
DynamoDB 中的数据建模和查询设计
OrderHistoryDaoDynamoDb 类
8. 外部API 模式
外部API 的设计难题
FTGO 移动客户端API 的设计难题
其他类型客户端API 的设计难题
API Gateway 模式
什么是API Gateway 模式
API Gateway 模式的好处和弊端
以Netflix 为例的API Gateway
API Gateway 的设计难题
实现一个API Gateway
使用现成的API Gateway 产品或服务
开发自己的API Gateway
使用GraphQL 实现API Gateway
9. 测试策略(上)
概述
what 测试
微服务架构中的测试挑战
部署流水线
为服务编写单元测试
为Entity 编写单元测试
为ValueObject 编写单元测试
为Saga 编写单元测试
为DomainService 编写单元测试
为Controller 编写单元测试
为Event 和消息处理程序编写单元测试
10. 测试策略(下)
编写集成测试
针对持久化层
针对基于REST 的请求/响应式交互
针对发布/订阅式交互
针对异步请求/响应式交互
编写组件测试
定义验收测试
使用Gherkin 编写验收测试
设计组件测试
为FTGO 的Order Service编写组件测试
端到端测试
11. 面向生产环境
开发安全的服务
单体应用
微服务架构
设计可配置的服务
基于push 的外部化配置
基于pull 的外部化配置
设计可观测的服务
健康检查API 模式
日志聚合模式
分布式追踪模式
应用程序指标模式
异常追踪模式
审计日志模式
使用微服务基底模式开发服务
使用微服务基底
从微服务到服务网格
12. 部署微服务应用
13. 重构策略
0 条评论
下一页