分散式系統的共識(consensus)演算法比較
什麼是共識consensus?當多個主機透過非同步通訊方式組成網路叢集時,這種非同步網路預設是不可靠的,那麼在這些不可靠主機之間複製狀態需要採取一種機制,以保證每個主機的狀態最終達成相同一致性狀態,取得共識。
為什麼認為非同步網路預設是不可靠的?這是根據FLP原理。Impossibility of Distributed Consensus with One Faulty Process一文提出:在一個非同步系統中我們不可能確切知道任何一臺主機是否當機了,因為我們無法分清楚主機或網路的效能減慢與主機當機的區別,也就是說我們無法可靠地偵測到失敗錯誤。但是,我們還必須確保安全可靠。
在實際中,我們首先必須接受系統可能不可用,然後試圖減輕這種不可用,而不是完全迴避去除,減輕的手段有定時器和補償。Paxos等演算法因此而誕生。
Paxos演算法是最初最簡單的分散式共識演算法,它是透過節點之間來回兩次實現狀態複製(兩段複製),但是Paxos這種來回兩次的協調過程(甚至更長)拖延了時間,增加了系統的延遲。
在實際過程中,Paxos這種理想化的協議實際遭遇很多挑戰,也就是說,實際中有很多問題呼喚一種分散式協調機制來處理下面這些問題:
1.處理磁碟故障和損壞
2.處理有限的儲存容量
3.有效處理只讀請求
4.動態成員資格和重新配置
5.支援事務
6.驗證實施的安全
這就需要一種領導人或協調人角色來具體處理這些問題,Paxos是一種無領導人Leaderless演算法,而Raft演算法是一種強領導力Leadership的演算法。總之,之所以需要協調領導人是為了確保主機之間狀態複製過程的可靠性。
一個強勢領導人Leadership能夠在問題發生時在主機之間進行復雜的強協調,顯然Leaderless則是無領導人或協調人介入處理。但是強領導在保證可靠性的同時也會聚集單點風險,而且選舉領導人的過程也是費時費力的,因此,並不是領導力越強越好。需要根據自己的業務領域特點在Leadership和Leaderless之間選擇合適自己的演算法。
從Leadership到Leaderless以此從強到弱的排序是:
1.Strong Leadership強領導:Raft
2.Leader driven領導人驅動:VRR和 Mutil-Paxos
3.Leader with Delegation有代表團的領導人:Ios
前面三個重視單個領導人的演算法MultiPaxos,Raft 和 VRR的問題是:吞吐量將受到單個節點的限制。而Ios允許一個領導人動態地安全地委託其職責給系統中其他節點(代表團)。
4.Leader only when needed只有在需要時才有領導人:Hydra和Fast Paxos
5.Leaderless無領導人:Egalitarian Paxos和普通的Paxos
上述演算法中,最小延遲的演算法是VRR,最易於理解的是Raft,而對於廣域網地區之間複製,衝突最少conflicts rare的是 Egalitarian Paxos; conflicts common是 Fast Paxos.
上述演算法需要結合實際以及CAP理論與FLP綜合判斷選擇。
原文PPT
當前,日益廣泛使用的微服務架構會很自然地橫向擴充套件到分散式系統,雖然微服務本身是無態的,但是它會操作有態資料,這些有態資料要麼放在資料庫中,要麼放在快取中,那麼快取或資料庫進行橫向擴充套件組成分散式系統時就需要使用上面這些演算法,當然一些NoSQL資料庫內部已經實現了這些演算法,那麼瞭解這些演算法也能對我們進行NoSQL選型有參考作用。
[該貼被banq於2016-03-12 13:10修改過]
相關文章
- 分散式系統之Raft共識演算法分散式Raft演算法
- 幽默!分散式系統共識演算法的三階段分散式演算法
- 分散式共識演算法分散式演算法
- 共識演算法的比較:Casper vs Tendermint演算法
- 分散式系統唯一主鍵識別符號ID生成機制比較 - Encore分散式符號
- 分散式共識如何運作?分散式
- 深入理解分散式系統:分割槽、複製、分散式事務以及系統一致性與共識分散式
- 深入剖析分散式一致性共識演算法分散式演算法
- zarusz/SlimCluster:在.NET中實現的Raft分散式共識演算法Raft分散式演算法
- 分散式系統的Raft演算法分散式Raft演算法
- 分散式系統Paxos演算法分散式演算法
- 技術分享| 分散式系統中服務註冊發現元件的原理及比較分散式元件
- 如何構建分散式系統的知識體系分散式
- 比較微服務中的分散式事務模式微服務分散式模式
- 微服務的分散式事務模式比較 | RedHat微服務分散式模式Redhat
- 分散式系統原理---CBCAST演算法分散式AST演算法
- 幾種分散式呼叫鏈監控元件的實踐與比較(二)比較分散式元件
- 比較無語的系統
- 【分散式】 07 系統通訊初識分散式
- 區塊鏈共識演算法(1)分散式一致性演算法Raft區塊鏈演算法分散式Raft
- 區塊鏈共識演算法(4)分散式一致性演算法Paxos區塊鏈演算法分散式
- 分散式系統2:分散式系統中的時鐘分散式
- 分散式跟蹤系統——產品對比分散式
- 分散式 - 分散式系統的特點分散式
- 區塊鏈與分散式資料庫的比較區塊鏈分散式資料庫
- 分散式系統選舉演算法剖析分散式演算法
- 從分散式一致性到共識機制(二)Raft演算法分散式Raft演算法
- tikv/raft-rs:在 Rust 中實現的 Raft 分散式共識演算法原始碼RaftRust分散式演算法原始碼
- 分散式計算技術的比較:Jini, Jxta and Web Services分散式Web
- 分散式系統分散式
- 分散式系統的跟蹤系統分散式
- 分散式檔案系統(HDFS)與 linux系統檔案系統 對比分散式Linux
- 分散式系統關注點——初識「高可用」分散式
- 分散式系統:系統模型分散式模型
- 主流的CRM系統盤點比較
- 分散式系統(三)——分散式事務分散式
- 分散式系統限流演算法分析與實現分散式演算法
- 分散式:分散式系統下的唯一序列分散式