- 协同式(choreography)
把Saga的决策和执行顺序逻辑分布在Saga的每一个参与方中,它们通过交换事件的方式来进行沟通。
优点:
简单:服务在创建、更新或删除业务对象时发布事件
松耦合:参与方订阅事件并且彼此之间不会因此产生耦合
缺点:
更能难理解:与编排式不同,代码中没有一个单一地方定义了Saga,而是散落在每个服务的是实现中。
服务之间的循环依赖关系:Saga参与方彼此订阅事件,通常会有循环依赖关系。循环依赖性被认为是一种不好的设计风格。
紧耦合风险:每个Saga参与方都需要订阅所有影响它们的时间。
- 编排式(orchestration)
把Saga的决策和执行顺序逻辑集中在一个Saga编排器类中。Saga编排器发出命令式消息给每个Saga参与方,指示这些参与方服务完成具体操作(本地事务)优点: 更简单的依赖关系 较少的耦合 改善关注点隔离,监护业务逻辑。 缺点: 存在过多业务逻辑的风险 隔离性问题(丢失更新,藏独,模糊或不可重复读)
网友评论