📅  最后修改于: 2021-01-07 05:31:57             🧑  作者: Mango
在本地数据库系统中,对于提交事务,事务管理器只需将提交决策的决定传达给恢复管理器。但是,在分布式系统中,事务管理器应将决定提交给执行事务的各个站点中的所有服务器,并统一执行该决定。每个站点上的处理完成后,它将达到部分提交的事务状态,并等待所有其他事务到达其部分提交的状态。当它收到所有站点准备提交的消息时,它将开始提交。在分布式系统中,要么所有站点都提交,要么都不提交。
不同的分布式提交协议是-
分布式一阶段提交是最简单的提交协议。让我们考虑一个执行交易的控制站点和许多从站点。分布式提交的步骤是-
每个从站在本地完成其事务后,它将向控制站点发送“ DONE”消息。
从站等待来自控制站点的“提交”或“中止”消息。这个等待时间称为漏洞窗口。
当控制站点从每个从站接收到“ DONE”消息时,它会决定要提交还是中止。这称为提交点。然后,它将此消息发送给所有从站。
接收到此消息后,从站将提交或中止,然后将确认消息发送到控制站点。
分布式两阶段提交减少了一阶段提交协议的漏洞。这两个阶段执行的步骤如下-
阶段1:准备阶段
每个从站在本地完成其事务后,它将向控制站点发送“ DONE”消息。当控制站点从所有从站接收到“ DONE”消息时,它会向从站发送“ Prepare”消息。
奴隶投票决定他们是否仍然要承诺。如果从站想要提交,它将发送“ Ready”消息。
不想提交的从站发送“未就绪”消息。当从站的并发事务冲突或超时时,可能会发生这种情况。
阶段2:提交/中止阶段
在控制站点从所有从站接收到“就绪”消息后,-
控制站点向从站发送“全局提交”消息。
从机应用事务并向控制站点发送“ Commit ACK”消息。
当控制站点从所有从站接收到“ Commit ACK”消息时,它会将事务视为已提交。
在控制站点从任何从站收到第一条“未就绪”消息后,-
控制站点向从站发送“全局中止”消息。
从站中止事务,并向控制站点发送“中止ACK”消息。
当控制站点从所有从站接收到“中止ACK”消息时,它会将事务视为中止。
分布式三相提交的步骤如下-
阶段1:准备阶段
步骤与分布式两阶段提交中的步骤相同。
阶段2:准备提交阶段
阶段3:提交/中止阶段
步骤与两阶段提交相同,除了不需要“ Commit ACK” /“ Abort ACK”消息。