微服务架构设计模式
2021-11-16 16:54:57 13 举报
AI智能生成
微服务架构设计模式
作者其他创作
大纲/内容
软件架构
4+1 视图模型
逻辑视图
主要是整个系统的抽象结构表述,关注系统提供最终用户的功能,不涉及具体的编译即输出和部署,通常在UML中用类图,交互图,时序图来表述,类似与我们采用OOA的对象模型
物理视图
物理视图通常也叫做部署视图(deploymentview),是从系统工程师解读系统,关注软件的物流拓扑结,以及如何部署机器和网络来配合软件系统的可靠性、可伸缩性等要求。
进程视图
从过程角度,描述系统的并发和同步设计。旨在解决进程、线程、并发、同步、通信等方面的问题;
开发视图
用例场景+1
用例视图(Use Cases View),最初称为场景视图,关注最终用户需求,为整个技术架构的上线文环境.通常用UML用例图和活动图描述。
重要性
功能性需求
非功能性需求
风格表现方式
分层式
六边形式
实现风格
单体应用
定义: 将应用程序构建为单个可执行和可部署的组件
微服务
定义
备注
如何区分共享库?
服务的大小重要否?
微服务架构的实现
识别系统操作
拆分服务
根据业务能力拆分
根据领域概念拆分
拆分原则
单一原则
闭包原则
拆分难点
网络延迟
同步进程间通信可能导致可用性降低
事件溯源
概念
好处
可靠地发布领域事件
最大限度的可以减少对象与关系的阻抗失调问题
主要是说BO对象与关系表无法映射的时候的差异问题
缺点
学习曲线高
发布事件方式
第三方程序轮询事件表/ 事件的集合
设计模式
聚合器微服务设计模式
聚合器调用多个服务实现应用程序所需的功能。它可以是一个简单的 WEB 页面,将检索到的数据进行处理展示。它也可以是一个更高层次的组合微服务,对检索到的数据增加业务逻辑后进一步发布成一个新的微服务,这符合 DRY 原则。另外,每个服务都有自己的缓存和数据库。如果聚合器是一个组合服务,那么它也有自己的缓存和数据库。聚合器可以沿 X轴 和 Z轴 独立扩展。
代理微服务设计模式
在这种情况下,客户端并不聚合数据,但会根据业务需求的差别调用不同的微服务。代理可以仅仅委派请求,也可以进行数据转换工作。
链式微服务设计模式
在这种情况下,服务A 接收到请求后会与 服务B 进行通信,类似地,服务B 会同 服务C 进行通信。所有服务都使用同步消息传递。在整个链式调用完成之前,客户端会一直阻塞。因此,服务调用链不宜过长,以免客户端长时间等待。
分支微服务设计模式
这种模式是聚合器模式的扩展,允许同时调用两个微服务链,如下图所示
数据共享微服务设计模式
自治是微服务的设计原则之一,就是说微服务是全栈式服务。但在重构现有的“单体应用(Monolithic Application)”时,SQL 数据库反规范化可能会导致数据重复和不一致。因此,在单体应用到微服务架构的过渡阶段,可以使用这种设计模式,如下图所示
异步消息传递微服务设计模式
虽然 REST 设计模式非常流行,但它是同步的,会造成阻塞。因此部分基于微服务的架构可能会选择使用消息队列代替 REST 请求/响应,如下图所示
查询模式
微服务架构设计模式
外部化配置模式
业务逻辑设计
组织模式
事务脚本
领域模型
将业务逻辑组织为由具有状态和行为的类构成的对象模型.
领域驱动设计
基本元素
实体(Entity)
具有持久化ID的对象
值对象
工厂
存储库(Repository)
服务
实现不属于实体或者值对象的业务逻辑对象
聚合设计模式
规则
只引用聚合的根
聚合间的引用必须使用主键
颗粒度
这个按照你的团队成熟度/业务成熟度/实际情况等考虑
领域事件
识别方法
发布方式
例子
观测性模式
开发安全相关
进程间通信
概述
交互方式
一对一
请求/响应
异步请求/响应
单向通知
一对多
发布/订阅
发布/异步响应
API定义
消息格式
文本
JSON/XML
二进制
Protocol Buffers/Avro/Thrift
同步通信
RPI概念
RPI是远程过程调用模式
REST
另外一个关键性概念是 资源
成熟度模型
Level 0
本层级的 Web 服务只是使用 HTTP 作为传输方式,实际上只是远程方法调用(RPC)的一种具体形式。SOAP 和 XML-RPC 都属于此类。
Level 1
Level 1 层级的 API 引入了资源的概念。要执行对资源的操作,客户端发出指定要执行的操作和任何参数的 POST 请求。
Level 2
Level 2 层级的 API 使用 HTTP 语法来执行操作,譬如 GET 表示获取、POST 表示创建、PUT 表示更新。如有必要,请求参数和主体指定操作的参数。这能够让服务影响 web 基础设施服务,如缓存 GET 请求。
Level 3
Level 3 层级的 API 基于 HATEOAS(Hypertext As The Engine Of Application State)原则设计,基本思想是在由 GET请求返回的资源信息中包含链接,这些链接能够执行该资源允许的操作。例如,客户端通过订单资源中包含的链接取消某一订单,GET 请求被发送去获取该订单。HATEOAS 的优点包括无需在客户端代码中写入硬链接的 URL。此外,由于资源信息中包含可允许操作的链接,客户端无需猜测在资源的当前状态下执行何种操作。(包括字描述和下次动作的概念)
优缺点
简单好用上手快
工具和浏览器扩展支持方便测试
使用http协议对于防火墙比较友好
行为和资源分离,更容易理解。
弊端
gRPC
设计复杂的操作的API比较方便
支持双向流的模式
防火墙可能不支持HTTP/2的协议
调试和跟踪二进制没有文本方便
断路器模式
处理方式
服务发现
主要方式
应用层服务发现模式
自注册和客户端发现
平台层服务发现模式
第三方注册/服务端发现
异步通信
消息类型
文档
命令
事件
通道类型
点对点通道
发布订阅通道
一对多的交互模式
消息代理
无代理架构
有代理架构
消息顺序
重复消息
幂等消息处理
重复消息丢弃
事务性消息
使用数据库表作为消息队列
两种方式
异步交互
0 条评论
下一页