分布式事务分布式事务解决方案

756623607-zhang 756623607-zhang     2022-12-20     106

关键词:

一、第一种方案:能不用分布式事务就不用

明确系统是否真的需要分布式事务;

因为不论任何一种分布式解决方案都会增加你系统的复杂度,这样的成本还是挺高的,千万不要因为追求某些设计,而引入不必要的成本和复杂度。

二、第二种方案:XA 分布式事务 (MySQL是支持XA事务的)

属于2PC;
XA是由X/Open组织提出的分布式事务的规范。

X/Open DTP(X/Open Distributed Transaction Processing Reference Model) 是X/Open 这个组织定义的一套分布式事务的标准,也就是了定义了规范和API接口,由这个厂商进行具体的实现。这个思想在java 平台里面到处都是。
X/Open DTP 定义了三个组件: AP,TM,RM
AP(Application Program):也就是应用程序,可以理解为使用DTP的程序
RM(Resource Manager):资源管理器,这里可以理解为一个DBMS系统,或者消息服务器管理系统,应用程序通过资源管理器对资源进行控制。资源必须实现XA定义的接口
TM(Transaction Manager):事务管理器,负责协调和管理事务,提供给AP应用程序编程接口以及管理资源管理器
其中,AP 可以和TM 以及 RM 通信,TM 和 RM 互相之间可以通信,DTP模型里面定义了XA接口,TM 和 RM 通过XA接口进行双向通信,例如:TM通知RM提交事务或者回滚事务,RM把提交结果通知给TM。AP和RM之间则通过RM提供的Native API 进行资源控制,这个没有进行约API和规范,各个厂商自己实现自己的资源控制,比如Oracle自己的数据库驱动程序。

 

技术图片

技术图片

 

 

三、第三种方案:TCC 方案
属于2PC;

TCC 模型是把锁的粒度完全交给业务处理,它需要每个子事务业务都实现Try-Confirm / Cancel 接口。

Try:
  尝试执行业务
  完成所有业务检查(一致性)
  预留必须业务资源(准隔离性)
Confirm:
  确认执行业务;
  真正执行业务,不作任何业务检查
  只使用Try阶段预留的业务资源
  Confirm 操作满足幂等性
Cancel:
  取消执行业务
  释放Try阶段预留的业务资源
  Cancel操作满足幂等性

这三个阶段,都会按本地事务的方式执行。不同于 XA的prepare ,TCC 无需将 XA 的投票期间的所有资源挂起,因此极大的提高了吞吐量。
技术图片

 

四、第四种方案:本地消息表+MQ

技术图片

执行步骤:

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

注意事项:

1.严重依赖于数据库的消息表来管理事务,高并发场景下,mysql会是个瓶颈 

2.本地消息队列是 BASE 理论,是最终一致模型,适用于对一致性要求不高的。实现这个模型时需要注意重试的幂等

五、第五种方案:可靠消息最终一致性方案

抛弃本地的消息表,直接基于 MQ 来实现事务。比如阿里的 RocketMQ 就支持消息事务。
消息队列 RocketMQ 事务消息交互流程如下所示:

 

技术图片

其中:

  1. 发送方向消息队列 RocketMQ 服务端发送消息。
  2. 服务端将消息持久化成功之后,向发送方 ACK 确认消息已经发送成功,此时消息为半消息。
  3. 发送方开始执行本地事务逻辑。
  4. 发送方根据本地事务执行结果向服务端提交二次确认(Commit 或是 Rollback),服务端收到 Commit 状态则将半消息标记为可投递,订阅方最终将收到该消息;服务端收到 Rollback 状态则删除半消息,订阅方将不会接受该消息。
  5. 在断网或者是应用重启的特殊情况下,上述步骤 4 提交的二次确认最终未到达服务端,经过固定时间后服务端将对该消息发起消息回查。
  6. 发送方收到消息回查后,需要检查对应消息的本地事务执行的最终结果。
  7. 发送方根据检查得到的本地事务的最终状态再次提交二次确认,服务端仍按照步骤 4 对半消息进行操作。

说明:事务消息发送对应步骤 1、2、3、4,事务消息回查对应步骤 5、6、7。 

六、第六种方案:最大努力通知方案

这个方案的大致意思就是:

1.系统 A 本地事务执行完之后,发送个消息到 MQ;
2.这里会有个专门消费 MQ 的最大努力通知服务,这个服务会消费 MQ 然后写入数据库中记录下来,或者是放入个内存队列也可以,接着调用系统 B 的接口;
3.要是系统 B 执行成功就 ok 了;要是系统 B 执行失败了,那么最大努力通知服务就定时尝试重新调用系统 B,反复 N 次,最后还是不行就放弃。

其实,RocketMQ 的消息重试,符合这个解释

分布式事务分布式事务解决方案

...系统是否真的需要分布式事务;因为不论任何一种分布式解决方案都会增加你系统的复杂度,这样的成本还是挺高的,千万不要因为追求某些设计,而引入不必要的成本和复杂度。二、第二种方案:XA分布式事务(MySQL是支持XA事... 查看详情

微服务架构及分布式事务解决方案

分布式事务分布式事务场景如何设计系统架构及解决数据一致性问题,个人理解最终方案把握以下原则就可以了,那就是:大事务=小事务(原子事务)+异步(消息通知),解决分布式事务的最好办法其实就是不考虑分布式事务... 查看详情

设计----分布式事务分布式事务和解决方案(代码片段)

一、前言分布式事务是企业集成中的一个技术难点,也是每一个分布式系统架构中都会涉及到的一个东西,特别是在微服务架构中,几乎可以说是无法避免,本文就分布式事务来简单聊一下。二、数据库事务在说分布式事务之前... 查看详情

深入理解分布式事务,高并发下分布式事务的解决方案

这两天正在研究微服务架构中分布式事务的处理方案,做一个小小的总结,作为备忘.如有错误,欢迎指正!概念澄清事务补偿机制:在事务链中的任何一个正向事务操作,都必须存在一个完全符合回滚规则的可逆事务.CAP理论:CAP(Consistency... 查看详情

分布式事务方案-补充

...致性问题博客中提到了关于分布式事务一致性问题的两种解决方案,2PC和3PC,2PC用在数据库层面解决数据库之间的分布式事务;因此实际应用中往往不会采用这两个方案,下面说一下其他的解决方案TCC:  TCC是支付宝提出的分... 查看详情

分布式事务

目录分布式事务两阶段提交方案TCC方案(实现起来非常复杂)本地消息表方案可靠消息最终一致性方案(使用较多)最大努力通知方案分布式事务总结分布式事务两阶段提交方案布式事务方案,比较适合单块应用里,跨多个库的... 查看详情

分布式事务解决方案

RocketMQ分布式事务https://www.cnblogs.com/linjiqin/p/9561641.html分布式事务解决方案https://www.cnblogs.com/taiyonghai/p/6094350.html 查看详情

分布式事务处理方案,微服事务处理方案(代码片段)

微服事务处理方案(分布式事务处理方案)1.什么是事务由一组操作构成的可靠、独立的工作单元。事务具有以下特点:?Atomicity(原子性)?Consistency(一致性)?Isolation(隔离性)?Durability(持久性)2.事务的一致性单体应用可以在数据库的... 查看详情

90springcloud解决分布式事务--lcn解决分布式事务

...器,互不影响,那么这时候也会存在多数据源事务管理:解决方案jta+Atomikos[图片上传失败...(image-7df061-1618491220423)]3,在分布式/微服务架构中,每个服务都有自己的本地事务,每个服务本地事务互不影响,那么这时候也会存在分... 查看详情

分布式事务解决方案

事务的概念来源于业务过程。在许多情况下我们都希望能够确保在一个过程中执行的所有操作是完全成功的。在集中式系统中,事务被广泛用于服务器端和数据库系统,控制数据的操作。随着分布式计算的发展,事务在分布式计算领... 查看详情

微服务架构的分布式事务解决方案

微服务架构的分布式事务解决方案标签:分布式事务,微服务,消息最终一致性,分布式事务解决方案发布于2016-07-1618:39:05分布式系统架构中,分布式事务问题是一个绕不过去的挑战。而微服务架构的流行,让分布式事问题日益突出... 查看详情

分布式事务及其实现方案

文章目录分布式事务概念分布式事务实现方案2PC优缺点:TCCTCC举例:TCC适用场景:本地消息表MQ事务Saga事务Saga的组成:Saga恢复策略:Saga举例说明:Saga隔离性问题:分布式事务概念分布式事务就是指事... 查看详情

阿里4面:聊聊分布式事务的解决方案???(代码片段)

阿里4面:聊聊分布式事务的解决方案???公众号关注“架构师学习营”设为“星标”,带你学习更多架构师知识!大家好,这里是架构师学习营。本文继续分享分布式事务的另一种常见的解决方案:TCC什么是TCC?TCC场景案例TCC... 查看详情

seata分布式事务解决方案汇总

...布式事务为什么难CAP理论base理论一致性模型分布式事务解决方案2PC:两阶段提交2PC存在的问题3PC:三阶段提交cancommitprecommitcommit3PC相对于2PC的优缺点XATCCMQ事务消息(可靠消息)本地事务消息表(可靠消息)最大努力通知最大努力通知... 查看详情

分布式事务了解吗?你们是如何解决分布式事务问题的?(代码片段)

面试官心理分析只要聊到你做了分布式系统,必问分布式事务,你对分布式事务一无所知的话,确实会很坑,你起码得知道有哪些方案,一般怎么来做,每个方案的优缺点是什么。现在面试,分布式系统成了标配,而分布式系统... 查看详情

[java复习]分布式事务part2

分布式事务了解吗?如果解决分布式事务问题的?面试官心里:只要聊到你做了分布式系统,必问分布式事务,起码得知道有哪些方案,一般怎么来做,每个方案的优缺点是什么。 为什么要有分布式事务?分布式事务实现的... 查看详情

分布式事务解决方案-柔性事务(可靠消息保证最终一致性)

1. 2.  查看详情

聊聊分布式事务&分布式系统事务一致性解决方案

事务就是一个会话过程中,对上下文的影响是一致的,要么所有的更改都做了,要么所有的更变都撤销掉。就要么生,要么死。没有半死不死的中间不可预期状态。参考下薛定谔的猫。事务是为了保障业务数据的完整性和准确性... 查看详情