Zookeeper之CAP理論及分布式一致性算法

CAP理論

CAP理論告訴我們,一個分布式系統不可能同時滿足以下三種

  • 一致性(C:consistency)
  • 可用性(A:Available)
  • 分區容錯性(P:Partition Tolerance)

這三個基本要求,最多只能同時滿足其中的兩項,因為P是必須的,因此往往選擇就在CP或者AP中

(1)一致性(C:consistency)

? ? ? ? 在分布式環境中,一致性是指數據在多個副本之間是否能夠保持數據一致的特性。在一致性的需求下,當一個系統在數據一致的狀態下執行更新操作后,應該保證系統的數據仍然處于一致的狀態。

(2)可用性(A:Available)

? ? ? ?可用性是指系統提供的服務必須一直處于可用的狀態,對于用戶的每一個操作請求總是能夠在有限的時間內返回結果。

(3)分區容錯性(P:Partition Tolerance)

分布式系統在遇到任何網絡分區故障的時候,仍然需要保證對外提供滿足一致性和可用性,除非是整個網絡環境都發生了故障(多個副本,其中幾個副本down掉不影響系統使用)

Zookeeper保證的是CP

(1)Zookeeper不能保證每次服務請求的可用性。(注:在極端環境下,Zookeeper可能會丟棄一些請求,消費者程序需要重新請求才能獲得結果)。所以說,Zookeeper不能保證服務可用性

(2)進行Leader選舉時集群都是不可用。

Paxos算法

Paxos算法:一種基于消息傳遞且具有高度容錯特性的一致性算法。

Paxos算法解決的問題:就是如何快速正確的在一個分布式系統中對某個數據值達成一致,并且保證不論發生任何異常,都不會破壞整個系統的一致性。

Paxos算法描述:

在一個Paxos系統中,首先將所有節點劃分為Proposer(提議者),Acceptor(接受者)和Learner(學習者)。(注意:每個節點都可以身兼數職)。

一個完整的Paxos算法流程分為三個階段:

PrePare準備階段

  • Proposer向多個Acceptor發出Propose請求Promise(承諾)
  • Acceptor針對收到的Propose請求進行Promise(承諾)

Accept接受階段

  • Proposer收到多數Acceptor承諾的Promise后,向Acceptor發出Propose請求(承諾)
  • Acceptor針對收到的Propose請求進行Accept處理

Learn學習階段

  • Proposer將形成的決議發送給所有Learners

Paxos算法流程:

(1)Prepare:Proposer生產全局唯一且遞增的Proposal ID,向所有Acceptor發送Propose請求,這里無需攜帶提案內容,只攜帶Proposal ID即可。

(2)Promise:Acceptor收到Propose請求后,做出“兩個承諾,一個應答”。

  • 不再接受Proposal ID小于等于(注意:這里是<=)當前請求的Propose請求。
  • 不再接受Proposal ID小于(注意:這里是<)當前請求的Accept請求。
  • 不違背以前做出的承諾下,回復已經Accept過的提案中Proposal ID最大的那個提案的Value和Proposal ID,沒有則返回空值。

(3)Propose:Proposer收到多數Acceptor的Promise應答后,從應答中選擇Proposal ID最大的提案的Value,作為本次要發起的提案。如果所有應答的提案Value均為空值,則可以自己隨意決定提案Value。然后攜帶當前Proposal ID,向所有Acceptor發送Propose請求。

(4)Accept:Acceptor收到Propose請求后,在不違背自己之前做出的承諾下,接受并持久化當前Proposal ID和提案Value。

(5)Learn:Proposer收到多數Acceptor的Accept后,決議形成,將形成的決議發送給所有Leader。

情況1:

有A1,A2,A3,A4,A5 5位議員,就稅率問題進行決議

  • A1發起1號Proposal的Propose,等待Promise承諾;
  • A2-A5回應Promise;
  • A1在收到兩份回復時就會發起稅率10%的Proposal;
  • A2-A5回應Accept;
  • 通過Proposal,稅率10%。

情況2:

  • A1、A5同時發起Propose(序號分別為1,2)
  • A2承諾A1,A4承諾A5,A3行為成為關鍵
  • 情況1:A3先收到A1消息,承諾A1。
  • A1發起Proposal(1, 10%),A2,A3接受。
  • 之后A3又收到A5消息,回復A1:(1, 10%),并承諾A5。
  • A5發起Proposal(2, 20%),A3,A4接受。之后A1,A5同時廣播決議。
  • 情況2:A3先收到A1消息,承諾A1。之后立刻收到A5消息,承諾A5.
  • A1發起Proposal(1, 10%),無足夠響應,A1重新Propose(序號3),A3再次承諾A1。
  • A5發起Proposal(2, 20%),無足夠響應,A5重新Propose(序號4),A3再次承諾A5。
  • ......

造成這種情況的原因是系統重有一個以上的Proposer,多個Proposers互相爭奪Acceptor,造成遲遲無法達成一致的情況,這對這種情況,一種改進的Paxos算法被提出:從系統中選出一個節點作為Leader,只有Leader能夠發起提案。這樣,一次Paxos流程中只有一個Proposer,不會出現活鎖的情況,此時只會出現例子中第一種情況。

ZAB協議:

Zab算法:Zab借鑒了Paxos算法,是特別為Zookeeper設計的支持崩潰恢復的原子廣播協議。基于該協議,Zookeeper設計為只有一臺客戶端(Leader)負責處理外部的寫事務請求,然后Leader客戶端將數據同步到其它Follower節點,即Zookeeper只有一個Leader可以發起提案。

Zab協議內容:

? ? ? ? 包括兩種基本的模式:消息廣播、崩潰恢復

(1)客戶端發起一個寫操作請求。

(2)Leader服務器將客戶端的請求轉化為事務Proposal提案,同時為每個Proposal分配一個全局的ID,即zxid。

(3)Leader服務器為每個Follower服務器分配一個單獨的隊列,然后將需要廣播的Proposal依次放到隊列中去,并且根據FIFO策略進行消息發送。

(4)Follower接收到Proposal后,會首先將其以事務日志的方式寫入本地磁盤中,寫入成功后Leader反饋一個Ack(確認消息)響應消息。

(5)Leader接收到超過半數以上Follower的Ack響應消息后,即認為消息發送成功,可以發送commit消息。

(6)Leader向所有Follower廣播commit消息,同時自身也會完成事務提交。Follower接收到commit消息后,會將上一條事務提交。

(7)Zookeeper采用Zab協議的核心,就是只要有一臺服務器提交了Proposal,就要確認所有的服務器最終都能正確提交Proposal

崩潰恢復:

一旦Leader服務器出現崩潰或者由于網絡原因導致Leader服務器失去了與過半Follower的聯系,那么就會進入崩潰恢復模式

1)假設兩種服務器異常情況:

(1)假設一個事務在Leader提出之后,Leader掛了。

(2)一個事務在Leader上提交了,并且過半的Follower都響應Ack了,但是Leader在Commit消息發出之前掛了。

2)Zab協議崩潰恢復要求滿足以下兩個要求:

(1)確保已經被Leader提交的提案Proposal,必須最終被所有的Follower服務器提交。(已經產生的提案,Follower必須執行

(2)確保丟棄已經被Leader提出的,但是沒有被提交的Proposal。(丟棄胎死腹中的提案

崩潰恢復——Leader選舉:

崩潰恢復主要包括兩部分:Leader選舉和數據恢復

Leader選舉:根據上述要求,Zab協議需要保證選舉出來的Leader需要滿足以下條件:

(1)新選舉出來的Leader不能包含未提交的Proposal。即新Leader必須都是已經提交了Proposal的Follower服務器節點

(2)新選舉的Leader節點中含有最大的zxid。這樣做的好處是可以避免Leader服務器檢查Proposal的提交和丟棄工作。

崩潰恢復——數據恢復:

崩潰恢復主要包括兩部分:Leader選舉和數據恢復

Zab如何數據同步:

(1)完成Leader選舉后,在正式開始工作之前(接收事務請求,然后提出新的Proposal),Leader服務器會首先確認事務日志中的所有的Proposal是否已經被集群中過半的服務器Commit。

(2)Leader服務器需要確保所有的Follower服務器能夠接收到每一條事務的Proposal,并且能將所有已經提交的事務Proposal應用到內存數據中。等到Follower將所有尚未同步的事務Proposal都從Leader服務器上同步過,并且應用到內存數據中以后,Leader才會把該Follower加入到真正可用的Follower列表中。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/45704.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/45704.shtml
英文地址,請注明出處:http://en.pswp.cn/web/45704.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python 語法學習 day2

python有七大數據類型, 數據類型轉換, 多變量賦值與print間隔, split函數, int用法總結python有七大數據類型&#xff1a; &#xff08;1&#xff09;數字&#xff08;Number&#xff09;&#xff1a;int(整型&#xff0c;長整型)&#xff0c;float(浮點型)&#xff0c;com…

部署k8s 1.28.9版本

繼上篇通過vagrant與virtualBox實現虛擬機的安裝。筆者已經將原有的vmware版本的虛擬機卸載掉了。這個場景下&#xff0c;需要重新安裝k8s 相關組件。由于之前寫的一篇文章本身也沒有截圖。只有命令。所以趁著現在。寫一篇&#xff0c;完整版帶截圖的步驟。現在行業這么卷。離…

SpringBoot中常用的注解及其用法

1. 常用類注解 RestController和Controller是Spring中用于定義控制器的兩個類注解. 1.1 RestController RestController是一個組合類注解,是Controller和ResponseBody兩個注解的組合,在使 用 RestController 注解標記的類中&#xff0c;每個方法的返回值都會以 JSON 或 XML…

【Android安全】Ubuntu 下載、編譯 、刷入Android-8.1.0_r1

0. 環境準備 Ubuntu 16.04 LTS&#xff08;預留至少95GB磁盤空間&#xff0c;實測占94.2GB&#xff09; Pixel 2 XL 要買歐版的&#xff0c;不要美版的。 歐版能解鎖BootLoader、能刷機。 美版IMEI里一般帶“v”或者"version"&#xff0c;這樣不能解鎖BootLoader、…

網絡安全-網絡安全及其防護措施2

6.安全設計和日志 安全審計 安全審計是對系統和網絡活動進行檢查和記錄的過程&#xff0c;確保合規性和安全性。審計過程可以幫助發現潛在的安全漏洞和違規行為&#xff0c;并驗證系統配置和操作的正確性。 定期審計 定義&#xff1a;定期檢查系統和網絡的安全配置和活動記錄…

394. 字符串解碼 739. 每日溫度(LeetCode熱題100)

394. 字符串解碼 - 力扣&#xff08;LeetCode&#xff09; curr_str&#xff1a;遍歷整個字符串時 如果左邊有[&#xff0c;且無相應右括號和其匹配&#xff0c;那么curr_str就表示該[到當前位置的解碼字符串如果左邊的[]已經匹配&#xff0c;或者沒有[]&#xff0c;curr_siz…

找不到vcruntime140_1.dll 無法執行的相關解決方法,如何高效率修復vcruntime140_1.dll

當出現“找不到 vcruntime140_1.dll 無法執行”這類提示時&#xff0c;意味著你的系統中的 vcruntime140_1.dll 文件已經缺失或者損壞。為了恢復并正常啟動你的程序&#xff0c;你需要對這個 DLL 文件進行修復。接下來&#xff0c;我們將詳細介紹如何進行這一操作。 一.找不到v…

數學建模·層次分析法

層次分析法 LAF 定義 評價體系的優劣影響&#xff0c;計算評價指標的權重的一種方法 主觀性較強&#xff0c;現在一般不用 主要步驟 關鍵在于一致性檢驗和求權值 權重的計算 注意權重之和為1&#xff0c;需要歸一化 算數平均法 特征值法 矩陣的一致性檢驗 為什么要檢驗…

【C語言】原碼、反碼、補碼詳解 -《碼上有道 ! 》

目錄 原碼、反碼、補碼詳解及其在C語言中的應用一、原碼&#xff08;Sign-Magnitude&#xff09;1.1 定義與表示1.2 歷史來源與作用1.3 示例1.4 C語言示例1.5 代碼運行結果 二、反碼&#xff08;Ones Complement&#xff09;2.1 定義與表示2.2 歷史來源與作用2.3 示例2.4 C語言…

sentinel網關限流配置及使用

sentinel控制臺源碼&#xff1a;https://download.csdn.net/download/yixin605691235/89543923 sentinel控制臺jar包&#xff1a;https://download.csdn.net/download/yixin605691235/89543931 不同環境直接修改jar包中的application.yml文件中的nacos地址就可以了。 一、網關限…

【LeetCode 0169】【摩爾投票算法】主元素

Majority Element Given an array nums of size n, return the majority element. The majority element is the element that appears more than ?n / 2? times. You may assume that the majority element always exists in the array. Example 1: **Input:** nums [3…

大數據信用查詢有哪些問題值得注意呢?

隨著大數據技術的不斷發展&#xff0c;大數據信用報告成為一種新型的信用風險檢測工具&#xff0c;被很多的銀行和機構廣泛用于信用風險評估&#xff0c;那大數據信用查詢有哪些問題值得注意呢?本文就帶大家一起去了解一下&#xff0c;希望對你有一定的幫助。 大數據信用查詢這…

JsonCPP源碼分析——分配器和配置器

1、allocator.h文件 該文件定義了一個分配器模版&#xff0c;該文件主要使用了內存對齊控制、rebind機制(C 標準庫的分配器接口要求提供 rebind 機制&#xff0c;以支持不同類型的分配)、::operator new、std::addressof等技術。 內存對齊控制&#xff1a;之所以先保存當前內存…

《C++ 入門:第一個小程序》

《C 入門&#xff1a;第一個小程序》 在學習 C 的旅程中&#xff0c;編寫第一個小程序是一個令人興奮的時刻。它就像打開一扇通往新編程世界的大門&#xff0c;讓我們初步領略 C 的魅力。 C 是一種強大而靈活的編程語言&#xff0c;廣泛應用于各種領域&#xff0c;從系統編程…

python 方向梯度直方圖(HOG)算法 【附兩種實現方法并可視化】

目錄 一、概述1.1 算法定義1.2 實現過程二、方法1(skimage庫)2.1 代碼實現2.2 結果示例三、方法2(cv2庫)3.1 代碼實現3.2 結果示例四、結果對比?? 結果預覽 一、概述 1.1 算法定義 方向梯度直方圖(Histogram of Oriented Gradient,HOG):是應用在計算機視覺和圖像處…

Telegram Bot、小程序開發(三)Mini Apps小程序

文章目錄 一、Telegram Mini Apps小程序二、小程序啟動方式三、小程序開發小程序調試模式初始化小程序Keyboard Button Mini Apps 鍵盤按鈕小程序【依賴具體用戶信息場景,推薦】**Inline Button Mini Apps內聯按鈕小程序**initData 的自動傳遞使用內聯菜單時候哪些參數會默認傳…

LLM微調

文章目錄 一. 常見微調分類1.1 全量微調&#xff08;FFT&#xff1a;Full Fine-tuning&#xff09;1.2 參數高效微調(PEFT&#xff1a;Parameter-Efficient Fine-Tuning)1.3 指令微調&#xff08;IFT&#xff1a;Instructional Fine-tuning&#xff09;1.3.1 Hard prompt1.3.2 …

Docker存儲目錄問題,如何修改Docker默認存儲位置?(Docker存儲路徑、Docker存儲空間)etc/docker/daemon.json

文章目錄 如何更改docker默認存儲路徑&#xff1f;版本1&#xff08;沒測試&#xff09;版本2&#xff08;可行&#xff09;1. 停止 Docker 服務&#xff1a;2. 創建新的存儲目錄&#xff1a;3. 修改 Docker 配置文件&#xff1a;4. 移動現有的 Docker 數據&#xff1a;5. 重新…

Java-svg格式的oss圖片鏈接轉換為png格式圖片字節流

一、引入依賴 <!--svg轉其他格式依賴--> <dependency><groupId>org.apache.xmlgraphics</groupId><artifactId>batik-transcoder</artifactId><version>1.14</version> </dependency> <dependency><groupId&g…

什么樣的服務器是合乎直銷網站標準

現在社會的發展,有著越來越多的人想要利用互聯網來做直銷。做好直銷行業系統解決方案離不開好的服務器支持,服務器的的穩定性和速度是直接影響網站后期運作,可以看做是網站的根基。 做網站直銷選擇租用服務器需要注意的幾點要素 一些大的直銷互聯網公司如安利、雅芳、康寶萊、玫…