楊澤奇 史培中
摘要:共識算法作為區(qū)塊鏈的底層技術(shù)之一,其性能對區(qū)塊鏈在安全性和效率方面具有重要的影響。Raft共識算法的性能優(yōu)于其他共識算法,不會造成算力集中和資源浪費等問題。但是,Raft算法隨機選擇和投票以選取領(lǐng)導(dǎo)者節(jié)點的方式,不能保證選取的領(lǐng)導(dǎo)者節(jié)點的可靠性。因此,文章在Raft算法的基礎(chǔ)上引入動態(tài)更新的信用機制,提出了一種基于信用機制的聯(lián)盟鏈Raft+共識算法。領(lǐng)導(dǎo)者節(jié)點的信用值根據(jù)多次生成有效或無效區(qū)塊的行為進(jìn)行動態(tài)更新,并采用信用層次來評價節(jié)點信用,根據(jù)閾值選舉信用值高的領(lǐng)導(dǎo)者節(jié)點。實驗表明,Raft+共識算法選取的領(lǐng)導(dǎo)者節(jié)點的可靠性比Raft算法的更好,為面向聯(lián)盟鏈的制造業(yè)和醫(yī)療等應(yīng)用場景提供了共識算法的解決方案。
關(guān)鍵詞:共識算法;區(qū)塊鏈;Raft;信用機制;聯(lián)盟鏈
中圖分類號:TP309
文獻(xiàn)標(biāo)志碼:A
0 引言
從中本聰發(fā)布比特幣白皮書的一刻起[1],專家學(xué)者們就對區(qū)塊鏈技術(shù)不斷研究和發(fā)展。區(qū)塊鏈的本質(zhì)是一種去中心化、可溯源、不可篡改的分布式數(shù)據(jù)庫系統(tǒng)。區(qū)塊鏈中最重要的問題是分布式節(jié)點之間數(shù)據(jù)的一致性,一般通過設(shè)計和實現(xiàn)共識算法來解決[2-3]。區(qū)塊鏈有3種類型,在不同的分類中采用的共識算法也不同。比特幣中常采用的是工作量證明(proof of work, Pow)[4],聯(lián)盟鏈中一般采用的是實用拜占庭容錯(practical Byzantine fault tolerance, PBFT)[5],私有鏈中則采用經(jīng)典的一致性算法,如Raft[6],Paxos[7]。當(dāng)節(jié)點規(guī)模增加時,PBFT算法的性能就會受到影響,其效率就會變低。Chen等[8]提出了一種改進(jìn)的實用拜占庭容錯(IPBFT)共識算法,引入了信用模型和投票機制,根據(jù)節(jié)點的投票來選擇主節(jié)點,保證了主節(jié)點的可靠性。賴英旭等[9]使用信用機制對PBFT算法進(jìn)行改進(jìn),降低了節(jié)點間通信的次數(shù)。涂園超等[10]為了解決PBFT共識算法的集群中節(jié)點數(shù)量過多時會導(dǎo)致效率低下的問題,使用信用投票的方法對PBFT算法進(jìn)行改進(jìn),將節(jié)點分別進(jìn)行分類,共識效率得到提高,系統(tǒng)的安全性和可靠性得到了保證。
從上述文獻(xiàn)可以看出,引入信用機制的改進(jìn)共識算法大多是在PBFT共識算法基礎(chǔ)上進(jìn)行改進(jìn),然而改進(jìn)后的PBFT共識算法的時間復(fù)雜度較高且存在中心化的問題。Raft算法的共識效率高,時間復(fù)雜度低,且受到節(jié)點規(guī)模的影響小。Leader選舉是Raft共識算法的核心,采用節(jié)點獲得的票數(shù)和隨機選擇Candidate節(jié)點的機制進(jìn)行選舉,使選舉出的Leader節(jié)點具有隨機性。Raft 算法具有強領(lǐng)導(dǎo)性,Leader節(jié)點的可靠性對整個系統(tǒng)的可靠性有著重要影響。因此,通過改進(jìn)選舉機制選出可靠性較好的Leader節(jié)點應(yīng)用于聯(lián)盟鏈中,成為當(dāng)下學(xué)者們研究的重要話題。
針對上述問題,本文提出了一種基于信用機制的Raft+共識算法,其特點在于:(1)對Leader節(jié)點的選取機制進(jìn)行改進(jìn)。對節(jié)點行為進(jìn)行信用評價,從信用值較高的節(jié)點中選取Leader節(jié)點,保證選取的Leader節(jié)點可靠性較高。(2)在Raft算法的基礎(chǔ)上引入信用機制,提出了基于信用機制的聯(lián)盟鏈Raft+的共識算法,提高區(qū)塊鏈系統(tǒng)的可靠性。
1 共識算法
Raft算法設(shè)置了領(lǐng)導(dǎo)者、跟隨者和候選者3種角色,簡化了算法模型。以下從3個方面來解決選舉Leader節(jié)點的方式時產(chǎn)生的一致性問題。
(1)Leader選舉:若目前的Leader節(jié)點出現(xiàn)故障或宕機,Raft共識算法將重新選舉出一個Leader節(jié)點。
(2)日志復(fù)制:Raft算法中Leader從其他節(jié)點處接收日志后,不僅要求系統(tǒng)中的其他節(jié)點必須復(fù)制到該日志,而且Leader節(jié)點根據(jù)算法一致性要求,將使其他節(jié)點的日志與自己的一致。
(3)安全性:狀態(tài)機安全是保證Raft算法安全性的重中之重。當(dāng)一個確定的日志條目被節(jié)點狀態(tài)機接收時,則其他節(jié)點只能將該日志索引位置應(yīng)用到相同的指令中。
以下將介紹Raft算法的選舉過程,如圖1所示。對于剛加入系統(tǒng)的節(jié)點,其角色是跟隨者。若此時系統(tǒng)存在領(lǐng)導(dǎo)者節(jié)點,則剛加入的節(jié)點角色仍是跟隨者。若此時系統(tǒng)不存在領(lǐng)導(dǎo)者,則會立刻發(fā)起新的選舉。選舉過程中每個節(jié)點都可能成為候選者,成為候選者的節(jié)點會馬上向其他節(jié)點發(fā)送邀票請求。當(dāng)某個候選者節(jié)點獲得的選票數(shù)最先超過總節(jié)點數(shù)的一半時,則該節(jié)點成為新的領(lǐng)導(dǎo)者,其余節(jié)點停止獲取選票并成為跟隨者。
2 Raft算法改進(jìn)方案
2.1 Raft+ 算法思想
本文的改進(jìn)思想主要是在領(lǐng)導(dǎo)者節(jié)點選舉過程中引入信用機制,基于信用機制來選取領(lǐng)導(dǎo)者節(jié)點,提高Raft共識算法的可靠性。
加入聯(lián)盟鏈前,節(jié)點都必須通過嚴(yán)格的審核和授權(quán),且加入聯(lián)盟鏈的節(jié)點行為狀態(tài)都相對穩(wěn)定,可以建立信任關(guān)系[11]。信任關(guān)系是針對節(jié)點在聯(lián)盟鏈中生成有效或無效區(qū)塊的行為進(jìn)行評價。在聯(lián)盟鏈中產(chǎn)生有效區(qū)塊的節(jié)點,其信用值就增加;產(chǎn)生無效區(qū)塊的節(jié)點,其信用值就降低。
2.2 基于信用機制的 Leader 節(jié)點選取
2.2.1 信用評估模型
系統(tǒng)中節(jié)點都會存儲一個節(jié)點行為記錄表。節(jié)點的信用值和判定節(jié)點信用值的參考因素會記錄在表中,每一個節(jié)點都會緩存包括自身在內(nèi)的所有節(jié)點的行為記錄表,該表在每一次共識結(jié)束后即新區(qū)塊產(chǎn)生之后進(jìn)行更新。行為記錄表中主要記錄的數(shù)據(jù)如表1所示,從表中可以看出,節(jié)點的信用值由節(jié)點產(chǎn)生有效區(qū)塊因素有關(guān)。
節(jié)點信用記錄表:信用區(qū)塊存儲了當(dāng)前這一輪共識結(jié)束后,所有參與共識的節(jié)點的信用記錄。
本文根據(jù)節(jié)點的行為將節(jié)點分為兩種類型:高信任節(jié)點和低信任節(jié)點。
高信任節(jié)點:能夠積極參與到共識過程中,及時回應(yīng)其他節(jié)點發(fā)來的請求,節(jié)點多次生成有效區(qū)塊,網(wǎng)絡(luò)通信狀況較好。
低信任節(jié)點:可能由于網(wǎng)絡(luò)的原因,節(jié)點多次產(chǎn)生無效區(qū)塊,網(wǎng)絡(luò)通信狀況較差。
節(jié)點的信用值是節(jié)點可靠性的代表,通過節(jié)點在每一輪參與共識的行為計算新的信用值。對節(jié)點進(jìn)行獎懲,是一種對節(jié)點的激勵機制,使節(jié)點更積極地參與共識。通過在 Raft 算法的基礎(chǔ)上引入信用機制,促進(jìn)了節(jié)點的積極性,對于聯(lián)盟鏈應(yīng)用于制造業(yè)、醫(yī)療等商業(yè)模式中提供了一種方案。
2.2.2 信用更新機制
定義1(信用層次),Leader 選舉通過引入信用機制,對領(lǐng)導(dǎo)者節(jié)點的行為進(jìn)行評估,保證選取的領(lǐng)導(dǎo)者節(jié)點的可靠性是較好的。根據(jù)計算每個共識節(jié)點的信用值,并通過給成為領(lǐng)導(dǎo)者的節(jié)點一個信用值閾值來規(guī)定其可信范圍。
高信任節(jié)點:節(jié)點多次生成有效區(qū)塊,其信用值范圍為[0.45, 1]。
低信任節(jié)點:節(jié)點多次產(chǎn)生無效區(qū)塊,其信用值范圍為[0, 0.45)。
定義2(信用值),系統(tǒng)中節(jié)點的信用值根據(jù)以下公式進(jìn)行計算。
其中:Ci代表每個節(jié)點當(dāng)前所獲得的信用值,信用值范圍為[0, 1];i代表每個節(jié)點的下標(biāo);Cinit代表每個節(jié)點的初始信用值,信用值為0.5;T(i)代表每個節(jié)點對應(yīng)獎勵或者懲罰的次數(shù);RP(i)代表每個節(jié)點所獲得的獎勵或者受到的懲罰。當(dāng)領(lǐng)導(dǎo)者節(jié)點生成有效區(qū)塊后,系統(tǒng)會獎勵其0.01點信用值;當(dāng)領(lǐng)導(dǎo)者節(jié)點生成無效區(qū)塊后,系統(tǒng)則懲罰0.02點信用值。
定義3(信用層次動態(tài)更新),領(lǐng)導(dǎo)者節(jié)點的信用值會根據(jù)其生成的有效或無效區(qū)塊的次數(shù)進(jìn)行動態(tài)更新。每個節(jié)點的初始信用值都為0.5。當(dāng)某一領(lǐng)導(dǎo)者節(jié)點多次且連續(xù)產(chǎn)生有效區(qū)塊后,其信用值上升到0.45~1,系統(tǒng)會將該節(jié)點評估為高信任節(jié)點。當(dāng)該節(jié)點多次產(chǎn)生無效區(qū)塊后,其信用值下降到0~0.45,系統(tǒng)會將該節(jié)點評估為低信任節(jié)點。節(jié)點的信用層次劃分是系統(tǒng)對節(jié)點是否為可靠性較差的節(jié)點的評判標(biāo)準(zhǔn),信用層次低的節(jié)點在后續(xù)過程中處于劣勢,而信用層次高的節(jié)點則更有優(yōu)勢。
當(dāng)節(jié)點剛加入網(wǎng)絡(luò)中時,信用值初始值都設(shè)置為0.5。根據(jù)公式(1)可以得出節(jié)點的信用值,并且當(dāng)節(jié)點多次產(chǎn)生無效區(qū)塊以后,該節(jié)點的信用值降低且不會被選為領(lǐng)導(dǎo)者。信用值更新和計算的偽代碼如表2—3所示。
3 實驗結(jié)果與分析
實驗在單臺電腦上進(jìn)行仿真模擬。操作系統(tǒng)為 Windows11,AMD Ryzen 75 800 H 3.20 GHz CPU和16 G內(nèi)存上進(jìn)行的。使用 Python 語言模擬了 Raft+ 共識機制,利用 Python 語言實現(xiàn)了方案模型,集成開發(fā)環(huán)境為PyCharm。
3.1 不同閾值選取的共識時間
分析節(jié)點數(shù)量和共識時間之間的關(guān)系。系統(tǒng)通過選取不同的閾值,模擬了不同節(jié)點數(shù)量和不同的有效區(qū)塊概率下,每個節(jié)點達(dá)成共識的時間。仿真實驗結(jié)果如圖2—4所示。
圖2—4中橫坐標(biāo)為節(jié)點數(shù)量,縱坐標(biāo)為節(jié)點達(dá)成共識平均消耗的時間,節(jié)點達(dá)成共識的平均時間是總的時間與節(jié)點完成共識次數(shù)的比值。在實驗中,對兩種算法在不同節(jié)點數(shù)量下進(jìn)行節(jié)點共識時間的分析。當(dāng)節(jié)點個數(shù)為7個以上時,不同閾值的每個高信任節(jié)點達(dá)成共識的時間會有明顯不同。隨著節(jié)點數(shù)增多時,若閾值選取過大,則共識時間將變長;若閾值選取過小,則節(jié)點信任度不高,模擬仿真實驗設(shè)置的閾值為0.45。在共識過程中,當(dāng)節(jié)點的信用值超過一定閾值時,則該節(jié)點具有較高的信任。因此,該節(jié)點的類型為高信任節(jié)點。
在不同閾值下,改進(jìn)后的 Raft+ 算法的節(jié)點的共識時間比 Raft 算法的共識時間長。Raft+ 算法是基于信用機制計算出節(jié)點信用值,從中選取信用值較高的節(jié)點作為領(lǐng)導(dǎo)者節(jié)點,其具有更高的可靠性。因此,通過信用機制選取的領(lǐng)導(dǎo)者節(jié)點負(fù)責(zé)產(chǎn)生區(qū)塊可以減少出錯的可能性,提高整體系統(tǒng)的可靠性。
3.2 不同閾值選取的共識成功率
分析節(jié)點數(shù)量和共識成功率之間的關(guān)系。系統(tǒng)通過選取不同的閾值,模擬了不同節(jié)點數(shù)量和不同的有效區(qū)塊概率下,節(jié)點達(dá)成共識的成功率。仿真實驗結(jié)果如圖5—7所示。
圖5—7中橫坐標(biāo)為節(jié)點數(shù)量,縱坐標(biāo)為節(jié)點達(dá)成共識的成功率,節(jié)點的共識成功率是成功共識次數(shù)與總的共識次數(shù)的比值。在實驗中,對兩種算法在不同節(jié)點數(shù)量下的節(jié)點共識成功率進(jìn)行分析。在不同閾值下,改進(jìn)后的 Raft+ 共識算法的共識成功率比 Raft 算法低。Raft+ 算法是基于信用機制選取領(lǐng)導(dǎo)者節(jié)點的。當(dāng)節(jié)點的信用值低于閾值時,該節(jié)點就不能成為領(lǐng)導(dǎo)者節(jié)點,造成共識失敗。共識成功的節(jié)點則具有更高的信用值。因此,雖然Raft+ 共識算法的共識成功率下降,但是節(jié)點具有更高的可靠性。
3.3 信用值對比
分析節(jié)點獲得的信用值。系統(tǒng)通過模擬了不同節(jié)點數(shù)量和不同的有效區(qū)塊概率下,節(jié)點獲得的信用值。仿真實驗結(jié)果如圖8—10所示。
圖8—10中,橫坐標(biāo)為節(jié)點數(shù)量,縱坐標(biāo)為節(jié)點獲得的信用值,節(jié)點的信用值是根據(jù)節(jié)點信用模型計算得到的。在實驗中,對兩種算法在不同節(jié)點數(shù)量下的節(jié)點信用值進(jìn)行分析。不同節(jié)點數(shù)量下,改進(jìn)后的Raft+共識算法的節(jié)點信用值比Raft算法的節(jié)點信用值更高。Leader節(jié)點具有更高的可靠性。因此,其產(chǎn)生的區(qū)塊出錯的可能性更低,提高了系統(tǒng)整體的可靠性。
4 結(jié)語
聯(lián)盟鏈中對于節(jié)點的可靠性要求很高,若選舉出的領(lǐng)導(dǎo)者節(jié)點多次生成無效區(qū)塊,會嚴(yán)重影響聯(lián)盟鏈的可靠性。本文針對Raft共識算法中存在可能隨機選取的主節(jié)點可靠性不足難以滿足聯(lián)盟鏈實際應(yīng)用需求等問題,在Raft共識算法的基礎(chǔ)上引入動態(tài)更新的信用機制,提出了基于信用機制的聯(lián)盟鏈Raft+共識算法。該算法根據(jù)節(jié)點產(chǎn)生有效區(qū)塊和無效區(qū)塊的行為來進(jìn)行信用值的動態(tài)更新,以選取信用值較高的節(jié)點作為Leader節(jié)點,可以保證Leader節(jié)點具有較好的可靠性。實驗仿真結(jié)果表明,Raft+ 共識算法時延增加,共識成功率下降,Leader節(jié)點的平均信用值比Raft算法Leader節(jié)點的平均信用值要高。因此,Raft+ 算法提供了一種應(yīng)用于制造業(yè)和醫(yī)療等場景的聯(lián)盟鏈方案。
參考文獻(xiàn)
[1]NAKAMOTO S.Bitcoin:a peer-to-peer electronic cashsystem[EB/OL].(2008-10-31)[2019-08-08].https://bitcoin.org/bit-coin.pdf.
[2]ARNOLD R,LONGLEY D.Continuity:a deterministic byzantine fault tole-rant asynchronous consensus algorithm [J].Computer Networks,2021(11):108431-108443.
[3]鄧小鴻,王智強,李娟,等.主流區(qū)塊鏈共識算法對比研究[J].計算機應(yīng)用研究,2022(1):1-8.
[4]MENEGHETTI A,SALA M,TAUFER D.A survey on pow-based consensus [J].Annals of Emerging Technologies in Computing,2020(1):8-18.
[5]LI Y,WANG Z,F(xiàn)AN J,et al.An extensible consensus algorithm based on PBFT[C].New York:IEEE Press,2019.
[6]ONGARO D,OUSTERHOUT J.In search of an understandable consensus algorithm[C].Philadelphia:USENIX Association,2014.
[7]LAMPORT L.Fast paxos[J].Distributed Computing,2006(2):79-103.
[8]CHEN J,ZHANG X,SHANGGUAN P.Improved PBFT algorithm based on reputation and voting mechanism[C].Bristol:Journal of Physics:Conference Series.IOP Publishing,2020.
[9]賴英旭,薄尊旭,劉靜.基于改進(jìn)PBFT算法防御區(qū)塊鏈中sybil攻擊的研究[J].通信學(xué)報,2020(9):104-117.
[10]涂園超,陳玉玲,李濤,等.基于信譽投票的PBFT改進(jìn)方案[J].應(yīng)用科學(xué)學(xué)報,2021(1):79-89.
[11]QIAN W N,SHAO Q F,ZHU Y C,et al.Research problems and methods in blockchain andtrusted data management [J].Journal of Software,2018(1):150-159.
(編輯 沈 強)
Consortium chain Raft+ consensus algorithm based on credit mechanism
Yang Zeqi, Shi Peizhong*
(Jiangsu Institute of Technology, Changzhou 213001, China)
Abstract: As one of the underlying technologies of the blockchain, the consensus algorithm has an important impact on the security and efficiency of the blockchain. The performance of the Raft consensus algorithm is superior to other consensus algorithms, and it will not cause problems such as concentration of computing power and waste of resources. However, the Raft algorithm randomly selects and votes to select the leader node, which cannot guarantee the reliability of the selected leader node. Therefore, this paper introduces a dynamically updated credit mechanism on the basis of the Raft algorithm, and proposes a credit mechanism-based consortium chain Raft+ consensus algorithm. The credit value of the leader node is dynamically updated according to the behavior of generating valid or invalid blocks multiple times, and the credit level is used to evaluate the node credit, and the leader node with a high credit value is elected according to the threshold. Experiments show that the reliability of the leader node selected by the Raft+ consensus algorithm is better than that of the Raft algorithm, which provides a consensus algorithm solution for application scenarios such as alliance chain-oriented manufacturing and medical care.
Key words: consensus algorithm; blockchain; Raft; credit mechanism; alliance chain