美文网首页
分布式事务Saga介绍

分布式事务Saga介绍

作者: 舞鹤Roc | 来源:发表于2021-02-12 19:56 被阅读0次

    目前常见的分布式事务解决方案有:2pc、3pc、tcc、本地消息表、mq事务、Saga等,其方案对比如下图(从数据一致性、容错性、复杂性、性能、维护成本纬度对比):


    分布式事务方案比较.png

    Saga是分布式事务领域最有名气的解决方案之一,最初出现在1987年Hector Garcaa-Molrna & Kenneth Salem发表的论文里。它是由一系列的本地事务构成。每一个本地事务在更新完数据库之后,会发布一条消息或者一个事件来触发Saga中的下一个本地事务的执行。如果一个本地事务因为某些业务规则无法满足而失败,Saga会执行在这个失败的事务之前成功提交的所有事务的补偿操作。

    Saga的实现有很多种方式,其中最流行的两种方式是:

    • 基于事件的方式。这种方式没有协调中心,整个模式的工作方式就像舞蹈一样,各个舞蹈演员按照预先编排的动作和走位各自表演,最终形成一只舞蹈。处于当前Saga下的各个服务,会产生某类事件,或者监听其它服务产生的事件并决定是否需要针对监听到的事件做出响应。
    • 基于命令的方式。这种方式的工作形式就像一只乐队,由一个指挥家(协调中心)来协调大家的工作。协调中心来告诉Saga的参与方应该执行哪一个本地事务。

    Saga模式特点:

    • 给每一个分布式事务创建一个唯一的Tx id。这个唯一的Tx id可以用来在各个业务参与方沟通时精确定位哪一笔分布式事务。
    • 对于基于命令的方式,在命令中携带回复地址。这种方式可以让服务同时响应多个协调中心请求。
    • 幂等性。幂等性能够增加系统的容错性,让各个业务参与方服务提供幂等性操作,能够在遇到异常情况下进行重试。
    • 尽量在命令或者消息中携带下游处理需要的业务数据,避免下游处理时需要调用消息产生方接口获取更多数据。减少系统之间的相互依赖。

    要在实际项目中使用Saga模式,还有一个重要问题需要解决。如何在本地事务中可靠地产生/发送一个事件。对于基于事件的方式,服务参与方在本地事务执行完毕后,需要能确保在当前事务中可靠地产生一个事件, 来触发后续服务中本地事务的执行;而对于基于命令的方式,也需要解决命令和回复生成方式的可靠性问题。

    相关文章

      网友评论

          本文标题:分布式事务Saga介绍

          本文链接:https://www.haomeiwen.com/subject/juhazktx.html