跳到主要内容

Unreliable Failure Detectors for Reliable Distributed Systems (證明篇)

Weak Completeness to Strong Completeness

演算法

image info

lemma 1: Transforming weak completeness into strong completeness

根據 weak completeness的定義,至少有一個process pp知道所有的faulty process。根據演算法,pp 會不斷的broadcast他自身的結果,在某個時間tt以後所有的correct process都會接收到pp的訊息,更新自身的outputoutput並且所有的faulty process都crash,所以correct process不會在收到faulty process的訊息,也不會把它們從output中移除,因此對每一個 tt' > tt,所有的correct process都會output所有的faulty process,滿足strong completeness的定義。

lemma 2: Perserving perpetual accuracy

定義: pptt 之前沒有被suspect,在transform後也一樣

證明: 在某個時間點tt以前,沒有任何process suspect pp,故滿足lemma 2

lemma 3: Preserving eventual accuracy

定義: pptt之後沒有被suspect,在transform後也一樣

證明: 在某個時間點以後,faulty process都crash,而所有的correct process pp的訊息都被其他correct process接受過,並且把pp從自身的output中移除。

證明

lemma 1可以把weak completeness transform成strong completeness。從lemma 2可以知道,如果是strong accuracy 或是 weak accuracy,在tranform以後還是滿足accuracy。從lemma 3 可以知道,如果detector原本是eventual strongeventual weak在transform以後還是滿足accuracy。

從以上可以知道,我們可以把相同accuracy的weak completeness detector用來處理strong completeness detector的問題。

Solving Consensus using weak accuracy ans strong completeness failure detector

演算法

image info

lemma 1: 對每個phase的任何 pp and qqpp的output set VpV_pVp[q]V_p[q] is either VqV_q or none

證明: 從演算法明顯可見。

lemma 2: 所有的correct process都可以reach phase 3

證明: 只有phase 1和phase 2的 waitwait會block process,所以我們要證明這兩個地方都不會block。

因為是strong completeness,所有的faulty process最後都會出現在failure list中,所以correct process不會因為等待faulty process的訊息而被block,所以每個correct process都可以reach phase 3。

因為是weak accuracy,系統中存在一個correct process cccc從來沒有被suspect過。

lemma 3

lemma: 在phase 1的每一個round, 1<=r<=n11 <= r <= n-1,所有的process pp都從cc收到(r,Oc,c)(r, O_c, c),也就是說(r,Oc,c)(r, O_c, c)msgp[r]msg_p[r] 證明: 因為pp 執行n-1 round,且cc沒被suspect,所以pp會等待cc的訊息,並把(r,Oc,c)(r, O_c, c)放入msgpmsg_p中。

lemma 4: 對於phase 1的每個process pp,在phase 1結束的時候, VcV_cVpV_p包含

證明: 分成兩個部份來證明。

1: r<=n2r <= n-2,因此在 r+1 round的時候,r+1<=n1r+1 <= n-1cc relays qq的訊息,並把Oc[q]O_c[q]設成vqv_q,從lemma 3可以知道,ppr+1r+1結束的時候,會收到(r+1,Oc,c)(r+1, O_c, c),並且把Vp[q]V_p[q]設定成vqv_q

2: r=n1r = n-1cc第一次收到qq的訊息,因為每個process最多relays qq的訊息一次,因此pp也已經收到過qq的訊息,並且把Vp[q]V_p[q]設定成vqv_q

有以上兩點可知,VcV_cVpV_p包含。

lemma 5: 對於每個phase 2的 process pp,在phase 2結束的時候,Vc=VpV_c = V_p

證明: 分成兩種可能來討論

1: Vc[q]=VqV_c[q] = V_q。跟據lemma 4,在phase 1結束的時候,如果VcV_cVpV_p包含,如果Vc[q]=VqV_c[q] = V_q,對其他pp來說,Vp[q]=VqV_p[q] = V_q

2: Vc[q]=noneV_c[q] = none。因為cc從來沒有被誤判為faulty process,所以在phase 2它的訊息一定會被收到。根據演算法,收到cc訊息的process,都會把 Vc[q]V_c[q]更新成nonenone,故 Vc[q]=Vp[q]V_c[q] = V_p[q]

從以上兩種情況來看,對每個qq來說,Vc[q]=Vp[q]V_c[q] = V_p[q],故Vc=VpV_c = V_p,故得證。

lemma 6: 每個process都decide同樣的值

證明: 從lemma 5可以得到在phase 2結束,每個process的VV都一樣,且它們會挑選第一個不是nonenone的值,因此也會挑出一樣的值來decide

lemma 7: 每個phase 2的pp,在phase 2結束的時候,Vp[c]=vcV_p[c] = v_c

證明: 從lemma 4可以知道在phase 1結束的時候,Vq[c]=vcV_q[c] = v_c,而在phase 2的時候,也不會有任何一個pp send Vp[c]=noneV_p[c] = none的訊息,所以得證。

Theorem: 可以用Weak accuracy解決 consensus

證明: 滿足consensus的三個條件: validity, agreement and uniform integrity

根據 lemma 6每個proccess都decide同樣的值,所以滿足agreement。根據lemma 2,每個correct process都會進入phase 3,而根據lemma 7,至少有一個不是nonenone的值可以用,所以這個演算法會結束,滿足termination。承上,這個非nonenone的值是由某個process所propose,所以滿足validity,因為三個條件都滿足,故得證。

Solving Consensus using eventual weak accuracy ans strong completeness failure detector

演算法

image info

lemma 1: 每個process都decide同樣的值

證明: 如果在phase 4要decide,代表phase 3的時候coordinator cc至少收到majorityack,也代表cc在 phase 2的提出estimatecestimate_c。我們假設cc propose estimatecestimate_c的round為rr,嘗試證明對於 r>=rr' >= restimatec=estimatecestimate_{c'} = estimate_c

我們用induction來嘗試證明r<=r<kr <= r' < k,對每個k都成立,我們定義round k的coordinator 為ckc_k,也就是estimateck=esticatecestimate_{c_k} = esticate_c

根據演算法,ckc_k如果在phase 2的時候提出estimateckestimate_{c_k},代表它已經收到majority的estimate。那至少有一個pp在round r phase 3的時候送ackcc with (p,r,ack)(p, r, ack),而且pp也在round k phase 2的時候send estimate給ckc_k with (p,k,estimatep,tsp)(p, k, estimate_p, ts_p)

因為tspts_pnondecreasing,而且只有在收到coordinator的時候才會增加,因此tsp>=r ts_p >= r,而且也可以輕鬆看出tsp<kts_p < k,我們定義ttmsgkmsg_k中最大的ts,因此存在關係式r<=t<kr <= t < k

在round k phase 2的時候,ckc_k會adopt (q,k,estimateq,t)(q, k, estimate_q, t),也就是qq在 rount tt提出的estimate。round t 的coordinator在phase 2的時候send estimateqestimate_q to q,因為r<=t<kr <= t < k,根據induction,我們可以得出estimateq=estimatecestimate_q = estimate_c,故得證。

lemma 2: 每個correct process最終決定some value

證明: 分成兩種狀況討論

  1. Some correct process decides。如果這些process要decide,他們會送(,,,decide)(-, -, -, decide),根據Reliable Broadcast,這些process一定會RdeliverR-deliverdecidedecide

  2. No correct process decides,我們可以用contradiction來證明不會發生。假設rr是有process blocks的最小round number,因為majoriy會送訊息到coordinator cc所以有兩種情況:

a. cc最終收到majority的訊息並提出estimate,所以沒有block。 b. cc crash掉。

因為是strong completeness,所以correct process都知道cc掛掉不會被block,而因為是eventual accuracy,所以最終會有一個process pp不會被suspect,並完成所有的phase並decide。

Theorem: 在majority存活的情況下,可以用eventual weak accuracy detector solve consensus

證明: 可從lemma 1lemma 2得證。

Consensus cannot be solved using eventual strong accuracy detector in asynchronous system without majority

證明: 可以用contradiction來證明。如果可以solve consensus的話,我們可以把processes分成兩個set,一群在t0t_0存活,另一群在t1t_1存活,且各自提出不同的值,這樣會造成一種狀況是在t0t_0的時候提出的值與t1t_1提出的值不同,違反consensus,故跟假設矛盾。

Atomic Broadcast and Consensus

演算法

image info

lemma 1: 對任兩個correct process ppqq和message mm,如果mm屬於RdeliveredpR-delivered_p,則最終mm屬於RdeliveredqR-delivered_q

證明: 如果mm屬於RdeliveredpR-delivered_p,則pp在task 2 RdeliveredR-delivered mm,因為pp, qq都是correct process,根據Reliable Broadcast的特性,最終qq RdeliversR-delivers mm,然後把mm加到RdeliveredqR-delivered_q

lemma 2

定義

對任何兩個correct process pp, qq和所有 k>=1k >= 1:

  1. 如果pp執行propose(k,)propose(k, -),則最終qq執行propose(k,)propose(k, -)
  2. 如果pp A-delivers messages in AdeliverpkA-deliver^k_p,則最終qq A-delivers messages in AdeliverqkA-deliver^k_q,且Adeliverpk=AdeliverqkA-deliver^k_p = A-deliver^k_q

證明

第一點

使用induction來證明。如果pp執行了propose(1,)propose(1, -),則根據lemma 1qq最終會Rdeliverdqm R-deliverd_q m,並且根據間眼演算法task3task 3RdeliveredqR-delivered_q - AdeliveredqA-delivered_q不等於空集合,所以qq最終會執行propose(1,)propose(1, -)

第二點

如果pp執行了porpose(1,)porpose(1, -),根據第一點所有的qq最終都執行了propose(1,)propose(1, -),而根據consensus,所有的process最終都decide(1,msgSet1)decide(1, msgSet^1)。因為AdeliveredpA-delivered_pAdeliveredqA-delivered_q一開始都是空的,而且根據consensusmsgSetp1=msgSetq1msgSet^1_p = msgSet^1_q,所以Adeliverp1=Adeliverq1A-deliver^1_p = A-deliver^1_q

根據induction與上面相似證明,我們可以證明在任意k都成立,因此得證。

lemma 3: 演算法滿足 A-boradcast需要的agreementtotal order

證明: 從lemma 2可以知道所有的correct process都以同樣順序send message。

lemma 4: 如果一個correct process AbroadcastsmA-broadcasts m,則最終它AdeliversmA-delivers m

證明: 用contradiction來證明。如果pp AbroadcastsmA-broadcasts m但沒有AdeliversmA-delivers m,代表mm永遠地停在RdeliverdpAdeliveredpR-deliverd_p - A-delivered_p裡。

根據lemma 2,在某個時間點k1k1以後,也就是時間點l,l>=k1 l, l >= k_1,correct process執行了propose(l,)propose(l, -)。而在某個時間點k2k_2k2k_2以後所有的fault process都crash。假設k=max(k1,k2)k = max(k_1, k_2),correct process執行了propose(k,)propose(k, -),根據consensuslemma 2msgSet^kAdeliveredA-delivered且包含mm,故與假設矛盾。

lemma 5: 對任何一個message mmAdeliversmA-delivers m only once iff m 之前被AbroadcastA-broadcast by sender(m)sender(m)

證明: 根據演算法,如果mm in AdeliveredA-delivered,它就在也不會被pick,故滿足only once。而根據演算法,如果pp執行decide(k,msgSetk)decide(k, msgSet^k),且mmmsgSetkmsgSet^k裡面,根據consensus,它必定已經被RdeliverR-deliver by sender(m)sender(m),所以sender(m)sender(m) AbroadcastsA-broadcasts mm

Theorem: 從以上可知我們可用consensus來作出Atomic Broadcast