二阶段提交的缺点
为了解决分布式问题,为了使系统尽量能够达到 CAP,涌现了很多经典的算法和协议,最著名的就是二阶段提交协议,简称 2PC。顾名思义,二阶段提交就是将事务的提交过程分成了两个阶段来进行处理。第一阶段:准备阶段(投票阶段)和第二阶段:提交阶段(执行阶段)。流程如下:
二阶段提交的优点
优点:原理简单,实现方便。
二阶段提交的缺点
缺点:同步阻塞,单点问题,数据不一致,过于保守
(1)同步阻塞。在二阶段提交的过程中,所有的节点都在等待其他节点的响应,无法进行其他操作。这种同步阻塞极大的限制了分布式系统的性能。
(2)单点问题。协调者在整个二阶段提交过程中很重要,如果协调者在提交阶段出现问题,那么整个流程将无法运转,更重要的是:其他参与者将会处于一直锁定事务资源的状态中,而无法继续完成事务操作。
(3)数据不一致。假设当协调者向所有的参与者发送 commit请求之后,发生了局部网络异常或者是协调者在尚未发送完所有commit请求之前自身发生了崩溃,导致最终只有部分参与者收到了 commit请求,这将导致严重的数据不一致问题。
(4)过于保守。如果在二阶段提交的提交询问阶段中,参与者出现故障而导致协调者始终无法获取到所有参与者的响应信息的化,这时协调者只能依靠其自身的超时机制来判断是否需要中断事务,显然,这种策略过于保守。换句话说,二阶段提交协议没有设计较为完善的容错机制,任意一个节点是失败都会导致整个事务的失败。