1. 程式人生 > >Zookeeper學習之路——2PC/3PC

Zookeeper學習之路——2PC/3PC

2PC

2PC,是Two-Phase Commit的縮寫,即二階段提交協議,為了使基於分散式系統架構下的所有節點在進行事務處理過程中能夠保持原子性和一致性而設計的一種演算法。

階段一:提交事務請求

  1. 事務詢問
    協調者向參與者傳送事務內容,詢問是否可以執行事務提交操作,並開始等待各參與者的響應。
  2. 執行事務
    參與者執行事務操作,並將Undo和Redo資訊記入事務日誌中。
  3. 參與者響應
    如果參與者成功執行了事務操作,那麼久反饋給協調者Yes,表示事務可以執行;如果參與者沒有成功執行事務,那麼反饋給協調者No響應,表示事務不可以執行。

階段二:執行事務提交

執行事務提交

假如協調者從所有者的反饋響應都是Yes,那麼就會執行事務提交。

  1. 傳送提交請求
    協調者向所有的參與者傳送Commit請求。
  2. 事務提交
    參與者受到Commit請求後,會正式執行事務提交操作,並在完成提交之後釋放在整個事務期間佔用的事務資源。
  3. 反饋事務提交結果
    參與者在完成事務提交之後,會向協調者傳送Ack訊息。
  4. 完成事務
    協調者接收到所有參與者反饋的Ack訊息後,完成事務。

中斷事務

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

  1. 傳送回滾請求
    協調者向所有參與者節點發出Rollback請求。
  2. 事務回滾
    參與者接收到Rollback請求後,會利用其在階段一中記錄的Undo資訊來執行事務回滾操作,並在完成回滾之後釋放在整個事務執行期間佔用的資源。
  3. 反饋事務回滾結果
    參與者在完成事務回滾之後,向協調者傳送Ack訊息。
  4. 中斷事務
    協調者接收到所有參與者反饋的Ack訊息後,完成事務中斷。

優缺點

二階段提交協議的優點:原理簡單,實現方便。
二階段提交協議的缺點:同步阻塞,單點問題,資料不一致,太過保守

  1. 同步阻塞
    在二階段提交的執行過程中,所有參與者與該事務的邏輯都處於阻塞狀態,也就是說,在這段期間,所有的參與者無法進行其他的任何操作。
  2. 單點問題
    單點問題就是說,所有的參與者都要和協調者進行互動,但是如果協調者出現宕機,那麼所有的參與者都無法正常進行事務操作。
  3. 資料不一致
    如果在提交節點協調者向部分參與者傳送了commit請求,還以一部分參與者因為協調者因自己宕機或者網路連接出現問題而沒有接受到Commit的請求,這就會造成參與者出現數據不一致的情況。
  4. 太過保守
    2PC採用的協議沒有一個較好的容錯機制,例如參與者因為網路問題或者自身故障而無法給協調者傳送響應資訊,這時協調者只能通過自身的超時機制來進行事務的回滾操作。

3PC

3PC,是Three-Phase Commit的縮寫,即三階段提交協議,是二階段提交協議的改進版。

階段一:CanCommit

  1. 事務詢問
    協調者向所有的參與者傳送一個包含事務內容的canCommit請求,詢問是否可以執行事務提交操作,並開始等待各參與者的響應。
  2. 參與者響應
    在參與者接收到協調者的canCommit請求,如果可以執行,參與者傳送Yes進行反饋,否者傳送No。

階段二:PreCommit

如果協調者從階段一中的CanCommit響應中得到Yes反饋
1. 傳送預提交請求
協調者向所有的參與者傳送preCommit請求,並進入Prepared階段。
2. 事務預提交
參與者接收到preCommit請求後,會執行事務操作,並將Undo和Redo資訊記錄到事務日誌中。
3. 參與者響應
如果參與者成功執行了事務操作,就會返回給協調者Ack響應,同時等待最終指令。

如果協調者從階段一中的CanCommit響應中得到No反饋,或者協調者等待超時後

  1. 傳送中斷請求
    協調者會向所有的參與者傳送abort請求。
  2. 中斷事務
    無論是接收到協調者的abort請求,還是等待協調者的響應而出現的超時,參與者都會中斷事務。

階段三:doCommit

執行提交

  1. 傳送提交請求
  2. 事務提交
  3. 反饋事務提交結果
  4. 完成事務

中斷事務

  1. 傳送中斷請求
  2. 事務回滾
  3. 中斷事務
  4. 完成事務

在階段三中,會出現以下兩種故障:

  1. 協調者出現問題
  2. 協調者和參與者網路出現問題
    無論出現哪種情況,最終都會導致參與者無法及時接收到來自協調者的doCommit或者是abort請求,針對這樣的情況,參與者都會在等待超時之後,繼續進行事務提交。

優缺點

優點是降低了參與者的阻塞範圍,並且能夠在出現單點故障後繼續達成一致性。缺點是參與者接收到preCommit請求後,如果此時出現網路問題,這種情況下參與者依然會進行事務提交,這會導致資料的不一致。

相關推薦

Zookeeper學習——2PC/3PC

2PC 2PC,是Two-Phase Commit的縮寫,即二階段提交協議,為了使基於分散式系統架構下的所有節點在進行事務處理過程中能夠保持原子性和一致性而設計的一種演算法。 階段一:提交事務請求 事務詢問 協調者向參與者傳送事務內容,詢問是否可以

Zookeeper學習 (一)初識

目錄 正文 回到頂部 引言   Hadoop 叢集當中 N 多的配置資訊如何做到全域性一致並且單點修改迅速響應到整個叢集? --- 配置管理   Hadoop 叢集中的 namonode 和 resourcemanager 的單點故障怎麼解決? --- 叢集

ZooKeeper學習 (七)ZooKeeper設計特點及典型應用場景

目錄 正文 回到頂部 ZooKeeper 特點/設計目的 ZooKeeper 作為一個叢集提供資料一致的協調服務,自然,最好的方式就是在整個叢集中的 各服務節點進行資料的複製和同步。 資料複製的好處 1、容錯:一個節點出錯,不至於讓整個叢集無法提供服務

大資料學習98-Zookeeper管理Kafka的OffSet

我們之前的OffSet都是交給broker自己管理的,現在我們希望自己管理。 我們可以通過zookeeper進行管理。 我們在程式中想要使用zookeeper,那麼就肯定會有api允許我們操作。 new ZKGroupTopicDirs() 注意:這裡使用客戶端的時候導包為:

Kafka學習 (五)Kafka在zookeeper中的存儲

序號 hadoop state 空閑 pre 離開 substr doc 退出 當kafka啟動的時候,就會向zookeeper裏面註冊一些信息,這些數據也稱為Kafka的元數據信息。 一、Kafka在zookeeper中存儲結構圖 二、分析 根目錄下的結構 服務端開啟的

Kafka學習 (五)Kafka在zookeeper中的儲存

目錄 正文 回到頂部 一、Kafka在zookeeper中儲存結構圖 回到頂部 二、分析 2.1 topic註冊資訊 /brokers/topics/[topic] : 儲存某個topic的partitions所有分配資訊 [zk: localh

python學習(四)

[1] size class dex epc uri msu 語句 這就是 繼續昨天的學習,學到了數組。 首先有兩個數組,name1和name2.我們可以將兩個數組合並 name1=[1,2,3,4] name2=[5,6,7,8] names=name1.extend(

VTK學習——畫畫我的小蘋果

sdn cell 技術 圖形系統 img 實體 旋轉 insert name 數據集主要由描寫敘述數據集幾何形狀的點集數據及構成數據集的單元構成,因此構建數據集的主要任務就是確定點集和構建單元,本演示樣例程序構建了一個蘋果的實體,然後繪制蘋果。演示樣例程序運行的過程例如

Python學習 002

else 內容 readline input rjust price info class 信息   今天寫著購物車的作業,最頭疼的是文件操作了 尤其是文件的打開模式  w  r  a  最TM的頭疼 r+模式可讀可寫,但是寫的內容會根據文件指針去覆蓋之前的內容,當文件

Python學習——基礎04篇

usr pre Coding color 偶數求和 存在 代碼 spa nbsp   在python中,有很強大的for循環和很強大的數組操作,一些在其他語言中復雜的代碼,在python中可以一行解決,下面是python中解決a,b數組所有偶數求和,存在c數組中的簡單代碼。

Python學習——基礎01篇

alt 自動 clj int jca 安裝完成 -s 但是 還需                                 安裝python編譯環境   python數字定義是不需要int,double的,但是數據本身還是包含這些類型,這裏是我在學習pytho

Python學習——基礎07篇

get pytho print cnblogs python學習 code class end bsp   在Python中,數組也是不需要定義的,但是我們可以事先申明,可以用append的方法來動態增加數組空間,也可以使用range來給數組大小添個集合,這一篇先用appe

STM32學習-感覺自己走到了一個天大的坑裏了!

port 感覺 mar lcd 學習之路 位數 iss b- 速度 先前興致勃勃的來弄16位並口驅動LCD。本以為就須要改下LCD IC的初始化即可了,沒想到弄了這麽多天最終發現自己走進了一個深坑了 T T 原因是我的開發板是奮鬥V5的, 它確實有MCU外擴IO口, 還

Java學習:不走彎路,就是捷徑

下載地址 下載 何事 系統 也有 包括 軟件公司 項目管理師 應用 1.如何學習程序設計? Java是一種平臺,也是一種程序設計語言,如何學好程序設計不僅僅適用於Java,對C++等其他程序設計語言也一樣管用。有編程高手認為,JAVA也好C也好沒什麽分別,拿來就用。為什麽他

Python學習——第二彈(認識python)

內容 代碼結構 計算 戰術 個人 方法 十分 現在 目的   第一彈中我是說明了學習python的目的,主要為了自我提升的考慮,那麽為什麽我對python感興趣,python有什麽用了?本章就簡單說明下。   python的用途很廣,而且代碼十分簡潔,不像java、c等其他

python學習——第三彈 (作業篇第一題)

image 操作 啟動程序 代碼 color 鎖定文件 文件 文件內容 數據 作業一:編寫登錄接口1.輸入用戶名密碼2.認證成功後顯示歡迎信息3.輸錯三次後鎖定。 所需知識點 文件基本讀寫操作,循環,列表,字典 上面的作業題是在學習完數據類型和簡單的文件操作之後布置的,

我的學習_第二章_接口/多態

nal interface implement 類型轉換 ace pri 類名 提高 表現 接口 (1)當抽象類中的方法都是抽象的時候,java就提供了一種新的表現形式:接口。接口是功能的集合 接口不能創建對象 (2)格式: 父接口: public interface

Python學習6?函數,遞歸,內置函數

erro memory 子程序 none 種類 lan 萬年 字典 得到 一python中的函數 函數是邏輯結構化和過程化的一種編程方法。 python中函數定義方法: def test(x): "The function definitions" x

Python學習8?叠代器協議和生成器

rep 好處 obj 必須 決定 內容 cnblogs 有用 pri 一 什麽是叠代器協議 1.叠代器協議是指:對象必須提供一個next方法,執行該方法要麽返回叠代中的下一項,要麽就引起一個StopIteration異常,以終止叠代 (只能往後走不能往前退) 2.可叠代對象

我的算法學習

res 都在 暑假 Coding 數據結構 report 身邊 evel 流程 關於嚴格來說,本文題目應該是我的數據結構和算法學習之路,但這個寫法實在太繞口——況且CS中的算法往往暗指數據結構和算法(比如算法導論指的實際上是數據結構和算法導論),所以我認為本文題目是合理的