分布式事务处理机制

为什么有分布式事务

  • 由于业务数据量非常巨大,如淘宝电商系统,后端肯定是分库分表的。因为单个数据库数据量压上来,系统就会产生性能瓶颈。库存和订单分别在不同数据库中。交易系统、库存系统、订单系统。【微服务架构中,像淘宝光一个下单链路可能会涉及10多个系统以上】如果下订单失败库存系统必须回滚数据,保证数据强一致性。
  • 分布式事务种类
    • 数据库的2PC(两阶段提交)又叫做 XA Transactions,强一致性、性能不高
    • 补偿事务(TCC),记住3个单词 try、confirm、cancel,逻辑简单
    • 消息事务,最终一致性,性能好
  • 2PC(两阶段提交):2阶段提交是分布式事务传统解决方案,目测银行保险都喜欢用这个。
    • 当事务跨越多个节点时,为了保持事务ACID,引入了协调者、参与者
      • 第一阶段:事务协调器要求每个涉及到事务的数据库预提交(precommit)此操作,并反映是否可以提交.
      • 第二阶段:事务协调器要求每个数据库提交数据。
    • 缺点:2PC效率很低,对高并发很不友好
      • 两阶段提交涉及多次节点的网络通信,导致通信时间过长。
      • 非常容易造成长事务,锁定资源时间太长,资源等待时间增多。
      • 大部分高并发场景都应该避免使用。
  • 补偿事务TCC
    • Try 阶段,对业务系统做检测和资源预留
    • Confirm 阶段对业务系统做确认提交,默认:Try执行成功,Confirm一定成功
    • Cancel 阶段在业务执行失败,需要回滚的情况下执行的业务取消,预留资源释放。
    • 举例
      • Try 减库存
      • Confirm 更新订单
      • 如果更新订单失败,就进入Cancel阶段 恢复库存,回滚阶段是业务编码来实现的(一个sql把库存更新回去),不同业务场景需要不同的补偿代码,复用性差。
      • 缺点:对应用侵入性强、实现难度大
      • 优点:降低锁冲突、提高吞吐量成为可能,灵活自定义数据库操作的粒度
  • 消息事务
    • 思路:将本地事务和消息中间件放在一个事务中。保证最终一致性,过程不能保证
    • 将分布式事务转换为两个本地事务
    • 然后依靠下游业务的重试机制达到最终一致性
    • 缺点:基于消息的最终一致性方案应用对应用侵入性高,需要大量业务改造成本高
    • 分布式事务异常情况下面这些异常,都需要考虑
      • 机器宕机
      • 网络超时
      • 消息丢失
      • 数据错误
      • 消息乱序
      • 存储数据丢失
      • 失败消息重试
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
分布式事务常见的事务处理机制包括XA模式、TCC模式、可靠消息服务和AT模式。 XA模式,也称为两阶段提交协议(2PC),是一种常见的分布式事务处理机制。在该模式中,一个分布式事务可以被拆分成多个本地事务,运行在不同的微服务中。每个本地事务都必须要保证能够同时成功,如果有一个本地事务失败,则其他事务都必须回滚。这个过程需要一个协调者(TM)和资源参与者(RM),并使用通信中间件(CRM)来通知各个本地事务执行的状态。然而,XA模式存在单点故障的问题,如果协调者故障了,参与者无法得知上一阶段它们是否执行成功,并且在准备阶段和提交阶段,每个事务参与者都会锁定本地资源并等待其他事务的执行结果,导致效率降低。 TCC模式是另一种常见的分布式事务处理机制。TCC代表Try-Confirm-Cancel,即尝试、确认、取消。在TCC模式中,事务被拆分为三个阶段:尝试阶段,确认阶段和取消阶段。在尝试阶段,事务参与者尝试执行操作并预留相应的资源;在确认阶段,事务参与者确认操作;在取消阶段,事务参与者取消操作并释放资源。TCC模式相对于XA模式来说,实现上更加灵活,但需要业务代码来实现,而不是由数据库实现,因此效率相对较高。 可靠消息服务是一种使用消息队列来实现的分布式事务处理机制。在该模式中,事务参与者将事务操作封装为消息,然后将消息发送到消息队列中。事务协调者从消息队列中接收消息,并根据消息的状态来判断是否确认或取消操作。可靠消息服务可以保证消息的可靠传递,但可能会出现消息重复或丢失的情况,需要通过设计来解决这些问题。 AT模式是另一种分布式事务处理机制,代表了应用层事务。在AT模式中,事务参与者通过在资源操作前后插入代码来实现事务的管理。在操作前,事务参与者记录操作前的状态,并在操作后根据操作结果决定是否提交或回滚事务。AT模式相对于XA模式来说,实现起来更加简单,但需要在业务代码中显式管理事务。 以上是分布式事务常见的事务处理机制,每种机制都有其优缺点,选择合适的机制取决于具体的业务需求和系统架构。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [分布式服务常见问题—分布式事务](https://blog.csdn.net/sanmi8276/article/details/113849988)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [分布式事务常见的几种实现方式](https://blog.csdn.net/qq_45968950/article/details/127408359)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值