四种分布式事务的介绍

一、事务概念

     事务是用来保证一组数据操作完整性一致性

     四个特性(ACID):

              原子性:事务中的数据操作是一个完整的个体,不可能再被分隔了

              一致性:事务中的数据操作要么同时成功,要么同时失败

              隔离性:事务与事物之间的数据操作是不相间的

              持久性: 事务成功后对数据的修改是永久的。

二、分布式事务

     1. 分布式事务就是将多个节点或服务的数据操作看成一个整体处理。

            比如扣库存,下订单,支付分别是三个微服务,可以当成一个整体来处理,同时成功,同时失败。

     2.  分布式事务一般由事务参与者(参与的微服务或节点),资源服务器(一般指事务的需要改变的数据),事务管理器(用来告诉各个事务参与者成功或者失败)。

三、分布式事务实现思路(其他分布式事务都是基于两段式事务基础上演变的)

    两段式事务(2PC)与三段式事务(3PC)

    基于XA的分布式事务

    基于消息的最终一致性方案

    TCC编程式补偿性事务(最好的实现方式)

     

     但是第二阶段如果有一个资源管理器(服务节点)挂掉了,我们会不知道是提交前失败了还是提交后失败了,这是两段式事务的缺点之一。因此三段式事务在提交的时候做了一个提交预状态,即通知提交,已准备提交,提交,弥补两段式这个缺点。

      基于XA的分布式事务(用处不多,但是mysql、oracle、db2等数据库事务的数据模型能够看到XA这种模型)

   基于消息的最终一致性方案(业务系统中应用广泛)

    但这种方案具有强一致性,比如A系统为支付系统,A通过消息中间件给B系统(假如修改订单状态)发送消息,A系统会先等待B系统的事务是否处理成功,成功了A系统才会将钱打给支付宝(通过线程睡眠可以实现),失败了就不执行支付业务了,所以一定是一起成功一起失败,但这也是一个缺点。

    TCC柔性补偿事务(使用也很广泛):

   

   举例服务A为扣减库存,服务B为下订单,这里会写TCC三个接口的内容,事务启动后,先调用Try尝试接口把订单创建好,库存也扣除,然后告知事务协调器A和B是否成功,都成功则会调用Confirm接口,有一个失败就会调用Cancel接口,取消创建的订单和恢复库存(即为补偿性)。

  这里重点比较一下基于消息的最终一致性方案和TCC柔性补偿事务:

  

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值