Zookeeper的底層演算法機制 上

2021-09-19 01:40:20 字數 2116 閱讀 4508

1.關於分布式環境下資料一致性問題

​ 對於在分布式環境下的資料一致性問題,主要目的是確保分布式環境下每個節點的資料的一致性,如果在某個節點上資料進行更新後,兒其他的節點或某幾個節點的資料沒有進行更新,那麼就會造成髒資料的問題,這個就是在分布式環境下的資料的一致性問題。

​ 那麼為了解決分布式環境下的資料一致性的問題,產生了二階段提交演算法、paxos演算法等保證資料的一致性。

2.二階段提交演算法

​ 二階段提交演算法的簡稱是2pc(two phase commit),是計算機網路尤其是在資料庫領域內,為了使基於分布式系統架構下的所有節點在進行事務處理過程中能夠保持原子性和一致性而設計的一種演算法。通常,二階段提交協議也被認為是一種一致性協議,用來保證分布式系統資料的一致性。目前,絕大部分的關係型資料庫都是採用二階段提交協議來完成分布式事務處理的,利用該協議能夠非常方便地完成所有分布式事務參與者的協調,統一決定事務的提交或回滾,從而能夠有效地保證分布式資料一致性,因此二階段提交協議被廣泛地應用在許多分布式系統中。

2.1二階段協議的提交過程

階段一:提交事務請求+執行事務

a.事務詢問

協調者向所有參與者傳送事務內容,詢問各個參與者是否可以執行事務提交操作,並且等待各個事務參與者的響應

b.執行事務

各個參與者執行事務操作,並將事務操作記入事務日誌中

c.各個參與者向協調者反饋事務詢問的響應

在此過程中,如果參與者向協調者反饋了yes響應,則表示事務可以執行。如果參與者向協調者反饋了no響應,表示事務不可執行。因此二階段提交演算法階段一是協調者組織參與者參加了一次執行事務的投票,因此階段一也可以稱為"投票階段"。

​ 階段二:事務提交

在階段二中,協調者會根據參與者的反饋情況來決定最終是否可以進行事務提交操作,正常情況下,包含以下兩種可能。

執行事務提交

加入所有參與者向協調者反饋的都是ack的yes響應,那麼就會執行事務提交。

1.傳送提交請求

協調者向所有參與者節點傳送commit請求

2.事務提交

參與者接收到commit請求後,會正式執行事務提交操作。並在提交完成之後釋放整個事務執行期間占用的事務資源。

3.反饋事務的提交結果

參與者在完成事務提交之後,向協調者傳送ack確認訊息

4.事務完成

協調者接收到所有的參與者的ack訊息,完成事務提交

事務中斷

假如任何乙個參與者向協調者反饋了no響應,或者在等待超時之後,協調者尚無法接收到所有參與者的反饋響應,那麼就會中斷事務。

傳送回滾請求。

協調者向所有參與者節點發出rollback請求。

事務回滾。

參與者接收到rollback請求後,開始執行事務rollback操作,執行完回滾事務之後,釋放整個事務執行期間占用的資源。

反饋事務回滾結果。

參與者在完成事務回滾之後,向協調者傳送ack訊息。

中斷事務。

協調者接收到所有參與者反饋的ack訊息後,完成事務中斷。

2pc演算法簡單示意圖如下:

3. 2pc演算法的缺點

1.單點問題

​ 在整個過程中,只有乙個協調者,如果在執行過程中協調者宕機或發生異常,則整個節點集群,會發生故障

2.同步阻塞問題

在整個事務提交過程中,協調者需要等待所有的參與者的ack訊息,才能執行下一步操作,發生同步阻塞。

4. paxos演算法

paxos演算法具體的發展歷程,可以自己去關注一下, 在這裡主要講解和2pc演算法的區別

a.paxos演算法在2pc演算法的基礎上增加了過半思想,就是有過半的節點給協調者反饋了訊息,即可以執行下一步操作,減緩了同步阻塞.

b.在2pc演算法的基礎上增加了角色輪換,即避免了單點故障問題,zookeeper的底層演算法機制就是在此基礎上實現的。

好了,今天就到這裡了,具體zookeeper實現演算法,最近幾天會更新啦。

Zookeeper的底層演算法機制 下

1.zookeeper的底層演算法機制 前面有說過2pc演算法和paxos演算法,具體見zookeeper的底層演算法機制 上 在了解zookeeper的演算法之前,先了解一下拜占庭將軍問題。2.拜占庭將軍問題 拜占庭帝國有許多支軍隊,不同軍隊的將軍之間必須制訂乙個統一的行動計畫,從而做出進攻或者撤...

objective c底層 runtime機制

runtime是oc的真面目。oc底層的一套c語言api.unsigned int count 獲取屬性列表 objc property t propertylist class copypropertylist self class count for unsigned int i 0 i 獲取方...

虛擬機器中ZooKeeper的安裝

zookeeper的安裝 需要提前準備好jdk環境 解壓檔案到hadoop目錄下 建立zookeeper目錄並建立軟連線 在zookeeper目錄下建立zkdata 目錄修改zookeeper的配置檔案 cd opt bigdata hadoop zookeeper conf mv zoo.samp...