分布式事务原理及方案

一.一致性理论

分布式事务目的是保障分库数据的一致性

1.CAP理论

CAP原则又称CAP定理,指的是在一个分布式系统中, Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可得兼。
在这里插入图片描述

  • 一致性(C):在分布式系统中的所有数据备份,在同一时刻是否同样的值。(等同于所有节点访问同一份最新的数据副本)
  • 可用性(A):在集群中一部分节点故障后,集群整体是否还能响应客户端的读写请求。(对数据更新具备高可用性)
  • 分区容忍性(P):以实际效果而言,分区相当于对通信的时限要求。系统如果不能在时限内达成数据一致性,就意味着发生了分区的情况,必须就当前操作在C和A之间做出选择。

2.BASE 理论

核心思想:

  • 基本可用(BasicallyAvailable):指分布式系统在出现故障时,允许损失部分的可用性来保证核心可用。
  • 软状态(SoftState):指允许分布式系统存在中间状态,该中间状态不会影响到系统的整体可用性。
  • 最终一致性(EventualConsistency):指分布式系统中的所有副本数据经过一定时间后,最终能够达到一致的状态。

3.一致性模型

数据的一致性模型可以分成以下 3 类:

  • 强一致性:数据更新成功后,任意时刻所有副本中的数据都是一致的,一般采用同步的方式实现。
  • 弱一致性:数据更新成功后,系统不承诺立即可以读到最新写入的值,也不承诺具体多久之后可以读到。
  • 最终一致性:弱一致性的一种形式,数据更新成功后,系统不承诺立即可以返回最新写入的值,但是保证最终会返回上一次更新操作的值。

二.分布式事务解决方案

  • XA 方案(强一致性)
  • TCC 方案(最终一致性)
  • 本地消息表(最终一致性)
  • 可靠消息方案(最终一致性)
  • 最大努力通知方案(弱一致性)
  • 混合方案以及变种(最终一致性)
  • seata 阿里开源分布式事务中间件

1.XA 方案

所谓XA方案,即:两阶段提交;现在微服务很火,每个微服务有自己的库,微服务之间通过rpc或restful-api交互,总之不可能让你访问人家的库,所以XA方案已经不再适用,这里不再讨论

2.TCC 方案

TCC 的全称是:Try、Confirm、Cancel。

  • Try 阶段:这个阶段说的是对各个服务的资源做检测以及对资源进行锁定或者预留。
  • Confirm 阶段:这个阶段说的是在各个服务中执行实际的操作。
  • Cancel 阶段:如果任何一个服务的业务方法执行出错,那么这里就需要进行回滚操作,就是执行try操作的反操作。

主服务分别调用从服务的try接口,如果所有try成功,则进入confirm阶段,如果有失败,则进入cancel阶段

注意点:

  • try成功,confirm一定能成功,就是说cancel只是针对try的
  • confirm和cancel必须具有幂等性

3.本地消息表

是国外的 ebay 提出的一套思想,前提是从业务的幂等性和一定会成功(如果失需要人工干预就比较麻烦),就是说不需要回滚最好

  1. A 系统在自己本地一个事务里操作同时,插入一条数据到消息表;
  2. 接着 A 系统将这个消息发送到 MQ 中去;
  3. B 系统接收到消息之后,在一个事务里,往自己本地消息表里插入一条数据,同时执行其他的业务操作,并保证不会重复处理消息;
  4. B 系统执行成功之后,就会更新自己本地消息表的状态以及 A 系统消息表的状态;
  5. 如果 B 系统处理失败了,那么就不会更新A消息表状态,那么此时 A 系统会定时扫描自己的消息表,如果有未处理的消息,会再次发送到 MQ 中去,让 B 再次处理;
  6. 这个方案保证了最终一致性,哪怕 B 事务失败了,但是 A 会不断重发消息,直到 B 那边成功为止。

4.可靠消息最终一致性方案

和上面差不多,如果使用的mq是支持事务的,比如rocketMQ,那么就可以不用本地表和本地定时任务扫描了,MQ可以保证消息一定会送达至少一次;
如果从业务一定会成功,那么此种方案是最简单的了。

5.最大努力通知方案

类似支付宝订单支付状态的异步通知,支付宝24小时通知下游系统12次,如果最终没有通知成功,那么就不管了,下游可以通过主动查询的机制查询。

6.混合方案以及变种

结合可靠消息和tcc思想实现,需要rocketMQ事务和延迟消息的支持,不再文字阐述,直接上流程图

1. 同步
在这里插入图片描述

2. 异步
在这里插入图片描述

7.seata

Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。

可以参考我的另一篇博客
seata学习

三.参考网站

https://www.zhihu.com/question/64921387/answer/225784480
https://cloud.tencent.com/developer/article/1442601
https://www.jianshu.com/p/2838890f3284
https://www.jianshu.com/p/7ebe567c7135

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章