【分布式事务系列】两阶段提交协议执行流程 两阶段提交协议执行

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

两阶段提交协议执行流程

两阶段提交协议执行流程如下:

  • 准备阶段:事务管理器(TM)通知资源管理器(RM)准备分支事务,记录事务日志,通知事务管理器的准备结果
  • 提交回滚阶段:如果所有的资源管理器(RM)在准备阶段返回成功,则事务管理器向所有的资源管理器发起事务提交指令完成数据的修改。反之,如果在任何一个资源管理器返回失败,则事务管理器会向所有资源管理器发送事务回滚指令。完整执行流程图如下:

两阶段提交将一个事务的处理过程分为投票和执行两个阶段,它的优点在于充分考虑到分布式的不可靠因素,并采用两阶段提交就把由于系统的不可靠而导致事务提交失败概率降到最小。

有以下缺点:

  • 同步阻塞:所有资源管理器都是事务阻塞状态,对于每一次指令都必须要有明确的响应才能继续进行下一步,否则会处于阻塞状态,占用的资源一直被锁定。
  • 过于保守,任何一个节点失败都会导致数据回滚。
  • 事务协调者的单点故障:如果协调者在第二阶段出现了故障,那其他参与者对应的资源会一直处于锁定状态
  • “脑裂”导致数据不一致问题:在第二阶段中,事务协调者向所有参与者RM发送commit请求后,发生局部网络异常导致只有一部分参与者RM接收到了commit请,这部分参与者RM收到请求后会执行commit事务操作,但是未收到commit请求的节点由于事务无法提交,导致数据出现不一致问题。

本文转载自: 掘金

开发者博客 – 和开发相关的 这里全都有

0%