知识卡片
Saga协同式与编排式两种实现
内容
Saga按参与服务协作方式分两种(Chris Richardson定义):协同式把决策与执行顺序逻辑分布在每个参与方,它们通过交换事件沟通,核心是事务消息与发布者-订阅者模式,事件订阅顺序对应正向与逆向流程;编排式把决策与顺序逻辑集中在一个Saga编排器类,编排器作为服务协作的调停者,用请求/响应消息(本质仍是事件)协调各参与方,成败决定调用正向或逆向补偿。编排式减轻了参与服务压力(无须订阅上游事件、减少事件协议依赖),让每个参与服务职责更单一。两者差异只在协作方式,每个参与服务的接口定义并无区别,只要隔离网关层与领域模型就能保证领域模型稳定。发散:协同式是”自治的舞蹈”,编排式是”集权的指挥”——前者去中心化耦合低但流程分散难追踪,后者集中可控但编排器成为焦点。
结构图:
flowchart TB
S[Saga模式] --> C[协同式choreography]
S --> O[编排式orchestrator]
C --> CE[参与方交换事件·决策分布]
C --> CP[依赖发布订阅+事务消息]
O --> OM[编排器类作为调停者]
O --> OC[请求响应消息集中协调]
OM --> OB[参与服务职责单一化]
参考来源
- 位置:《解构领域驱动设计》第18章《领域驱动设计的战略考量》18.4.3(源文件:_epub-src/OEBPS/031.xhtml)
- 结论依据:原文引Richardson区分协同式与编排式Saga,说明前者靠事件分布决策、后者靠编排器集中协调,且接口定义无区别。
- 原始内容:协同式:把Saga的决策和执行顺序逻辑分布在Saga的每个参与方,它们通过交换事件的方式进行沟通。编排式:把Saga的决策和执行顺序逻辑集中在一个Saga编排器类。