也談分布式系統中的網路模型和故障模型

2021-10-05 09:47:28 字數 4322 閱讀 9785

3. 故障模型的劃分

3.3 按照使用者對資料的感知分類(perception by the system users)

4. 網路模型和故障模型的關係

參考鏈結

分布式系統中的網路模型和故障模型是個老生常談的問題了。

對於故障模型,大家可能會有點懵。因為無論是在各種教材上還是在各種部落格中關於該模型的劃分都很雜、很亂,甚至相互之間有些矛盾。舉例來說,大家可能看到過下面這兩張圖。這兩張圖分別對故障模型進行了劃分,但劃分結果卻迥然不同。

在本篇部落格中,我們也想談談這兩個模型。對於故障模型,我們努力將現有的各種劃分結果進行統一,使得我們的劃分結果更加系統科學。此外,我們也嘗試從新的角度理解網路模型,並回答網路模型和故障模型的關係。

網路模型分為:同步網路和非同步網路,兩者的不嚴謹定義分別如下所示:

這裡需要指出的是,儘管「網路模型」這個詞字面上只包含了「網路」,但其實際上對節點處理延遲也進行了規定。

此外,在我們看來,同步網路和非同步網路的最大區別在於故障的可檢測性。具體來說,在同步網路中,其他節點或網路的故障可以通過超時(ping/timeout)進行檢測;而在非同步網路中,這些故障是無法進行檢測的。

由於我們只能通過**超時(ping/timeout)**在同步網路中進行故障檢測,可檢測的故障也只有節點崩潰網路鏈路斷開這種錯誤(就故障而言,節點崩潰網路鏈路斷開是等價的,這在3.1節種將進行討論)。

記住這個結論,該結論將在第4節中用到。

看久了故障模型和網路模型,我曾經有的乙個疑問是:

同步網路中是否保證了網路鏈路不會發生斷開?

答案是不保證。同步網路中也會出現鏈路斷開,因此才需要使用**超時(ping/timeout)**進行檢測。當然,非同步網路中更不會保證鏈路不斷開。

綜合比較多個劃分結果,我們將故障模型重新劃分如下圖所示,相應的解釋如下表。

故障劃分

解釋byzantine failure

節點可以任意篡改傳送給其他節點的資料

authentication detectable byzantine failure (adb)

byzantine failure的特例;節點可以篡改資料,但不能偽造其他節點的資料

response failure

adb的特例,節點可以返回錯誤資料,但只能返回受限的錯誤資料

performance failure

又名timing failure, 節點未在特定時間段內收到資料,即時間太早或太晚

omission failure

performance failure的特例;節點收到資料的時間無限晚,即收不到資料

crash failure

omission failure的特例;在omission failure的基礎上,增加了節點停止響應的假設,也即持續性地omission failure

fail-stop failure

crash failure的特例;在crash failure的基礎上增加了錯誤可檢測的假設

從圖中我們可以看出,越在外層的錯誤模型(如byzantine failure)所作的假設越少,越在內層的錯誤模型(如crash failure)所作的假設越多。也即,乙個在內層模型中可行的共識方案未必可以在外層模型中可行。

以下,我們分別討論故障模型的乙個疑問和兩個分類。

一直以來,我對故障模型存在乙個疑問:

故障模型是針對節點還是針對網路而言的?也即:故障模型中的故障討論的是節點故障還是網路故障

我思考的結論是兩者(節點故障和網路故障)都包括

我個人對此的理解是:從分布式系統中節點的角度來看,節點故障和網路故障是無法區分的,甚至一定程度上是等價的。舉例來說:「網路延遲」和「節點處理速率慢」等價;「網路鏈路斷開」和「節點宕機」等價;「網路鏈路中路由器篡改資料」和「節點惡意篡改資料」等價。因此,故障模型中的故障是將節點和網路包含在一起進行討論的。

這裡順便對omission failure故障模型的含義進行深入討論。

omission failureperformance failure以及crash failure進行對比,omission failure故障模型的含義包括兩個層面:

由於我們已經說明了節點故障和網路故障的等價性。

也就是說:網路分割槽故障實際上是omission failure的乙個特例

3.2.1 值故障 (value failure)

值故障的含義是節點接收到的資料值發生了故障。

3.2.2 時間故障 (time failure)

時間故障的含義是節點接收到資料的事件發生的故障。

這裡的time failure和上表中的performance failure那一行中的timing failure不同。這裡將最裡層的4個故障統稱為time failure

3.3.1 非一致性故障 (inconsistent failure)

非一致性故障是指其他節點從同一節點中接收到的資料是不一致的。

3.3.2 一致性故障 (consistent failure)

一致性故障是指其他節點從同一節點中接收到的資料是一致的,在此基礎上出現的其他故障。

在開始網路模型和故障模型的關係之前,我們先討論一下fail-stop failure這個特殊的故障模型。

前面我們介紹了fail-stop failure這個模型,其是在crash failure模型的基礎上增加了故障可檢測的假設。回顧我們在第2節中的理解:同步網路和非同步網路最大的區別在於故障的可檢測性。

因此,fail-stop failure模型本質上是在crash failure模型的基礎上增加了「同步網路」的假設。

那麼為什麼在其他幾類模型中不增加「同步網路」的假設,使其演變為另一種模型呢?

回顧我們在第2節中的結論,同步網路中可檢測的故障只有節點崩潰或網路鏈路斷開這種故障。而這種故障正對應於crash failure

也就是說,在除crash failurefail-stop failure之外的其他5類故障模型中,同步網路和非同步網路的假設並不會對模型產生影響

因此,無需對其他模型怎加「同步網路」的假設。

一定程度上來看,網路模型和故障模型是正交的。但,是否將不同的網路模型和故障模型進行疊加,需要考慮其疊加後的意義。

正如4.2節中所說,在除crash failure之外的其他5類故障模型,疊加網路模型不會分化出新的模型。因而,我們在眾多的教材和部落格中,都不會看到它們相疊加的討論。

fault tolerance, chap08

failure modes in distributed systems

failure semantic - wikipedia

understanding omission failure in distributed systems

modes of failure

failure modes and models

what we talk about when we talk about distributed systems

crash recovery with partial amnesia failure model issues

分布式系統中的網路模型和故障模型

分布式系統一致性的發展歷史 (二)

faults and fault-tolerance

分布式系統中的分布式事務

分布式事務中可以借助mq訊息系統來進行事務控制,這一點與可靠訊息最終一致方案一樣。看來mq中介軟體確實在乙個分布式系統架構中,扮演者重要的角色。最大努力通知方案是比較簡單的分布式事務方案,它本質上就是通過定期校對,實現資料一致性。中介軟體如何保證訊息的一致性 問題的問法多種多樣,怎麼保證兩個伺服器的...

網路作業系統和分布式系統區別簡介

網路作業系統 nos 是網路的心臟和靈魂,是向網路計算機提供服務的特殊的作業系統。它在計算機作業系統下工作,使計算機作業系統增加了網路操作所需要的能力。網路作業系統嚴格來說應稱為軟體平台。網路作業系統執行在稱為伺服器的計算機上 你的pc裝了此系統,pc就是乙個小伺服器 並由聯網的計算機使用者共享,這...

分布式系統中的程序遷移

1 程序遷移的目的 分布式系統的特點之一是允許資訊在系統中移動,但有的系統只允許資料 檔案 資料庫記錄等 在系統中遷移,有的系統只允許還未開始執行的任務進行遷移,有的系統允許處於執行狀態的任務進行遷移,最後一種情況被稱為 程序遷移 程序遷移是一種在松藕合的分布式系統中,將正在某處理機 源處理機 上執...