色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Paxos算法的特性以及算法

馬哥Linux運維 ? 來源:碼哥字節 ? 作者:碼哥字節 ? 2022-06-13 17:45 ? 次閱讀

Google的粗粒度鎖服務Chubby的設計開發者Burrows曾經說過:所有一致性協議本質上要么是Paxos要么是其變體。

網上有很多講解Paxos算法的文章,但是質量層次不齊。今天筆者帶大家深入聊一下Paxos

Paxos是什么?Paxos算法是基于消息傳遞且具有高度容錯特性的一致性算法,是目前公認的解決分布式一致性問題最有效的算法之一。Paxos算法是Lamport宗師提出的一種基于消息傳遞的分布式一致性算法,使其獲得2013年圖靈獎。自Paxos問世以來就持續壟斷了分布式一致性算法,Paxos這個名詞幾乎等同于分布式一致性。Google的很多大型分布式系統都采用了Paxos算法來解決分布式一致性問題,如Chubby、Megastore以及Spanner等。開源的ZooKeeper,以及MySQL 5.7推出的用來取代傳統的主從復制的MySQL Group Replication等紛紛采用Paxos算法解決分布式一致性問題。但是它也有兩個明顯的缺點:

難以理解

在工程是實現上比較復雜。

問題產生的背景在常見的分布式系統中,總會發生諸如機器宕機或網絡異常(包括消息的延遲、丟失、重復、亂序,還有網絡分區)等情況。Paxos算法需要解決的問題就是如何在一個可能發生上述異常的分布式系統中,快速且正確地在集群內部對某個數據的值達成一致,并且保證不論發生以上任何異常,都不會破壞整個系統的一致性。

這里某個數據的值并不只是狹義上的某個數,它可以是一條日志,也可以是一條命令(command)。根據應用場景不同,某個數據的值有不同的含義。

相關概念在Paxos算法中,有三種角色:

Proposer (提案者)

Acceptor (人大代表)

Learners (廣大群眾)

需要注意的是,在具體的算法實現過程中,并不是一個進程只能擔任其中一種角色,它有可能會同時充當多個。比如一個進程既是Proposer又是Acceptor還是Learner。還有一個很重要的概念叫提案(Proposal)。最終要達成一致的value就在提案里。這個提案包括什么呢?是僅僅包括一個信息數值嗎?到底是如何咱們繼續向下閱讀,目前咱們先認為僅僅是一個普普通通的value。

初次認識

Paxos算法過程和我國的立法過程是極其相似的(法律案的提出、法律案的審議、法律案的表決、法律的公布四個階段),所謂的提案就是新頒布法律。Proposer (提案者)可以提出(propose)提案;Accoptor可以接受(accept)提案;如果某個提案被選定(chosen),那么該提案里的value就被選定了。

回到剛剛說的『對某個數據的值達成一致』,指的是Proposer、Acceptor、Learner都認為同一個value被選定(chosen)。那么,Proposer、Acceptor、Learner分別在什么情況下才能認為某個value被選定呢?

Proposer:只要Proposer發的提案被Acceptor接受(剛開始先認為只需要一個Acceptor接受即可,在推導過程中會發現需要半數以上的Acceptor同意才行),Proposer就認為該提案里的value被選定了。

Acceptor:只要Acceptor接受了某個提案,Acceptor就認為該提案里的value被選定了。

Learner:作為一個學習者,Acceptor告訴Learner哪個value被選定,Learner就認為那個value被選定。

問題描述假設有一組可以提出(propose)value的進程集合(提案者團隊),一個一致性算法需要保證提出的這么多value中,僅僅只有一個相同的value被選定(chosen)。也就是說要么沒有value被提出,只要提出了value并且被選定,那么大家最終學習到的value必須是一致的。對于一致性算法,安全性(safaty)要求如下:

只有被提出的value才能被選定。

只有一個value被選定。

如果某個進程認為某個value被選定了,那么這個value必須是真的被選定的那個。

“Paxos的目標:保證最終有一個value會被選定,當value被選定后,進程最終也能獲取到被選定的value。

俗話說的好,哪里有需求,哪里就會出現糟糕的問題。如果假設不同角色之間可以通過發送消息來進行通信,那么:

每個角色以各自任意的速度進行通信執行,在這個過程中可能會因為各種原因出錯而導致執行停止或重啟。當一個value被選定之后,因為故障原因才恢復正常的角色因為失去了某些重要的信息,導致它們無法確定被選定的值。

消息在傳遞過程中可能出現任意時長的延遲,可能會重復,也可能丟失。但是消息不會被損壞,即消息內容不會被篡改(拜占庭將軍問題)。

以上都是可能會遇到的問題,要怎么解決???

推導過程最簡單的方案——只有一個Acceptor

假設只有一個Acceptor(可以有多個Proposer),只要Acceptor接受它收到的第一個提案,則該提案被選定,該提案里的value就是被選定的value。這樣就保證只有一個value會被選定。但是,如果這個唯一的Acceptor宕機了,那么整個系統就無法工作了!因此,一個Acceptor是不可行的,必須要有多個Acceptor!

多個Acceptor

當有多個Acceptor的時候,如何保證在多個Proposer和多個Acceptor的情況下選定一個value呢?大家可以自己先進行思考。首先,我們的最終目標是無論有多少Proposer提出提案,有且僅有一個value被選定。那么,我們可以先定義一個約束:

P1:一個Acceptor必須接受它收到的第一個提案。

但是,這樣又會出現其它的問題:如果每個Proposer所提出的提案value是不同的,并且將提案發送給不同的Acceptor。根據P1約束,每個Acceptor都接受它收到的第一個提案,就會出現不同value被選定的情況,出現了不一致。

剛剛是因為『一個提案只要被一個Acceptor接受,則該提案的value就被選定了』才導致了出現上面不一致的問題。因此,我們需要加一個規定:

“規定:一個提案被選定需要被半數以上的Acceptor接受

一個提案被半數以上接受,說明『一個Acceptor必須能夠接受不止一個提案!』,不然可能導致最終沒有value被選定。比如上圖的情況。v1、v2、v3都沒有被選定,因為它們都只被一個Acceptor的接受,并沒有被超過半數以上的Acceptor接受。最開始將【提案 = value】已經無法滿足現在的需求,因為當一個Proposer發送多個提案到一個Acceptor的時候,需要使用一個編號來區分被提出的順序。現在【提案=提案編號+value】。雖然允許多個提案被選定,但必須保證所有被選定的提案都具有相同的value值。否則又會出現不一致。

P2:如果某個value為v的提案被選定了,那么每個編號更高的被選定提案的value必須也是v。

一個提案只有被Acceptor接受才可能被選定,因此我們可以把P2約束改寫成對Acceptor接受的提案的約束P2a。

P2a:如果某個value為v的提案被選定了,那么每個編號更高的被Acceptor接受的提案的value必須也是v。

只要滿足了P2a,就能滿足P2。但是,考慮如下的情況:以立法過程為背景,假設總的有5個人大代表(Acceptor)。人民法院(Proposer2)提出[M1,V1]的提案,人大代表2-5號(半數以上)均接受了該提案,于是對于人大代表2-5號和人民法院來講,它們都認為V1提案是被選定的。此時,人大代表1在辦完其它事務之后也參與到其中(之前人大代表1沒有收到過任何提案),此時最高人民檢察院(另一個提案者Proposer1)向人大代表1發送了[M2,V2]的提案(V2≠V1且M2》M1),對于人大代表1來講,這是它收到的第一個提案。根據P1(一個Acceptor必須接受它收到的第一個提案。),人大代表1必須接受該提案!同時人大代表1認為V2被選定。這就出現了兩個問題:

人大代表1認為V2被選定,人大代表2-5和人民法院認為V1被選定。出現了不一致。

V1被選定了,但是編號更高的被人大代表1接受的提案[M2,V2]的value為V2,且V2≠V1。這就跟P2a(如果某個value為v的提案被選定了,那么每個編號更高的被Acceptor接受的提案的value必須也是v)矛盾了。

所以,我們要對P2a約束進行加強!

P2a是對Acceptor接受的提案約束,但其實提案是Proposer提出來的,所有我們可以對Proposer提出的提案進行約束。得到P2b:

P2b:如果某個value為v的提案被選定了,那么之后任何Proposer提出的編號更高的提案的value必須也是v。

那么,如何確保在某個value為v的提案被選定后,Proposer提出的編號更高的提案的value都是v呢?只要滿足P2c即可:

P2c:對于任意的N和V,如果提案[N, V]被提出,那么存在一個半數以上的Acceptor組成的集合S,滿足以下兩個條件中的任意一個:

S中每個Acceptor都沒有接受過編號小于N的提案。

S中Acceptor接受過的最大編號的提案的value為V。

Proposer生成提案

為了滿足P2b,這里有個比較重要的思想:Proposer生成提案之前,應該先去『學習』已經被選定或者可能被選定的value,然后以該value作為自己提出的提案的value。如果沒有value被選定,Proposer才可以自己決定value的值。這樣才能達成一致。這個學習的階段是通過一個『Prepare請求』實現的。于是我們得到了如下的提案生成算法:

Proposer選擇一個新的提案編號N,然后向某個Acceptor集合(半數以上)發送請求,要求該集合中的每個Acceptor做出如下響應(response)。

(a) 向Proposer承諾保證不再接受任何編號小于N的提案。

(b) 如果Acceptor已經接受過提案,那么就向Proposer響應已經接受過的編號小于N的最大編號的提案。

我們將該請求稱為編號為N的Prepare請求。

如果Proposer收到了半數以上的Acceptor的響應,那么它就可以生成編號為N,Value為V的提案[N,V]。這里的V是所有的響應中編號最大的提案的Value。如果所有的響應中都沒有提案,那 么此時V就可以由Proposer自己選擇(一般為當前提案)。

生成提案后,Proposer將該提案發送給半數以上的Acceptor集合,并期望這些Acceptor能接受該提案。我們稱該請求為Accept請求。(注意:此時接受Accept請求的Acceptor集合不一定是之前響應Prepare請求的Acceptor集合)

Acceptor接受提案

Acceptor可以忽略任何請求(包括Prepare請求和Accept請求)而不用擔心破壞算法的安全性。因此,我們這里要討論的是什么時候Acceptor可以響應一個請求。

我們對Acceptor接受提案給出如下約束:

P1a:一個Acceptor只要尚未響應過任何編號大于N的Prepare請求,那么他就可以接受這個編號為N的提案。

如果Acceptor收到一個編號為N的Prepare請求,在此之前它已經響應過編號大于N的Prepare請求。根據P1a,該Acceptor不可能接受編號為N的提案。因此,該Acceptor可以忽略編號為N的Prepare請求。當然,也可以回復一個error,讓Proposer盡早知道自己的提案不會被接受。

因此,一個Acceptor只需記住:1. 已接受的編號最大的提案 2. 已響應的請求的最大編號。

Paxos算法描述

經過上面的推導,我們總結下Paxos算法的流程。Paxos算法分為兩個階段。具體如下:1.階段一:

Proposer選擇一個提案編號N,然后向半數以上的Acceptor發送編號為N的Prepare請求。

如果一個Acceptor收到一個編號為N的Prepare請求,且N大于該Acceptor已經響應過的所有Prepare請求的編號,那么它就會將它已經接受過的編號最大的提案(如果有的話) 作為響應反饋給Proposer,同時該Acceptor承諾不再接受任何編號小于N的提案。

2.階段二:

如果Proposer收到半數以上Acceptor對其發出的編號為N的Prepare請求的響應,那么它就會發送一個針對[N,V]提案的Accept請求給半數以上的Acceptor(和之前的Acceptor不一定相同)。注意:V就是收到的響應中編號最大的提案的value,如果響應中不包含任何提案,那么V就由Proposer自己決定。

如果Acceptor收到一個針對編號為N的提案的Accept請求,只要該Acceptor沒有對編號大于N的Prepare請求做出過響應,它就接受該提案。

Learner學習被選定的valueLearner學習(獲取)被選定的value有如下三種方案:

方案一

Acceptor接受到一個提案,就將該提案發送給所有Learners.

優點:Learner能夠快速獲取被選定的value

缺點:通信次數為M*N(M為提案數,N為Learner數)

方案二

Acceptor接受一個提案,就將提案發送給主Learner,主Learner再通知其它Learner

優點:通信次數減少(M+N-1)(M為提案數,N為Learner數,M個提案發送給主Learner,然后主Learner通知N-1個Learner)

缺點:單點故障問題(主Learner可能出現故障)

方案三

Acceptor接受一個提案,就將提案發送給Learner團,Learner團再通知其它Learner

優點:解決了方案二單點故障問題,可靠性好

缺點:實現復雜,網絡通信復雜度高

如何保證Paxos算法的活性通過選取主Proposer,就可以保證Paxos算法的活性。通過選取主Proposer,并規定只有主Proposer才能提出議案。這樣一來只要主Proposer和過半的Acceptor能夠正常進行網絡通信,那么但凡主Proposer提出一個編號更高的提案,該提案終將會被批準,這樣通過選擇一個主Proposer,整套Paxos算法就能夠保持活性。至此,我們得到一個既能保證安全性,又能保證活性的分布式一致性算法——Paxos算法。

總結到此,我們針對Paxos算法是什么、它的特性以及算法的具體推導過程做了詳細的闡述。Paxos算法是現在很多一致性算法的變體,非常值得我們學習~

原文標題:聊聊分布式一致性算法協議 Paxos

文章出處:【微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。

審核編輯:彭靜
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 數據
    +關注

    關注

    8

    文章

    7080

    瀏覽量

    89166
  • 分布式系統
    +關注

    關注

    0

    文章

    146

    瀏覽量

    19275

原文標題:聊聊分布式一致性算法協議 Paxos

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    高薪 mcu 觸控算法專家(觸控按鍵,不要觸控屏)

    觸控應用@ 算法專家(白色家電)按鍵觸摸 (Emma 18149712160 同微信) 工作職責: 1、負責小華觸摸應用的芯片產品和方案規劃; 2、負責小華觸摸方案(客戶可量產)的開發和交付; 3
    發表于 12-27 14:12

    【「從算法到電路—數字芯片算法的電路實現」閱讀體驗】+內容簡介

    內容簡介這是一本深入解讀基礎算法及其電路設計,以打通算法研發到數字IC設計的實現屏障,以及指導芯片設計工程師從底層掌握復雜電路設計與優化方法為目標的專業技術書。任何芯片(如WiFi芯片、5G芯片
    發表于 11-21 17:14

    【「從算法到電路—數字芯片算法的電路實現」閱讀體驗】+介紹基礎硬件算法模塊

    作為嵌入式開發者往往比較關注硬件和軟件的協調。本書介紹了除法器,信號發生器,濾波器,分頻器等基本算法的電路實現,雖然都是基礎內容,但是也是最常用到的基本模塊。 隨著逆全球化趨勢的出現,過去的研發
    發表于 11-21 17:05

    【「從算法到電路—數字芯片算法的電路實現」閱讀體驗】+一本介紹基礎硬件算法模塊實現的好書

    切換頻率是否能無縫切換,以及頻率異常檢測等。我之前嵌入式開發中就有設計過外部晶振異常,切換到內部rc始終使用的可靠性開發實踐,這些都需要對硬件實現有一定了解。 Crc算法也是最常用的算法, 嵌入式開發
    發表于 11-20 13:42

    Pure path studio內能否自己創建一個component,來實現特定的算法,例如LMS算法

    TLV320AIC3254EVM-K評估模塊, Pure path studio軟件開發環境。 問題:1.Pure path studio 內能否自己創建一個component,來實現特定的算法
    發表于 11-01 08:25

    請問GDE中的NR算法反應慢怎么解決?

    我在使用NR(NoiseReduction)算法時發現算法起作用的時間太長,輸入1K正弦波測試,大約是在輸入40秒以后出現下圖轉變 再過段時間又變成下圖的樣子。 但是播放器重新開始的短暫停止也
    發表于 10-29 07:42

    時間復雜度為 O(n^2) 的排序算法

    , O(n2) 的排序算法可能會比 O(nlogn) 的排序算法執行效率高。不過隨著數據規模增大, O(nlogn) 的排序算法是不二選擇。本篇我們主要對 O(n2) 的排序算法進行介
    的頭像 發表于 10-19 16:31 ?1185次閱讀
    時間復雜度為 O(n^2) 的排序<b class='flag-5'>算法</b>

    名單公布!【書籍評測活動NO.46】從算法到電路 | 數字芯片算法的電路實現

    :elecfans123)領取書籍進行評測,如在5個工作日內未聯系,視為放棄本次試用評測資格! 《從算法到電路——數字芯片算法的電路實現》 是一本深入解讀基礎算法及其電路設計,以打通算法
    發表于 10-09 13:43

    BLDC電機控制算法詳解

    算法。本文將詳細介紹BLDC電機的控制算法,包括電速算法、電流環控制算法、磁場導向控制算法等,并探討其原理、特點和應用。
    的頭像 發表于 06-14 10:49 ?1117次閱讀

    運動控制算法有哪些

    運動控制算法是機器人學和自動化領域中的核心技術之一,它們負責規劃和執行機器人或自動化設備的精確運動。以下是一些常見的運動控制算法以及它們的基本原理和應用場景。 PID控制算法
    的頭像 發表于 06-13 09:17 ?2661次閱讀

    常用的電機控制算法有哪些

    在電機控制領域,選擇合適的控制算法對于實現高效、精確且穩定的電機運行至關重要。以下將詳細介紹幾種常用的電機控制算法,并通過具體的分析和實例,探討它們的特點、應用以及優勢。
    的頭像 發表于 06-05 16:31 ?2440次閱讀

    如何對MD5加密算法優化?

    有人針對程序安全啟動過程,進行MD5算法的優化嘛。目前采用標準算法,時間稍長,如果有人做過優化的話,可以分享一下,謝謝。
    發表于 02-18 08:20

    Camera算法集成實現指南

    最常見的雙攝算法是雙攝景深算法或者叫雙攝背景虛化算法,除此之外,也有彩色+黑白用于增強夜拍效果的雙攝算法。單幀算法和多幀
    的頭像 發表于 01-25 15:12 ?2064次閱讀

    AC電機控制算法是什么

    AC電機控制算法是一種用于控制交流電機運行的技術,它可以實現對電機的啟動、停止、速度調節和位置控制等功能。本文將對AC電機控制算法的原理、分類和應用進行詳細介紹。 一、AC電機控制算法原理 交流電
    的頭像 發表于 01-11 11:21 ?1124次閱讀
    AC電機控制<b class='flag-5'>算法</b>是什么

    請問sigmastudio算法集成對什么資源有要求,以及有什么方法可以查看系統資源占用情況?

    您好, 目前基于ADSP-21565開發了一些基礎音頻功能,想知道目前系統占用了多少資源,還剩下多少資源,以此來評估后續的sigmastudio算法集成可行性。 請問sigmastudio算法集成對什么資源有要求,以及有什么方法
    發表于 01-10 08:28
    主站蜘蛛池模板: 国产99九九久久无码熟妇| 做你的爱人BD日本| 蜜桃成熟时2在线观看完整版hd| 广东95后小情侣酒店自拍流出| 在线观看亚洲专区5555| 午夜影院视费x看| 暖暖视频中国在线观看免费韩国 | 久久亚洲伊人| 国产在线观看www鲁啊鲁免费| 粗壮挺进邻居人妻无码| 99热国产这里只有精品免费| 影音先锋男人资源813.| 亚洲精品嫩草研究院久久| 色婷婷国产精品视频一区二区三区| 男人到天堂a在538线| 浪货嗯啊趴下NP粗口黄暴| 花蝴蝶在线高清视频观看免费播放| 国产精品99久久久久久AV下载| s8sp视频高清在线播放| 999在线观看精品免费| 一区一区三区产品| 亚洲免费视频日本一区二区| 午夜伦yy44880影院| 窝窝午夜色视频国产精品东北| 日本三级床震| 日本另类z0zxhd| 日本美女靠逼| 日本XXXXZZX片免费观看| 欧美精品成人久久网站| 奶大B紧17p| 年轻的朋友4在线看中文字幕| 美丽的姑娘BD在线观看| 美女直播喷水| 欧美高清videossexo| 嫩草影院成人| 男女夜晚在爽视频免费观看| 免费A级毛片无码无遮挡| 免费可以看黄的视频s色| 男女交性视频无遮挡全过程| 男女久久久国产一区二区三区 | 99精品免费观看|