分布式数据库管理系统 - 提交协议
在本地数据库系统中,为了提交事务,事务管理器只需将提交的决定传达给恢复管理器。 然而,在分布式系统中,事务管理器应该将提交决策传达给正在执行事务的各个站点中的所有服务器,并统一执行该决策。 当每个站点的处理完成时,它会达到部分提交的事务状态,并等待所有其他事务达到其部分提交的状态。 当它收到所有站点都已准备好提交的消息时,它就开始提交。 在分布式系统中,要么所有站点都提交,要么都不提交。
不同的分布式提交协议是 −
- 一阶段提交
- 两阶段提交
- 三阶段提交
分布式一阶段提交
分布式单阶段提交是最简单的提交协议。 让我们考虑有一个控制站点和许多正在执行事务的从属站点。 分布式提交的步骤是 −
每个从属设备在本地完成其事务后,会向控制站点发送一条"DONE"消息。
从站等待来自控制站点的"提交"或"中止"消息。 该等待时间称为漏洞窗口。
当控制站点收到来自每个从站的"DONE"消息时,它会做出提交或中止的决定。 这称为提交点。 然后,它将此消息发送给所有从站。
收到此消息后,从站要么提交要么中止,然后向控制站点发送一条确认消息。
分布式两阶段提交
分布式两阶段提交减少了一阶段提交协议的漏洞。 两个阶段执行的步骤如下 −
第一阶段:准备阶段
每个从站在本地完成其事务后,会向控制站点发送一条"DONE"消息。 当控制站点收到所有从站的"DONE"消息时,它会向从站发送"Prepare"消息。
奴隶们投票决定他们是否仍然愿意承诺。 如果从属设备想要提交,它会发送一条"就绪"消息。
不想提交的从站会发送"未就绪"消息。 当从站有冲突的并发事务或超时时,可能会发生这种情况。
阶段 2:提交/中止阶段
当控制站点收到所有从站的"Ready"消息后 −
控制站点向从站发送"Global Commit"消息。
从站应用事务并向控制站点发送"Commit ACK"消息。
当控制站点收到来自所有从站的"Commit ACK"消息时,它认为事务已提交。
控制站点收到来自任何从站的第一个"Not Ready"消息后 −
控制站点向从站发送"Global Abort"消息。
从站中止事务并向控制站点发送"Abort ACK"消息。
当控制站点收到来自所有从站的"Abort ACK"消息时,它认为事务已中止。
分布式三阶段提交
分布式三阶段提交的步骤如下 −
第一阶段:准备阶段
步骤与分布式两阶段提交相同。
第 2 阶段:准备提交阶段
- 控制站点发出"Enter Prepared State(进入准备状态)"广播消息。
- 从属站点投票"OK"作为回应。
阶段 3:提交/中止阶段
除了不需要"Commit ACK"/"Abort ACK"消息之外,步骤与两阶段提交相同。