三階段提交

三階段提交

三階段提交,也叫三階段提交協定,是在計算機網路及資料庫的範疇下,使得一個分散式系統內的所有節點能夠執行事務的提交的一種分散式算法。三階段提交是為解決兩階段提交協定的缺點而設計的。

簡述

兩階段提交協定(2PC)既簡單又精巧,它把本地原子性提交行為的效果擴展到分散式事務,保證了分散式事務提交的原子性,並在不損壞日誌的情況下,實現快速故障恢復,提高分散式資料庫系統的可靠性。但是在最壞的情況下,兩階段提交協定在執行過程中可能出現任意多次伺服器和通信故障。儘管協定不可能指定協定完成的時間限制,但它能夠處理連續故障(伺服器崩潰或訊息丟失),並保證最終完成。

對於前面提到的逾時問題,兩階段提交協定可能造成參與者很長時間停留在不確定狀態上。這些延遲主要源於協調者故障或者不能從參與者那裡得到getDecision請求的回答。即使協作協定允許參與者可以向其他參與者傳送getDecision請求,但是當所有參與者都處於不確定狀態時,延遲仍然不可避免。

2PC並不是一個無阻塞協定,有些失敗修複方式有可能能使得站點阻塞。例如,一個進程在投了“提交”票之後,在接收到全局決策之前逾時失敗了;如果這個進程所能通信到的站點對全局決策同樣一無所知,那么這個站點只好被阻塞了。實際上這種情況是相當少見的,但還是有必要引入一個更強的無阻塞協定——三段提交協定(3PC)。3PC協定在站點失敗,甚至是所有的站點都失敗的情況下也不會帶來阻塞,但是會因為通信失敗導致全局事務原子性被破壞,不同的站點收到了不同的策略。

三階段提交協定(3PC)在恢復過程中協調者場地發生故障的情況下,也能夠避免事務阻塞。這種方法的基本思想是在協調者發出prepare訊息並收到所有下屬的yes訊息時,向所有下屬傳送precommit訊息,而不是commit訊息。然後在收到足夠數目(比必須處理的最大故障數目要大)的ack訊息以後,協調者向日誌中強迫寫入commit記錄,再向所有下屬傳送commit訊息。在3PC中,協調者場地能夠有效地推遲commit決定,只有在確定所有下屬都知道commit決定以後,才真正發出commit決定。如果協調者隨後發生了故障,在協調者恢復之前,下屬場地之間就可以互相通信,確定事務是應該提交還是中止事務(如果所有下屬都沒有收到precommit訊息)。

3PC在正常執行時會增加許多額外的負載,並且為了確保不發生事務阻塞,還需要在發生傳輸故障時不會發生網路分割(部分場地不能同其他場地相連)。出於這些原因,3PC並沒有實際套用。

兩階段提交協定(2PC)

為了保持分散式事務的原子性,事務管理器使用了一個標準的兩層恢復機制,稱為兩階段提交協定(2PC)。這種兩階段提交協定可以確保事務的更新可以提交給所有參與的資源,或者確保更新完全回滾到所有的資源外,資源恢復到事務開始前的狀態。通過這種方式,提交協定就可以保證數據的完整性。

兩段提交協定把一個分布事務的所有分布管理分為兩類:一個是協調者,所有其他的是參與者。協調者作出該事務是提交還是撤消的最後決定。所有的參與者負責管理相應的子事務的執行及各自局部資料庫上執行寫操作。

兩段提交協定的內容是:

表決階段:協調者向所有參與者發出“準備提交”信息。如果某個參與者準備提交,就回答就緒信息,否則回答撤消信息。參與者在回答前應把有關信息寫入自己的日誌中。協調者在發出準備提交信息前也要把有關信息寫入自己的日誌中。

如果在規定時間內協調者收到所有參與者的就緒信息,就作出提交的決定,否則作出撤消的決定。

執行階段:協調者將有關決定的信息先寫入日誌,然後把這個決定發給所有的參與者。所有的參與者收到命令以後首先往自己的日誌中寫入收到提交(或撤消)決定的信息,並向協調者傳送應答信息,最後執行有關決定。協調者收到所有參與者的應答信息後,一個事務執行到此結束。有關日誌信息可以脫機保存。

採用兩段提交協定以後,當系統發生故障時,各場地利用各自有關的日誌信息(必要是加上後備副本)便可以執行恢復操作。

三階段提交協定內容

圖1 三階段提交協定 圖1 三階段提交協定

3PC包括三段:決定段、準備提交段和執行段。其具體過程如圖1所示。

(1)第一段——決定段

◆協調者向所有參與者發出準備訊息(prepare)(同2PC)。

◆若任一參與者回答中止Abort訊息,則進入第三段(執行段),協調者發出反轉Rollback命令。

若所有參與者都回答Vote-Commit訊息,則進入第二段(準備提交段)。

(2)第二段——準備提交段

◆由協調者發準備提交訊息(Prepare to Commit)。

◆參與者收到該訊息後寫入運行記錄(Log record)中,並回答確認訊息ACK。

(3)第三段——執行段

◆協調者根據參與者回答的ACK/Abort訊息,向參與者發Commit/Rollback命令。

◆參與者根據協調者的命令決定執行提交或回滾,完成事務的處理。

三階段提交協定特點

一、優點

三段提交協定的優點:能避免阻塞狀態,在三段提交協定中,如果協調者在第二段之後失效,不會產生像2PC協定中可能出現的事務阻塞現象。因為下面兩種狀態至少存在一種:

1、所有參與者都進入Prepare to Commit狀態,事務可以安全地提交。因為所有參與者都回答了ACK確認訊息。

2、至少有一個參與者未進入Prepare to Commit狀態,事務可以安全回滾。因為至少有一個參與者未回答ACK確認訊息,則協調者也不會發出Globle-Commit命令。

二、缺點

三段提交協定缺點:雖能避免阻塞狀態,但需要更多的通訊次數,實現比較複雜。因此實際套用較少。大多數使用一致性提交協定的系統都採用二階段提交協定。

相關詞條

熱門詞條

聯絡我們