1 / 3
文档名称:

分布式事务解决方案 (2).docx

格式:docx   大小:113KB   页数:3页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

分布式事务解决方案 (2).docx

上传人:科技星球 2022/3/10 文件大小:113 KB

下载得到文件列表

分布式事务解决方案 (2).docx

文档介绍

文档介绍:【吊打面试,击中要害】分布式事务解决方案
 
   
 
 
 
 
 
 
 
     
 
 
 
 
 
阅读文本大概需要10分钟。
分布式事务解决方案有很多种,最要包括基于XA协议的两阶段   
 
   
【吊打面试,击中要害】分布式事务解决方案
 
   
 
 
 
 
 
 
 
     
 
 
 
 
 
阅读文本大概需要10分钟。
分布式事务解决方案有很多种,最要包括基于XA协议的两阶段提交方案、本地消息表方案、TCC事务补偿型方案、可靠消息最终一致性方案、尽最大努力通知型方案等。面试的时候不可能长篇大论,所以能答上下面这三种方案就七八不离十。
0x01:TCC事务补偿型
TCC的全程主要包括Try(尝试)、Confirm(确认)、Cancel(取消)这三个主要阶段。
Try阶段:这个阶段是对各个微服务的资源做检测以及对资源进行锁定或者预留
Confirm阶段:这个阶段主要是在各个微服务中执行实际的业务操作
Cancel阶段:如果任何一个微服务的业务方法执行出现错误,那么这里就需要进行补偿,就是执行已经执行成功的业务逻辑的进行回滚操作。
TCC方案很少用人使用,因为事务回滚操作实际上是严重依赖于手动编写代码来进行回滚和补偿操作,这样的话就会造成补偿代码过多,使得项目非常难以维护。比较适合的场景就是除非真的一致性要求非常高,是系统中的核心业务场景,例如常见的就是资金类的场景,那可以用TCC方案。
0x02:可靠消息最终一致性方案
可靠消息最终一致性方案的主要思路如下:
A系统首先发送一个prepared消息到消息服务mq,如果这个prepared消息发送失败,那么就直接取消操作,不再进行任何操作执行了。
如果这个消息发送成功过了,那么接着执行本地事务,如果成功就告诉消息服务mq发送确认消息,如果失败就告诉消息服务mq回滚消息
如果发送了确认消息,那么此时B系统会接收到确认消息,然后执行本地的事务
消息服务mq会自动定时轮询所有prepared消息回调相应服务接口,询问这个消息是不是本地事务处理失败了,所以没发送确认消息?是继续重试还是回滚?一般来说可以查下数据库查看之前的本地事务是否执行,如果回滚了,那么这里也回滚吧。这个就是避免可能本地事务执行成功了,而确认消息发送失败了。
可靠消息最终一致性方案里要是系统B的事务失败了怎么办?重试咯,自动不断重试直到成功,如果实在是不行,要么就是针对重要的资金类业务进行回滚,比如B系统本