許亮
(四川大學計算機學院,成都610065)
當前,一個萬物互聯的世界正在快速成型,各種數字化終端設備的普及應用,帶來的是各類數據呈指數級的爆發式增長,在這個數據洪流澎湃洶涌的時代,數據科學家研究實現了一系列大數據計算的解決方案,包括各類分布式計算框架、并行計算、云計算、邊緣計算、霧計算等。目前,現有的技術方法均采用集中式、中心化的方式來處理大量數據的計算任務,這些系統結構復雜、拓展性有限、容錯率低,且計算環境可信度差,數據無法共享,難以滿足萬物互聯時代對數據計算的多樣性需求。
以Map-Reduce 編程模型為基礎的分布式計算系統采用中心化計算機組來進行大規模數據的分解、計算、匯總,通過網絡通信來進行消息傳遞和工作協調,可擴展性強,容錯率高,但是搭建部署分布式計算集群的價格也非常昂貴,且集群不能自動解決惡意節點作惡的問題,只能依靠中心化的方式進行管理。而區塊鏈技術作為一種去中心化的分布式數據庫存儲技術,具有去中心化、數據防篡改、可溯源等特性,是一種有效解決廣域網范圍內分布式計算環境信任問題的方案。
本文將區塊鏈與分布式計算相關特性進行了有機結合,基于分布式計算場景,對現有聯盟區塊鏈進行了改進和重新設計,利用區塊鏈技術的優點有效解決分布式計算體系存在的信任問題,并研究提出了一種區塊鏈分布式計算模型范式。本文參考Map-Reduce 編程模型,從聯盟區塊鏈角度出發,將區塊鏈的交易流程轉變為分布式計算框架,從而實現對大規模數據分解后進行分布式并行計算,本文還利用區塊鏈智能合約的優點,將分布式計算的映射和歸約等計算功能函數以及計算節點選擇策略等函數寫入智能合約,部署在區塊鏈上,使所有計算節點均按照合約規定進行計算。該系統利用區塊鏈數據密碼加密認證和共識機制的技術特性,能創造可信的分布式計算環境,有效實現數據的安全共享,既免去了搭建分布式計算集群的高昂代價,也去除了中心化管理的束縛,使分布式計算節點的動態加入和退出變得更為自由,能有效解決了節點間的信任問題。這種基于區塊鏈的分布式計算架構使得任何有海量數據計算需求的用戶無需搭建分布式計算集群,而是以較低的費用及門檻條件加入該區塊鏈系統,即可發布大規模數據計算任務,使用該系統的分布式可信計算功能,而無需關注更多細節,也不用擔心計算環境的可信問題。該系統還設置了可信計算等級,以智能合約形式部署在區塊鏈網絡上,由用戶根據自身任務需要自由選擇系統計算環境的可信等級。
參考現有聯盟區塊鏈節點模型,根據分布式計算特點,立足于創造一個可信計算環境,采取計算與存儲分離的模式,將分布式計算區塊鏈網絡節點設計為計算節點和存儲節點兩類。計算節點主要執行分布式計算,即對子任務執行mapping 計算和內部結果排序統計等功能。若計算節點選舉為主節點,則具有子任務計算結果收集、產生新區塊等功能。計算節點不記賬,不保存和更新賬本,當且僅當計算節點被選為主節點后,需要與賬本產生交互和查詢,則向存儲節點查詢或者下載賬本。存儲節點主要對新產生的區塊進行驗證,并將驗證通過的區塊上鏈,更新賬本狀態。
計算節點分為四種狀態:空閑狀態、分發狀態、計算狀態、主節點狀態,在同一任務周期內,一個節點只能進入其中的一種狀態。當計算節點作為大數據計算任務分發節點時,該節點進入分發狀態,在一次任務中,分發節點不參與任何子任務的計算,而是一直處于分發狀態等待計算結果,待收到主節點發來的子任務計算結果后進行最終結果統計匯總。當計算節點接收子任務進行計算時,該節點進入計算狀態,計算完成后,判斷任務池中是否還有未完成的其他計算任務,若有,則繼續保持計算狀態,若無,則轉入空閑狀態。當計算節點選舉為主節點時,該節點轉入主節點狀態,進入主節點狀態的計算節點不承擔子任務的計算工作,也不能進行作業分發。主節點功能包括:收集各計算節點的計算結果,并對同一子任務不同計算節點的計算結果進行統計比對,當一個子任務相同的計算結果數超過執行該子任務計算節點數50%時,則該結果被認為可信計算結果,主節點將該計算結果發送給任務分發節點,并將所有計算結果打包進新區塊。若該子任務沒有產生可信結果,主節點將該消息反饋給任務分發節點,由任務分發節點按照計算節點選擇策略為該子任務重新選擇分配計算節點,重新執行計算流程。主節點產生新的區塊后,將新區塊發送給所有存儲節點,存儲節點對區塊進行驗證后上鏈,更新賬本。計算節點狀態轉換如圖1 所示。

圖1 計算節點狀態轉換圖
若在任務執行過程中,分發節點宕機或者發生故障,在任務生命周期內無法接收主節點發來的子任務計算結果,則主節點依然按程序將本次任務所有子任務計算結果打包進新區塊,并發送給存儲節點驗證上鏈,待分發節點恢復后,自行讀取鏈上的計算結果,調用結果統計模塊匯總統計最終結果。如此,確保了在分發節點出現意外的情況下,仍然能保證計算結果的有效性,確保了該分布式系統的魯棒性。
分布式計算系統一般通過任務的分解與聚合的方式進行分布式并行計算,從而對大數據進行處理,本文所述基于區塊鏈技術的分布式計算方案也采用任務分解與聚合的方式進行,任務分解與聚合等功能均以函數編程形式寫入區塊鏈智能合約中,事先部署運行在區塊鏈上。智能合約中既包含分布式計算函數和結果匯總函數,也包括計算節點選擇策略。任務分發節點通過智能合約完成任務分解后,根據智能合約中的節點選擇策略,由用戶自由選擇計算可信度等級,確定子任務的計算節點數量,調用智能合約為每個子任務選擇分配規定數量的計算節點。
在區塊鏈網絡空閑的狀態下,網絡中只存在兩種角色節點—計算節點與存儲節點,所有的計算節點都是完全平等的,除被選舉為主節點的計算節點處于主節點狀態外,此時所有計算節點均處于空閑狀態。網絡中的節點根據功能不同在邏輯上被分為兩層,外層由計算節點組成計算網絡,負責執行分布式計算;內層由存儲網絡組成存儲網絡,負責區塊鏈數據的驗證存儲和維護。網絡底層仍然是一個P2P 網絡,計算節點必須通過主節點與存儲節點通信。

圖2 網絡結構拓撲圖
對于一次計算任務,首先,任務分發節點在本地調用部署在區塊鏈系統上的智能合約,自動將一個待處理作業劃分為多個數據塊,每個數據塊對應于一個計算子任務,然后調用智能合約中的節點選擇策略算法,為每個子任務選定計算節點并發送子任務數據,計算完成后,計算節點將計算結果發送到主節點,由主節點根據區塊鏈系統設定的規則對計算結果進行驗證,并把驗證通過的計算結果發送給任務分發節點,最后將所有子任務計算結果打包進新區塊,發送至所有存儲節點,存儲節點對新區塊進行驗證,通過后寫入賬本,并向主節點反饋消息。工作結構如圖3 所示。

圖3 工作結構示意圖
計算節點不僅要做數據映射的工作,還要做部分歸約工作,相關功能函數都寫入智能合約進行部署,最終結果的統計匯總工作交由任務分發節點來做,這樣,最終的計算結果將對整個區塊鏈網絡隱藏,僅有任務分發節點知道,有利于保護計算結果隱私性。區塊鏈中各區塊存儲的數據是各計算節點計算出的子任務數據,可用于計算過程的追溯。
對于一次分布式計算任務,具體流程如圖4 所示。

圖4 工作流程圖
(1)計算任務開始,發布任務的計算節點進入分發狀態,將任務拆分為多個子任務;
(2)用戶根據計算需求,調用智能合約中的節點選擇策略為每個子任務選擇分配計算節點,并將子任務數據發送給選定的計算節點,同時,將子任務分配表發送給主節點;
(3)接收子任務的節點進入計算狀態,調用智能合約中的計算功能函數執行計算;
(4)計算節點完成計算任務后,將計算結果附上自己的簽名一并打包發送到主節點;
(5)主節點根據背書規則,對執行同一子任務的所有計算節點,若收到超過半數節點的計算結果相同,則認為該計算結果正確可信,放入區塊池,等待出塊;
(6)主節點將驗證通過的子任務計算結果附上自己的簽名一并發送給任務分發節點;
(7)任務分發節點收到各子任務計算結果后,調用匯總功能函數統計最終結果;
(8)主節點按照出塊規則,在收集到規定數量或大小的子任務計算結果后,創建新區塊,并將新區塊發送給所有存儲節點;
(9)存儲節點收到新區塊后,進入驗證狀態,把驗證通過的區塊上鏈,更新賬本狀態,并反饋給主節點;
(10)主節點收到各存儲節點的反饋信息后,將反饋結果匯總統計,并向任務分發節點反饋計算任務完成情況。
在一次計算任務中,任務分發節點完成作業分解后,會調用智能合約中的節點選擇策略為每個子任務選擇分配相應數量的計算節點。節點選擇策略事先以函數編程形式寫入智能合約中,部署運行在區塊鏈系統上。為了滿足用戶的計算需求多樣化,節點選擇策略應預置多種模式提供給用戶自由選擇,由用戶根據具體任務計算需求,選擇執行同一子任務的計算節點數量,我們將這種可調整的節點選擇策略稱為計算可信度調整策略。
參考Hyperledger Fabric 的背書策略,該系統用戶可以選擇同時執行同一個子任務的計算節點數量。對于同一個子任務,選擇的計算節點數量越多,其計算結果的可信度就越高,但系統的計算效率也就越低。因此,對于那些對計算結果準確度和可信度要求較高的任務,適于選擇較多的計算節點同時執行同一子任務,即調高計算可信度。相反,由于區塊鏈系統允許作惡或故障節點存在,所以同一個子任務選擇的計算節點數量越少,則其計算結果可信度就越低,但系統的計算效率會提高。因此,對于那些對計算結果的準確度要求不高,而對計算效率要求較高的任務,適于調低計算可信度。用戶可以根據具體的計算任務自由選擇調整此次計算任務的計算可信度,但為確保計算環境的基本可信度,規定一個子任務選擇的計算節點數量不能少于3 個。
本文在區塊鏈技術的基礎上,充分發揮區塊鏈系統去中心化、可追溯、防篡改的特性,研究實現了一個基礎的Map-Reduce 分布式計算架構,提出了一個去中心化、自治和計算環境可信的分布式計算解決方案。既能有效保證計算結果的隱私性,也能實現計算過程可追溯,用戶還能根據任務需要自由調整計算可信度,并間接調整系統的計算效率。