📜  分布式DBMS-提交协议

📅  最后修改于: 2021-01-07 05:31:57             🧑  作者: Mango


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

不同的分布式提交协议是-

  • 一阶段提交
  • 两阶段提交
  • 三相提交

分布式一阶段提交

分布式一阶段提交是最简单的提交协议。让我们考虑一个执行交易的控制站点和许多从站点。分布式提交的步骤是-

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

  • 从站等待来自控制站点的“提交”或“中止”消息。这个等待时间称为漏洞窗口

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

  • 接收到此消息后,从站将提交或中止,然后将确认消息发送到控制站点。

分布式两阶段提交

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

阶段1:准备阶段

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

  • 奴隶投票决定他们是否仍然要承诺。如果从站想要提交,它将发送“ Ready”消息。

  • 不想提交的从站发送“未就绪”消息。当从站的并发事务冲突或超时时,可能会发生这种情况。

阶段2:提交/中止阶段

  • 在控制站点从所有从站接收到“就绪”消息后,-

    • 控制站点向从站发送“全局提交”消息。

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

    • 当控制站点从所有从站接收到“ Commit ACK”消息时,它会将事务视为已提交。

  • 在控制站点从任何从站收到第一条“未就绪”消息后,-

    • 控制站点向从站发送“全局中止”消息。

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

    • 当控制站点从所有从站接收到“中止ACK”消息时,它会将事务视为中止。

分布式三相提交

分布式三相提交的步骤如下-

阶段1:准备阶段

步骤与分布式两阶段提交中的步骤相同。

阶段2:准备提交阶段

  • 控制站点发出“进入准备状态”广播消息。
  • 从站对此投票“ OK”。

阶段3:提交/中止阶段

步骤与两阶段提交相同,除了不需要“ Commit ACK” /“ Abort ACK”消息。