分布式(二) BFT拜占庭容錯

2022-08-24 13:27:12 字數 2967 閱讀 6427

簡介

bft拜占庭容錯不是指一種演算法,而是解決拜占庭將軍問題的一類演算法。分布式一致性演算法選擇最簡單的bft拜占庭容錯,作為一致性演算法入門一定能事半功倍。在分布式(一)中我們了解了一些基本理論,我們知道在有分割槽存在的情況下不能能出現完美的可用性和資料一致性,我們在專案中必須要最大限度做到分布式一致性,同時又要保證系統效能,所以必須了解分布式一致性演算法。

拜占庭將軍問題

拜占庭將軍問題(the byzantine generals problem)提供了對分布式共識問題的一種情景化描述,由leslie lamport等人在2023年首次發表。

拜占庭將軍問題描述的場景:

拜占庭帝國n只軍隊駐紮在敵城外,敵人雖然不如拜占庭軍隊,但是可用抵抗n/2的拜占庭軍隊同時進攻,少於等於n/2軍隊進攻一定會失敗。基於一些限制條件,拜占庭的n只軍隊不能匯集一點進攻,必須分散開來。每支軍隊都有各自的將軍和指揮,並且每支軍隊之間都不能直接通訊,只能使用信使間接通訊。

在觀察敵情之後,他們必須制定乙個共同的進攻或撤退計畫,只有當半數以上的將軍共同發起進攻時才能取得勝利。其中有一些將軍或指揮是叛徒,他們雖然不能截獲或修改其他人的訊息,但是他們可用使用假情報(如有利進攻時發撤退等),試圖阻止忠誠的將軍達成一致的行動計畫。

拜占庭將軍問題中並不去考慮通訊兵是否會被截獲或無法傳達資訊等問題,即訊息傳遞的通道絕無問。lamport已經證明了在訊息可能丟失的不可靠通道上試圖通過訊息傳遞的方式達到一致性是不可能的。所以,在研究拜占庭將軍問題的時候,我們已經假定了通道是沒有問題的,並在這個前提下,去做一致性和容錯性相關研究。如果需要考慮通道是有問題的,這涉及到了另乙個相關問題:兩軍問題。

我們將拜占庭將軍問題簡化成了,所有忠誠的將軍都能夠讓別的將軍接收到自己的真實意圖,並最終一致行動;而形式化的要求就是,「一致性」與「正確性」。

一致性:每個忠誠的將軍必須收到相同的命令值vi(vi是第i個將軍的命令)

正確性:如果第i個將軍是忠誠的,那麼他傳送的命令和每個忠誠將軍收到的vi相同。

lamport 對拜占庭將軍的問題的研究表明,當 n > 3m 時,即叛徒的個數 m 小於將軍總數的 n 的 1/3 時,通過口頭同步通訊(假設通訊是可靠的),可以構造同時滿足「一致性」和「正確性」的解決方法,即將軍們可以達成一致的命令。

兩將軍問題

拜占庭問題前,就已經存在兩將軍問題(two generals paradox):兩個將軍要通過信使來達成進攻還是撤退的約定,但信使可能迷路或被敵軍阻攔(訊息丟失或偽造),如何達成一致?

根據flp不可能原理,兩將軍問題無通用解。

與分布式對應關係

在分布式系統領域, 拜占庭將軍問題中的角色與計算機世界的對應關係如下:

將軍, 對應計算機節點;

忠誠的將軍, 對應執行良好的計算機節點;

叛變的將軍, 被非法控制的計算機節點;

信使被殺, 通訊故障使得訊息丟失;

信使被間諜替換, 通訊被攻擊, 攻擊者篡改或偽造資訊。

如上文所述,拜占庭將軍問題提供了對分布式共識問題的一種情景化描述,是分布式系統領域最複雜的模型。此外, 它也為我們理解和分類現有的眾多分布式一致性協議和演算法提供了框架。現有的分布式一致性協議和演算法主要可分為兩類:

一類是故障容錯演算法(crash fault tolerance, cft), 即非拜占庭容錯演算法,解決的是分布式系統中存在故障,但不存在惡意攻擊的場景下的共識問題。也就是說,在該場景下可能存在訊息丟失,訊息重複,但不存在訊息被篡改或偽造的場景。一般用於區域網場景下的分布式系統,如分布式資料庫。屬於此類的常見演算法有paxos演算法、raft演算法,、zab協議等。

一類是拜占庭容錯演算法,拜占庭將軍問題之所以難解,在於任何時候系統中都可能存在多個提案(作惡成本很低),並且要完成最終的一致性確認過程十分困難,容易受到干擾。但是一旦確認,即最終確認,概率上是100%。簡單的說就是解決分布式系統中既存在故障,又存在惡意攻擊場景下的共識問題,一般用於網際網路場景下的分布式系統,如在數字貨幣的區塊鏈技術中。屬於此類的常見演算法有pbft演算法、pow演算法。

bft 演算法

拜占庭將軍問題提出後,有很多的演算法被提出用於解決這個問題。這類演算法統稱拜占庭容錯演算法(bft: byzantine fault tolerance)。bft從上世紀80年代開始被研究,目前已經是乙個被研究得比較透徹的理論,具體實現都已經有現成的演算法。

拜占庭將軍問題是對現實世界的模型化,由於硬體錯誤、網路擁塞或中斷以及遭到惡意***等原因,計算機和網路可能出現不可預料的行為。拜占庭容錯技術被設計用來處理現實存在的異常行為,並滿足所要解決的問題的規範要求。

區塊鏈網路環境符合拜占庭將軍問題模型,有執行正常的伺服器(忠誠的拜占庭將軍),有故障的伺服器,還有破壞者的伺服器(叛變的拜占庭將軍)。共識演算法的核心是在正常的節點間形成對網路狀態的共識。

通常,發生故障的節點被稱為拜占庭節點,而正常的節點為非拜占庭節點。

拜占庭容錯系統是乙個擁有n臺節點的系統,整個系統對於每乙個請求,滿足以下條件:

a、所有非拜占庭節點使用相同的輸入資訊,產生同樣的結果;

b、如果輸入的資訊正確,那麼所有非拜占庭節點必須接收這個資訊,並計算相應的結果。

拜占庭系統普遍採用的假設條件包括:

a、拜占庭節點的行為可以是任意的,拜占庭節點之間可以共謀;

b、節點之間的錯誤是不相關的;

c、節點之間通過非同步網路連線,網路中的訊息可能丟失、亂序並延時到達,但大部分協議假設訊息在有限的時間裡能傳達到目的地;

d、伺服器之間傳遞的資訊,第三方可以嗅探到,但是不能篡改、偽造資訊的內容和驗證資訊的完整性。

原始的拜占庭容錯系統由於需要展示其理論上的可行性而缺乏實用性。另外,還需要額外的時鐘同步機制支援,演算法的複雜度也是隨節點增加而指數級增加。

拜占庭容錯(BFT)介紹

鏈客,專為開發者而生,有問必答!自2008年位元幣作為一種作為點對點的電子現金系統出現開端,許多加密錢銀都被發明出來,每個加密錢銀都有其特定的機制。但幾乎全部的加密錢銀都有乙個一起點,那就是區塊鏈是他們架構的中心。除了少數例外情況外,區塊鏈都是被有意規劃成去中心化的,由分布式核算機節點網路保護的數字...

BFT技能即拜占庭容錯技能

鏈客,專為開發者而生,有問必答!bft技能即拜占庭容錯技能,是一類分布式計算範疇的容錯技能。稱號拜占庭是乙個泛指,它代表著計算機範疇,在這個範疇內會有很多問題,如硬體過錯 網路擁堵或中止以及遭到歹意進犯等等,造成計算機網路可能出現的混亂。bft技能便是為了使混亂狀態抵達共同性。拜占庭將軍問題 bft...

區塊鏈共識演算法 二 拜占庭容錯演算法 BFT

1.拜占庭將軍問題簡介 拜占庭將軍問題 byzantine generals problem 主要指分布式對等網路節點間的通訊容錯問題。2.bft簡介 bft byzantine fault tolerance 即拜占庭容錯,是分布式計算領域的容錯技術,拜占庭容錯 於拜占庭將軍問題。拜占庭將軍問題是...