Transactions 2PC vs Sagas(分布式事务)

Transactions 2PC vs Sagas(分布式事务),transactions,cloud,microservices,distributed-computing,saga,Transactions,Cloud,Microservices,Distributed Computing,Saga,我正在深入了解分布式系统,以及如何在这些系统之间保持数据一致性,其中业务事务涉及多个服务、有界上下文和网络边界 我知道有两种方法可用于实现分布式事务: 两阶段提交(2PC) 传奇 2PC是应用程序通过平台支持透明地利用全局ACID事务的协议。据我所知,它嵌入到平台中,对业务逻辑和应用程序代码是透明的 另一方面,Sagas是一系列本地事务,其中每个本地事务都会变异并持久化实体,以及指示全局事务阶段的一些标志,并提交更改。换句话说,事务的状态是域模型的一部分。回滚是提交一系列“反向”事务的问题。

我正在深入了解分布式系统,以及如何在这些系统之间保持数据一致性,其中业务事务涉及多个服务、有界上下文和网络边界

我知道有两种方法可用于实现分布式事务:

  • 两阶段提交(2PC)
  • 传奇
2PC是应用程序通过平台支持透明地利用全局ACID事务的协议。据我所知,它嵌入到平台中,对业务逻辑和应用程序代码是透明的

另一方面,Sagas是一系列本地事务,其中每个本地事务都会变异并持久化实体,以及指示全局事务阶段的一些标志,并提交更改。换句话说,事务的状态是域模型的一部分。回滚是提交一系列“反向”事务的问题。在这两种情况下,服务发出的事件都会触发这些本地事务

现在,什么时候,为什么一个人会在2件以上使用传奇,反之亦然?两者的使用案例和优缺点是什么?特别是,SAGAS的脆性使我感到紧张,因为倒置的分布式事务也可能失败。在我的理解中,

< P>(不是我认为它限制的2PC的大用户):

  • 通常,2PC用于即时事务
  • 通常,saga用于长时间运行的事务
用例在之后是显而易见的:

  • 2PC允许您在一个请求中提交整个事务,跨越整个系统和网络。假设每个参与系统和网络都遵循该协议,您可以无缝地提交或回滚整个事务
  • Saga允许您将事务拆分为多个步骤,跨越较长的时间段(不一定是系统和网络)
例如:

  • 2PC:为每个收到的发票请求保存客户,而这两个请求都由两个不同的系统管理
  • 佐贺:预订由多个中转航班组成的航班行程,而每个航班由不同的航空公司运营
我个人认为SAGA有能力做2PC所能做的事情。相反是不准确的


我认为传奇是通用的,而2PC涉及平台/供应商锁定。

有趣。。。没有答案,也没有接近票数…答案不错,但由于Sagas能够实现2PC所能做的,因此它们有实现重做机制的开销。我对你回答的最后一句话感到批评:D最后一句话谈到了供应商锁定与保持通用性和平台独立性。你到底觉得什么不准确?在这种情况下,你是对的。2PC缺乏平台独立性——很好的解释。