談談FLP和CAP的關係

1. 寫在前面

承接上一篇博客:也談分佈式系統中的網絡模型和故障模型,本篇博客仍然想探討一些分佈式系統的理論知識。
大家應該都聽說過分佈式系統理論中的FLP不可能性CAP不可能三角,那麼FLPCAP之間是什麼關係呢?等價還是包含
本篇博客,就想來談談FLPCAP之間的關係。

2. 理論回顧

本節先分別回顧一下FLPCAP這兩個理論。

2.1 FLP不可能性

Impossibility of Distributed Consensus with One Faulty Process這篇論文對FLP不可能性的描述如下:

No completely asynchronous consensus protocol can tolerate even a single unannounced process death.

翻譯成大白話就是說:在一個異步的網絡環境中,即使只有一個進程出現故障,也無法實現任何安全的共識算法。
在這篇論文中,作者也進行了一些假設:

  • 節點故障只限定於crash failure,不考慮Byzantine failure (“do not consider Byzantine failures”)
  • 消息通道是可靠的,消息只可能被延遲,但不會丟失也不會出現錯誤,且只會被傳遞一次 (“the message system is reliable—it delivers all messages correctly and exactly once”)

總的來說,這些假設是比較強的假設。因爲在如此強的假設下都無法實現安全的共識算法,那麼在一些較弱的假設下就更無法實現。因此,FLP不可能性的適用性更廣。
但論文中也指出,如果我們將假設進一步加強:假設網絡模型是同步的,那麼是可能實現安全的共識算法的

By way of contrast, solutions are known for the synchronous case, the “Byzantine Generals” problem.

也就是說,很多拜占庭條件下的共識算法都是在同步網絡的假設下進行設計的。之所以同步網絡下能實現共識算法,是因爲同步網絡使得“檢測故障節點”成爲了可能。

回顧我們在上一篇博客:也談分佈式系統中的網絡模型和故障模型中討論的各種故障模型,FLP不可能性屬於最裏面的第二層,如下如所示:
故障模型

2.2 CAP不可能三角

根據維基百科上的定義, CAP不可能三角是指:

It is impossible for a distributed data store to simultaneously provide more than two out of the following three guarantees: consistency, availability, and partition tolerance.

翻譯成大白話是說:在分佈式數據存儲模型中,一致性、可用性和分區容錯性,只能三者取其二。
CAP相關的假設如下:

  • 故障模型爲Omission failure,如上圖最裏面的第三層,即消息的傳遞無限晚,但有可能恢復(典型表現爲網絡分區)
  • 網絡可能出現故障,消息可能會丟失(因爲需要考慮分區容錯性)

這裏有必要對Omission failure故障模型進行解釋。實際上,我們已經在上一篇博客:也談分佈式系統中的網絡模型和故障模型中的3.1小節解釋了網絡分區故障和Omission failure的關係,即:網絡分區故障實際上是Omission failure的一個特例。這裏,我們再進行一番解釋,以使讀者能更好地理解。

  • 網絡分區故障描述了這樣一類故障:網絡連接出現了中斷,一個網絡被分割成了若干個子網絡。但是這種分割(網絡中斷)是暫時的,後期可能會恢復。否則,如果網絡一旦斷開就永久斷開,那麼子網絡之間就沒有任何聯繫。在每個子網絡中分別部署服務就好了,也就不存在一致性和可用性的問題了。
  • Omission failure描述了這樣一類故障:對於某個特定消息而言,節點A可能永遠無法接收到節點B的消息;但對於其他消息,節點A是可能收到消息的。前者表明可能出現了網絡故障,後者表明該故障是可自動恢復的。

由此可見,網絡分區其實是Omission failure的一種特例。

3. FLP和CAP的關係

先說結論:“FLP不可能性”和“CAP不可能三角”是兩個不等價的理論。
以下借鑑博客History of the Impossibles - CAP and FLP中的內容,介紹FLPCAP的不同。

Properties FLP CAP
Problem scope Distributed consensus Replicated storage
Failure model Crash failure Omission failure
Formalization Rigorous Gilbert & Lynch approximation
Solutions Synchronous network model Crash failure

3.1 Problem scope

FLP討論的分佈式共識(distributed consensus)的問題。分佈式共識可實現的功能包括:

  1. leader election
  2. replicated state machine
  3. distributed commit

而CAP關注的是複製存儲(replicated storage)的問題,replicated storage可以看作是replicated state machine的一個特例。
可以看出,複製存儲是分佈式共識的子問題。也即,FLP關注的問題更加通用,CAP問題是FLP問題的子集。

此外,

  • CAP中的複製存儲問題只討論了這樣一類問題:同一份數據在不同節點上進行存儲(主從複製即是這樣一類問題);
  • FLP中的分佈式共識問題除了CAP中的問題外,還討論了這樣一類問題:多個任務(數據)被調度到不同節點上並行執行(存儲),不同節點上的任務和狀態可能是不同的(2PC協議即包含了這樣一類問題)。

由此也可見,FLP中討論的問題更加複雜。一些方案可能無法解決FLP中的問題,但可能能夠解決CAP中的問題,如3.2節中的在Crash failure模型假設下的方案。

3.2 Failure model

正如前面已經討論過的,FLP中故障模型的假設更強,因而其得出的“不可能性”結論也適用於CAP場景(Crash failure)中;但CAP得出的“不可能三角”結論就不一定適用於FLP場景中 (Omission failure)。
結合我們在3.1節中的比較,容易得到以下結論:

  • Omission failure故障模型中,既不可能達成分佈式共識,也無法實現同時滿足CAP的分佈式存儲
  • Crash failure故障模型中,雖然無法達成分佈式共識,也可能實現同時滿足CAP的分佈式存儲。Quora中的一個回答即給出了這樣一種方案設計。

3.3 Formalization

FLP不可能性”是進行了嚴格的理論驗證的,但“CAP不可能三角”的證明卻沒那麼嚴格。具體來說,CAP不可能三角的提出者(Brewer)和後來的證明者(Gilbert和Lynch),他們對於CAP理論的闡述是不太一致的。也即,證明者所證明的對象,實際上不是提出者一開始提出來的對象。

3.4 Solutions

由於“FLP不可能性”和“CAP不可能三角”分別從理論上論證了,兩個問題都是無法完美解決的。
一個很自然的想法是,能夠通過增強一下假設,使得該問題得以解決。

  • 通過將網絡模型增強爲同步網絡,分佈式共識就得以實現。正如2.1節所說,很多解決拜占庭問題的共識算法就是這麼做的
  • 通過將故障模型加強爲crash failure,複製存儲也就得以實現,正如3.2節所說。

參考鏈接

  1. History of the Impossibles - CAP and FLP
  2. Distributed Systems: Are the FLP impossibility result and Brewer’s CAP theorem basically equivalent?
  3. Network partition
  4. 有人瞭解過FLP impossibility嗎?
  5. Michael J. Fischer, Nancy A. Lynch, and Michael S. Paterson. Impossibility of distributed consensus with one faulty process. J. ACM 32, 2 (April 1985)
  6. Gilbert and Lynch. Brewer’s conjecture and the feasibility of consistent, available, fault-tolerant web services.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章