分布式系統的核心問題

2021-08-18 04:57:59 字數 1959 閱讀 8981

分布式系統的核心問題

主要內容:

一致性問題 共識問題

一致性:分布式集群中多個服務節點,對給定的操作,根據給定的協議,對處理結果對外保持一致. 不在乎結果是否正確,而是保證對外呈現的狀態一致.所有節點失敗也是一種一致.

引起不一致的因素:

節點間網路通訊的不可靠,訊息延遲,訊息亂序,內容錯誤.

節點處理時間無法保證: 結果可能錯誤,或者節點宕機.

滿足一致性的要求:

1. 有限時間完成請求的處理2.不同節點完成的結果相同.3決策的結果必須是某個節點提出的提案.

強一致性需要 順序保證. 時鐘

共識:對某一操作,達成一直的過程.通常達成這個一過程需要集群中的節點進行廣播投票.

但是由於分布式節點間的不穩定: 網路不可靠,節點宕機,假訊息等.達成共識並不容易.

針對如上不穩定的情況,把故障分為:非拜占庭錯誤(出現訊息不響應,但是訊息不會被篡改)和拜占庭錯誤(存在偽造訊息的情況).

共識演算法:

cft類 針對非拜占庭錯誤有: paxos 演算法.raft演算法.

容錯較好,處理快,保證不超過一半節點故障.

bft類 針對拜占庭錯誤有: pbft 確定性演算法,pow 工作量證明的概率演算法.

flp不可能原理: 非同步系統,不存在 任意場景下都能實現共識的演算法.

分布式同步:系統各個節點時鐘誤差存在上限,訊息傳遞必須在規定時間內完成,否則認為失敗.(傳統的分布式中,統一時鐘,超時失敗等都是同步)

分布式非同步:系統各個節點時鐘存在較大差距,訊息傳遞時間任意長(無法判斷節點故障還是網路延遲)

cap 一致性 :分布式計算系統不可能同時保證 強一致性,高可用性,高分割槽容忍性.

折中選擇:

弱化一致性:對結果不敏感的應用可以允許最終一致. couchdb

弱化可用性:對結果一致性敏感,銀行,當系統故障時會拒絕服務.mongodb , redis,mapreduce 為此設計. paxos 等共識演算法主要處理這種情況. 可能存在無法提供可用結果的情況,同時允許部分節點離線.

弱化分割槽容忍性: 網路分割槽出現概率較小, 兩階段提交演算法,關係型資料庫,zk主要考慮這種情況設計的.實踐中網路可用是雙通道,弱化網路不穩定因素.

paxos 演算法:

節點分為三種角色:

① 提案者:提出提案,系統提案都有自增id,(往往是客戶端擔任)

② 接受者:對提出的提案進行投票(服務端)

③ 學習者:對投票傳播學習,不參與投票

約束條件:

①保證決議結果是正確的,不會出現錯誤.只有被提案者提出的提案才會被投票接受.一次執行中被多數接受的提案成為最終決議

②保證決議在有限時間內完成,決議總會產生,並且學習者會接受決議

過程:

paxos演算法分為兩個階段。具體如下:

• 階段一:

(a) proposer選擇乙個提案編號n,然後向半數以上的acceptor傳送編號為n的prepare請求。

(b) 如果乙個acceptor收到乙個編號為n的prepare請求,且n大於該acceptor已經響應過的所有prepare請求的編號,那麼它就會將它已經接受過的編號最大的提案(如果有的話)作為響應反饋給proposer,同時該acceptor承諾不再接受任何編號小於n的提案。

• 階段二:

(a) 如果proposer收到半數以上acceptor對其發出的編號為n的prepare請求的響應,那麼它就會傳送乙個針對[n,v]提案的accept請求給半數以上的acceptor。注意:v就是收到的響應中編號最大的提案的value,如果響應中不包含任何提案,那麼v就由proposer自己決定。

(b) 如果acceptor收到乙個針對編號為n的提案的accept請求,只要該acceptor沒有對編號大於n的prepare請求做出過響應,它就接受該提案。

參考資料:

raft演算法:

參考資料:

pbft 演算法:

pow演算法 :

區塊鏈分布式系統核心問題

區塊鏈其實是一種分布式系統 分布式系統的問題 一致性問題 在分布式系統中,一致性 consistency,早期也叫 agreement 是指對於系統中的多個服務節點,給定一系列操作,在協議 往往通過某種共識演算法 保障下,試圖使得它們對處理結果達成某種程度的一致。如果分布式系統能實現 一致 對外就可...

分布式架構的核心問題

1.這麼多服務,客戶端該如何訪問?2.這麼多服務,服務之間如何進行通訊?3.這麼多服務,如何治理?4.服務掛了怎麼辦?springcloud生態用來解決以上分布式架構問題,最早的代表是spring cloud netfilx 但2018年底,netfilx無限期停止維護sprincloud生態了 a...

分布式系統核心理論

分布式系統正變得越來越重要,大型 幾乎都是分布式的。分布式系統的最大難點,就是各個節點的狀態如何同步。cap定理是這方面的基本定理,也是理解分布式系統的關鍵。在乙個分布式環境下,存在3個核心需求 寫操作之後的讀操作必須返回該值。對於乙個將資料副本分布在不同分布式節點上的系統來說,如果對第乙個節點的資...