比特幣交易所 比特幣交易所
Ctrl+D 比特幣交易所
ads
首頁 > 火幣APP > Info

用三國殺講分布式算法 太舒適了吧?_HODL

Author:

Time:1900/1/1 0:00:00

前言

《三國殺》是一款熱門的卡牌游戲,結合中國三國時期背景,以身份為線索,以卡牌為形式,益智休閑,老少皆宜。

在講解之前,我們先聊下分布式協議和算法整體脈絡。

現在很多開發同學對分布式的組件怎么使用都有一定經驗,也知道CAP理論和BASE理論的大致含義。但認真去看分布式算法的真的很少,原因有三:

擔心算法過于復雜,所以花的時間很少。

網上的資料能用大白話將分布式算法講清楚的比較少。

學習分布式算法沒有一條清晰的路線。

我會在后續的文章中用故事、大白話的方式來講解分布式算法的原理,以及學習路線到底是怎么樣的。

1.學習路線

學習分布式協議和算法的路線可以是先學習四大基礎理論,作為地基,再學習分布式協議和算法,就像是在地基上建房子。地基打好了,才能建更穩固的高樓大廈。

四大基礎理論:

拜占庭將軍問題

CAP理論

ACID理論

BASE理論

八大分布式協議和算法:

Paxos算法

Raft算法

一致性Hash算法

Gossip協議算法

QuorumNWR算法

FBFT算法

POW算法

ZAB協議

因篇幅原因,本篇只涉及拜占庭將軍問題。

朱嘉明:Web 3.0將創造全新的娛樂產業新生態:金色財經報道,7月29日由漢威信恒、新火科技與D11 Labs聯合主辦的“ChinaJoy Web3 2023”大會在上海順利召開。著名經濟學家、橫琴數鏈數字金融研究院學術與技術委員會主席朱嘉明教授遠程進行了視頻致辭,朱教授認為大數據、AIGC、虛擬現實技術,包括元宇宙、Web3都將為娛樂產業、娛樂產業群提供重要的技術基礎和技術支持,其中因為Web 3.0、AI的支持而形成的價值互聯網和智能互聯網,將創造全新的娛樂產業的新生態。[2023/7/29 16:05:59]

2.拜占庭將軍問題

大家可能聽過拜占庭將軍問題。它是由萊斯利·蘭伯特提出的點對點通信中的基本問題。

拜占庭位于如今的土耳其的伊斯坦布爾,是東羅馬帝國的首都。由于當時拜占庭羅馬帝國國土遼闊,為了達到防御目的,每個軍隊都分隔很遠,將軍與將軍之間只能靠信差傳消息。在戰爭的時候,拜占庭軍隊內所有將軍和副官必須達成一致的共識,決定是否有贏的機會才去攻打敵人的陣營。但是,在軍隊內有可能存有叛徒和敵軍的間諜,這個就是拜占庭容錯問題。

實際上拜占庭問題是分布式領域最復雜的一個容錯模型。一旦理解它,就能掌握分布式共識問題的解決思路,還能幫助大家理解常用的共識算法,也可以幫助我們在工作中選擇合適的算法,或者設計合適的算法。

為什么第一個基礎理論是拜占庭將軍問題?

因為它很好地抽象出了分布式系統面臨的共識問題。上面提到的8種分布式算法中有5種跟拜占庭問題相關,可以說弄懂拜占庭問題對后面學習其他算法就會容易很多。

下面我用三國殺游戲中的身份牌來講解拜占庭將軍問題。

香港將允許散戶投資者在新規則下交易主流加密貨幣,暫時禁止穩定幣、自營交易、借貸等服務:5月23日消息,香港宣布散戶投資者可以根據數字資產行業的新規則進行加密貨幣交易,香港證券及期貨事務監察委員會(SFC)今日下午詳細介紹了零售參與的咨詢總結文件。預計個人投資者從 6 月 1 日開始在適當的保障措施下可以交易 BTC 和 ETH 等主流加密貨幣。

SFC 文件顯示,對于規定非證券型代幣須具有至少 12 個月往績紀錄的意見。穩定幣的監管安排預計將于 2023/24 年實施。在穩定幣于香港受到規管前,穩定幣不應獲納入以供零售買賣。關于自營交易,SFC 同意交易平臺上的流動性對客戶來說十分重要。因此,SFC 允許由第三方做市商進行流動性提供活動。然而,現時禁止自營交易的規定是全面性的,并實際上禁止持牌虛擬資產交易平臺的集團公司擁有任何虛擬資產的持倉。

SFC 表示,平臺營運者不應提供與買賣特定虛擬資產相關的獎勵活動。這項原則構成了規定平臺營運者不應登載有關特定虛擬資產的任何廣告的依據。關于虛擬資產市場上其他常見服務(例如收益、存款及借貸),SFC 不允許持牌虛擬資產交易平臺提供這些服務。[2023/5/23 15:21:04]

2.1三國殺身份牌

三國殺中主要有四種身份:主公、忠臣、反賊、內奸。每個游戲玩家都會獲得一個身份牌。主公只有1個。忠臣最多2個,反賊最多4個,內奸最多一個。

主公

主公身份牌

獲勝條件:消滅所有反賊和內奸

技巧:以自己生存為首要目標,分散反賊注意力。配合忠內剿滅反賊并判斷誰是忠誰是內。

派盾:Lodestar Finance攻擊者已將超202萬枚DAI兌換為1009.8枚ETH:4月13日消息,據派盾監測,基于 Arbitrum 的 DeFi 協議 Lodestar Finance 黑客已將超 202 萬枚 DAI 兌換為 1009.8 枚 ETH。[2023/4/13 14:02:05]

忠臣

忠臣身份牌

獲勝條件:保護主公存活的前提下消滅所有反賊和內奸。

技巧:忠臣是主公的屏障,威懾反賊和內奸的天平。

反賊

反賊身份牌

獲勝條件:消滅主公即可獲勝。

技巧:反賊作為數量最多的身份,需要集中火力猛攻敵人弱點。正確的思路是獲勝的關鍵。

內奸

內奸身份牌

獲勝條件:先消滅反賊和忠臣,最后與主公單挑成為最后唯一生還者。

技巧:正確的戰術冷靜的頭腦運氣。

2.2還原拜占庭問題

東漢末年,袁紹作為盟主,匯合了十八路諸侯一起攻打董卓。把董卓定為反賊,袁紹定為主公,另外有兩個忠臣和一個內奸,就選這三個風云人物:曹操,劉備,孫堅,內奸扮演的角色是忠臣,主公和兩個忠臣不知道內奸的身份,都當作忠臣對待了。

董卓是非常強大的,擁有精良的西涼兵,麾下還有戰神呂布。大家都知道三英站呂布的故事,呂布以一已之力對陣劉備、張飛、關羽三人。

要想干掉董卓,袁紹必須統一忠臣的作戰計劃,三位忠臣還不知道有什么其他花花腸子,有一個還是內奸。如果內奸暗通反賊董卓,給忠臣發送誤導性的作戰信息,該怎么辦?另外假定這幾個忠臣都是通過書信交流作戰信息,如果書信被攔截了或書信里面的信息被替換了咋辦?這些場景都可能擾亂作戰計劃,最后出現有的忠臣在進攻,有的忠臣撤退了。那么反賊就可以乘此機會發起進攻,逐一攻破。

美股三大指數集體收漲,標普500指數漲2.65%:金色財經報道,美股高開高走,三大指數集體收漲。納指漲3.43%,創7月27日以來最大單日漲幅;標普500指數漲2.65%,創10月4日以來最大單日漲幅;道指漲1.86%。[2022/10/18 17:29:40]

袁紹本來就沒有曹操的機智,那他如何讓忠臣們達成共識,制定統一的作戰計劃呢?

上面的映射關系就是一個拜占庭將軍問題的一個簡化表述,袁紹現在面臨的就是典型的共識問題。也就是在可能有誤導信息的情況下,采用合適的通訊機制,讓多個將軍達成共識,制定一致性的作戰計劃。

2.3一方選擇撤退

劉備、曹操、孫堅通過信使傳遞進攻或撤退的信息,然后進行協商,到底是進攻還是撤退。遵循少數服從多數,不允許棄權。

曹操疑心比較重,偵查了反賊的地形后,決定撤退。而劉備和孫堅決定進攻。

劉備決定進攻,通過信使告訴曹操和孫堅進攻。

曹操決定撤退,通過信使告訴劉備和孫堅撤退。

孫堅決定進攻,通過信使告訴曹操和劉備進攻。

一方選擇撤退

曹操收到的信息:進攻2票,自己的一張撤退票,票數一比,進攻票:撤退票=2:1,按照上面的少數服從多數原則進行投票表決,曹操還是會進攻。那么三方的作戰方案都是進攻,所以是一個一致性的作戰方案。最后戰勝了董卓。

2.4內奸登場-撤退

因為我們前期的設定,孫堅作為內奸,早已與反賊董卓私下溝通好了,不攻打董卓。

劉備決定進攻,通過信使告訴曹操和孫堅進攻。

FatMan:今年1月Hodlnaut在未告知客戶的情況下將資金大量轉移到 Anchor:金色財經報道,Terra研究員FatMan在社交媒體上表示,一個匿名賬戶給我發來一些信息和錢包地址,據稱證明Hodlnaut在解禁期間有大量的UST暴露。我最初的直覺是懷疑Hodlnaut肯定不會公然對他們的客戶撒謊。在審查了所有這些之后,我得出結論,Hodlnaut確實一直在虛報他們的收益率來源和風險狀況。Nansen標記為Hodlnaut的交易錢包數據顯示,在今年 1 月,Hodlnaut 開始在未告知客戶的情況下將資金大量轉移到 Anchor。但Hodlnaut在4月才列出UST,并聲稱他們產生了收益。但這顯然是一個謊言,在他們列出UST之前,他們已經將數百萬美元轉移到Anchor(而且還支付了比競爭對手更好的利率)。

在depeg期間,事情變得越來越糟。他們開始向Anchor提供bETH抵押品,并借入數百萬美元的UST將其發送給Binance。他們還開始為LUNA燒掉UST并將其發送到交易所,大概是為了套利當時的巨大差價。[2022/6/27 1:33:21]

曹操決定撤退,通過信使告訴曹操和孫堅撤退。

孫堅決定撤退,通過信使告訴曹操和劉備撤退。

內奸登場-撤退

劉備收到進攻和撤退各一票,而自己又選擇撤退,所以劉備得到的票數是:進攻:撤退=1:2,遵從少數服從多數的原則,劉備選擇最后選擇撤退,那么三方的作戰方案都是撤退,所以也是一個一致性的作戰方案。

2.5內奸使詐-一進一退

內奸看了上述計劃,發現忠臣都撤退了,并沒有被消滅,就想通過使詐的方式來消滅其中一個忠臣。

劉備決定進攻,通過信使告訴曹操和孫堅進攻。

曹操決定撤退,通過信使告訴曹操和孫堅撤退。

孫堅作為內奸使詐,通過信使告訴劉備進攻,告訴曹操撤退。

內奸使詐-一進一退

那么結果是什么呢?

劉備的票數為進攻2票,撤退1票,曹操的票數為進攻1票,撤退2票。按照少數服從多數的原則,劉備最后會選擇進攻,而曹操會選擇撤退,孫堅作為內奸肯定不會進攻,劉備單獨進攻反賊董卓,勢單力薄,被董卓干掉了。

從這個場景中,我們看到內奸孫堅通過發送誤導信息,非常容易地就干擾了劉備和曹操的作戰計劃,導致兩位忠臣被逐一擊破。這個現象就是二忠一判難題。那么主公袁紹該怎么解決這個問題?

3.拜占庭問題解法

解法一原理

就是將袁紹也參與進來進行投票,這樣就??????????增加了一位忠臣的數量??????????。三個忠臣一個叛賊。然后4位將軍做了一個約定,如果沒有收到命令,則執行默認命令,比如撤退。另外約定流程來發送作戰信息和如何執行作戰指令。這個解法的關鍵點就是執行兩輪作戰信息協商。

3.1袁紹作為指揮官

我們來看下第一輪是怎么做的。

先發送作戰信息的將軍我們把他稱為指揮官,另外的將軍我們稱作副官。

指揮官將他的作戰信息發送給所有的副官。

每一位副官將從指揮官處收到的作戰信息,作為自己的作戰指令;假如沒有收到指揮官的作戰信息,將把默認的撤退作為作戰指令。

我們用圖來演示:袁紹作為主公先發送作戰信息,作戰指令為進攻。然后曹操、劉備、孫堅收到進攻的作戰指令。

第一輪

再來看下第二輪是怎么做的。

第一輪指揮官已經發送指令了,現在就需要劉備、曹操、孫堅依次作為指揮官給其他兩位副將發送作戰信息。

然后這三位副將按照少數服從多數的原則,執行收到的作戰指令。

孫堅使詐-兩撤退

如果孫堅使詐,比如給曹操和劉備都發送撤退信息,如下圖所示。那么劉備和曹操收到的作戰信息為進攻2票,撤退1票,按照少數服從多數的原則,最后劉備和曹操執行進攻,實現了作戰計劃的一致性,曹操和劉備聯合作戰擊敗了反賊董卓

孫堅使詐-兩撤退

孫堅使詐-一進一退

假如孫堅使詐,給曹操發送撤退指令,給劉備發送進攻指令,那么劉備收到的作戰信息是進攻3票,肯定會發起進攻了,而曹操收到的作戰信息是進攻2票,撤退1票,最后曹操還是會進攻,所以劉備和曹操還是聯合作戰擊敗了反賊董卓。

如此看來,引入了一位指揮官后,確實可以避免孫堅使詐,但如果是孫堅在第一輪作為指揮官,其他人作為副官呢?

孫堅使詐-一進一退

3.2孫堅作為指揮官

第一輪孫堅向其中一個副官袁紹發送撤退指令,向另外兩個副官曹操、劉備發送進攻指令。那么第一輪的結果如下圖:

第一輪

第二輪孫堅休息,其他副官按照孫堅發送的指令開始向另外的副官發送指令。

曹操向劉備和袁紹發送進攻指令。

劉備向曹操和袁紹發送進攻指令。

袁紹向曹操和劉備發送撤退指令。

如下圖所示,最后曹操、劉備、袁紹收到的指令為進攻2票,撤退1票,按照少數服從多數原則,三個人都是發起進攻。執行了一致的作戰計劃,保證作戰的勝利。

第二輪

3.3小結

通過上面的演示,我們知道了如何解決拜占庭將軍問題。其實蘭伯特在他的論文中也提到過如何解決。

如果叛將人數為m,將軍數n>=3m1,那么就可以解決拜占庭將軍問題。

前提條件:叛將數m一致,需要進行m1輪的作戰協商。

這個公式,大家只需要記住就可以了,推到過程可以參考論文。

比如上述的攻打董卓問題,曹操、劉備、孫堅三個人當中,孫堅是叛將,他可以使詐,使作戰計劃不統一。必須增加一位忠臣袁紹來協商共識,才能達成一致性作戰計劃。

拜占庭解法二——簽名

那可以在不增加忠臣的情況下,解決拜占庭的二忠一判問題嗎?

解法二就是通過簽名消息。比如將軍之間通過印章、虎符等信物進行通信。來保證這幾個特征:

簽名無法偽造,對簽名消息的內容進行任何更改都會被發現。

任何人都能驗證將軍簽名的真偽。

限于篇幅原因,簽名的演示這里就不做展開了。

總結

通過《三國殺》角色來講解分布式中共識場景。那他們和分布式系統的映射關系是怎么樣的呢?

將軍對應計算機節點。

忠臣的將軍對應正常運行的計算機節點。

叛變的將軍對應出現故障并會發送誤導信息的計算機節點。

信使被殺對應通訊故障、信息丟失。

信使被間諜替換對應為通訊被惡意攻擊、偽造信息或劫持通訊。

可不要小瞧拜占庭問題,它可是分布式場景最復雜的的故障場景。比如在數字貨幣的區塊鏈技術中就有用到這些知識點。而且必須使用拜占庭容錯算法。

拜占庭容錯算法還有FBFT算法,PoW算法,當然不會在這篇中去講這些算法,后續再講解。一口吃不了大胖子~

有了拜占庭容錯算法,肯定有非拜占庭容錯算法,顧名思義,就是沒有發送誤導信息的節點。CFT算法就是解決分布式系統中存在故障,但不存在惡意節點的場景下的共識問題。簡單來說就是可能因系統故障造成丟失消息或消息重復,但不存在錯誤消息、偽造消息。對應的算法有Paxos算法、Raft算法、ZAB協議。后續講解~上面提到了5種算法,居然都是跟拜占庭問題有關,你說今天講的拜占庭問題重要不重要?

這么多算法該如何選擇?

節點可信,選非拜占庭容錯算法。否則就用拜占庭容錯算法,如區塊鏈中用到的PoW算法。

Tags:ANCHODNAUTHODLDollypad FinanceHODM幣BitNautic TokenHODL價格

火幣APP
席幕楓:12.12ETH行情分析及操作思路_BASE

多言不可與謀,多動不可與久處,交易與其沖動,還不如一動不動!大家好,我是席幕楓。心存陽光必有詩與遠方,認識老席何懼再遇荒涼?席幕楓:12.12ETH行情分析以太坊,昨日早盤高開低走,晚間沖高回撤.

1900/1/1 0:00:00
Filecoin礦機預估1T挖多少幣?一臺filecoin礦機多少錢?_COI

FIL幣價行情怎么看?Filecoin礦機預估1T挖多少幣?一臺filecoin礦機多少錢?最近IPFS非常火爆,明星項目Filecoin主網已經上線,很多礦機廠商都推出了相關的產品.

1900/1/1 0:00:00
歐洲的BVDH,Bitbond在Stellar Network上發行歐元穩定幣_stellar

歐洲最古老的銀行之一,BankhausvonderHeydt,以及德國代幣化和數字資產托管提供商Bitbond正在聯手在Stellar網絡上發行與歐洲掛鉤的穩定幣.

1900/1/1 0:00:00
炎王論幣:2020.12.11 午夜行情分析與操作策略 解套_比特幣

一周的時間匆匆逝去,在本周我們一路公開式的布局相信給到大家很多不一樣的體驗,還是那句話,對于比特幣這種品種而言,一定要做好順勢操作,昨日前日比特幣一路下跌,今日比特幣探底回升.

1900/1/1 0:00:00
OKEx關于支持ZYRO主網切換期間幣幣交易處理方案的公告_ZYRO

尊敬的OKEx用戶: 由于ZYRO主網切換,OKEx將于2020年12月14日14:00(HKT)暫停ZYRO幣幣交易服務,撤銷市場所有訂單.

1900/1/1 0:00:00
為什么說Filecoin挖礦越早越好?紅利期是否已經結束?_比特幣

數字貨幣挖礦起源于比特幣,參考比特幣挖礦的歷史,可以給我們一點經驗以比特幣為例,2013年,1299美元一臺的阿瓦隆礦機,每天能挖出375個比特幣,每天每臺盈利20萬元.

1900/1/1 0:00:00
ads