SAGA事务

SAGA定义

  • 柔性事务
  • 传统同步事务难点:
    • 部分数据库不支持XA。
    • 传统分布式事务是同步通信,会降低系统可用性
  • SAGA:使用异步消息协调一系列本地事务,维护多个服务之间的数据一致性。
  • 是一种长事务解决方案,适用于业务流程长且需要保证事务最终一致性的业务系统。

步骤排序

  1. 可补偿事务。可能失败,需要编写补偿事务做回滚。
  2. 关键性事务。后面跟着不可能失败的步骤。
  3. 可重复事务。总会成功。

分类

协同式

  • 决策和执行顺序逻辑分布在saga的每一个参与方,通过交换事件沟通。
  • 注意可靠的时间通信:
    • 更新本地数据库和发布事件作为一个事务(事务消息或者DTS)。
    • 参与方通过消息传递相关性ID,如订单id,操作事务目标。
  • 优点:
    • 局部简单。每个服务只管执行本地事务+发布事件。
    • 松耦合。参与方只订阅事件,不产生耦合。
  • 缺点。
    • 整体难理解。逻辑分散。
    • 服务之间可能循环依赖。
    • 紧耦合风险。可能需要和消息发送方的代码更新保持同步。

编排式

  • 决策和执行顺序逻辑集中在一个saga编排器。
    • 编排器做两件事:
      • 发出命令式消息指示参与方完成本地事务。
      • 接收消息改变事务状态机,准备发布下一个命令。
    • 参与方:
      • 接收消息、执行本地事务、回复消息。
  • 注意点:本地事务+发消息在一个事务内。
  • 优点:
    • 依赖简单。编排器和参与方依赖,无循环依赖。
    • 耦合少。编排器和参与方交互。
    • 关注点隔离,简化业务逻辑。领域对象只需要知道维护自身状态机,具体的saga交给编排器。
  • 缺点:
    • 编排器逻辑较复杂。可考虑编排器排序,参与方包含业务逻辑。

事务隔离对策

SAGA是ACD,缺乏隔离,可能导致一些问题。参考隔离级别

  • 语意锁。如status字段,失败时重试或者阻塞。
  • 交换式更新。更新操作设计成可交换。
  • 悲观视图。saga步骤设计,消除脏读。
  • 重读值。更新之前重新读取记录,验证是否修改,修改则取消。
  • 版本文件。记录更新操作,聚合排序。
  • 风险评定。根据业务决定使用的分布式事务方式,不一定是saga。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值