為什麼PBFT中需要2f 1

2021-10-14 13:37:29 字數 1512 閱讀 1859

關於pbft中為什麼需要2f+1個prepare/commit的問題,網上其實有很多部落格和文獻來闡述,如這篇部落格pbft中的幾個重要引數以及這本書"introduction to reliable and secure distributed programming"。

這些部落格和文獻大都採用了比較理論的證明方式,使用了quorum的概念。即拜占庭網路中的quorum值是2f+1,因此pbft中必須使用2f+1這個引數。這種證明方式總的來說是比較抽象的。

prepare階段時,為何要確認接收到了2f+1條訊息

答:主要是考慮到primary節點的作惡問題。

舉例來說:假設pbft集群中有4個節點:abcd,其中節點d是惡意節點,並且假設上一輪view中,a是主節點。如果只需要2f個prepared資料,節點c在收到dprepared資料後,加上自己的prepared資料就達到了2f個的計數,從而提交了(也即執行了相應的交易)。此時ab都還沒有到達prepared狀態。並且,在此時發生了view切換的操作,下乙個主節點是bb節點收到了包括自己adview-change訊息後,就發起了new-view訊息。但由於ab都未在上一輪view中到達prepared狀態,因而其view-change訊息中不包含相應的prepared資料;而d是惡意節點,故意在view-change訊息中不包含相應的prepared資料。因此,上一輪在節點ccommit了的資料在新的view中,未能被new-view包含,從而可能在後期被其他節點執行矛盾交易,造成集群中節點狀態的不一致。

實用拜占庭容錯演算法(pbft)

pbft中的幾個重要引數

cachin c, guerraoui r, rodrigues l. introduction to reliable and secure distributed programming[m]. springer science & business media, 2011.

為什麼PBFT需要3個階段訊息?

在面試的時候,很多同學的簡歷熟悉pbft共識演算法,在現場面試的時候,卻只能說個主要邏輯,離完整的演算法,還差十萬八千里,相似從網路上看了一些文章,就算是熟悉了。當我問 為什麼pbft需要3個階段訊息?2個階段行不行 時,還沒有人能回答出來。萊斯利 蘭波特在其 1 中描述了如下拜占庭問題 一組拜占庭...

2 為什麼需要 OAuth2

我們假設有乙個 雲筆記 產品,並提供了 雲筆記服務 和 雲相簿服務 此時使用者需要在不同的裝置 android iphone tv watch 上去訪問這些 資源 筆記 那麼使用者如何才能訪問屬於自己的那部分資源呢?此時傳統的做法就是提供自己的賬號和密碼給我們的 雲筆記 登入成功後就可以獲取資源了。...

為什麼每次開機總要按F1?

為什麼每次開機總要按f1?按步驟來 1 系統的時間顯示正確嗎?不正確 更換主機板電池 2 如果系統時間顯示正確 進入主機板設定介面 把driver 選擇none 3 看看主機板的第一驅動是不是設定成軟碟機了。改正確就行 一般第一驅動光碟機 第二驅動硬碟 這樣應該可以解決了。如果還不行 那就是要關閉主...