分布式事务解决方案对比分析

1.一致性,吞吐量,复杂度对比

2PC 3PC TCC 可靠消息 最大努力通知 SAGA
一致性 强一致 强一致 最终一致 最终一致 最终一致
吞吐量
实现复杂度 容易 容易

2.分布式事务大致归类

  • 基于2PC实现的分布式事务。
  • 基于事务消息的分布式事务。
  • 基于TCC实现的分布式事务(业务层2PC)。
  • 基于SAGA实现的分布式事务。
  • 基于补偿实现的分布式事务,如seata的AT。
  • 基于最大努力通知的事务。

3.分布式解决方案适用理解

1.XA(2PC)

XA方案太依赖数据库了,性能没法得到保证,而且都要求强一致了,把这重任交给分布式事务,是不是不太合适,可以改造业务成单机事务,耗时虽然可能多些,但是效益是永久的,单机事务效率得到保证,同时还能得到重构经验和踩坑经验,之后设计就可以更敏感的规避分布式事务。

适用场景

  • 如果业务并发度真的不高,事务又需要支持回滚,数据库也能支持XA协议,又不想开发太多代码,那么这时候就选XA方案吧。
  • 适用于执行时间确定的短事务,在高并发的性能至上场景中,XA不适合。

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

同步转异步,服务还解耦,性能有保证

适用场景

  • 适用于分布式事务的提交或回滚只取决于事务发起方的业务需求,其他数据源的数据变更跟随发起方进行的业务场景。
  • 对于实时性要求不高,主业务逻辑无需外部数据变更协助来完成的最终一致性事务。
  • 适合执行周期长,实时性要求不高,同时业务上不需要回滚的场景。
  • 适用于异步业务处理场景。

3.基于补偿实现的分布式事务(AT)

事务的提交,不单单只依赖事务发起者,还得由其他服务一起保证时,比如订单扣款服务,订单服务下了订单,然后调用扣款服务,此时扣款服务得保证用户账户是有钱的,这笔交易才算成功完成,就不适用于消息事务方案了,毕竟不论是先扣钱再发送消息去创建订单,还是先创建订单再发送消息去扣钱,前者网络出问题,会导致用户钱扣了,订单缺迟迟查不到,后者很可能订单都创建了,然后发现钱不够,消息事务一般都是通过重试保证数据一致,基本不提供回滚操作,此时数据不一致的情况就产生了。

适用场景

  • 事务消息方案满足不了,又要求编码少的场景。
  • 事务的成功由多个服务一起保证,同时每个服务都需要补偿机制的场景。
  • 允许数据有脏读的场景,比如发现订单创建了,然后因为钱不够又被取消了的情况。
  • 并发量不高的场景。

4.TCC

如果以上AT方案满足不了,比如说不允许用户看到订单还未完成,账户钱就被扣了的场景,实时性、一致性要求比较高,简单的理解就是不允许出现数据脏读的情况。
可以把TCC理解成是业务层2PC方案,适用场景广,但是大部分情况可以先不考虑,因为代码开发量可能很多,无形中引入新方案反而增加了开发成本,不过如果和钱有关的,还是可以考虑引入的,得保证在资金上不会出现问题。

适用场景

  • 实时性、一致性要求高,需要根据其他服务结果来决定业务走向。
  • 不允许出现脏读的情况,数据一致性要求高。
  • 业务需要实现用户无感知的回滚场景。
  • 资金交易类业务。

5.基于SAGA实现的分布式事务

可以把SAGA可以看做一个异步的、利用队列实现的补偿事务,该方案缺少隔离性,会出现中间状态,简单的可以理解为脏读。

适用场景

  • 事务链路较长,耗时较久,可以允许用户看到中间状态,便于观察每个子事务的执行情况。
  • 需要补偿机制
  • 不需要返回事务发起方执行结果的场景,要么一路重试走到成功,要么一路回退回归初始状态。
  • 事务的参与者有第三方公司的系统,无法进行改造和提供TCC 要求的接口,就可以考虑引入Saga模式,此时只要第三方系统接口返回执行失败,事务链路往回的补偿操作都是本系统能够提供的。
  • 只需要保证最终一致性的场景。

6.最大努力通知型事务(非可靠消息+定期校对)

最大努力通知方案不把结果成功的压力全部依赖给发起通知方,发起通知方会尽最大的努力将业务处理结果通知给接收通知方,但是不保证消息一定会被接收通知方收到,此时需要接收通知方主动来主动查询业务处理结果,尽最大可能保证一致性。

适用场景

  • 业务对最终一致性时间敏感度低,同时接收通知方的处理结果不影响发起通知方的场景。
  • 充值类业务,短信类业务。

4.分布式解决方案选型建议

  • 如果业务场景要求强一致性,那么最好尽量避免分散业务在不同服务中,尽量采用本地事务,尽量避免使用强一致性事务解决方案。
  • 选型参考优先级:单机事务 》消息事务方案 》AT 》TCC 》SAGA
  • 有些业务情况为了更好的性能可以采用混合事务方案,比如订单,账户,积分,订单的提交成功依赖账户,但是不依赖于积分,所以订单和账户可以用TCC补偿事务,订单和积分可以用消息事务方案。
  • 如果业务要求强一致,同时又是分布式部署情况,那么就采用TCC方案,别采用2PC方案,性能太低了,无法保证后续是否还要改造,不如一开始就把时间花的在刀刃上。

分布式事务解决方案选型建议相关推荐

  1. 刚柔并济的开源分布式事务解决方案

    导读 相比于数据分片方案的逐渐成熟,集性能.透明化.自动化.强一致.并能适用于各种应用场景于一体的分布式事务解决方案则显得凤毛麟角.基于两(三)阶段提交的分布式事务的性能瓶颈以及柔性事务的业务改造问题 ...

  2. Spring Boot之基于Dubbo和Seata的分布式事务解决方案

    转载自 Spring Boot之基于Dubbo和Seata的分布式事务解决方案 1. 分布式事务初探 一般来说,目前市面上的数据库都支持本地事务,也就是在你的应用程序中,在一个数据库连接下的操作,可以 ...

  3. 分布式事务解决方案和代码落地

    在学习Spring cloud alibaba Seata之前,我们先来了解一下分布式事务的常用解决方案和代码实现,看完出去面试再遇到分布式事务的问题,战无不胜.文章包括了2PC,3PC刚性事务:TC ...

  4. 常用的分布式事务解决方案介绍有多少种?

    关于分布式事务,工程领域主要讨论的是强一致性和最终一致性的解决方案.典型方案包括: 两阶段提交(2PC, Two-phase Commit)方案 eBay 事件队列方案 TCC 补偿模式 缓存数据最终 ...

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

    转载自   聊聊微服务架构及分布式事务解决方案 分布式事务场景如何设计系统架构及解决数据一致性问题,个人理解最终方案把握以下原则就可以了,那就是:大事务=小事务(原子事务)+异步(消息通知),解决分布 ...

  6. 分布式事务解决方案全解析

    分布式事务解决方案 对于刚刚接触分布式系统的伙伴来说,分布式看起来非常高大上.深不可测.目前已有Dubbo.SpringCloud等较好的分布式框架,但分布式事务仍是分布式系统一大痛点,本文结合一些经 ...

  7. 龙果最新微服务架构的分布式事务解决方案视频课程(31课全)

    教程内容: 微服务倡导将复杂的单体应用拆分为若干个功能简单.松耦合的服务,这样可以降低开发难度.增强扩展性.便于敏捷开发.当前被越来越多的开发者推崇,很多互联网行业巨头.开源社区等都开始了微服务的讨论 ...

  8. Spring cloud的分布式事务解决方案(txlcn)

    Spring cloud的分布式事务解决方案 一.分布式CAP定律 C:Consistency一致性 所有节点访问最新的数据副本. A:Availability 可用性 当一个节点宕机,不影响数据的读 ...

  9. 高并发系统设计——分布式事务解决方案

    摘要​​​​​​​ 有一定分布式开发经验的朋友都知道,产品项目/系统最初为了能够快速迭代上线,往往不太注重产品项目系统的高可靠性.高性能与高扩展性,采用单体应用和单实例擞据痒的架构方式快速迭代开发;当 ...

最新文章

  1. skimage 学习笔记
  2. positionnbsp;absolutenbsp;relativenbsp;z-index
  3. 前端(六)——CSS之浮动和定位
  4. BZOJ 1070 修车
  5. 设置图片圆角 或者圆形
  6. vue利用级联选择器实现全国省市区乡村五级菜单联动
  7. Windows 10 x64 安装 Visual Basic 6.0 SP6
  8. IPSEC ×××需要解决的路由问题及影响IPSEC ×××的网络问题
  9. Android零基础入门第31节:几乎不用但要了解的AbsoluteLayout绝对布局
  10. 2015 HUAS Summer Training#2 G
  11. BG2EE 术士solo
  12. 推理集 —— 特殊的工具(二)
  13. TP-LINKTL-WR845N和腾达W311R怎么设置wds桥接
  14. 【PAT】A1150 Travelling Salesman Problem【中国邮递员问题】
  15. mathtype删除注册表的方法
  16. 树莓派4B安装中文输入法(Googlepinyin)
  17. 2021年茶艺师(初级)考试及茶艺师(初级)新版试题
  18. 香港电影经典回顾之爱情二十四章经
  19. 欧姆龙sysmac studio 与得克威尔EX-1100(EX-2C0S,EX300S)EtherCat配置与通信
  20. About MyBatis——有关Mybatis,自问自答系列

热门文章

  1. 智能电网建设与电力自动化应用
  2. 介绍linux上两种rootkits检测工具: Rootkit Hunter和Chkrootkit
  3. 发挥《WELL 健康 – 安全评价准则》之威力,IWBI加强对酒店及度假村服务力度
  4. 浙江大学远程教育学院课程视频教程:Linux操作系统
  5. 苹果:Kindle Fire与Android平板鹬蚌相争,iPad渔翁得利
  6. IPhone 编程 XCode4.2 项目模板说明
  7. 261_S32K144_串口驱动
  8. 室外型LoRa网关RAK7249仅工作于LTE和LoRa(8信道和16信道)时的平均功耗是多少?
  9. java核心技术卷 之泛型方法
  10. DOS汇编练习(13)——求两数差的绝对值