`

分布式事务最终一致性常用方案(转)

 
阅读更多

 

 

    目前的应用系统,不管是企业级应用还是互联网应用,最终数据的一致性是每个应用系统都要面临的问题,随着分布式的逐渐普及,数据一致性更加艰难,但是也很难有银弹的解决方案,也并不是引入特定的中间件或者特定的开源框架能够解决的,更多的还是看业务场景,根据场景来给出解决方案。根据笔者最近几年的了解,总结了几个点,更多的应用系统在编码的时候,更加关注数据的一致性,这样系统才是健壮的。

一、基础理论

   目前关于事务的几大理论包括:ACID事务特性,CAP分布式理论,以及BASE等。ACID在数据库事务中体现CAP和BASE则是分布式事务的理论,结合业务系统,例如订单管理,例如仓储管理等,可以借鉴这些理论,从而解决问题。

1、ACID 特性

2、CAP特性

  • C(一致性)一致性是指数据的原子性,在经典的数据库中通过事务来保障,事务完成时,无论成功或回滚,数据都会处于一致的状态,在分布式环境下,一致性是指多个节点数据是否一致;
  • A(可用性)服务一直保持可用的状态,当用户发出一个请求,服务能在一定的时间内返回结果;
  • P(分区容忍性)在分布式应用中,可能因为一些分布式的原因导致系统无法运转,好的分区容忍性,使应用虽然是一个分布式系统,但是好像一个可以正常运转的整体

3、BASE特性

  • BA: Basic Availability 基本业务可用性;
  • S: Soft state 柔性状态;
  • E: Eventual consistency 最终一致性;

二、最终一致性的常用做法

1、单数据库事务

      如果应用系统是单一的数据库,那么这个很好保证,利用数据库的事务特性来满足事务的一致性,这时候的一致性是强一致性的。对于java应用系统来讲,很少直接通过事务的start和commit以及rollback来硬编码,大多通过spring的事务模板或者声明式事务来保证;

2、多数据库事务

     针对多数据库事务可以根据二阶段提交协议,采用spring 3.0 + Atomikos + JTA进行支持;

3、基于事务型消息队列的最终一致性

     借助消息队列,在处理业务逻辑的地方发送消息,业务逻辑处理成功后,提交消息,确保消息是发送成功的,之后消息队列投递来进行处理,如果成功,则结束,如果没有成功,则重试,直到成功,不过仅仅适用业务逻辑中,第一阶段成功,第二阶段必须成功的场景。对应上图中的C流程。

4、基于消息队列+定时补偿机制的最终一致性

     前面部分和上面基于事务型消息的队列,不同的是,第二阶段重试的地方,不再是消息中间件自身的重试逻辑了,而是单独的补偿任务机制。其实在大多数的逻辑中,第二阶段失败的概率比较小,所以单独独立补偿任务表出来,可以更加清晰,能够比较明确的直到当前多少任务是失败的。对应上图的E流程。

5、异步回调机制的引入

     A应用调用B,在同步调用的返回结果中,B返回成功给到A,一般情况下,这时候就结束了,其实在99.99%的情况是没问题的,但是有时候为了确保100%,记住最起码在系统设计中100%,这时候B系统再回调A一下,告诉A,你调用我的逻辑,确实成功了。其实这个逻辑,非常类似TCP协议中的三次握手。上图中的B流程。

6、类似double check机制的确认机制

    还是上图中异步回调的过程,A在同步调用B,B返回成功了。这次调用结束了,但是A为了确保,在过一段时间,这个时间可以是几秒,也可以是每天定时处理,再调用B一次,查询一下之前的那次调用是否成功。例如A调用B更新订单状态,这时候成功了,延迟几秒后,A查询B,确认一下状态是否是自己刚刚期望的。上图中的D流程。

三、分布式事务的缺点

1、二阶段提交协议缺点

    两阶段提交涉及到多个节点的网络通信,通信时间如果过长,事务的相对时间也就会过长,那么锁定资源的时间也就长了.在高并发的服务中,就会存在严重的性能瓶劲

 2、消息队列

   在高并发的环境中,我们一般会采用消息队列来避免分布式事务的执行。

   在使用消息队列时,我们需要做到可靠凭证的保存(分布式事务的消息),有如下几种方式:

   以支付宝和余额宝为例进行说明.

   支付宝完成扣钱的动作时,记录消息数据,将消息数据和业务数据存在同一个数据库实例中.

Begin Transaction
  update A set amount=amount-1000 where uid=100;
  insert into message(uid,amount,status) values (1,1000,1)
End Transaction
Commit;

将支付宝完成扣钱的消息及时发送给余额宝,余额宝完成处理后返回成功消息,支付宝收到消息后,消除消息表中对应的消息记录,即完成本次扣钱操作.

传统方式是,我做完了,发你消息。解决一致性的方案的意思就是,我先发你消息,我做完了再跟你确认我做完了。这是改进后的有事务的消息中间件。

参见:http://coolshell.cn/articles/10910.html

分享到:
评论

相关推荐

    分布式事务最终一致性常用方案.docx

    【分布式事务最终一致性常用方案】 在当今的信息化时代,无论是企业级应用还是互联网应用,保持数据的最终一致性已经成为系统设计的重要挑战。随着分布式系统的广泛采用,数据一致性问题变得更为复杂,因为没有一种...

    java分布式事务demo

    6. **分布式事务的NoSQL解决方案**:如CAP理论中的CP(Consistency与Partition Tolerance)取舍,很多NoSQL数据库如MongoDB、Cassandra提供了最终一致性,它们在分布式事务上有不同的处理方式。 7. **分布式事务的...

    深入理解分布式事务

    另一种常用的方法是基于消息中间件的消息事务,通常结合最终一致性策略来实现分布式事务。这种方式通过消息队列来传递事务状态,并在消息确认接收后执行事务操作,从而确保所有参与者的操作结果最终达成一致。这种...

    微服务架构的分布式事务解决方案,完整31讲-龙果学院

    第03节--常用的分布式事务解决方案介绍 第04节--消息发送一致性方案探讨(可靠消息的前提保障) 第05节--JMS规范的消息发送与接收特点 第06节--消息重复发送问题及业务接口的幂等性设计 第07节--可靠消息服务...

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

    - **可靠消息最终一致性方案**:这是一种常见的分布式事务解决方案,通过消息队列(如RabbitMQ、ActiveMQ等)来传递消息,确保各个服务之间的最终一致性。这种方式适用于那些对实时性要求不是特别高的场景,例如支付...

    龙果学院(微服务架构的分布式事务解决方案)pdf ppt

    本文将围绕“微服务架构的分布式事务解决方案”这一主题,详细介绍几种常用的分布式事务解决方案及其优缺点。 #### 二、基础知识 在深入讨论分布式事务解决方案之前,我们需要了解一些基础概念: 1. **本地事务**...

    搞懂分布式技术18:分布式事务常用解决方案.docx

    而基于可靠消息服务的分布式事务则更适用于高并发场景,但需要额外的消息中间件和事务回查机制来保证事务的最终一致性。 在实际应用中,选择哪种方案取决于业务需求、系统的并发能力、数据一致性要求以及所使用的...

    浅谈常用的分布式事务选型

    - **TCC(Try-Confirm-Cancel)**:是一种补偿事务模型,通过事先定义好尝试操作、确认操作和取消操作来保证事务的最终一致性。 - **MQ(消息事务)**:利用消息队列来传递事务信息,通过消息的发布与订阅机制实现...

    龙果学院--微服务架构的分布式事务解决方案--第03节--常用的分布式事务解决方案介绍

    在面对分布式事务处理时,另一种思路是采用BASE理论(Basic Availability、Soft state、Eventually consistency),即基本可用性、软状态和最终一致性。与ACID特性相比,BASE理论更注重系统的可用性和灵活性,但牺牲...

    常用的分布式事务解决方案.docx

    最终一致性是另一种处理分布式事务的方式,通常用于不需要强一致性的场景。通过异步消息传递或事件驱动的方式实现各服务间的最终一致状态。 优点: - 提高了系统吞吐量和响应速度。 - 更容易实现和维护。 缺点: -...

    分布式事务分类,xa,at,tcc,sega

    在数据达到最终一致性之前,系统内的数据可能是不一致的。 #### 二、2PC与3PC协议 接下来,我们将重点讨论两种常用的分布式事务协议——两阶段提交(2PC)和三阶段提交(3PC)。 **2PC**(Two-Phase Commit ...

    常用的分布式事务解决方案

    6. BASE理论:基本可用(Basically Available)、软状态(Soft State)、最终一致性(Eventually Consistent),牺牲强一致性换取可用性,适合大规模分布式系统。 选择合适的分布式事务解决方案需要根据业务场景、...

    微服务架构分布式事务解决方案设计思路

    一、分布式事务方案:最终一致性、事务补偿、TCC、两阶段提交、最大能力通知等。具体结合业务场景。很多大型企业自主研发了自己的分布式事务解决方案,如:支付宝 XTS,去哪儿QMQ。1.基于可靠消息的最终一致性解决...

    分布式事务1

    另一种流行方案是采用服务最终一致性,比如eBay提出的BASE原则,通过消息队列实现异步处理和人工重试机制,确保事务在一段时间后达到一致状态,常见于支付场景。在这样的场景中,例如用户交易,交易记录和用户余额的...

    某果学院 微服务分布式事物解决方案

    3、常用的分布式事务解决方案介绍 4、消息发送一致性(可靠消息的前提保障) 5、消息发送一致性的异常流程处理 6、常规MQ队列消息的处理流程和特点 7、消息重复发送问题及业务接口的幂等性设计 8、可靠消息最终一致...

    分布式事务解决方案总结(2)seata方案.docx

    AT模式的核心在于它能够确保事务的最终一致性,同时减少了锁定资源的时间,提高了系统的并发性能。 ##### 2.2 TCC模式简介 TCC(Try-Confirm-Cancel)模式是一种补偿机制的实现方式,不依赖于底层数据资源的事务...

    分布式事务的N种实现

    最终结果是在对高性能、高扩展性,高可用性的追求的道路上,我们开始逐渐放松对一致性的追求,但是在很多场景下,尤其是账务,电商等业务中,不可避免的存在着一致性问题,使得我们不得不去探寻一种机制,用以在...

Global site tag (gtag.js) - Google Analytics