分布式事务解决方案总结

## 分布式事务解决方案
-XA的两阶段提交
        1.第一阶段: 各个操作执行完本地事务,向事务管理器返回“可以提交”;
        2.第二阶段:所有操作都响应了“可以提交”,那么事务管理器会向各操作发送“提交”;(如果有任何一个操作失败,所有其他的也回滚事务)
-三阶段提交
        1.第一阶段:事务管理器向各参与者,发送“是否可以提交”,参与者去看看事务是否可用;
        2.第二阶段:如果参与者回复yes,事务管理器向各参与者,发送“预备提交”,参与者去执行本地事务,准备提交;
        3.第三阶段:如果参与者回复“可以了”,事务管理器向各参与者发送“可以提交”,参与者去提交;
        如果:第三阶段参与者没有收到“可以提交”,在等待超时后,参与者会认为该事务可以提交; --避免了两阶段提交的,发送“提交”因网络原因不可达导致数据不一致的情况
        
-本地消息表(源于ebay):实现了最终一致性
        1.在A事务完成后,把可靠性的记录写到本地消息库中;(比如,A转账扣款100元,把B需要增加100元的信息记录到本地消息库)
        2.a.使用MQ去发消息让B账户增加100元 -- 消息可能会失败
          b.使用轮训消息表的方式去执行增加动作  -- 这样性能不好,做太多无用功
          c. 结合a和b,先MQ去把消息发送出去,定期轮训去检测消息表;(在消息表定义一字段是否被消费来防止重复消费问题)
-阿里RocketMQ:
        1.执行本地事务前,先发送prepared到消息容器中;
        2.执行本地事务;
        3.发送确认发送消息到消息容器中,消息容器发送消息到其他库执行其他操作;
    确认消息发送失败:定期扫描消息容器,如果发现prepared消息,向发送者确认这个是否已经执行,是回滚还是发送;(可以配置的策略)

-JTA(Java Transaction API)
    java在XA基础上建模的,JTA仅仅定义了接口;实现: JBoss
    
    
-世界上只有一种完美算法能保证分布式事务一致性-> Paxos 待研究?????????

转载于:https://my.oschina.net/u/3477913/blog/1591943

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值