java 分布式开发 事物管理_分布式事务的实现方式

TCC

参与角色

业务活动管理器(协调者)、业务服务

TCC解释

Try阶段:尝试执行,完成所有业务检查(一致性),预留必须业务资源(准隔离性)

Confirm阶段:确认执行真正执行业务,不作任何业务检查,只使用Try阶段预留的业务资源,Confirm操作满足幂等性。要求具备幂等设计,Confirm失败后需要进行重试。

Cancel阶段:取消执行,释放Try阶段预留的业务资源 Cancel操作满足幂等性Cancel阶段的异常和Confirm阶段异常处理方案基本上一致。

实现

PS:所有业务需要实现TCC接口;通过补偿可以实现最终一致性。

a320c1f6eb4ed506d21285cd76bde813.png

实例

举个简单的例子如果你用100元买了一瓶水, Try阶段:你需要向你的钱包检查是否够100元并锁住这100元,水也是一样的。如果有一个失败,则进行cancel(释放这100元和这一瓶水),如果cancel失败不论什么失败都进行重试cancel,所以需要保持幂等。如果都成功,则进行confirm,确认这100元扣,和这一瓶水被卖,如果confirm失败无论什么失败则重试(会依靠活动日志进行重试)

数据库分布式事务中的 XA Transactions

角色

事务管理器(协调者)、业务服务

实现

第一阶段:事务管理器要求每个涉及到事务的数据库预提交(precommit)此操作,并反映是否可以提交.

第二阶段:事务协调器要求每个数据库提交数据,或者回滚数据。

PS: XA协议基于2pc协议实现。

MQ

角色

消息中间件、业务服务

实现

第一阶段Prepared消息,会拿到消息的地址。

执行本地事务。

第二阶段确认消息发送,如果确认消息失败,在RocketMq Broker中提供了定时扫描没有更新状态的消息,如果有消息没有得到确认,会向消息发送者发送消息,来判断是否提交

第三阶段中间件发送消息给其它业务服务。如果 发送超时,则需要一直发送。

第四阶段其它业务服务处理完成之后,需要通过中间件反馈给发起者。如果处理失败,则需要人工处理(由人工决定是否回滚或者继续)。

09094949_jPVO.jpg

SAGA

角色

协调器、业务服务

实现

由Saga事务协调器协调,如果正常结束那就正常完成,如果某个步骤失败,则根据相反顺序一次调用补偿操作

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值