分布式事务实现

1)基于XA协议的两阶段提交(2PC)


XA 规范主要 定义了 ( 全局 ) 事务管理器 ( Transaction Manager ) 和 ( 局部 ) 资源管理器 (Resource Manager ) 之间的接口。


2)两阶段提交


事务的提交分为两个阶段:
预提交阶段(Pre-Commit Phase)
决策后阶段(Post-Decision Phase)


3)补偿事务(TCC)


针对每个操作,都要注册一个与其对应的确认和补偿(撤销)操作。它分为三个阶段
Try 阶段主要是对业务系统做检测及资源预留
Confirm 阶段主要是对业务系统做确认提交,Try 阶段执行成功并开始执行 Confirm 阶段时,默认Confirm 阶段是不会出错的。即:只要 Try 成功,Confirm 一定成功。
Cancel 阶段主要是在业务执行错误,需要回滚的状态下执行的业务取消,预留资源释放


4)本地消息表(MQ 异步确保)


其基本的设计思想是将远程分布式事务拆分成一系列的本地事务。


5)MQ 事务消息


有一些第三方的 MQ 是支持事务消息的,比如 RocketMQ,他们支持事务消息的方式也是类似于采用的二阶段提交,但是市面上一些主流的 MQ 都是不支持事务消息的,比如 RabbitMQ 和Kafka 都不支持。


6)Sagas 事务模型


该模型其核心思想就是拆分分布式系统中的长事务为多个短事务,或者叫多个本地事务,然后由Sagas 工作流引擎负责协调,如果整个流程正常结束,那么就算是业务成功完成,如果在这过程中实现失败,那么Sagas工作流引擎就会以相反的顺序调用补偿操作,重新进行业务回滚。


7)其他补偿方式


加入详细日志记录的,一旦系统内部引发类似致命异常,会有邮件通知。同时,后台会有定时任务扫描和分析此类日志,检查出这种特殊的情况,会尝试通过程序来补偿并邮件通知相关人员。在某些特殊的情况下,还会有 "人工补偿" 的,这也是最后一道屏障。

 

参考:https://www.zhihu.com/question/64921387/answer/225784480

posted @   huigui_mint  阅读(24)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示