美文网首页程序员
分布式事务- 三阶段协议

分布式事务- 三阶段协议

作者: 阿里加多 | 来源:发表于2018-06-22 15:47 被阅读112次

一、前言

前面我们介绍了为解决分布式事务而提出来的的二阶段协议,本文首先来讲解二阶段的不足,然后阐述三阶段协议,三阶段协议也是一个标准的协议,也并没有说具体如何实现。

二、二阶段协议存在的问题

主要是同步阻塞问题,在二阶段的第一阶段所有参与者接受到事务协调器的事务准备请求后,会在本地开启并执行事务,但是没有提交事务。所有参与者等待第二阶段事务协调器发出事务提交或者回滚后才会提交或者回滚事务。而在这期间所有参与者开启的本地事务一直存在,也就是一直把相应的资源锁定了(比如本地事务要更新一行数据,则在开启事务后,事务提交或者回滚之前都一直通过行锁锁定了这行数据),导致其他需要访问这行数据的事务阻塞等待。

假如在第一阶段事务协调器给10个参与者发送准备请求,其中9个参与者正确接受了,并开启了本地事务锁定了具体的资源,而剩下一个参与者或者由于网络问题没有收到准备请求,或者接受到了但是本事事务执行失败,或者执行正常,但是给事务协调器的回执由于网络原因没有被协调器收到等,则事务协调器发现其中一个参与者返回准备失败或者等待超时后还没收到那一个参与者的回执则会通知所有的参与者执行回滚操作。也就是在具体回滚前,其他9个参与者白白的锁定了本地资源,成功的阻止了在开启事务和回滚之前其他事务访问锁定的资源,这显然很浪费。

三、三阶段协议

三阶段协议把二阶段的第一阶段在细分为2阶段,具体内容如下:

  • 第一阶段canCommit
    事务发起方发起事务后,事务协调器会给所有的事务参与者发起canCommit?的请求,参与者收到后根据自己的情况判断是否可以执行提交,如果可以则回执OK,否者返回fail,并不开启本地事务并执行。具体参与者是如何判断本地是否可以执行提交协议并没有具体规定,需要协议实现者自己规定,比如可能判断参与者是否存在(网络是否OK)或者本地数据库连接是否可用来判断(YY)。
    如果协调器发现有些发起方返回fail或者等待超时后参与者还没返回则给所有事务参与者发起中断操作,具体中断操作做什么协议也没有具体规定。如果协调器发现所有参与者返回可以提交,则进入第二阶段。

  • 第二阶段preCommit
    事务协调器向所有参与者发起准备事务请求,参与者接受到后,开启本地事务并执行,但是不提交。剩下的与二阶段的一阶段一致。

  • 第三阶段doCommit
    与二阶段中的二阶段一致。

四、总结

三阶段与二阶段最大不同在于三阶段协议把二阶段的第一阶段拆分为了两个阶段,其中第一阶段并不锁定资源,而是询问参与者是否可以提交,等所有参与者回复OK后在具体执行第二阶段锁定资源。理论上如果第一阶段返回都OK,则第二阶段和三阶段执行成功的概率就很大,另外如果第一阶段有些参与者返回了fail,由于这时候其他参与者还没有锁定资源,所以不会造成资源的阻塞。

最后

想了解JDK NIO和更多Netty基础的可以单击我

想了解更多关于粘包半包问题单击我
更多关于分布式系统中服务降级策略的知识可以单击 单击我
想系统学dubbo的单击我
想学并发的童鞋可以 单击我

相关文章

  • 分布式事务

    目录 简介 单一分布式事务与嵌套分布式事务 原子提交协议两阶段提交协议嵌套事务的两阶段提交协议 分布式事务的并发控...

  • 分布式事务

    对分布式事务及两阶段提交、三阶段提交的理解 关于分布式事务、两阶段提交协议、三阶提交协议

  • 分布式事务

    本地事务 分布式事务 分布式事务模型 XA 优点:对应用侵入很小,用户可以像使用本地事务一样使用基于XA协议的分布...

  • 分布式事务(2)-两阶段提交协议

    分布式事务(2)-两阶段提交协议 两阶段协议(通常用来实现分布式事务)。有两类节点:一类是协调者,一类是事务参与者...

  • 浅谈大规模分布式系统中那些技术点

    分布式事务 分布式系统的特性 分布式事务的基本介绍 常用的分布式技术说明 理解2PC和3PC协议 「点击阅读」 分...

  • MySQL 中基于 XA 实现的分布式事务

    五、MySQL 中基于 XA 实现的分布式事务 5.1 XA协议 首先我们来简要看下分布式事务处理的XA规范 可知...

  • 2020-08-31:柔性事务是什么,分布式环境下为何要放弃传统

    前言 每日一题专栏 柔性事务是什么,分布式环境下为何要放弃传统事务? XA协议能搞定两个数据库的事务(分布式标准事...

  • 分布式事务:Saga - 数据一致性

    分布式事务实现方式 主要有二阶提交协议(Two Phase Commitment Protocol)、三阶提交协议...

  • 分布式事务:2PC、3PC协议

    两阶段提交协议-2PC 两阶段提交协议(2PC):是一种原子承诺协议,一种分布式算法,它协调参与分布式事务的所有应...

  • 事务的原理和分类

    一、事务的三种基本类型 1.1基于XA协议的两阶段提交 XA是一个分布式事务协议,由Tuxedo提出。XA中大致分...

网友评论

    本文标题:分布式事务- 三阶段协议

    本文链接:https://www.haomeiwen.com/subject/dtwkyftx.html