分散式資料庫管理系統 - 提交協議



在本地資料庫系統中,為了提交事務,事務管理器只需要將提交決定傳達給恢復管理器。然而,在分散式系統中,事務管理器應將提交決定傳達給各個站點上執行該事務的所有伺服器,並統一執行該決定。當每個站點的處理完成後,它將進入部分提交事務狀態,並等待所有其他事務達到其部分提交狀態。當它收到所有站點已準備好提交的訊息後,它開始提交。在分散式系統中,要麼所有站點都提交,要麼都不提交。

不同的分散式提交協議包括:

  • 一階段提交
  • 二階段提交
  • 三階段提交

分散式一階段提交

分散式一階段提交是最簡單的提交協議。假設存在一個控制站點和多個執行事務的從屬站點。分散式提交的步驟如下:

  • 每個從屬站點在本地完成其事務後,向控制站點發送“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”訊息。

廣告