三阶段提交

维基百科,自由的百科全书
跳转至: 导航搜索

三阶段提交英语:Three-phase commit),也叫三阶段提交协议英语:Three-phase commit protocol),是在计算机网络及数据库的范畴下,使得一个分布式系统内的所有节点能够执行事务的提交的一种分布式算法。三阶段提交是为解决两阶段提交协议的缺点而设计的。

与两阶段提交不同的是,三阶段提交是“非阻塞”协议。三阶段提交在两阶段提交的第一阶段与第二阶段之间插入了一个准备阶段,使得原先在两阶段提交中,参与者在投票之后,由于协调者发生崩溃或错误,而导致参与者处于无法知晓是否提交或者中止的“不确定状态”所产生的可能相当长的延时的问题[1]得以解决。 舉例來說,假設有一個決策小組由一個主持人負責與多位組員以電話聯絡方式協調是否通過一個提案,以兩階段提交來說,主持人收到一個提案請求,打電話跟每個組員詢問是否通過並統計回覆,然後將最後決定打電話通知各組員。要是主持人在跟第一位組員通完電話後失憶,而第一位組員在得知結果並執行後老人痴呆,那麼即使重新選出主持人,也沒人知道最後的提案決定是什麼,也許是通過,也許是駁回,不管大家選擇哪一種決定,都有可能與第一位組員已執行過的真實決定不一致,老闆就會不開心認為決策小組溝通有問題而解雇。三階段提交即是引入了另一個步驟,主持人打電話跟組員通知請準備通過提案,以避免沒人知道真實決定而造成決定不一致的失業危機。為什麼能夠解決二階段提交的問題呢?回到剛剛提到的狀況,在主持人通知完第一位組員請準備通過後兩人意外失憶,即使沒人知道全體在第一階段的決定為何,全體決策組員仍可以重新協調過程或直接否決,不會有不一致決定而失業。那麼當主持人通知完全體組員請準備通過並得到大家的再次確定後進入第三階段,當主持人通知第一位組員請通過提案後兩人意外失憶,這時候其他組員再重新選出主持人後,仍可以知道目前至少是處於準備通過提案階段,表示第一階段大家都已經決定要通過了,此時便可以直接通過。

算法原理[编辑]

同两阶段提交协议一样,在说明协议原理时,通常了为了简化模型,以一个协调者和一个参与者的模型来说明其原理。图片参考条目英文版: https://en.wikipedia.org/wiki/File:Three-phase_commit_diagram.png#mediaviewer/File:Three-phase_commit_diagram.png

参考资料[编辑]

  1. ^ Distributed Systems: Concepts and Design, G. Coulouris, J, Dollimore, Tim K., Gordon Blair, Fifth edition, Pearson, 2012