Saga 模式作为成功系统的组成部分
Posted: Thu Jan 30, 2025 9:22 am
为了成功实施微服务架构,必须考虑各个方面。其中包括:我们如何处理事务性?如果分布式业务流程中出现错误,系统应该如何反应?这篇博文提出了这些问题的解决方案。
微服务架构中的事务性
想象一下你想烤一个蛋糕。你把所有的原料混合在一起,然后把面团放进烤箱。然后你意识到你忘了加糖。所以你把面团从烤箱里拿出来,加糖然后放回去。听起来很容易,对吧?但是,如果您必须在一家餐厅制作这个蛋糕,那里有十个不同的厨房站,每个厨房站由不同的厨师领导,并且每个站都必须完成一个步骤才能完成蛋糕,该怎么办?更糟糕的是,每个厨师都说不同的语言。那么烘焙蛋糕就变成了一场噩梦。
这个类比描述了微服务架构在实现复杂业务事务时可能面临的问题。这就是 Saga 模型发挥作用的地方。
什么是传奇模式?
Saga模式是一种用于在微服务架构中实现复杂业务事务的设 loadrunner协议列表 计模式。它通过将大型事务分解为更小的、可管理的步骤,确保跨多个微服务保持数据一致性。该模式被称为“传奇”,因为它的功能类似于故事或旅程,分为更小的部分,每个部分都有自己的结果,对旅程的整体结果做出贡献。
Saga 模式如何工作?
传奇将复杂的事务分解为多个步骤。这些都是在服务内的不同子事务中执行的。在每个事务结束时,都会触发一个事件,通知已完成的流程,同时触发另一个服务上的传奇中的下一步。
订单流程的传奇示例
订单流程的传奇示例
在上图中,我们可以以电子商务订单为例来了解 Saga 模式的工作原理:
触发发生(订单确认)后,saga 的子事务在每个微服务内逐步执行。每个服务完成其内部操作后,会触发一个事件来启动下一步。最后,整个系统处于一个新的、一致的状态。
如果传奇中间发生故障,则会在相反方向触发事件,旨在触发所谓的“补偿事务”。这确保了之前所采取的步骤对于所涉及的每项服务都是相反的。这确保了微服务之间保持数据一致性。
具有补偿事务的订单流程传奇示例
具有补偿事务的订单流程传奇示例
传奇的类型
Sagas主要分为两种类型:
编舞
编排传奇基于我们上面的示例:属于传奇的微服务交互并独立控制整个过程。
编舞传奇可以比作与朋友一起度过的简单烹饪之夜。参与的人数是可控的,准备原料的步骤也很简单。因此,没有必要由特定的人来控制整个过程。
微服务架构中的事务性
想象一下你想烤一个蛋糕。你把所有的原料混合在一起,然后把面团放进烤箱。然后你意识到你忘了加糖。所以你把面团从烤箱里拿出来,加糖然后放回去。听起来很容易,对吧?但是,如果您必须在一家餐厅制作这个蛋糕,那里有十个不同的厨房站,每个厨房站由不同的厨师领导,并且每个站都必须完成一个步骤才能完成蛋糕,该怎么办?更糟糕的是,每个厨师都说不同的语言。那么烘焙蛋糕就变成了一场噩梦。
这个类比描述了微服务架构在实现复杂业务事务时可能面临的问题。这就是 Saga 模型发挥作用的地方。
什么是传奇模式?
Saga模式是一种用于在微服务架构中实现复杂业务事务的设 loadrunner协议列表 计模式。它通过将大型事务分解为更小的、可管理的步骤,确保跨多个微服务保持数据一致性。该模式被称为“传奇”,因为它的功能类似于故事或旅程,分为更小的部分,每个部分都有自己的结果,对旅程的整体结果做出贡献。
Saga 模式如何工作?
传奇将复杂的事务分解为多个步骤。这些都是在服务内的不同子事务中执行的。在每个事务结束时,都会触发一个事件,通知已完成的流程,同时触发另一个服务上的传奇中的下一步。
订单流程的传奇示例
订单流程的传奇示例
在上图中,我们可以以电子商务订单为例来了解 Saga 模式的工作原理:
触发发生(订单确认)后,saga 的子事务在每个微服务内逐步执行。每个服务完成其内部操作后,会触发一个事件来启动下一步。最后,整个系统处于一个新的、一致的状态。
如果传奇中间发生故障,则会在相反方向触发事件,旨在触发所谓的“补偿事务”。这确保了之前所采取的步骤对于所涉及的每项服务都是相反的。这确保了微服务之间保持数据一致性。
具有补偿事务的订单流程传奇示例
具有补偿事务的订单流程传奇示例
传奇的类型
Sagas主要分为两种类型:
编舞
编排传奇基于我们上面的示例:属于传奇的微服务交互并独立控制整个过程。
编舞传奇可以比作与朋友一起度过的简单烹饪之夜。参与的人数是可控的,准备原料的步骤也很简单。因此,没有必要由特定的人来控制整个过程。