左 敏 何思宇 張青川 姚雙順
(北京工商大學農產品質量安全追溯技術及應用國家工程實驗室,北京 100048)
食物是人類賴以生存的物質基礎,近年來,隨著當今社會物質水平發展,人們對于食品安全與食品品質有了更高的要求。同時,由于食品安全事件的頻發,使得人們更加關注食品從源頭、生產加工到倉儲運輸等完整的食品生命周期中所涉及的安全問題。因此,亟需建設完善食品溯源系統,使其更加安全、可信、透明。這不僅能夠加強食品監管部門對食品全生命周期的監管,更能夠進一步提高食品市場安全水平,保障食品市場健康穩定發展[1]。
區塊鏈的分布式記賬結構、安全信任機制以及不可篡改的時間戳等技術使其能夠彌補傳統溯源技術存在的局限,利用其可信化、去中心化和不可篡改等特點,將食品數據以不可逆的方式寫入區塊鏈,從而在實現追溯透明化的同時,能夠有效地保證食品追溯數據的安全性和一致性[2-4]。因此,研究區塊鏈技術的應用與實踐已成為目前食品全生命周期溯源的不二之選,并且相關研究已經取得了一定的成績。
IBM 在2018 年正式商用食品溯源區塊鏈項目——IBM Food Trust[5],幫助商家迅速高效地應對食品安全風險;劉海洋等[6]提出一種在農產品種質資源溯源管理的區塊鏈應用方案,從農產品種質源頭保障食品安全;鐘林憶等[7]應用區塊鏈技術為肉類食品提供安全保障;江琳莉等[8]以區塊鏈結合物聯網、AI 等技術,構建出農產品溯源體系;Xie等[9]提出了區塊鏈雙鏈結構,用以保證農產品數據安全,使其不會被惡意篡改或破壞。
由于我國食品溯源信息量增長迅速且十分巨大,又由于在食品的全生命周期中流轉場景節點眾多,這不僅需要足夠的存儲容量,對區塊鏈的吞吐量、吞吐效率也要求很高[10]。因此,針對食品溯源場景節點眾多、區塊鏈網絡負載大、網絡延時較長的問題,本文引入解釋結構模型(ISM)分層思想,對區塊鏈共識節點進行分層處理,優化傳統實用拜占庭容錯(PBFT)共識算法,實現多中心子節點集群分層分塊共識,解決傳統PBFT 算法中網絡堵塞問題,減少區塊鏈網絡廣播資源浪費、降低區塊鏈共識通信成本,在保證區塊鏈共識安全的同時提升通信和共識效率。
2.1.1 共識機制
共識機制[11]是區塊鏈工作引擎,是在P2P網絡中無控制主體情況下,各參與節點協同記賬,保證數據的分布式一致性。共識算法主要解決分布式共識問題,即如何高效達成分布式一致性問題。是否達成共識的決定權分散在各個節點,而節點規模與共識通信成本成正比,所以系統的一致性和系統可用性存在二律背反。如果追求一致性效率而控制區塊鏈節點數量,將限制系統的適用場景,相反,如果不斷拓寬系統適用性,將會增加節點規模,加大系統達成一致難度。
2.1.2 拜占庭將軍問題
著名的拜占庭將軍問題[12]基于忠誠與叛變共存的敵城駐守故事,其中叛變將軍向其他將軍發送不同消息,干擾將軍們的作戰計劃一致性。忠誠將軍如何抵制叛變將軍干擾達成作戰計劃一致性的拜占庭將軍問題,其本質是在分布式對等網絡中的通信容錯問題。這個問題映射在區塊鏈P2P網絡中,即惡意節點通過系統中正確判斷沖突信息,影響區塊鏈節點達成共識,以此危害數據安全。
2.1.3 實用拜占庭容錯共識機制
實用拜占庭容錯算法由Castro與Liskov提出[13],其被認為是解決拜占庭問題的最佳算法之一[14]。PBFT 算法需要各節點共同維護系統狀態,以解決帶拜占庭問題的分布式一致性難題。帶拜占庭問題的P2P網絡中存在的惡意節點,即拜占庭節點,如圖1節點3,故意對節點集群發出的請求不響應,甚至故意發送錯誤數據,以阻礙分布式系統達成一致。具有較高容錯性的PBFT 算法原理如圖1 所示,一條交易請求從客戶端發起,至就近區塊鏈網絡節點處,然后向全網進行廣播交易,主節點打包交易之后經過預準備(pre-prepare)—準備(prepare)—提交(commit)三大階段,形成協議共識流程。該共識機制可容忍小于1/3的惡意或無效節點實現有效共識。
解釋結構模型的提出,是為分析復雜系統與要素關系而開發的一種分析方法[15],其通過定量分析使復雜的系統層次化,以結構表達模型來描述系統內各元素的重要性。解釋結構模型為分析復雜系統要素關系,借助計算機生成計算矩陣,判斷系統內各元素關系,制作出分層且有向的元素結構圖。ISM 最大的優勢在于可以將關系復雜、邏輯不清的系統結構條理化、層次化,并且適用性好,可解決大部分復雜系統的要素分層分級問題。
在應用解釋結構模型處理復雜系統要素邏輯問題時,應遵循以下步驟:首先,針對研究問題開展ISM適用性討論,成立ISM 研究小組,對系統和系統內元素進行總結歸納。隨后,研究小組需整理復雜系統內各元素間關系,或直接影響關系、或直接交易關系,并以此為依據建立鄰接矩陣(其中“1”表示Si對Sj有影響,“0”表示Si對Sj無影響(i、j為矩陣的行列數))。最后,以研究小組確定的鄰接矩陣為計算基礎,計算可達矩陣并解析可達矩陣表示的系統元素關系,繪制有向元素分層圖。將系統內錯綜復雜的元素關系實現層次化、結構化的展示。ISM工作流程如圖2所示:
由于食品溯源場景節點眾多、區塊鏈網絡負載大、網絡延時較長、廣播資源占用嚴重、網絡堵塞且通信成本高。本文研究涉及的PBFT 算法目前主要應用于聯盟區塊鏈中,然而在節點眾多的食品溯源場景中,PBFT 優勢難以顯現[16]。同時PBFT 共識算法存在不足也很明顯,即所有節點參與共識,這無疑增加了通信成本,因為所有節點參與共識容易造成廣播資源浪費,進而導致網絡堵塞。為使PBFT 在食品溯源場景中保持高性能優勢,彌補其不足之處,需對其進行優化,以適用食品追溯場景。
基于ISM優化后PBFT算法流程如圖3。
首先,通過區塊鏈節點間的交易關系構建解釋結構模型,對區塊鏈共識節點進行分層。由下而上展開,以底層節點為共識中心節點,以次底層節點為共識一級節點,以此類推定義區塊鏈共識節點分層方法,建立區塊鏈共識節點分層體系。然后,以探尋法對分層后的區塊鏈共識節點進行分塊,劃分為多個參與共識的子節點集群,以多中心子節點集群分塊進行PBFT 共識。最后,共識中心節點將共識結果提交區塊,實現總體共識。
為改變區塊鏈網絡中全部節點同時參與共識造成網絡堵塞的情況,最有效地方法是對節點進行分層處理,全網節點分開共識可減少網絡資源占用情況、節省通信成本、提高共識效率。區塊鏈各節點在復雜的網絡交易中關系錯雜且同處于一個區塊鏈交易網絡系統,符合解釋結構模型的應用條件。所以引入解釋結構模型的分層思想,根據區塊鏈節點間的交易關系對區塊鏈共識節點進行分層。分層具體包括如下步驟:
S1:通過交易關系建立節點間的m×m鄰接矩陣A,其中m為區塊鏈系統中的節點個數。鄰接矩陣中元素表示為aij。其中,“1”表示兩節點間存在交易,其中交易輸入指向交易輸出,“0”表示兩節點間無交易。即:
S2:由鄰接矩陣加單位矩陣得A+I,以布爾運算邏輯進行冪積運算n次,直到(A+I)n=(A+I)n+1,即當冪積迭代計算后結果不再變化,得可達矩陣M。
S3:為了區域分解可達矩陣M,首先在區塊鏈系統中計算各節點的先行集合F 和可達性集合L,以及二者的共同集合(L ∩F),由以上先行集合F、可達性集合L 和共同集合(L ∩F)三個集合進行區塊鏈共識節點分層。若某節點n對應的集合滿足(L ∩F)=L,則節點n在最頂層,剔除節點n后繼續以集合滿足(L ∩F)=L 為規則選擇次頂層節點,以此類推實現分層;若某節點n對應的集合滿足(L ∩F)=F,則節點n在最底層。
S4:若某些節點對應的可達性集合L、先行集合F和共同集合(L ∩F)三個集合對應相同,則這些節點存在強連接關系,可取一個節點代表留在矩陣中進行后續運算,其他節點剔除矩陣,實現矩陣縮減。由可達矩陣M 剔除強相關節點得到縮減矩陣M1。通過縮減矩陣M1減掉單位矩陣I 得到矩陣M2,由矩陣M2反應的邏輯關系構建區塊鏈節點的有向連接圖,實現區塊鏈共識節點帶有交易邏輯關系的分層。
為了實現節點分層更好地服務區塊鏈共識機制,如圖4 由下而上展開式建立區塊鏈節點分層體系。在區塊鏈共識節點分層中,參與節點在整個區塊鏈交易關系中的地位隨著分層體系的層級上升而下降,因為底層節點在區塊鏈節點間的交易關系中占據主要地位,故以底層節點為共識中心節點(K1、K2.....Ki,i為共識中心節點個數)。同理,以次底層節點為共識一級節點(A1、A2.......Aj,j為共識一級節點個數)。由此,區塊鏈共識節點依據節點在交易關系中的重要地位建立起分層體系。
區塊鏈共識節點分層是實現分塊共識的基礎。為ISM 更好地服務分層分塊式共識,對ISM 模型進行改進,區塊鏈共識節點按交易關系中的重要地位實現分層后,補充節點分塊步驟,如圖4 圓圈內所示即為一個共識塊。區塊鏈分層節點中,由底層節點向上層逐層探尋,如出現分叉,則該節點與分叉后節點劃入一個共識節點子集群。交易量高且在復雜交易中起重要作用的節點劃入共識中心節點集群,然后以共識節點分層結合探尋分塊劃分子共識節點集群。區塊鏈全網參與共識節點的分層分塊構建了多個參與區塊鏈共識的多中心節點集群,各共識集群互不干擾、相輔相成,共同作用。
區塊鏈全網共識節點的分層分塊為多中心子節點集群逐層共識做好了準備。ISM 模型已實現區塊鏈共識節點的分層分塊功能,下面將PBFT 共識機制在分層分塊的基礎上實現共識的操作。在單個子節點集群網絡中,通過預準備、準備、提交和回復等階段實現整個區塊鏈網絡中的部分共識,子節點集群共識完成。同時,在區塊鏈網絡中,多中心子節點集群同時在分層的基礎上分塊進行共識。
如圖5所示的改進PBFT共識方法原理圖中:
在預準備階段,節點Ai的上層節點Bi對Ai發出請求,節點Ai將若干請求寫進區塊,并且給Ai的上層節點Bi廣播格式為< 在準備階段,上層節點Bi收到節點Ai的preprepare消息,并且會發送一條prepare消息,格式為 在提交階段,同一節點集群中的一級共識節點Ai和上層共識節點Ai開始交驗消息,驗證prepare消息簽名、消息內容與摘要、請求編碼。丟棄非法請求,如果消息正確,上層節點Bi向一級共識節點Ai發送一條commit消息,消息格式為 在回復階段,一級共識節點Ai收到了2f+1個驗證通過的commit消息(其中,f為拜占庭節點數),區塊鏈單個子節點集群網絡中已達成PBFT 共識。至此,單個子節點集群網絡已達成二級子節點單個集群的PBFT共識。 子節點集群共識完成后,一級共識節點(A1、A2.......Aj,j為共識一級節點個數)進行第二次交易驗證,其中,一級共識節點Ai和同一分層的節點An進入準備階段并發送一條prepare消息給Ai的同一分層節點An來交驗簽名信息、摘要信息和請求編號,消息正確,進入下一層共識中心節點Kn的輪詢交驗。共識中心節點通過輪詢方式進行交易驗證,驗證無誤后提交區塊,完成整個區塊鏈網絡節點共識,實現區塊上鏈。 通常來說,食品安全追溯可以分為三部分:生產、倉儲和運輸環節,采集的追溯對象以及追溯信息如表1所示。 本文采用食品追溯數據集來進行實驗驗證,其數據來自于北京市農業農村局與北京市畜牧總站合作建立的位于北京市順義區的智能禽舍及基于聯盟區塊鏈的北京市畜牧總站智能雞舍監控管理平臺。 表1 追溯對象與追溯信息Table 1 The trace objects and trace information 本文實驗數據通過在四個禽舍部署的各不同分區的傳感器設備采集。每個雞舍均在百葉窗中安裝6 個傳感器,傳感器數據采集頻率為每30 秒一次,每個雞舍單日產生約1.7萬條數據樣本。禽舍環境監測系統將數據監測節點分為前部節點、中部節點和尾部節點三個區域,每個區域獨立采集、傳輸數據,實現對禽舍中環境信息進行監控,為后續的追溯提供數據支持。 加密后的數據將上傳至北京市畜牧總站智能雞舍監控管理平臺,并對密文進行檢驗,系統將對一小時內采集且驗證后的數據取平均值上傳至基于聯盟區塊鏈的追溯系統,然后各節點對區塊的合法性進行共識。由于采集數據量巨大,若使用傳統拜占庭算法進行共識,將造成巨大的廣播資源浪費,共識時間過長,交易無法順利完成。將改進后基于ISM分層思想的PBFT 算法應用于共識過程,大大提升了共識效率和區塊鏈吞吐性能。只有遵循基于ISM 的PBFT 共識機制設定規則的新塊,才會被節點承認并添加區塊到鏈上,否則將會被拒絕添加。在共識達成后,通過Ganache 可視化應用觀察到區塊數量正常增加且交易記錄增長,如圖6所示。 在PBFT 實用拜占庭容錯算法中,節點按是否具有惡性攻擊性劃分為拜占庭節點(B node)和非拜占庭節點(N_B node)。PBFT 共識算法具有1/3 容錯率,即設網絡中總節點數為N,惡意節點數f,則達成共識的節點個數要求只需滿足公式(2): 根據實驗測試需求設計初始節點個數如表2: 表2 初始節點設置Table 2 The initial node settings 首先,創建總節點13 個,其中N_B node 10 個,B node 3 個,節點初始設置滿足總節點數大于拜占庭節點數的3 倍,可以實現區塊鏈網絡正常的共識動作。然后由優化的PBFT 算法執行命令,實現創建節點、節點變質、刪除節點等一系列操作。以上測試設計思路及結果如表3所示。 經實驗測試環境驗證,此實驗環境可以仿真實現區塊鏈節點的創建、刪除和節點性質變更,最終節點狀態為:總節點9 個,非拜占庭節點7 個,拜占庭節點2 個,滿足上述N≥3f+1 的PBFT 共識條件,達成了區塊鏈實用拜占庭容錯共識。 表3 吞吐量實驗節點設計Table 3 The throughput experiment node design 吞吐量指在PBFT 共識算法下整個區塊鏈系統在單位時間內處理的交易量,代表著系統的負載強度,表示著系統的性能。區塊鏈的吞吐量隨著區塊容量的增大而提高,但區塊鏈的吞吐量與區塊容量并不存在正相關關系。區塊容量會對區塊鏈系統造成負載,所以當區塊容量到達一定水平后,吞吐量不增反減。區塊鏈吞吐量采用每秒交易量(transaction per second,TPS)如公式(3)所示: 其中,transaction表示單位時間t內區塊鏈系統處理的交易數,t表示出塊時間。在PBFT 共識吞吐量測試中,為了方便對比優化后的PBFT 與傳統PBFT 吞吐量性能,實驗中不考慮單個節點在接收到信息后的處理耗時與單機上的資源利用、CPU 處理速度、磁盤讀寫速度、網絡擁塞等因素,并假設同一時間點單機上所有消息的接收與發送都并行發生。控制每個區塊包含交易數為10,對比共識節點不同情況下的吞吐量變化的平均情況。優化后的PBFT 與傳統PBFT在同等假設條件下吞吐量對比如圖7所示。 由實驗結果可得知,區塊鏈吞吐量隨著共識節點的增多而降低,優化后的PBFT 吞吐性能明顯優于傳統PBFT。 共識時延是以時間為標準衡量共識算法運行速度的重要指標,共識時延越小說明交易確認速度快,相應地,區塊鏈安全性越高。 公式(4)中,DelayTime為共識算法的延時,ConfirmTime為區塊完成共識確認的時間,TransmitTime為區塊采集數據開始時間。在PBFT 共識時延測試中,為了方便對比優化后的PBFT 與傳統PBFT 時延性能,實驗中不考慮單個節點在接收到信息后的處理耗時與單機上的資源利用、CPU 處理速度、磁盤讀寫速度、網絡擁塞等因素,并假設同一時間點單機上所有消息的接收與發送都并行發生,只計算共識流程開始到共識流程結束的耗時。 為了對比評價基于ISM 優化的PBFT 性能,以共識耗時為指標進行了30 次獨立的對比實驗。每次實驗按照模擬控制條件隨機生成節點之間的延遲,然后記錄優化前后的PBFT 單次共識耗時,優化后的PBFT 與傳統PBFT 在同等假設條件下時延對比如圖8所示。 通過30 次重復獨立節點共識耗時對比實驗,可計算出傳統PBFT單次共識平均耗時568.6ms,優化后PBFT 單次共識平均耗時478.2ms,總體上區塊鏈共識節點單次共識耗時平均縮短15.89%。 據上述實驗分析,傳統PBFT 共識需區塊鏈全網所有節點參與共識,且單次共識需滿足三階段,節點廣播頻繁,網絡資源浪費明顯。優化后PBFT 分層分塊共識,同一時間多個子節點集群同共識中心節點同時執行共識,這避免了節點統一通道集中廣播,降低了區塊鏈網絡占用率,共識耗時時間縮短。此外,共識耗時波動較優化前穩定,說明基于ISM 優化的PBFT 分層分塊共識機制具有耗時短、性能穩定的特點。尤其對于信息量巨大的食品追溯場景來說,共識耗時短、性能穩定是區塊鏈在食品追溯領域落地的重要指標,具有很高的應用價值。 本文主要依托食品追溯信息上鏈背景,抽取解釋結構模型的系統元素分層思想,對區塊鏈共識節點進行分層處理,優化了實用拜占庭容錯共識機制,試點應用于智能禽舍及智能雞舍監控管理平臺,確保智能禽舍采集到的追溯信息得到有效共識。實驗環節以吞吐量和共識時延為指標對比優化前后PBFT 的性能,實驗表明優化后性能明顯優于傳統PBFT。優化后的PBFT 實現了多中心子節點集群分層分塊共識,解決了傳統PBFT 算法中網絡堵塞問題,減少了區塊鏈網絡廣播資源浪費、降低了區塊鏈共識通信成本,保證區塊鏈共識安全的同時大大地提升了通信和共識效率。在食品追溯業務背景下,基于解釋結構模型優化的實用拜占庭容錯共識機制能實現增安全、降成本、提效率等追溯目標,服務食品安全監管部門的追溯工作。4 實驗及性能測試
4.1 數據獲取及算法應用

4.2 實驗環境測試


4.3 吞吐量測試
4.4 共識時延測試
5 結果與討論