三阶段提交 (3PC) 协议是两阶段提交 (2PC) 协议的扩展,可避免某些假设下的阻塞问题。特别地,假设没有发生网络分区,并且不超过 k 个站点发生故障,其中我们假设“k”是预先确定的数字。根据上述假设,协议通过引入额外的第三阶段来避免阻塞,其中多个站点参与提交的决定。
协调器不是直接在其持久存储中记录提交决定,而是首先确保至少“k”个其他站点知道它打算提交事务。
在协调器出现故障的情况下,剩余站点必须首先选择新的协调器。这个新的协调器从剩余的站点检查协议的状态。如果协调器已决定提交,则它通知的其他“k”个站点中的至少一个将启动并确保提交决定得到尊重。如果任何休息站点知道旧协调器打算提交事务,新协调器将重新启动协议的第三阶段。否则,新协调器将中止事务。
三阶段提交协议的缺点:
虽然 3PC 协议具有不阻塞的期望特性,除非“k”个站点失败,但它的缺点是网络分区可能看起来与多个“k”个站点失败相同,这将导致阻塞。该协议还必须谨慎实施,以确保网络分区不会导致不一致,即事务在一个分区中提交而在另一个分区中止。由于其开销,3PC 协议并未被广泛使用。
三相控制协议和两相控制协议的区别可以通过下图来理解。
传播阶段:
上面介绍的内容可以帮助用户处理提交阶段参与者失败或协调器和参与者节点都失败的情况。
恢复协调器在前两阶段提交协议的第 2 阶段协调器故障后接管时,新的附加阶段如下所示。
笔记 –
在查询参与者时,如果它了解到某些节点处于提交阶段,则它假定崩溃前的前一个协调器已做出提交决定。
因此,它可以引导协议进行提交。类似地,如果参与者响应说它没有收到准备提交,那么新协调器可以假设前一个协调器甚至在它开始准备提交阶段之前就失败了。因此,它可以安全地假设没有其他参与者会提交任何更改,因此它现在可以安全地中止事务。