JavaJava 程序员

分布式事务常见解决方案

2022-08-29  本文已影响0人  马小莫QAQ

分布式事务有哪些解决方案

  1. 基于XA协议的: 两阶段提交和三阶段提交,需要数据库层面支持
  2. 基于事务补偿机制的: TCC,基于业务层面实现
  3. 本地消息表: 基于本地数据库+mq,维护本地状态(进行中),通过mq调用服务,完成后响应一条消 息回调,将状态改成完成。需要配合定时任务扫表、重新发送消息调用服务,需要保证幂等
  4. 基于事务消息: mq

相比两阶段,三阶段有哪些改进

两阶段协议

第一阶段( prepare ) :每个参与者执行本地事务但不提交,进入 ready 状态,并通知协调者已经准 备就绪。

第二阶段( commit ) 当协调者确认每个参与者都 ready 后,通知参与者进行 commit 操作;如果有 参与者 fail ,则发送 rollback 命令,各参与者做回滚。

问题

三阶段协议

主要是针对两阶段的优化,解决了2PC单点故障的问题,但是性能问题和不一致问题仍然 没有根本解决 引入了超时机制解决参与者阻塞的问题,超时后本地提交,2pc只有协调者有超时机制

TCC事务模型

TCC(补偿事务):Try、Confirm、Cancel

针对每个操作,都要注册一个与其对应的确认和补偿(撤销)操作

Try操作做业务检查及资源预留,Confirm做业务确认操作,Cancel实现一个与Try相反的操作既回滚操 作。

TM首先发起所有的分支事务的try操作,任何一个分支事务的try操作执行失败,TM将会发起所有 分支事务的Cancel操作,若try操作全部成功,TM将会发起所有分支事务的Confirm操作,其中 Confirm/Cancel操作若执行失败,TM会进行重试。

TCC模型对业务的侵入性较强,改造的难度较大,每个操作都需要有 try 、 confirm 、 cancel 三个接 口实现

TCC 中会添加事务日志,如果 Confirm 或者 Cancel 阶段出错,则会进行重试,所以这两个阶段需要支 持幂等;如果重试失败,则需要人工介入进行恢复和处理等。

作者:浅羽技术
链接:https://juejin.cn/post/7136968311752884260
来源:稀土掘金

上一篇 下一篇

猜你喜欢

热点阅读