為了使系統盡量能夠達到 cap,於是有了 base 協議,而 base 協議是在可用性和一致性之間做的取捨和妥協。
人們往往需要在系統的可用性和資料一致性之間反覆的權衡。於是呢,就產生我們標題中的一致性協議,而且還不止乙個呢。
為了解決分布式問題,湧現了很多經典的演算法和協議,最著名的就是二階段提交協議,三階段提交協議,paxos 演算法。
本文重點介紹二階段提交協議,簡稱 2pc。
在分布式系統中,會有多個機器節點,因此需要乙個 「協調者」 ,而各個節點就是 「參與者」,協調者統一排程所有分布式節點的執行邏輯,這些被排程的分布式節點就是 「參與者」。
協調者最終決定這些參與者是否要把事務真正進行提交。正式基於這個思想,有了二階段提交和 三階段提交。
2pc ,不是 2 個 pc 機的意思,而是 two-phase commit 。可以認為是一種演算法,也可以認為是一種協議,主要目的就是為了保證分布式系統資料的一致性。
協議說明:顧名思義,二階段提交就是講事務的提交過程分成了兩個階段來進行處理。流程如下:
1. 事務詢問
協調者向所有的參與者詢問,是否準備好了執行事務,並開始等待各參與者的響應。
2. 執行事務
各參與者節點執行事務操作,並將 undo 和 redo 資訊記入事務日誌中
3. 各參與者向協調者反饋事務詢問的響應
如果參與者成功執行了事務操作,那麼就反饋給協調者 yes 響應,表示事務可以執行;如果參與者沒有成功執行事務,就返回 no 給協調者,表示事務不可以執行。
從上面可以感覺到,這個乙個 所謂的 「投票階段」,什麼意思呢?所有的節點都投票決定是否執行事務操作。
在階段二中,會根據階段一的投票結果執行 2 種操作:執行事務提交,中斷事務。
執行事務提交步驟如下:
傳送提交請求:協調者向所有參與者發出 commit 請求。
事務提交:參與者收到 commit 請求後,會正式執行事務提交操作,並在完成提交之後釋放整個事務執行期間占用的事務資源。
反饋事務提交結果:參與者在完成事務提交之後,向協調者傳送 ack 資訊。
協調者接收到所有參與者反饋的 ack 資訊後,完成事務。
中斷事務步驟如下:
傳送回滾請求:協調者向所有參與者發出 rollback 請求。
事務回滾:參與者接收到 rollback 請求後,會利用其在階段一種記錄的 undo 資訊來執行事務回滾操作,並在完成回滾之後釋放在整個事務執行期間占用的資源。
反饋事務回滾結果:參與者在完成事務回滾之後,想協調者傳送 ack 資訊。
中斷事務:協調者接收到所有參與者反饋的 ack 資訊後,完成事務中斷。
從上面的邏輯可以看出,二階段提交就做了2個事情:投票,執行。
核心是對每個事務都採用先嘗試後提交的處理方式,因此也可以將二階段提交看成乙個強一致性的演算法。整個事務的執行過程如圖(可能不是太直觀。。。。)
優點:原理簡單,實現方便
缺點:同步阻塞,單點問題,資料不一致,過於保守
同步阻塞:
在二階段提交的過程中,所有的節點都在等待其他節點的響應,無法進行其他操作。這種同步阻塞極大的限制了分布式系統的效能。
單點問題:
協調者在整個二階段提交過程中很重要,如果協調者在提交階段出現問題,那麼整個流程將無法運轉,更重要的是:其他參與者將會處於一直鎖定事務資源的狀態中,而無法繼續完成事務操作。
資料不一致:
假設當協調者向所有的參與者傳送 commti 請求之後,發生了區域性網路異常或者是協調者在尚未傳送完所有 commit 請求之前自身發生了崩潰,導致最終只有部分參與者收到了 commit 請求。這將導致嚴重的資料不一致問題。
過於保守:
如果在二階段提交的提交詢問階段中,參與者出現故障而導致協調者始終無法獲取到所有參與者的響應資訊的化,這時協調者只能依靠其自身的超時機制來判斷是否需要中斷事務,顯然,這種策略過於保守。換句話說,二階段提交協議沒有設計較為完善的容錯機制,任意乙個節點是失敗都會導致整個事務的失敗。
由於 base 理論需要在一致性和可用性方面做出權衡,因此湧現了很多關於一致性的演算法或者說協議,這些協議設計的目的,就是能讓分布式系統能夠在可用性和一致性之間取得乙個很好的平衡,能夠基本可用。 比如 2pc,two-phase commit,分為兩個階段提交乙個事務:投票,執行。通過協調者和各個參與者的配合,實現一致性協議。
當然,他也是有去缺點的,比如同步阻塞的時候效能較低,協調者的單點問題,網路故障可能引起的資料不一致的問題,執行策略過於保守的問題等等。
good luck!!!
分布式理論 三 2PC協議
由於base理論需要在一致性和可用性方面做出權衡,因此湧現了很多關於一致性的演算法和協議。其中比較著名的有二階提交協議 2 phase commitment protocol 三階提交協議 3 phase commitment protocol 和paxos演算法。本文要介紹的2pc協議,分為兩個階...
分布式理論(三)2PC協議
2pc two phase commit二階段提交協議 2pc是在計算機網路以及資料庫領域內,為了使基於分布式系統架構下的所有節點在進行事務的提交時,保持一致性而設計的一種演算法。通常,二階段提交也被稱為是一種協議。在分布式系統中,每個節點雖然可以知曉自己的操作是否成功,但無法知道其他節點的操作是否...
分布式事務2PC協議
two phase commit protocol 在事務處理,資料庫,計算機網路中,兩階段提交 2pc 是一種原子提交協議。它是一種分布式演算法,協調參與分布式原子事務的所有程序,決定是提交事務還是中止 回滾 事務 它是一種協商一致性協議 該協議即使在許多臨時系統故障 包括程序 網路節點 通訊等故...