三階段提交

三階段提交  ， 也叫三階段提交協議  ， 是在電腦網絡及數據庫的範疇下 ， 令一個分佈式系統內的所有節點能夠執行事務的提交的一種分佈式算法 。 三階段提交是爲了解決兩階段提交協議的缺點而設計的 。 與兩階段提交不同的是 ， 三階段提交是一種 “ 非阻塞 ” 的協議 。 三階段提交在兩階段提交的第一階段與第二階段之間插入了一個準備階段 ， 令原先在兩階段提交中 ， 參與者在投票之後 ， 由於協調者發生崩潰或錯誤 ， 而導致參與者處於無法知曉是否提交或者中止的 “ 不確定狀態 ” 所產生的可能相當長的延時的問題得以解決 。 舉例來說 ， 假設有一個決策小組由一個主持人負責與多位組員以電話聯絡方式協調是否通過一個提案 ， 以兩階段提交來說 ， 主持人收到一個提案請求 ， 打電話跟每個組員詢問是否通過並統計回覆 ， 然後將最後決定打電話通知各組員 。 要是主持人在跟第一位組員通完電話後失憶 ， 而第一位組員在得知結果並執行後老人癡呆 ， 那麼即使重新選出主持人 ， 也沒人知道最後的提案決定是什麼 ， 也許是通過 ， 也許是駁回 ， 不管大家選擇哪一種決定 ， 都有可能與第一位組員已執行過的真實決定不一致 ， 老闆就會認爲決策小組溝通有問題而解僱 。 三階段提交即是引入了另一個步驟 ， 主持人打電話跟組員通知請準備通過提案 ， 以避免沒人知道真實決定而造成決定不一致的失業危機 。 而三階段提交爲什麼能夠解決二階段提交的問題呢 ？ 回到剛剛提到的狀況 ， 在主持人通知完第一位組員請準備通過後兩人意外失憶 ， 即使沒人知道全體在第一階段的決定爲何 ， 全體決策組員仍可以重新協調過程或直接否決 ， 不會因出現不一致決定而失業 。 那麼當主持人通知完全體組員請準備通過並得到大家的再次確定後進入第三階段 ， 當主持人通知第一位組員請通過提案後兩人意外失憶 ， 這時候其他組員再重新選出主持人後 ， 仍可以知道目前至少是處於準備通過提案階段 ， 表示第一階段大家都已經決定要通過了 ， 此時便可以直接通過 。