分布式事务使用最多的是二阶段提交以及其变种,了解其优缺点可以帮助决定在分布式系统上是否采用事务
二阶段提交(2PC)
什么是2PC
二阶段提交本身比较简单,就是把分布式事务分成准备阶段和提交阶段两个阶段。目的很明确,就是尽可能晚地提交事务,让事务在提交前尽可能地完成所有能完成的工作,这样,最后的提交阶段将是一个耗时极短的微小操作,这种操作在一个分布式系统中失败的概率是非常小的,也就是所谓的“网络通讯危险期”非常的短暂,这是两阶段提交确保分布式事务原子性的关键所在。(唯一理论上两阶段提交出现问题的情况是当协调者发出提交指令后宕机并出现磁盘故障等永久性错误,导致事务不可追踪和恢复)。
2PC内容
协议的详细内容,网上很多,这里就给出两张图,就不做过多介绍了
2PC提交成功
2PC提交失败
缺点
同步阻塞问题这是2PC存在的最明显也是最大的一个问题。执行过程中,所有参与节点都是事务阻塞型的。当参与者占有公共资源时,其他第三方节点访问公共资源不得不处于阻塞状态。比如数据库事务使用锁实现隔离性,事务没有提交,就会一直占用锁资源,导致并发量很低,性能很差。单点故障由于协调者的重要性,一旦协调者发生故障。参与者会一直阻塞下去。尤其在提交阶段,协调者发生故障,那么所有的参与者还都处于锁定事务资源的状态中,而无法继续完成事务操作。(如果是协调者挂掉,可以重新选举一个协调者,但是无法解决因为协调者宕机导致的参与者处于阻塞状态的问题)