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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

理解分布式一致性:Paxos协议之Cheap Paxos Fast Paxos

發布時間:2024/2/28 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 理解分布式一致性:Paxos协议之Cheap Paxos Fast Paxos 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

理解分布式一致性:Paxos協議之Cheap Paxos & Fast Paxos

  • Cheap Paxos
    • Message flow: Cheap Multi-Paxos
  • Fast Paxos
    • Message flow: Fast Paxos, non-conflicting
    • Message flow: Fast Paxos, conflicting proposals
    • Message flow: Fast Paxos with uncoordinated recovery, collapsed roles

在前面一篇文章我們講到了理解分布式一致性:Paxos協議之Multi-Paxos,本篇文章我會講解Paxos協議的另外兩個變種:Cheap Paxos和Fast Paxos。

Cheap Paxos

Cheap Paxos 是Basic Paxos 的繼承版本。其實所有的Paxos變種都來自與Basic Paxos,都是基于它來進行改進的。那么Cheap Paxos有什么特點呢?
在Basic Paxos中,我們知道,共識如果想要正常進行的話,出錯的節點數目必須小于n/2, 也就是說必須要有大于n/2的節點正常運行才能共識成功。節點運行就不可避免的會占用資源,有沒有什么辦法可以即節省資源又可以保證節點正常共識呢?
辦法就是Cheap Paxos:我們在Cheap Paxos里面引入了輔助節點的概念,輔助節點只有在必須需要它來達成共識的情況下才會啟動。舉個例子,如果我們總共有N+1個節點,那么我們只能夠忍受N/2個節點出錯,否則系統不能達成共識。但是當我們再引入N個輔助節點,即使有N個節點出錯,只要額外的N個輔助節點啟動并正常工作,就能達成共識并保證系統的正常運行,輔助節點在正常節點恢復工作后會自動停止,這樣只是在必要的時候才啟動輔助資源,就大大的解約了分布式系統的成本,所以叫它Cheap Paxos.

Message flow: Cheap Multi-Paxos

下圖是3個正常節點+1個輔助節點的流程,如果系統規定的共識節點個數是3個,那么當一個正常節點掛掉之后,輔助節點會起來幫助完成共識工作。

ProposerAcceptor1Acceptor2Acceptor3Aux-- Phase 2 --Accept!(1,I,V)Accept!(1,I,V)Accept!(1,I,V)Accepted(1,I,V)Accepted(1,I,V)Acceptor3 is down共識數目不夠,重發請求給輔助節點Accept!(1,I,V)Accept!(1,I,V)Accept!(1,I,V)Accepted(1,I,V)Accepted(1,I,V)Accepted(1,I,V)共識成功,將最小共識節點減一,停止輔助節點繼續下一輪Accept!(1,I+1,W)Accept!(1,I+1,W)Accepted(1,I+1,W)Accepted(1,I+1,W)ProposerAcceptor1Acceptor2Acceptor3Aux

Fast Paxos

在之前提到的Paxos協議中,消息最后到達Learner一般都要經歷 Client–>Proposer–>Acceptor–>Learner 總共3個步驟。

那么有沒有更快的方法讓消息到達Learner呢?畢竟Learner是真正執行任務的,我們希望這個任務更加快速的為Learner所知。方法就是如果Proposer本身沒有數據需要被確認的話,那么Client可以直接發送Accept請求給Acceptor,從而跳過Proposer這一步,這樣的操作叫做Fast Paxos。

這里還要注意一點,Client 發送請求給Proposer是直接發送給Leader,也就是發送一次就夠了,但是發給Acceptor的話就要所有的Acceptors都發一遍。

Message flow: Fast Paxos, non-conflicting

下圖列出了正常運行的情況,沒有沖突正常執行。

ClientLeaderAcceptor1Acceptor2Acceptor3Acceptor4LearnerAccept!(N,I,W)Accept!(N,I,W)Accept!(N,I,W)Accept!(N,I,W)Accepted(N,I,W)Accepted(N,I,W)Accepted(N,I,W)Accepted(N,I,W)Accepted(N,I,W)Accepted(N,I,W)Accepted(N,I,W)Accepted(N,I,W)Response(W)ClientLeaderAcceptor1Acceptor2Acceptor3Acceptor4Learner

Message flow: Fast Paxos, conflicting proposals

當有多個Client同時發送Accept請求的時候就有可能產生沖突。這時候有兩種解決辦法。

  • Leader檢測到沖突之后,根據規定的算法從沖突中選擇一個數據,重新發送Accept請求。如下圖所示:
  • Client1Client2LeaderAcceptor1Acceptor2Acceptor3Acceptor4LearnerAccept!(N,I,V)Accept!(N,I,V)Accept!(N,I,V)Accept!(N,I,V)Accept!(N,I,W)Accept!(N,I,W)Accept!(N,I,W)Accept!(N,I,W)Accepted(N,I,V)Accepted(N,I,V)Accepted(N,I,V)Accepted(N,I,V)Accepted(N,I,W)Accepted(N,I,W)Accepted(N,I,W)Accepted(N,I,W)Leader收到了2個Accepted(N,I,V),2個Accepted(N,I,W),產生了沖突,Leader選擇W,重新發起一輪Accept請求Accept!(N+1,I,W)Accept!(N+1,I,W)Accept!(N+1,I,W)Accept!(N+1,I,W)Accepted(N+1,I,W)Accepted(N+1,I,W)Accepted(N+1,I,W)Accepted(N+1,I,W)Accepted(N+1,I,W)Accepted(N+1,I,W)Accepted(N+1,I,W)Accepted(N+1,I,W)Response(W)Response(W)Client1Client2LeaderAcceptor1Acceptor2Acceptor3Acceptor4Learner
  • 當檢測到沖突的時候,如果Acceptors自己就能解決沖突,那么就完全不需要Leader再次發送Accept請求了,這樣就又減少了一次請求,節省了時間。如下圖所示:
  • Client1Client2LeaderAcceptor1Acceptor2Acceptor3Acceptor4LearnerAccept!(N,I,V)Accept!(N,I,V)Accept!(N,I,V)Accept!(N,I,V)Accept!(N,I,W)Accept!(N,I,W)Accept!(N,I,W)Accept!(N,I,W)Accepted(N,I,V)Accepted(N,I,V)Accepted(N,I,V)Accepted(N,I,V)Accepted(N,I,W)Accepted(N,I,W)Accepted(N,I,W)Accepted(N,I,W)Acceptors檢測到沖突,直接根據協議自行解決,這里選擇W為最終結果Accepted(N+1,I,W)Accepted(N+1,I,W)Accepted(N+1,I,W)Accepted(N+1,I,W)Accepted(N+1,I,W)Accepted(N+1,I,W)Accepted(N+1,I,W)Accepted(N+1,I,W)Response(W)Response(W)Client1Client2LeaderAcceptor1Acceptor2Acceptor3Acceptor4Learner

    Message flow: Fast Paxos with uncoordinated recovery, collapsed roles

    下圖是所有的角色集合到一個Server的情況,是更加簡潔的實現。

    Client1Client2Server1Server2Server3Server4Accept!(N,I,V)Accept!(N,I,V)Accept!(N,I,V)Accept!(N,I,V)Accept!(N,I,W)Accept!(N,I,W)Accept!(N,I,W)Accept!(N,I,W)Accepted(N,I,V)Accepted(N,I,V)Accepted(N,I,W)Accepted(N,I,W)Servers檢測到沖突,直接根據協議自行解決,這里選擇W為最終結果Accepted(N+1,I,W)Accepted(N+1,I,W)Accepted(N+1,I,W)Accepted(N+1,I,W)Response(W)Response(W)Client1Client2Server1Server2Server3Server4

    更多精彩內容且看:

    • 區塊鏈從入門到放棄系列教程-涵蓋密碼學,超級賬本,以太坊,Libra,比特幣等持續更新
    • Spring Boot 2.X系列教程:七天從無到有掌握Spring Boot-持續更新
    • Spring 5.X系列教程:滿足你對Spring5的一切想象-持續更新
    • java程序員從小工到專家成神之路(2020版)-持續更新中,附詳細文章教程

    更多教程請參考flydean的博客

    超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生

    總結

    以上是生活随笔為你收集整理的理解分布式一致性:Paxos协议之Cheap Paxos Fast Paxos的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。