分布式事务的解决方案

XA模式:

2PC:存在的问题:

同步阻塞:当参与事务者存在占用公共资源的情况,其中一个占用了资源,其他事务参与者就只能阻塞等待资源释放,处于阻塞状态。

单点故障:一旦事务管理器出现故障,整个系统不可用

数据不一致:在阶段二,如果事务管理器只发送了部分 commit 消息,此时网络发生异常,那么只有部分参与者接收到 commit 消息,也就是说只有部分参与者提交了事务,使得系统数据不一致。

不确定性:当协事务管理器发送 commit 之后,并且此时只有一个参与者收到了 commit,那么当该参与者与事务管理器同时宕机之后,重新选举的事务管理器无法确定该条消息是否提交成功。

3PC加入预询盘和超时策略来解决单点故障问题并减少阻塞,如果因为协调者或网络问题,导致参与者迟迟不能收到来自协调者的 commit 或 rollback 请求,那么参与者将不会如两阶段提交中那样陷入阻塞,而是等待超时后继续 commit,相对于两阶段提交虽然降低了同步阻塞,但仍然无法完全避免数据的不一致。

TCC模式(柔性事务解决方案):Try操作作为一阶段,负责资源的检查和预留,Confirm操作作为二阶段提交操作,执行真正的业务,Cancel是预留资源的取消

优势:

TCC执行的每一个阶段都会提交本地事务并释放锁,并不需要等待其他事务的执行结果.如果其他事务执行失败,则进行补偿操作而不是回滚操作,这样就避免了资源的长期锁定和阻塞等待,执行效率高.

缺点:

1.代码侵入性高,需要人为编写.try,confirm,cancel,代码侵入性高

2.开发成本高,一个业务需要拆分成3个步骤,分别编写业务实现

3.安全性,cancel如果失败,资源就无法释放,需要引入重试机制,而重试机制可能导致重复执行,还需要考虑幂等性问题

可靠消息服务

缺点,不会导致消息回滚,适用于主业务和附属业务的场景,最终一致性,时效性差,依赖于mq的可靠性

(1)本地消息表

(2)独立消息服务

AT模式(seata)

自动实现回滚和提交,底层拦截sql,保存before image和after image

角色:事务发起者,事务协调者(tc server),资源管理器

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值