日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > windows >内容正文

windows

分布式系统理论基础1: 一致性、2PC和3PC

發(fā)布時(shí)間:2025/3/21 windows 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 分布式系统理论基础1: 一致性、2PC和3PC 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

分布式系統(tǒng)理論基礎(chǔ) - 一致性、2PC和3PC

引言

狹義的分布式系統(tǒng)指由網(wǎng)絡(luò)連接的計(jì)算機(jī)系統(tǒng),每個(gè)節(jié)點(diǎn)獨(dú)立地承擔(dān)計(jì)算或存儲(chǔ)任務(wù),節(jié)點(diǎn)間通過(guò)網(wǎng)絡(luò)協(xié)同工作。廣義的分布式系統(tǒng)是一個(gè)相對(duì)的概念,正如Leslie Lamport所說(shuō)[1]

What is a distributed systeme.?Distribution is in the eye of the beholder.
To the user sitting at the keyboard, his IBM personal computer is a nondistributed system.?
To a flea crawling around on the circuit board, or to the engineer who designed it, it's very much a distributed system.

?

?一致性是分布式理論中的根本性問(wèn)題,近半個(gè)世紀(jì)以來(lái),科學(xué)家們圍繞著一致性問(wèn)題提出了很多理論模型,依據(jù)這些理論模型,業(yè)界也出現(xiàn)了很多工程實(shí)踐投影。下面我們從一致性問(wèn)題、特定條件下解決一致性問(wèn)題的兩種方法(2PC、3PC)入門(mén),了解最基礎(chǔ)的分布式系統(tǒng)理論。

?

一致性(consensus)

何為一致性問(wèn)題?簡(jiǎn)單而言,一致性問(wèn)題就是相互獨(dú)立的節(jié)點(diǎn)之間如何達(dá)成一項(xiàng)決議的問(wèn)題。分布式系統(tǒng)中,進(jìn)行數(shù)據(jù)庫(kù)事務(wù)提交(commit transaction)、Leader選舉、序列號(hào)生成等都會(huì)遇到一致性問(wèn)題。這個(gè)問(wèn)題在我們的日常生活中也很常見(jiàn),比如牌友怎么商定幾點(diǎn)在哪打幾圈麻將:

《賭圣》,1990

?

假設(shè)一個(gè)具有N個(gè)節(jié)點(diǎn)的分布式系統(tǒng),當(dāng)其滿(mǎn)足以下條件時(shí),我們說(shuō)這個(gè)系統(tǒng)滿(mǎn)足一致性:

  • 全認(rèn)同(agreement): 所有N個(gè)節(jié)點(diǎn)都認(rèn)同一個(gè)結(jié)果
  • 值合法(validity): 該結(jié)果必須由N個(gè)節(jié)點(diǎn)中的節(jié)點(diǎn)提出
  • 可結(jié)束(termination): 決議過(guò)程在一定時(shí)間內(nèi)結(jié)束,不會(huì)無(wú)休止地進(jìn)行下去
  • ?

    有人可能會(huì)說(shuō),決定什么時(shí)候在哪搓搓麻將,4個(gè)人商量一下就ok,這不很簡(jiǎn)單嗎?

    ?

    但就這樣看似簡(jiǎn)單的事情,分布式系統(tǒng)實(shí)現(xiàn)起來(lái)并不輕松,因?yàn)樗媾R著這些問(wèn)題:

    • 消息傳遞異步無(wú)序(asynchronous): 現(xiàn)實(shí)網(wǎng)絡(luò)不是一個(gè)可靠的信道,存在消息延時(shí)、丟失,節(jié)點(diǎn)間消息傳遞做不到同步有序(synchronous)
    • 節(jié)點(diǎn)宕機(jī)(fail-stop): 節(jié)點(diǎn)持續(xù)宕機(jī),不會(huì)恢復(fù)
    • 節(jié)點(diǎn)宕機(jī)恢復(fù)(fail-recover): 節(jié)點(diǎn)宕機(jī)一段時(shí)間后恢復(fù),在分布式系統(tǒng)中最常見(jiàn)
    • 網(wǎng)絡(luò)分化(network partition): 網(wǎng)絡(luò)鏈路出現(xiàn)問(wèn)題,將N個(gè)節(jié)點(diǎn)隔離成多個(gè)部分
    • 拜占庭將軍問(wèn)題(byzantine failure)[2]: 節(jié)點(diǎn)或宕機(jī)或邏輯失敗,甚至不按套路出牌拋出干擾決議的信息

    ?

    假設(shè)現(xiàn)實(shí)場(chǎng)景中也存在這樣的問(wèn)題,我們看看結(jié)果會(huì)怎樣:

    我: 老王,今晚7點(diǎn)老地方,搓夠48圈不見(jiàn)不散! …… (第二天凌晨3點(diǎn)) 隔壁老王: 沒(méi)問(wèn)題! // 消息延遲 我: …… ---------------------------------------------- 我: 小張,今晚7點(diǎn)老地方,搓夠48圈不見(jiàn)不散! 小張: No …… (兩小時(shí)后……) 小張: No problem! // 宕機(jī)節(jié)點(diǎn)恢復(fù) 我: …… ----------------------------------------------- 我: 老李頭,今晚7點(diǎn)老地方,搓夠48圈不見(jiàn)不散! 老李: 必須的,大保健走起! // 拜占庭將軍 (這是要打麻將呢?還是要大保健?還是一邊打麻將一邊大保健……)

    還能不能一起愉快地玩耍...

    ?

    我們把以上所列的問(wèn)題稱(chēng)為系統(tǒng)模型(system model),討論分布式系統(tǒng)理論和工程實(shí)踐的時(shí)候,必先劃定模型。例如有以下兩種模型:

  • 異步環(huán)境(asynchronous)下,節(jié)點(diǎn)宕機(jī)(fail-stop)
  • 異步環(huán)境(asynchronous)下,節(jié)點(diǎn)宕機(jī)恢復(fù)(fail-recover)、網(wǎng)絡(luò)分化(network partition)
  • 2比1多了節(jié)點(diǎn)恢復(fù)、網(wǎng)絡(luò)分化的考量,因而對(duì)這兩種模型的理論研究和工程解決方案必定是不同的,在還沒(méi)有明晰所要解決的問(wèn)題前談解決方案都是一本正經(jīng)地耍流氓。

    ?

    一致性還具備兩個(gè)屬性,一個(gè)是強(qiáng)一致(safety),它要求所有節(jié)點(diǎn)狀態(tài)一致、共進(jìn)退;一個(gè)是可用(liveness),它要求分布式系統(tǒng)24*7無(wú)間斷對(duì)外服務(wù)。FLP定理(FLP impossibility)[3][4]?已經(jīng)證明在一個(gè)收窄的模型中(異步環(huán)境并只存在節(jié)點(diǎn)宕機(jī)),不能同時(shí)滿(mǎn)足 safety 和 liveness。

    ?

    FLP定理是分布式系統(tǒng)理論中的基礎(chǔ)理論,正如物理學(xué)中的能量守恒定律徹底否定了永動(dòng)機(jī)的存在,FLP定理否定了同時(shí)滿(mǎn)足safety 和 liveness 的一致性協(xié)議的存在。

    《怦然心動(dòng) (Flipped)》,2010

    ?

    工程實(shí)踐上根據(jù)具體的業(yè)務(wù)場(chǎng)景,或保證強(qiáng)一致(safety),或在節(jié)點(diǎn)宕機(jī)、網(wǎng)絡(luò)分化的時(shí)候保證可用(liveness)。2PC、3PC是相對(duì)簡(jiǎn)單的解決一致性問(wèn)題的協(xié)議,下面我們就來(lái)了解2PC和3PC。

    ?

    2PC

    2PC(tow phase commit)兩階段提交[5]顧名思義它分成兩個(gè)階段,先由一方進(jìn)行提議(propose)并收集其他節(jié)點(diǎn)的反饋(vote),再根據(jù)反饋決定提交(commit)或中止(abort)事務(wù)。我們將提議的節(jié)點(diǎn)稱(chēng)為協(xié)調(diào)者(coordinator),其他參與決議節(jié)點(diǎn)稱(chēng)為參與者(participants, 或cohorts):

    2PC, phase one

    在階段1中,coordinator發(fā)起一個(gè)提議,分別問(wèn)詢(xún)各participant是否接受。

    2PC, phase two

    在階段2中,coordinator根據(jù)participant的反饋,提交或中止事務(wù),如果participant全部同意則提交,只要有一個(gè)participant不同意就中止。

    ?

    在異步環(huán)境(asynchronous)并且沒(méi)有節(jié)點(diǎn)宕機(jī)(fail-stop)的模型下,2PC可以滿(mǎn)足全認(rèn)同、值合法、可結(jié)束,是解決一致性問(wèn)題的一種協(xié)議。但如果再加上節(jié)點(diǎn)宕機(jī)(fail-recover)的考慮,2PC是否還能解決一致性問(wèn)題呢?

    ?

    coordinator如果在發(fā)起提議后宕機(jī),那么participant將進(jìn)入阻塞(block)狀態(tài)、一直等待coordinator回應(yīng)以完成該次決議。這時(shí)需要另一角色把系統(tǒng)從不可結(jié)束的狀態(tài)中帶出來(lái),我們把新增的這一角色叫協(xié)調(diào)者備份(coordinator watchdog)。coordinator宕機(jī)一定時(shí)間后,watchdog接替原coordinator工作,通過(guò)問(wèn)詢(xún)(query) 各participant的狀態(tài),決定階段2是提交還是中止。這也要求?coordinator/participant 記錄(logging)歷史狀態(tài),以備coordinator宕機(jī)后watchdog對(duì)participant查詢(xún)、coordinator宕機(jī)恢復(fù)后重新找回狀態(tài)。

    ?

    從coordinator接收到一次事務(wù)請(qǐng)求、發(fā)起提議到事務(wù)完成,經(jīng)過(guò)2PC協(xié)議后增加了2次RTT(propose+commit),帶來(lái)的時(shí)延(latency)增加相對(duì)較少。

    ?

    3PC

    3PC(three phase commit)即三階段提交[6][7],既然2PC可以在異步網(wǎng)絡(luò)+節(jié)點(diǎn)宕機(jī)恢復(fù)的模型下實(shí)現(xiàn)一致性,那還需要3PC做什么,3PC是什么鬼?

    ?

    在2PC中一個(gè)participant的狀態(tài)只有它自己和coordinator知曉,假如coordinator提議后自身宕機(jī),在watchdog啟用前一個(gè)participant又宕機(jī),其他participant就會(huì)進(jìn)入既不能回滾、又不能強(qiáng)制commit的阻塞狀態(tài),直到participant宕機(jī)恢復(fù)。這引出兩個(gè)疑問(wèn):

  • 能不能去掉阻塞,使系統(tǒng)可以在commit/abort前回滾(rollback)到?jīng)Q議發(fā)起前的初始狀態(tài)
  • 當(dāng)次決議中,participant間能不能相互知道對(duì)方的狀態(tài),又或者participant間根本不依賴(lài)對(duì)方的狀態(tài)
  • ?

    相比2PC,3PC增加了一個(gè)準(zhǔn)備提交(prepare to commit)階段來(lái)解決以上問(wèn)題:

    圖片截取自wikipedia

    coordinator接收完participant的反饋(vote)之后,進(jìn)入階段2,給各個(gè)participant發(fā)送準(zhǔn)備提交(prepare to commit)指令。participant接到準(zhǔn)備提交指令后可以鎖資源,但要求相關(guān)操作必須可回滾。coordinator接收完確認(rèn)(ACK)后進(jìn)入階段3、進(jìn)行commit/abort,3PC的階段3與2PC的階段2無(wú)異。協(xié)調(diào)者備份(coordinator watchdog)、狀態(tài)記錄(logging)同樣應(yīng)用在3PC。

    ?

    participant如果在不同階段宕機(jī),我們來(lái)看看3PC如何應(yīng)對(duì):

    • 階段1:?coordinator或watchdog未收到宕機(jī)participant的vote,直接中止事務(wù);宕機(jī)的participant恢復(fù)后,讀取logging發(fā)現(xiàn)未發(fā)出贊成vote,自行中止該次事務(wù)
    • 階段2:?coordinator未收到宕機(jī)participant的precommit ACK,但因?yàn)橹耙呀?jīng)收到了宕機(jī)participant的贊成反饋(不然也不會(huì)進(jìn)入到階段2),coordinator進(jìn)行commit;watchdog可以通過(guò)問(wèn)詢(xún)其他participant獲得這些信息,過(guò)程同理;宕機(jī)的participant恢復(fù)后發(fā)現(xiàn)收到precommit或已經(jīng)發(fā)出贊成vote,則自行commit該次事務(wù)
    • 階段3: 即便coordinator或watchdog未收到宕機(jī)participant的commit ACK,也結(jié)束該次事務(wù);宕機(jī)的participant恢復(fù)后發(fā)現(xiàn)收到commit或者precommit,也將自行commit該次事務(wù)

    因?yàn)橛辛藴?zhǔn)備提交(prepare to commit)階段,3PC的事務(wù)處理延時(shí)也增加了1個(gè)RTT,變?yōu)?個(gè)RTT(propose+precommit+commit),但是它防止participant宕機(jī)后整個(gè)系統(tǒng)進(jìn)入阻塞態(tài),增強(qiáng)了系統(tǒng)的可用性,對(duì)一些現(xiàn)實(shí)業(yè)務(wù)場(chǎng)景是非常值得的。

    ?

    小結(jié)

    以上介紹了分布式系統(tǒng)理論中的部分基礎(chǔ)知識(shí),闡述了一致性(consensus)的定義和實(shí)現(xiàn)一致性所要面臨的問(wèn)題,最后討論在異步網(wǎng)絡(luò)(asynchronous)、節(jié)點(diǎn)宕機(jī)恢復(fù)(fail-recover)模型下2PC、3PC怎么解決一致性問(wèn)題。

    ?

    閱讀前人對(duì)分布式系統(tǒng)的各項(xiàng)理論研究,其中有嚴(yán)謹(jǐn)?shù)赝评怼⒆C明,有一種數(shù)學(xué)的美;觀現(xiàn)實(shí)中的分布式系統(tǒng)實(shí)現(xiàn),是綜合各種因素下妥協(xié)的結(jié)果。

    ?

    [1]?Solved Problems, Unsolved Problems and Problems in Concurrency,?Leslie Lamport, 1983

    [2]?The Byzantine Generals Problem,?Leslie Lamport,Robert Shostak and Marshall Pease, 1982

    [3]?Impossibility of Distributed Consensus with One Faulty Process,?Fischer, Lynch and Patterson, 1985

    [4]?FLP Impossibility的證明,?Daniel Wu, 2015

    [5]?Consensus Protocols: Two-Phase Commit,?Henry Robinson, 2008

    [6]?Consensus Protocols: Three-phase Commit,?Henry Robinson, 2008

    [7]?Three-phase commit protocol,?Wikipedia

    ?

    總結(jié)

    以上是生活随笔為你收集整理的分布式系统理论基础1: 一致性、2PC和3PC的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。