關於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個節點:a
、b
、c
、d
,其中節點d
是惡意節點,並且假設上一輪view
中,a
是主節點。如果只需要2f個prepared
資料,節點c
在收到d
的prepared
資料後,加上自己的prepared
資料就達到了2f個的計數,從而提交了(也即執行了相應的交易)。此時a
和b
都還沒有到達prepared
狀態。並且,在此時發生了view
切換的操作,下乙個主節點是b
。b
節點收到了包括自己
、a
和d
的view-change
訊息後,就發起了new-view
訊息。但由於a
和b
都未在上一輪view
中到達prepared
狀態,因而其view-change
訊息中不包含相應的prepared
資料;而d
是惡意節點,故意在view-change
訊息中不包含相應的prepared
資料。因此,上一輪在節點c
中commit
了的資料在新的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 看看主機板的第一驅動是不是設定成軟碟機了。改正確就行 一般第一驅動光碟機 第二驅動硬碟 這樣應該可以解決了。如果還不行 那就是要關閉主...