分布式解决方案

一、场景

二、理论

   1、cap理论

   2、base理论

三、解决方案

  1、xa/2pc  

  2、消息队列

     2.1 普通方式

     2.2 加上事务

     2.3 基于本地消息的最终一致性

     2.4 独立消息服务系统

  3、tcc

  4、LCN

一、场景

 事务的基本属性:ACID。单机的时候,用本地的数据库事务就能解决了。

 但是,随着互联网发展,微服务的流行,分布式事务急需解决。

如图,假如有两个服务,一个在北京,另一个在上海,此时要转账,如何保证转账正确,变的尤为重要。

二、理论

   1、cap理论

     

  • Consistency           一致性
  • Availability             可用性
  • Partition tolerance  分区容错

 它们的第一个字母分别是 C、A、P。

 Eric Brewer 说,这三个指标不可能同时做到。这个结论就叫做 CAP 定理。

 既然是分布式,那么就有p,如果没有p,那就不是分布式了。一般是从C、A中选择一种,CP或者AP。

参考:http://www.ruanyifeng.com/blog/2018/07/cap.html

   2、base理论

    BASE:全称:Basically Available(基本可用),Soft state(软状态),和 Eventually consistent(最终一致性)三个短语的缩写,来自 ebay 的架构师提出。

   Base 理论是对 CAP 中一致性和可用性权衡的结果,其来源于对大型互联网分布式实践的总结,是基于 CAP 定理逐步演化而来的。其核心思想是:

  既是无法做到强一致性(Strong consistency),但每个应用都可以根据自身的业务特点,采用适当的方式来使系统达到最终一致性(Eventual consistency)。

 参考:https://www.jianshu.com/p/9cb2a6fa4e0e

三、解决方案

  1、xa/2pc  

    XA是一个分布式事务协议,由Tuxedo提出。XA中大致分为两部分:事务管理器和本地资源管理器。其中本地资源管理器往往由数据库实现,比如Oracle、DB2这些商业数据库都实现了XA接口,而事务管理器作为全局的调度者,负责各个本地资源的提交和回滚。XA实现分布式事务的原理如下:

总的来说,XA协议比较简单,而且一旦商业数据库实现了XA协议,使用分布式事务的成本也比较低。但是,XA也有致命的缺点,那就是性能不理想,特别是在交易下单链路,往往并发量很高,XA无法满足高并发场景。XA目前在商业数据库支持的比较理想,在mysql数据库中支持的不太理想,mysql的XA实现,没有记录prepare阶段日志,主备切换回导致主库与备库数据不一致。许多nosql也没有支持XA,这让XA的应用场景变得非常狭隘。资源全局锁定,性能差。对于互联网项目,吞吐量的要求比较大,这种方案比较少用。

  2、消息队列  基于消息的最终一致性方案

     2.1 普通方式 

          

     2.2 加上事务

        

     2.3 基于本地消息的最终一致性

        

     2.4 独立消息服务系统

  3、tcc

   

TCC 将事务提交分为 Try - Confirm - Cancel 3个操作。

  • Try:预留业务资源/数据效验
  • Confirm:确认执行业务操作
  • Cancel:取消执行业务操作

TCC事务处理流程和 2PC 二阶段提交类似,不过 2PC通常都是在跨库的DB层面,而TCC本质就是一个应用层面的2PC。

  4、LCN

   分布式事务框架。

  LCN并不生产事务,LCN只是本地事务的协调工

 官网:http://www.txlcn.org/zh-cn/

原文地址:https://www.cnblogs.com/luoa/p/11166191.html