【看图学技术】- 微服务设计模式

【看图学技术】- 微服务设计模式

前话

合理的图文组织,让大家可以更容易学习一个技术。

微服务设计模式


推上看到这个图,也感觉总结梳理的还挺不错的。这类梳理主要针对已经有微服务实践的同学,回头再来看的时候就有点感觉了;如果你是刚开始做微服务,那这个图也就是看看,无法深入的理解。

image

说说这里我拆解一下图中说的主要内容,微服务设计模式中的主要涉及点。

  1. 微服务拆分模式
  2. 微服务整合模式
  3. 数据库的设计模式
  4. 可观测性设计模式
  5. 横切关注点设计模式

1)微服务拆分模式


微服务的拆分从最开始就是很热的一个话题,最早说微服务的时候都有AKF扩展立方体,它用X,Y,Z三个字母分别代表:水平复制扩展性,功能拆分,数据库服务的拆分几个纬度进行了微服务拆分标准的划分。在早起还有跟极端的做法:一个接口就是一个微服务。还有后来的领域模型等等,都试图从理论上给微服务拆分给出一个很好的指导。

这个图这里也是总结了一下这些拆分方式:

  1. 根据业务能力拆分
  2. 根据子领域拆分
  3. 根据事务拆分
  4. 绞杀者模式(Strangler Pattern)
  5. 隔板模式(Bulkhead Pattern)

可以看出拆分模式有多种,如何选择更重要的看业务场景、团队和团队所有的工具平台来选择。不唯一,根据实际情况选择适合自己、适合团队、适合业务场景的方法。

特别注意:微服务是一种解决问题的方式,更是一个团队解决问题的方式,绝对不是个人主义。

2)微服务整合模式


服务整合也更为重要,微服务的出现,让团队可以合作做更复杂的服务解决方案。但同时也带来了非常明显的问题:服务管理和整合问题。这里提到了几种整合方式。

  1. API 网关模式,也是比较常用的一种方式
  2. 聚合模式
  3. 代理模式
  4. 网关路由模式
  5. 微服务链接模式
  6. 分支模式
  7. 客户端UI组合模式(Client-Side UI Composition Pattern)

3)数据库设计模式


  1. 每一个服务对应一个数据库(Database per Service)
  2. 每一个服务共享数据库 (Shared Database per Service)
  3. 命令查询的责任分离 (Command Query Responsibility Segregation,CQRS)
  4. 事件溯源模式(event sourcing pattern)
  5. Saga 模式(Saga Pattern)

4)可观测性设计模式


微服务的可观测上设计也尤为重要,主要的设计考虑模式有下面几种:

  1. 日志聚合
  2. 性能指标
  3. 分布式跟踪
  4. 健康检查

5)横切点设计模式


这里应该是一些公共考虑点,主要有下面几个方面:

  1. 外部配置(External Configuration)
  2. 服务发现模式
  3. 断路器模式
  4. 蓝绿发布模式