分布式事务及其解决方案

一、本地事务

简单来说,一个单体应用中,一般只会涉及一台数据库服务器,而数据库服务器本身就具有事务特性,这种在一台数据库服务器上实现的事务叫本地事务。

二、分布式事务

同理,在分布式系统中,每个应用都拥有自己的数据库服务器,此时想要实现多台应用之间的数据一致性,显然靠本地事务是无法实现的,因此需要实现分布式事务,也就是保证多个系统的操作原子性,要么全部成功要么全部失败的方式叫分布式事务。例如:

1)跨数据源的分布式事务

2)跨服务的分布式事务

三、分布式解决方案

分布式需要解决的问题就是不同系统之间的数据一致性问题,所以需要各个子系统之间互相等待,同时提交,同时回滚,达成强一致性。但是事务在等待过程中处于弱可用状态。各个子系统之间互相通讯,协调事务状态,因此需要一个事务协调者:

四、事务模式

1.基于两段性提交的XA模式

XA 规范 是 X/Open 组织定义的分布式事务处理(DTP,Distributed Transaction Processing)标准(协议),几乎所有主流的关系型数据库都对 XA 规范 提供了支持。

一阶段:事务协调者通知每个事务参与者执行事务,事务参与者反馈执行结果,不提交事务

二阶段:如果收到事务均执行完成,则通知每个事务参与者提交事务

基于这个思想,2019 年 1 月份蚂蚁金服和阿里巴巴共同开源的分布式事务解决方案Seata。

XA模式优势:1)事务的强一致性,满足ACID原则 2)常用数据库都支持,实现相对简单,没有代码侵入。

XA模式劣势:1)一阶段需要锁定数据库资源,等待二阶段才能释放,性能较差 2)依赖关系型数据库。

2.TCC模式

通过人工编码实现诗句恢复,需要实现三个接口

1)Try:资源的检测和预留

2)Confirm:完成资源操作业务;要求 Try 成功 Confirm 一定要能成功

3)Cancel:预留资源释放,可以理解为try的反向操作

优势:数据一致性较好,灵活性较好,

劣势:开发成本高,有代码侵入,每个事务操作每个参与者都需要实现try/confirm/cancel三个接口。

3.基于消息队列的分布式事务

订单系统完成订单入库后,通知MQ向库存系统发送可减少库存消息,库存系统收到消息后减少库存执行本地事务,假如订单系统失败,不会触发消息发送,库存系统状态不变。

消息队列模式优势:由MQ协调完成,性能高,开发成本低

消息队列模式劣势:依赖数据库本地事务实现,MQ会出现频繁读取数据库记录,占用数据库资源。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值