FLP不可能性(FLP impossibility)


FLP不可能性(FLP impossibility)

FLP impossibility是一個定理,它證明了在分布式情景下,無論任何算法,即使是只有一個進程掛掉,對於其他非失敗進程,都存在着無法達成一致的可能。

FLP是Fischer, Lynch,Patterson三位作者名字組合的簡寫,表明這定理是由它們三位發明的。

簡化模型

FLP基於如下幾點假設:

僅可修改一次

每個進程初始時都記錄一個值(0或1)。進程可以接收消息、改動該值、並發送消息,當進程進入decide state時,其值就不再變化。所有非失敗進程都進入decided state時,協議成功結束。這里放寬到有一部分進程進入decided state就算協議成功。

異步通信

與同步通信的最大區別是沒有時鍾、不能時間同步、不能使用超時、不能探測失敗、消息可任意延遲、消息可亂序。

通信健壯

只要進程非失敗,消息雖會被無限延遲,但最終會被送達;並且消息僅會被送達一次(無重復)。

fail-stop模型

進程失敗如同宕機,不再處理任何消息。相對Byzantine模型,不會產生錯誤消息。

失敗進程數量

最多一個進程失敗。

這幾點假設並不是單獨而抽象的,在實際生產的應用中我們很有可能遇到的就是上述情況。

證明過程

定義
消息隊列

假定存在一個全局的消息隊列,進程可以發送消息,也可以在其上接收消息。send(p,m)表示向進程p發送消息m;receive(p,m)表示進程p收到了消息m。

Configuration

所有進程的狀態集,進程的狀態包括初始值、決議值、消息隊列的內容。初始Configuration表示各個進程的初始值是隨機的,同時消息隊列為空,決議值為空。

事件

事件代表給某個進程發送消息,並且消息已送達,可用event(p,m)表示。根據消息隊列的定義可以知道,event(p,m)即send(p,m)與receive(p,m)的交。由於某個事件,某個Configuration可以轉化為另一個Configuration。

事件序列

一連串順序執行的事件序列,記為run,即runn=[event1(p1,m1), event2(p2,m2),…​,eventn(pn,mn)]。

可達Configuration

在對某個Configuration A應用了某個run事件序列之后,得到Configuration B,則稱B從A可達——可記為B⇐A。

引理1:連通性

把所有的進程P分成兩個不相交的集合P1,P2,有兩個run R1,R2,如果先給P1應用R1,再給P2應用R2與先給P2應用R2,再給P1應用R1,對P的Configuration C來說得到的結果是一致的。

Image 020517 082318.292.png
Figure 1. 連通性

結果顯而易見,不再羅列證明。

引理2:初始Configuration不確定性
初始Configuration不確定性

對任何算法P,都存在至少一個不確定性的初始Configuration。

可以用反證法證明此引理。

因為候選的決議值必須大於1個才需要保證決議的一致性,這里選取了最簡單的兩個候選值的情況,候選值分別是value1和value2。而多候選值情形可以根據歸納法證明。

這里再做一個定義:

Configuration相鄰

若兩個Configuration間,僅有一個進程的狀態存在差別,那么稱為Configuration相鄰。

假設所有初始Configuration都是確定的,那么對於任意一個非空進程集P,必然至少存在一對相鄰的Configuration 1(C1)和Configuration 2(C2),二者的決議分別是value1和value2,其連接進程是P0。

假設連接進程突然間掉線了,那么C1和C2剩余進程的狀態必然是完全一致的。那么此時,我們就無法從剩余進程中知道當前Configuration的確切的決議值。

Image 020517 102530.071.png
引理3:不可終止性(傳播性)
不可終止性

設C是一個不確定Configuration,event(p,m)是可以應用到C的事件。設X是從C可達並且未應用過event的Configuartion的集合,並構造Y = e(X) = {e(E) | E∈X a並且 e應用於E}。那么,Y一定包含不確定的configuration。

簡而言之:不確定性是可以傳播的。

根據上文中的設定,我們可以得到如下示意圖:

Image 020517 104806.042.png
Figure 2. 不可終止性定義示意圖

同樣使用反證法證明:設Y中的Configuration都是確定的。

因為C是不確定的,因此必然從C可達一個確定的0-value Configuration(C0),同時可達一個確定的1-value Configuration(C1)。

由於C0是0-value,無論是D0從C0可達,或是C0從D0可達,都可以推導出D0是0-value。同理,也可以推導出Y中存在一個D1是1-value。

由於0-value和1-value的C都必然存在,因此我們可以很容易得出下圖:

Image 020517 112347.139.png

我們無須關心該圖中C0或者C1的具體值,只需知道必然存在一個C1,C1從C0可達。

虛線部分如下:

Image 020517 114412.548.png

假設e和f操作的進程分別是pe和pf,那么分為兩種情況:

pe!=pf

根據引理1(連通性)很容易得到下圖:

Image 020517 112510.176.png
Figure 3. pe!=pf

顯然,D0和D1應該是不同的值,因此導出一個矛盾:Y中有兩個值,因此是不確定的。

pe==pf

Image 020517 114844.267.png
Figure 4. pe!==pf

由於C0已確定,因此經過σ,得到的應該是一個確定的F。 經過eσ,得到的是一個確定的E0(D0已確定)。 經過feσ,得到的是一個確定的E1(D1已確定),並且E1!=E0。

同時,由於σ和e/f操作的是不同的進程,所以可以應用引理1(連通性)。 因此可以導出σe等價於eσ,σfe等價於feσ,所以,根據上圖,F可以分別導出兩個不同的結果E0和E1——這和之前的推導是相互矛盾的。

綜上所述,Y中可能會包含一個不確定的Configuration。

結論

盡管FLP impossible原理是基於簡單的系統模型假設,但我們可以根據歸納法得出,在更復雜的系統模型下,我們仍然沒有任何算法能夠完全保證分布式系統下的一致性。

但我們不必絕望,此結論只是說明了100%保證一致性是不可能的,這並不影響我們對分布一致性的探索(99%以上的一致性還是完全有可能做到的)。

參考文獻
Blogs


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM