1. 程式人生 > >paxos 算法

paxos 算法

角色 .com 分割線 故事 小姐 編號 多線程並發 至少 成了

現在通過一則故事來學習paxos的算法的流程(2階段提交),有2個Client(老板,老板之間是競爭關系)和3個Acceptor(政府官員):

  1. 現在需要對一項議題來進行paxos過程,議題是“A項目我要中標!”,這裏的“我”指每個帶著他的秘書Proposer的Client老板。
  2. Proposer當然聽老板的話了,趕緊帶著議題和現金去找Acceptor政府官員。
  3. 作為政府官員,當然想誰給的錢多就把項目給誰。
  4. Proposer-1小姐帶著現金同時找到了Acceptor-1~Acceptor-3官員,1與2號官員分別收取了10比特幣,找到第3號官員時,沒想到遭到了3號官員的鄙視,3號官員告訴她,Proposer-2給了11比特幣。不過沒關系,Proposer-1已經得到了1,2兩個官員的認可,形成了多數派(如果沒有形成多數派,Proposer-1會去銀行提款在來找官員們給每人20比特幣,這個過程一直重復每次+10比特幣,直到多數派的形成),滿意的找老板復命去了,但是此時Proposer-2保鏢找到了1,2號官員,分別給了他們11比特幣,1,2號官員的態度立刻轉變,都說Proposer-2的老板懂事,這下子Proposer-2放心了,搞定了3個官員,找老板復命去了,當然這個過程是第一階段提交,只是官員們初步接受賄賂而已。故事中的比特幣是編號,議題是value。

    這個過程保證了在某一時刻,某一個proposer的議題會形成一個多數派進行初步支持;

===============華麗的分割線,第一階段結束================

  5. 現在進入第二階段提交,現在proposer-1小姐使用分身術(多線程並發)分了3個自己分別去找3位官員,最先找到了1號官員簽合同,遭到了1號官員的鄙視,1號官員告訴他proposer-2先生給了他11比特幣,因為上一條規則的性質proposer-1小姐知道proposer-2第一階段在她之後又形成了多數派(至少有2位官員的贓款被更新了);此時她趕緊去提款準備重新賄賂這3個官員(重新進入第一階段),每人20比特幣。剛給1號官員20比特幣, 1號官員很高興初步接受了議題,還沒來得及見到2,3號官員的時候

這時proposer-2先生也使用分身術分別找3位官員(註意這裏是proposer-2的第二階段),被第1號官員拒絕了告訴他收到了20比特幣,第2,3號官員順利簽了合同,這時2,3號官員記錄client-2老板用了11比特幣中標,因為形成了多數派,所以最終接受了Client2老板中標這個議題,對於proposer-2先生已經出色的完成了工作;

這時proposer-1小姐找到了2號官員,官員告訴她合同已經簽了,將合同給她看,proposer-1小姐是一個沒有什麽職業操守的聰明人,覺得跟Client1老板混沒什麽前途,所以將自己的議題修改為“Client2老板中標”,並且給了2號官員20比特幣,這樣形成了一個多數派。順利的再次進入第二階段。由於此時沒有人競爭了,順利的找3位官員簽合同,3位官員看到議題與上次一次的合同是一致的,所以最終接受了,形成了多數派,proposer-1小姐跳槽到Client2老板的公司去了。

===============華麗的分割線,第二階段結束===============

  Paxos過程結束了,這樣,一致性得到了保證,算法運行到最後所有的proposer都投“client2中標”所有的acceptor都接受這個議題,也就是說在最初的第二階段,議題是先入為主的,誰先占了先機,後面的proposer在第一階段就會學習到這個議題而修改自己本身的議題,因為這樣沒職業操守,才能讓一致性得到保證,這就是paxos算法的一個過程。原來paxos算法裏的角色都是這樣的不靠譜,不過沒關系,結果靠譜就可以了。該算法就是為了追求結果的一致性。

參考:https://www.cnblogs.com/endsock/p/3480093.html

paxos 算法