分布式事务

产生场景

  1、微服务架构即典型的分布式系统,跨JVM进程产生分布式事务

  2、单系统访问多数据库实例,资金数据库和资产数据库,通过不同的数据库连接去操作数据,跨数据库实例产生分布式事务

  3、多服务访问同一数据库实例,两个不同的服务持有不同的数据库连接去操作数据,跨JVM进程产生分布式事务

分布式事务基础理论

  CAP理论

  

  参考:https://www.cnblogs.com/mingorun/p/11025538.html

  BASE理论

  

  参考:https://segmentfault.com/a/1190000018019595

分布式事务解决方案

  2PC原理

  

  参考:https://www.cnblogs.com/qdhxhz/p/11167025.html

    XA方案

    

    参考:https://cloud.tencent.com/developer/article/1547146

    Seata方案

    

     Seata AT 模式参考:http://seata.io/zh-cn/docs/dev/mode/at-mode.html

     Seata原理参考:https://www.javazhiyin.com/41313.html

  TCC方案

  

  

  

   

   

  可靠消息最终一致性 

  

  1、本地事务与消息发送的原子问题
    事务发起方在本地事务执行成功后消息必须成功发出,否则丢弃消息
  2、事务参与方接收消息的可靠性问题
    事务参与方必须能够从消息队列接收到消息,如果失败则重复接收消息
  3、消息重复消费的问题
    实现事务参与方的方法幂等性

   RocketMQ事务消息方案

    该方案主要是解决Producer端的消息发送和本地事务执行的原子性问题即问题1

  

    步骤二发送的消息并不能被订阅方订阅到

    步骤五为事务回查主要是解决步骤四可能出现的网络问题

    步骤七改变消息状态使得订阅方可以订阅到消息

    解决事务参与方接收消息的可靠性问题即问题2则利用了消息中间件的ack机制

    参考:https://gitee.com/NuLiing/reliable-message

  最大努力通知 

  

  1、消息重复通知机制,利用MQ的ack机制
  2、通知结果主动查询机制

  该方案的业务场景是完成核心业务后的通知事务,即将业务结果可靠的通知出去,如注册账号(核心业务通知发起方)发邮件(通知接收方)

  该方案对一致性要求最低,适用于一些最终一致性时间敏感度低的业务

   参考:https://gitee.com/NuLiing/cn-ben

 

posted @ 2020-01-21 21:06  BINGJJFLY  阅读(191)  评论(0)    收藏  举报