美文网首页
分布式事务之两阶段提交

分布式事务之两阶段提交

作者: 简小码 | 来源:发表于2017-07-04 15:55 被阅读0次

分布式事务是指会涉及到操作多个数据库的事务。其实就是将对同一库事务的概念扩大到了对多个库的事务。目的是为了保证分布式系统中的数据一致性。分布式事务处理的关键是必须有一种方法可以知道事务在任何地方所做的所有动作,提交或回滚事务的决定必须产生统一的结果(全部提交或全部回滚)

分布式事务由于要通过网络操作数据库,存在着延时变大的问题,TPS (transaction per second)会显著下降,可能不到原来一半,所以在高并发的系统中一般不使用分布式事务,而使用最终一致性。

但了解一下分布式事务也是有好处的,提到分布式事务,就不得不提两阶段提交协议。

两阶段提交协议主要分为准备阶段提交阶段

准备阶段
协调者向每个参与者发送prepare消息,参与者在本地执行事务但不提交,如果事务执行成功则返回“同意”,否则返回“终止”。

提交阶段
如果协调者收到了参与者的失败消息或者超时,直接给每个参与者发送回滚(Rollback)消息;否则,发送提交(Commit)消息;参与者根据协调者的指令执行提交或者回滚操作,释放所有事务处理过程中使用的锁资源。(注意:必须在最后阶段释放锁资源)

全部同意 部分同意

两阶段提交的缺点:

1 同步阻塞问题。执行过程中,所有参与节点都是事务阻塞型的。当参与者占有公共资源时,其他第三方节点访问公共资源不得不处于阻塞状态。

2 单点故障。由于协调者的重要性,一旦协调者发生故障。参与者会一直阻塞下去。尤其在第二阶段,协调者发生故障,那么所有的参与者还都处于锁定事务资源的状态中,而无法继续完成事务操作。(如果是协调者挂掉,可以重新选举一个协调者,但是无法解决因为协调者宕机导致的参与者处于阻塞状态的问题)

3 数据不一致。在二阶段提交的阶段二中,当协调者向参与者发送commit请求之后,发生了局部网络异常或者在发送commit请求过程中协调者发生了故障,这回导致只有一部分参与者接受到了commit请求。而在这部分参与者接到commit请求之后就会执行commit操作。但是其他部分未接到commit请求的机器则无法执行事务提交。于是整个分布式系统便出现了数据部一致性的现象。

4 二阶段无法解决的问题:协调者再发出commit消息之后宕机,而唯一接收到这条消息的参与者同时也宕机了。那么即使协调者通过选举协议产生了新的协调者,这条事务的状态也是不确定的,没人知道事务是否被已经提交。

Reference:
关于分布式事务、两阶段提交协议、三阶提交协议

相关文章

  • 分布式事务

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

  • 分布式事务

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

  • 分布式事务

    XA分布式事务协议 - 两阶段提交 & 三阶段提交 两阶段提交 两阶段提交存在的缺点 三阶段提交

  • 分布式事务的实现方式

    1、二阶段提交(2PC) 二阶段提交(2PC)是分布式事务中最强大的事务类型之一,二阶段提交就是分两个阶段提交,第...

  • 分布式事务解决方案——2PC

    分布式事务解决方案 2PC即两阶段提交协议,是将整个事务流程分为两个阶段,P是指准备阶段,C是指提交阶段。 1. ...

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

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

  • 分布式事务理论研究

    1 传统的分布式事务 基于数据库支持的xa两阶段提交事务 缺点 : 1性能差,再xa 两阶段提交锁一直占有,...

  • 分布式事务

    1、分布式事务 目前分布式事务的解决方案有 AT、TCC、Saga、MQ、XA、BED 六种。 1.1 两阶段提交...

  • python面试学习路线-8.分布式高并发

    8.分布式高并发 1.分布式 1.分布式事务框架TX-LCN 分布式事务的两阶段提交策略 首先事务管理器通知各个数...

  • 分布式事务实现的几种方案

    参考[Java复习] 分布式事务 Part 2java分布式事务,及解决方案 1.两阶段提交方案/XA方案   这...

网友评论

      本文标题:分布式事务之两阶段提交

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