Home 为什么会有分布式事务?
Post
Cancel

为什么会有分布式事务?

为什么会有分布式事务?

假设有两个系统,一个是订单系统,另一个是库存系统。 用户在订单系统中下单,已经保存到数据库,订单系统需要调用库存系统的接口来减少库存。因为是两个系统 如果库存系统失败啦,这个时候,订单系统已经保存了数据,但是库存却没有减少。这样就出现问题

所以分布式事务之所以存在,是因为在分布式系统中,单机数据库事务能力无法直接覆盖跨多个服务、多个数据库、多个资源的业务流程。为了保证业务数据的一致性,需要一种机制来协调不同节点的操作,要么全部成功,要么全部失败。

分布式事务的解决方案

数据强一致性(刚性事务)

  • 2PC (两阶段提交),逻辑简单、数据库支持 缺点;阻塞、性能差、单点风险,应用场景:银行转账、传统企业系统

数据弱一致性(柔性事务)

  • TCC (Try-Confirm-Cancel) 业务侵入性强,但不阻塞
    • 对资源A预锁定,资源B提交事务,资源A再提交事务
    • 悬挂问题:悬挂问题指的是:由于网络延迟或重试机制,Cancel 操作在 Try 操作之前执行,导致 Cancel 操作因找不到对应的 Try 资源而出现异常(例如,Cancel 尝试释放未锁定的资源)
      • 解决悬挂问题:引入全局唯一的事务ID,在 Try 操作时生成并记录该事务ID,然后在 Cancel 和 Confirm 操作中通过这个事务ID来确保操作的正确性。
  • Saga 每个事务自己生成一个回滚代码,当一个失败后,前面成功的自动执行回滚代码
  • 可靠消息最终一致性(异步事务):利用消息队列确保最终一致性 和 最大努力通知(不停的通知对方直到收到成功信息)

所有的分布式事务都要有系统监控,人工干预的兜底补偿机制

分布式系统里,数据一致性不会保证 100% 成功,这个在阿里,Google 这样的大厂都一样存在,一般成功率控制在 99.999% ,对于特殊情况,公司里一般有人员处理这类数据不一致的情况

分布式事务里为了应对数据不一致,一般有定时任务自动修正,或者人工干预修正

weixin.png

公众号名称:怪味Coding
微信扫码关注或搜索公众号名称
This post is licensed under CC BY 4.0 by the author.