前话
合理的图文组织,让大家可以更容易学习一个技术。
微服务设计模式
推上看到这个图,也感觉总结梳理的还挺不错的。这类梳理主要针对已经有微服务实践的同学,回头再来看的时候就有点感觉了;如果你是刚开始做微服务,那这个图也就是看看,无法深入的理解。
说说这里我拆解一下图中说的主要内容,微服务设计模式中的主要涉及点。
- 微服务拆分模式
- 微服务整合模式
- 数据库的设计模式
- 可观测性设计模式
- 横切关注点设计模式
1)微服务拆分模式
微服务的拆分从最开始就是很热的一个话题,最早说微服务的时候都有AKF扩展立方体,它用X,Y,Z三个字母分别代表:水平复制扩展性,功能拆分,数据库服务的拆分几个纬度进行了微服务拆分标准的划分。在早起还有跟极端的做法:一个接口就是一个微服务。还有后来的领域模型等等,都试图从理论上给微服务拆分给出一个很好的指导。
这个图这里也是总结了一下这些拆分方式:
- 根据业务能力拆分
- 根据子领域拆分
- 根据事务拆分
- 绞杀者模式(Strangler Pattern)
- 隔板模式(Bulkhead Pattern)
可以看出拆分模式有多种,如何选择更重要的看业务场景、团队和团队所有的工具平台来选择。不唯一,根据实际情况选择适合自己、适合团队、适合业务场景的方法。
特别注意:微服务是一种解决问题的方式,更是一个团队解决问题的方式,绝对不是个人主义。
2)微服务整合模式
服务整合也更为重要,微服务的出现,让团队可以合作做更复杂的服务解决方案。但同时也带来了非常明显的问题:服务管理和整合问题。这里提到了几种整合方式。
- API 网关模式,也是比较常用的一种方式
- 聚合模式
- 代理模式
- 网关路由模式
- 微服务链接模式
- 分支模式
- 客户端UI组合模式(Client-Side UI Composition Pattern)
3)数据库设计模式
- 每一个服务对应一个数据库(Database per Service)
- 每一个服务共享数据库 (Shared Database per Service)
- 命令查询的责任分离 (Command Query Responsibility Segregation,CQRS)
- 事件溯源模式(event sourcing pattern)
- Saga 模式(Saga Pattern)
4)可观测性设计模式
微服务的可观测上设计也尤为重要,主要的设计考虑模式有下面几种:
- 日志聚合
- 性能指标
- 分布式跟踪
- 健康检查
5)横切点设计模式
这里应该是一些公共考虑点,主要有下面几个方面:
- 外部配置(External Configuration)
- 服务发现模式
- 断路器模式
- 蓝绿发布模式