如何在NEO共識節點間分配任務

做者:Alexey Vaninhtml

任何計算機系統都有監控操做,可能會發送心跳信息、校驗和查詢及哈希請求等。這些操做在本文中都被統稱爲任務。在中心化系統中,一般會有一個受認證的節點或節點羣組來完成任務。而去中心化系統能夠將任務下發給各個節點,從而靈活拓展,所以效率也顯然更高,但這也就致使了相應的問題——到底如何在所選節點間分配任務。咱們能夠經過如下兩種方式解決這個問題:node

• 節點隨機選擇要作的任務
• 節點使用dBFT之類的共識算法分配任務git

本文將探討第二種方法。github

拜占庭容錯任務分配算法

假設有v個任務和n個可隨時在系統中工做的節點。每一個任務和節點都有一個獨一無二的標識符。所以每一個節點均可以使用HRW [2]選擇任務,使用預先設定的算法來執行任務。任務分配共識實際上確認了全部任務都是在未發生技術故障的前提下完成的。網絡

使用dBFT算法,即便網絡[1]中高達1/3的節點作出妥協也能夠達成共識。舉個例子,若某系統n=v=3:區塊鏈

圖片描述

該系統有3個任務和3個節點,其中有一個節點有欺詐行爲。spa

這些任務統一在各節點中進行分配:若是每一個節點承擔一個任務,在最壞的狀況下會有一個任務可能沒法被執行。所以咱們使用了冗餘來確保全部任務都能被執行。v任務須被n/3+1個節點執行。在此狀況下,節點任務池的大小可經過如下公式算出。翻譯

圖片描述

在此案例中,P(3,3) = 2htm

圖片描述

無論哪一個節點作出了妥協,全部任務都仍能被正確執行。

圖片描述
圖1 不一樣任務數前提下任務池大小的最大值

圖1標明,該公式的值趨向於v/3,意味着在任何狀況下各節點任務池中的任務都佔全部任務的1/3。在負載增長的狀況下系統可能不能正常拓展。

減少任務池大小

若系統的n=3 v=4,任務池大小即爲P(3,4) = 2.3 ≈ 3。各節點的任務池大小就可減至2:

圖片描述

所以,各任務被執行的概率就都達到了66%。所以任務池大小能夠縮減,只要確保必定的精度就能夠了。
出於研究的目的,咱們創建了一個模擬模型進行實驗,參數爲v=1000。咱們嘗試在不一樣n的狀況下找到能使任務沒法執行的可能性小於0.00001的任務池大小。該模型已開源在github[3]。結果如圖2所示:

圖片描述
圖2 v=1000時的任務池容量實驗

上圖顯示,該模型的實驗數據實際上處於任務池容量的最大和最小值的區間裏。所以當n增長時,任務池所需容量會減少。任務池容量的最大值與實驗值之間的差額可使用R(x)(位於y1軸上,取0-1之間的任意值)公式求得一個近似值。而後任務池容量就可經過如下公式求得。

圖片描述

深刻研究

本文並未考慮網絡節點發生故障的可能性,並且全部實驗均在最壞假設下進行,作出妥協的節點數也帶入了最大值。顯然,100個節點中出現33個妥協節點的比例也比3個節點中出現1個妥協節點的概率小。所以能夠將「妥協概率」的方程定義爲Q(x),然後計算出任務池的大小爲P(n,v)⋅R(n)⋅Q(n)。而當妥協節點的數量小於n/3時,R(x)的的行爲還須要深刻研究。

參考文獻

1.張錚文,區塊鏈拜占庭容錯算法:
https://docs.neo.org/en-us/ba...
2.一致性哈希(最高隨機權值):
https://en.wikipedia.org/wiki...
3.模擬模型庫:
https://github.com/AlexVanin/...

原文翻譯自:https://medium.com/@neospcc/t...

相關文章
相關標籤/搜索