分布式事务解决方案


分布式事务解决方案

 

单库事务:直接使用数据库事务解决

分布式事务:需要操作多个数据库,单库事务无法解决

分布式事务解决方案:两阶段协议、三阶段协议、tcc协议、mq等

 

 

************************

两阶段协议

 

               

说明:c表示事务协调者,p表示事务参与者

 

操作过程

阶段1:协调者向参与者发送事务提交请求,请求者在本地日志redo、undo中记录提交回滚信息,并向协调者返回响应信息;

阶段2:协调者根据各参与者的响应信息决定提交还是回滚事务,如果参与者都返回yes则提交事务,若有一个返回no则回滚事务

 

两阶段提交缺点

同步阻塞:阶段1中参与者接到事务提交请求,向协调者返回响应信息后就进入阻塞状态,直到阶段2接到协调者的提交或者回滚请求才解除阻塞

单点故障:协调者出现故障则整个事务不能正常执行

数据一致性:在阶段2协调者发出部分commit请求后故障,或者由于网络故障部分commit请求无法送达,则部分参与者提交,部分无法提交造成数据不一致

 

 

************************

三阶段协议

 

               

操作过程

阶段1:协调者向参与者发出cancommit请求,询问事务是否可以提交,参与者返回响应信息;

阶段2:如果参与者都返回yes,协调者发出事务预提交请求precommit,参与者返回事务执行状态;如果第一阶段有参与者返回no,协调者中断事务;

阶段3:第2阶段参与者返回的响应都为yes,协调者发出事务提交请求,否则发出事务回滚请求,参与者返回请求执行状态

 

三阶段协议是两阶段协议的改进版,减少了事务阻塞范围,但仍有一些缺点:

单点故障:协调者故障则事务操作不能正常执行

数据一致性:参与者第2阶段返回响应后,若出现网络分区,导致参与者不能接到第3阶段协调者的提交或者回滚请求,则在超时后事务仍会提交,可能会造成数据不一致

 

 

************************

tcc 协议

 

            

操作过程

try:服务a开启事务,调用其他服务的业务接口,各服务向事务协调器返回执行状态;

confirm:如果事务协调器接收的状态都为yes,则协调器发出事务提交请求;

cancel:如果服务执行失败返回状态no,则协调器发出事务回滚请求,取消事务

 

tcc协议缺点:会对业务造成倾入、实现难度较大

 

 

************************

mq 消息中间件

 

可以使用消息中间件(如rocketmq、kafka等)发送事务消息来实现事务相关操作

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值