分布式数据库管理系统 - 提交协议



在本地数据库系统中,为了提交事务,事务管理器只需要将提交决定传达给恢复管理器。然而,在分布式系统中,事务管理器应将提交决定传达给各个站点上执行该事务的所有服务器,并统一执行该决定。当每个站点的处理完成后,它将进入部分提交事务状态,并等待所有其他事务达到其部分提交状态。当它收到所有站点已准备好提交的消息后,它开始提交。在分布式系统中,要么所有站点都提交,要么都不提交。

不同的分布式提交协议包括:

  • 一阶段提交
  • 二阶段提交
  • 三阶段提交

分布式一阶段提交

分布式一阶段提交是最简单的提交协议。假设存在一个控制站点和多个执行事务的从属站点。分布式提交的步骤如下:

  • 每个从属站点在本地完成其事务后,向控制站点发送“DONE”消息。

  • 从属站点等待来自控制站点的“Commit”或“Abort”消息。这段等待时间称为**漏洞窗口**。

  • 当控制站点从每个从属站点收到“DONE”消息后,它决定提交或中止。这称为提交点。然后,它将此消息发送给所有从属站点。

  • 收到此消息后,从属站点要么提交要么中止,然后向控制站点发送确认消息。

分布式二阶段提交

分布式二阶段提交减少了一阶段提交协议的漏洞。两个阶段执行的步骤如下:

第一阶段:准备阶段

  • 每个从属站点在本地完成其事务后,向控制站点发送“DONE”消息。当控制站点从所有从属站点收到“DONE”消息后,它向从属站点发送“Prepare”消息。

  • 从属站点投票决定是否仍然要提交。如果从属站点想要提交,则发送“Ready”消息。

  • 不想提交的从属站点发送“Not Ready”消息。这可能发生在从属站点存在冲突的并发事务或超时的情况下。

第二阶段:提交/中止阶段

  • 控制站点收到所有从属站点的“Ready”消息后:

    • 控制站点向从属站点发送“Global Commit”消息。

    • 从属站点应用事务并向控制站点发送“Commit ACK”消息。

    • 当控制站点从所有从属站点收到“Commit ACK”消息后,它认为事务已提交。

  • 控制站点收到任何从属站点的第一个“Not Ready”消息后:

    • 控制站点向从属站点发送“Global Abort”消息。

    • 从属站点中止事务并向控制站点发送“Abort ACK”消息。

    • 当控制站点从所有从属站点收到“Abort ACK”消息后,它认为事务已中止。

分布式三阶段提交

分布式三阶段提交的步骤如下:

第一阶段:准备阶段

步骤与分布式二阶段提交相同。

第二阶段:准备提交阶段

  • 控制站点发出“进入准备状态”广播消息。
  • 从属站点响应“OK”。

第三阶段:提交/中止阶段

步骤与二阶段提交相同,只是不需要“Commit ACK”/“Abort ACK”消息。

广告