在分布式系統中,每乙個機器節點雖然都能夠明確地知道自己在進行事務操作過程中的結果是成功或失敗,但卻無也直接獲取到其他分布式節點的操作結果。因此,當乙個事務操作需要跨越多個分布式節點的時候,為了保持事務處理的acid特性, 就需要引人乙個稱為」協調者」的元件來統一排程所有分布式節點的執行邏輯,這些被排程的分布式節點被稱為」參與者」。協調者負責排程參與者的行為,井最終決定這些參與者是否要把事務真正進行提交。基於這個思想,衍生出了二階段提交和三階段提交兩種協議。
階段一: 提交事務請求:
1. 事務詢問:
協調者向所有的參與者傳送事務內容,井開始等待各參與者的響應。
2. 執行事務:
各參與者節點執行事務操作,並將undo 和redo 資訊記入事務日誌中。
3 . 各參與者向協調者反饋事務詢問的響應:
如果參與者成功執行了事務操作, 那麼就反饋給協調者yes響應,表示事務可以執行。如果參與者沒有成功執行事務,那麼就反饋給協調者no響應,表示事務不可以執行。
階段二:執行事務提交/回滾
執行事務提交
1.執行事務提交:
假如協調者從所有的參與者獲得的反饋都是yes響應,那麼就會執行事務提交。協調者向所有參與者節點發出commit請求。
2. 事務提交:
參與者接收到commit請求後,會正式執行事務提交操作,並在完成提交之後釋放在整個事務執行期間占用的事務資源。
3. 反饋事務提交結果:
參與者在完成事務提交之後,向協調者傳送ack訊息。
4. 完成事務:
協調者接收到所有參與者反饋的ack訊息後,完成事務。
執行事務回滾
假如任何乙個參與者向協調者反饋了no響應,或者在等待超時之後,協調者尚無法接收到所有參與者的反饋響應,那麼就會中斷事務。
1. 傳送回滾請求:
協調者向所有參與者節點發出rollback請求。
2. 事務回滾:
參與者接收到rollback請求後,會利用其在階段一中記錄的undo資訊來執行事務回滾操作,井在完成回滾之後釋放在整個事務執行期間占用的資源。
3. 反饋事務回液結果:
參與者在完成事務回滾之後,向協調者傳送ack訊息。
4. 中斷事務:
協調者接收到所有參與者反饋的ack訊息後,完成事務中斷。
二階段提交協議的優點: 原理簡單,實現方便。
二階段提交協議的缺點:同步阻塞、單點問題、腦裂、太過保守。
同步阻塞
在二階段提交的執行過程中,所有參與該事務操作的邏輯都處於阻塞狀態, 即各個參與者在等待其他參與者響應的過程中,將無法進行其他任何操作。
單點問題
協調者的角色在整個二階段提交協議中起到了非常重要的作用。一且協調者出現問題,那麼整個二階段提交流程將無法運轉,更為嚴重的是,如果協調者是在階段二中出現問題的話,那麼其他參與者將會一直處於鎖定事務資源的狀態中,而無法繼續完成事務操作。
資料不一致
當協調者向所有的參與者傳送commit請求之後,發生了區域性網路異常或者是協調者在尚未傳送完commit請求之前自身發生了崩憤,導致最終只有部分參與者收到了commit 請求。於是,這部分收到了commit 請求的參與者就會進行事務的提交,而其他沒有收到commit請求的參與者則無怯進行事務提交,於是整個分布式系統便出現了資料不一致性現象。
太過保守
如果在協調者指示參與者進行事務提交詢問的過程中,參與者出現故障而導致協調者始終無法獲取到所有參與者的響應資訊的話,這時協調者只能依靠其自身的超時
機制來判斷是否需要中斷事務,這樣的策略顯得比較保守。
一致性協議
節點在進行事務處理過程中保持原子性和一致性而設計的一種演算法。1.事務詢問。2.執行事務。3.各參與者向協調者反饋事務詢問的響應。理解 類似協調者組織各參與者對一次事務操作進行投票表態的過程。假如參與者全部反饋yes 1.傳送提交請求 2.事務提交 3.反饋事務提交結果 4.完成事務。假如任何乙個參...
一致性協議
在分布式系統中,當乙個事務操作需要跨越多個分布式節點的時候,為了保持事務acid的特徵,就需要引入乙個稱為 協調者 coordinator 的元件來統一排程所有分布式節點的執行邏輯,這些被排程的節點則稱為 參與者 participant 協調者負責參與者的行為,並最終決定這些參與者是否要把事務真正提...
一致性協議
從這週開始深入學習zookeeper,主要是看paxos到zookeeper分布式一致性理論與實踐以及zookeeper3.5的原始碼,在整個學習過程中會整理一些學習筆記。1.分布式基本概念 2.一致性協議 2pc即兩階段提交,是計算機網路尤其是在資料庫領域內,為了使基於分布式系統架構下的所有節點在...