📜  三相提交协议

📅  最后修改于: 2021-08-25 10:26:47             🧑  作者: Mango

三相提交(3PC)协议是两阶段提交(2PC)协议的扩展,可以避免在某些假设下出现阻塞问题。特别是,假设没有网络分区发生,并且不超过k个站点发生故障,我们假定“ k”是预定数目。根据上述假设,协议通过引入额外的第三阶段来避免阻塞,在该阶段中,多个站点参与提交决定。

协调器首先确保至少“ k”个其他站点知道它打算提交事务,而不是直接在其持久性存储中注明提交决定。

在协调器发生故障的情况下,其余站点必须先选择新的协调器。这个新的协调员从其余站点检查协议的状态。如果协调员决定提交,则通知它的其他“ k”站点中的至少一个将启动,并确保遵守提交决定。如果其余站点中的任何一个知道旧协调器打算提交事务,则新协调器将重新启动协议的第三阶段。否则,新协调器将中止事务。

三相提交协议的缺点:
尽管3PC协议具有除非’k’个站点发生故障才不会阻塞的期望属性,但它的缺点是网络分区可能看起来与’k’个站点发生故障的情况相同,这将导致阻塞。还必须仔细实施该协议,以确保网络分区不会导致不一致,因为事务在一个分区中提交而在另一个分区中止。由于其开销,3PC协议并未得到广泛使用。

通过以下附图可以了解三相控制协议和两相控制协议之间的区别。

图1此图表示两阶段提交协议

图2此图表示三相控制协议

传播阶段:
上面介绍的内容可以帮助用户处理情况,例如在提交阶段参与者失败或协调者节点和参与者节点都失败。

当恢复协调器在先前的两阶段提交协议的阶段2期间协调器发生故障后接手时,新的附加阶段将派上用场,如下所示。

笔记 –
在查询参与者时,如果得知某些节点处于提交阶段,则假定崩溃之前的前一个协调者已决定提交。
因此,它可以确保协议的提交。同样,如果参与者回应说它没有收到准备提交的通知,那么新的协调员甚至可以假设以前的协调员在开始准备提交阶段之前就失败了。因此,它可以安全地假定没有其他参与者会进行任何更改,因此现在可以安全地中止该事务。