点击上方“程序员小灰”,选择“置顶公众号”

有趣有内涵的文章第一时间送达!

—————  第二天  —————

————————————

假如没有分布式事务

在一系列微服务系统当中,假如不存在分布式事务,会发生什么呢?让我们以互联网中常用的交易业务为例子:

上图中包含了库存和订单两个独立的微服务,每个微服务维护了自己的数据库。在交易系统的业务逻辑中,一个商品在下单之前需要先调用库存服务,进行扣除库存,再调用订单服务,创建订单记录。

正常情况下,两个数据库各自更新成功,两边数据维持着一致性。

但是,在非正常情况下,有可能库存的扣减完成了,随后的订单记录却因为某些原因插入失败。这个时候,两边数据就失去了应有的一致性。

什么是分布式事务?


分布式事务用于在分布式系统中保证不同节点之间的数据一致性。分布式事务的实现有很多种,最具有代表性的是由Oracle Tuxedo系统提出的XA分布式事务协议。

XA协议包含两阶段提交(2PC)三阶段提交(3PC)两种实现,这里我们重点介绍两阶段提交的具体过程。

在魔兽世界这款游戏中,副本组团打BOSS的时候,为了更方便队长与队员们之间的协作,队长可以发起一个“就位确认”的操作:

当队员收到就位确认提示后,如果已经就位,就选择“是”,如果还没就位,就选择“否”。



当队长收到了所有人的就位确认,就会向所有队员们发布消息,告诉他们开始打BOSS。



相应的,在队长发起就位确认的时候,有可能某些队员还并没有就位:





以上就是魔兽世界当中组团打BOSS的确认流程。这个流程和XA分布式事务协议的两阶段提交非常相似。

那么XA协议究竟是什么样子呢?在XA协议中包含着两个角色:事务协调者事务参与者。让我们来看一看他们之间的交互流程:

第一阶段:

在XA分布式事务的第一阶段,作为事务协调者的节点会首先向所有的参与者节点发送Prepare请求。

在接到Prepare请求之后,每一个参与者节点会各自执行与事务有关的数据更新,写入Undo Log和Redo Log。如果参与者执行成功,暂时不提交事务,而是向事务协调节点返回“完成”消息。

当事务协调者接到了所有参与者的返回消息,整个分布式事务将会进入第二阶段。

第二阶段:

在XA分布式事务的第二阶段,如果事务协调节点在之前所收到都是正向返回,那么它将会向所有事务参与者发出Commit请求。

接到Commit请求之后,事务参与者节点会各自进行本地的事务提交,并释放锁资源。当本地事务完成提交后,将会向事务协调者返回“完成”消息。

当事务协调者接收到所有事务参与者的“完成”反馈,整个分布式事务完成。



以上所描述的是XA两阶段提交的正向流程,接下来我们看一看失败情况的处理流程:

第一阶段:


第二阶段:


在XA的第一阶段,如果某个事务参与者反馈失败消息,说明该节点的本地事务执行不成功,必须回滚。

于是在第二阶段,事务协调节点向所有的事务参与者发送Abort请求。接收到Abort请求之后,各个事务参与者节点需要在本地进行事务的回滚操作,回滚操作依照Undo Log来进行。

以上就是XA两阶段提交协议的详细过程。



XA两阶段提交的不足


XA两阶段提交究竟有哪些不足呢?

1.性能问题

XA协议遵循强一致性。在事务执行过程中,各个节点占用着数据库资源,只有当所有节点准备完毕,事务协调者才会通知提交,参与者提交后释放资源。这样的过程有着非常明显的性能问题。

2.协调者单点故障问题

事务协调者是整个XA模型的核心,一旦事务协调者节点挂掉,参与者收不到提交或是回滚通知,参与者会一直处于中间状态无法完成事务。

3.丢失消息导致的不一致问题。

在XA协议的第二个阶段,如果发生局部网络问题,一部分事务参与者收到了提交消息,另一部分事务参与者没收到提交消息,那么就导致了节点之间数据的不一致。

如果避免XA两阶段提交的种种问题呢?有许多其他的分布式事务方案可供选择:

1.XA三阶段提交

XA三阶段提交在两阶段提交的基础上增加了CanCommit阶段,并且引入了超时机制。一旦事物参与者迟迟没有接到协调者的commit请求,会自动进行本地commit。这样有效解决了协调者单点故障的问题。但是性能问题和不一致的问题仍然没有根本解决。

2.MQ事务

利用消息中间件来异步完成事务的后一半更新,实现系统的最终一致性。这个方式避免了像XA协议那样的性能问题。

3.TCC事务

TCC事务是Try、Commit、Cancel三种指令的缩写,其逻辑模式类似于XA两阶段提交,但是实现方式是在代码层面来人为实现。



几点补充:

.本漫画纯属娱乐,还请大家尽量珍惜当下的工作,切勿模仿小灰的行为哦。

—————END—————

喜欢本文的朋友们,欢迎长按下图关注订阅号程序员小灰,收看更多精彩内容


漫画:什么是分布式事务?相关推荐

  1. 漫画:什么是分布式事务

    转载自 漫画:什么是分布式事务? -----  第二天  ----- ------------ 假如没有分布式事务 在一系列微服务系统当中,假如不存在分布式事务,会发生什么呢?让我们以互联网中常用的交 ...

  2. (转)漫画:什么是分布式事务?

    转自: https://blog.csdn.net/bjweimengshu/article/details/79607522 假如没有分布式事务 在一系列微服务系统当中,假如不存在分布式事务,会发生 ...

  3. 分布式服务常见问题—分布式事务

    原文作者:程序员小灰 原文地址:漫画:什么是分布式事务? 有趣有内涵的文章第一时间送达! -----  第二天  ----- 假如没有分布式事务,在一系列微服务系统当中,假如不存在分布式事务,会发生什 ...

  4. 分布式事务方案这么多,到底应该如何选型?

    戳蓝字"CSDN云计算"关注我们哦! 作者 | 温卫斌 责编 | 刘晶晶 源自 | dbaplus社群 作者介绍 温卫斌,就职于中国民生银行信息科技部,目前负责分布式技术平台设计与 ...

  5. rabbitmq 查询版本_基于rabbitmq解决分布式事务

    分布式事务要解决的问题是保证二个数据库数据的一致性,本地事务ACID属于刚性事务,基于CAP理论,分布式事务的核心要点柔性事务,最终一致性. 基于rabbitmq解决分布式事务要点如下 生产者采用发送 ...

  6. TCC分布式事务的实现原理

    目录 一.写在前面 二.业务场景介绍 三.进一步思考 四.落地实现TCC分布式事务 (1)TCC实现阶段一:Try (2)TCC实现阶段二:Confirm (3)TCC实现阶段三:Cancel 五.总 ...

  7. 分布式事务中间件 Fescar—RM 模块源码解读

    2019独角兽企业重金招聘Python工程师标准>>> 前言 在SOA.微服务架构流行的年代,许多复杂业务上需要支持多资源占用场景,而在分布式系统中因为某个资源不足而导致其它资源占用 ...

  8. sql server分布式事务解决方案[新事务不能登记到指定的事务处理器中错误]

    < DOCTYPE html PUBLIC -WCDTD XHTML StrictEN httpwwwworgTRxhtmlDTDxhtml-strictdtd> 适用环境 操作系统:wi ...

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

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

最新文章

  1. 串的顺序存储结构c语言版,数据结构C语言版串的定长顺序存储表示和实现.doc
  2. 从键盘输入的十个整数中的最大数和最小数
  3. np.random.seed用法
  4. Glib实例学习(5)平衡二叉树
  5. 展望企业级移动设备的操作系统
  6. 2021-07-12
  7. UNIX再学习 -- 可重入函数和 SIGCHLD 语义
  8. 找不到在标准的system字段里新增entry的办法
  9. 使用C#像google/zx一样编写脚本
  10. MATLAB slider中的数值,在微信小程序中如何使用slider设置数据值
  11. 计算机启用时间 查找方式,电脑实用知识技巧 篇六:不需要第三方软件,这种方法查看系统启动时间...
  12. document.createelement如何绑定点击事件_番外篇-EXCEL如何使用宏(VBA)
  13. C++工作笔记-仿大佬使用枚举类型
  14. 微课|中学生可以这样学Python(例4.7):定时器
  15. 做了5年测试连一门语言都没学?逆袭后拿到3个超22K offer!
  16. 北京市城六区内严禁新建扩建数据中心
  17. Notepad++ 安装 Zen Coding / Emmet 插件
  18. Linux Mint 双系统安装教程
  19. 风格迁移篇-AdaIN --使用自适应实例规范化实时传输任意样式
  20. NVivo for Mac中的编码难理解?这6个视频帮助你!

热门文章

  1. opencv 视频处理(python)
  2. win10清理_win10系统垃圾清理方法教程
  3. verilog赋多位值_verilog中的default应该赋什么样的值
  4. <转>svn提示出错异常为remains in conflict
  5. HTML播放华为云视频流,华为云点播服务视频管理功能强大,上云就是省心
  6. 【高数】高数第六章节——平面图形的面积旋转体体积平面截面体体积平面曲线的弧长定积分在物理学中的应用
  7. 常系数非齐次微分方程特解及其通解求解
  8. 【ASE入门学习】ASE入门系列十二——Ramp采样(渐变采样)
  9. docker 搭建本地 coredns 服务器
  10. 跳转QQ群android代码,android 怎么跳转直接到qq群