戴俊杰,沈蘇彬
(南京郵電大學(xué) 計(jì)算機(jī)學(xué)院,南京 210023)
邊緣計(jì)算[1]作為一種對(duì)云計(jì)算的補(bǔ)充性方案,將云計(jì)算的功能擴(kuò)展到更靠近數(shù)據(jù)產(chǎn)生源的網(wǎng)絡(luò)邊緣以減輕網(wǎng)絡(luò)傳輸負(fù)擔(dān),同時(shí)也更能滿足部分應(yīng)用,如物聯(lián)網(wǎng)應(yīng)用對(duì)低延遲響應(yīng)的需求。早期關(guān)于邊緣計(jì)算的研究,如移動(dòng)云計(jì)算(Mobile Cloud Computing,MCC)[2]主要依賴云服務(wù)、Cloudlet[3]等微型數(shù)據(jù)中心,需要部署專用計(jì)算服務(wù)器作為移動(dòng)終端設(shè)備和云之間的中間層,以提供更接近終端設(shè)備的計(jì)算服務(wù)。由Cisco[4]引入的霧計(jì)算(Fog Computing,FC)擴(kuò)展了中間層的范圍,用戶可以通過從網(wǎng)絡(luò)邊緣到網(wǎng)絡(luò)核心的任何連接的設(shè)備上獲取霧計(jì)算服務(wù)。同時(shí),霧節(jié)點(diǎn)部署的分散性使得設(shè)備既可以由自身充當(dāng)霧節(jié)點(diǎn)提供服務(wù)也可以作為客戶端使用霧資源[5]。近年來,研究人員引入霧計(jì)算模型[6],其將計(jì)算進(jìn)一步轉(zhuǎn)移到物聯(lián)網(wǎng)環(huán)境的極端邊緣。在該模型中,大量的異構(gòu)移動(dòng)設(shè)備和物聯(lián)網(wǎng)設(shè)備都能夠提供某種形式的服務(wù),以減輕霧的負(fù)擔(dān)。通過以上研究可以發(fā)現(xiàn),計(jì)算服務(wù)的形式正在從以往單一的、由龐大數(shù)據(jù)中心提供的集中式云計(jì)算服務(wù)轉(zhuǎn)向更加多元的、可以由各類可用的網(wǎng)絡(luò)閑散資源提供的分散式計(jì)算服務(wù)。針對(duì)基于對(duì)等網(wǎng)絡(luò)計(jì)算能力共享系統(tǒng)的研究,如加州伯克利大學(xué)的SETI@home項(xiàng)目[7]和BOINC項(xiàng)目[8],通過對(duì)等網(wǎng)絡(luò)共享節(jié)點(diǎn)間閑置的計(jì)算能力來達(dá)到執(zhí)行復(fù)雜運(yùn)算的目的。但是以上項(xiàng)目和研究多數(shù)具有專用性(如某項(xiàng)科學(xué)研究)且規(guī)模有限,所使用的計(jì)算資源也較為固定,一般是個(gè)人計(jì)算機(jī)所提供的閑置處理器資源。在嘗試將這種基于對(duì)等網(wǎng)絡(luò)的計(jì)算模式應(yīng)用到數(shù)量更為龐大的、分散于網(wǎng)絡(luò)邊緣且異構(gòu)的閑散資源時(shí),如何對(duì)資源進(jìn)行有效、可靠且可信的管理將是一個(gè)巨大的挑戰(zhàn)。本文著重關(guān)注于對(duì)位于網(wǎng)絡(luò)邊緣的、閑散的計(jì)算資源(下文稱為資源)進(jìn)行可靠和可信的分配。
目前,大多相關(guān)研究采用分布式的資源管理和調(diào)度方案[9-10],使用一個(gè)相對(duì)具有較強(qiáng)性能的邊緣節(jié)點(diǎn),如Cloudlet充當(dāng)控制器,由其負(fù)責(zé)管理地理位置接近的一群邊緣設(shè)備,接受資源請(qǐng)求并對(duì)其分配可用的資源,這種方式從一定程度上提高了應(yīng)對(duì)大量分散和異構(gòu)的資源時(shí)的資源管理效率。另外,也有研究人員[11]為了提供參與者更加穩(wěn)定的接口,在云中部署集中控制器,從全局上管理資源的可用性信息、接受資源請(qǐng)求并做出相應(yīng)的資源分配的決策,再將具體的調(diào)度工作交由中間層節(jié)點(diǎn)完成,這種方法具有更穩(wěn)定且靈活的表現(xiàn)。但是以上研究中所采用的方案本質(zhì)上仍是傳統(tǒng)的中心化管理方法,需要由固定的、單一的實(shí)體作為控制中心進(jìn)行統(tǒng)一管理。這種模式的明顯缺陷在于:面臨單點(diǎn)故障風(fēng)險(xiǎn),即一旦控制節(jié)點(diǎn)發(fā)生故障,在其恢復(fù)之前無法正常進(jìn)行計(jì)算服務(wù);受制于傳統(tǒng)信任模式,控制節(jié)點(diǎn)具有較高權(quán)限,若被惡意使用將造成參與者的損失,如濫用資源或提供惡意服務(wù);在面對(duì)數(shù)量龐大、分布分散且異構(gòu)的資源來源時(shí),這種集中式管理方法的效率較低。
區(qū)塊鏈[12]作為比特幣系統(tǒng)的底層技術(shù),以其對(duì)交易數(shù)據(jù)存儲(chǔ)的不可篡改性、可追溯性和共識(shí)機(jī)制等特點(diǎn)近年來受到了人們廣泛的關(guān)注。同時(shí),隨著對(duì)區(qū)塊鏈技術(shù)研究的開展,也出現(xiàn)很多有關(guān)區(qū)塊鏈在非數(shù)字貨幣領(lǐng)域的應(yīng)用研究[13],旨在探索區(qū)塊鏈可用的更加廣泛的應(yīng)用場(chǎng)景。針對(duì)上述計(jì)算資源分配方案中存在的問題,本文結(jié)合區(qū)塊鏈技術(shù)探討一種基于去中心化的、可信和高效的邊緣計(jì)算資源分配方法。梳理當(dāng)前區(qū)塊鏈技術(shù)發(fā)展所面臨的問題,并對(duì)其提出改進(jìn)思路,設(shè)計(jì)可行的實(shí)現(xiàn)方案。不同于中心化資源分配方案中以單一控制節(jié)點(diǎn)為中心的結(jié)構(gòu)設(shè)計(jì),本文在基于區(qū)塊鏈的、去中心化的方案中對(duì)資源管理的總體結(jié)構(gòu)做出合理的調(diào)整和設(shè)計(jì),確定涉及參與方進(jìn)行交互以實(shí)現(xiàn)資源分配。為達(dá)到可信的資源分配的目的,利用區(qū)塊鏈公用賬本的本質(zhì),將用于資源分配中信任管理的關(guān)鍵數(shù)據(jù)記錄到賬本,使得用戶可以根據(jù)所記錄的數(shù)據(jù)進(jìn)行操作?;诂F(xiàn)有的以太坊區(qū)塊鏈平臺(tái)及其支持的智能合約技術(shù),設(shè)計(jì)本文方法的實(shí)現(xiàn)方案。同時(shí),針對(duì)目前區(qū)塊鏈技術(shù)的性能瓶頸問題,提出基于以太坊平臺(tái)的側(cè)鏈擴(kuò)容方案,以提高系統(tǒng)運(yùn)行效率。
區(qū)塊鏈技術(shù)最初是作為比特幣[14]的底層技術(shù)開始逐漸為人們所知。在比特幣系統(tǒng)中,區(qū)塊鏈技術(shù)被用于存儲(chǔ)在對(duì)等網(wǎng)絡(luò)中傳播的交易信息,而這些交易信息確定了系統(tǒng)中存在的數(shù)字貨幣的數(shù)量及其歸屬情況。礦工作為區(qū)塊鏈的維護(hù)者,可以由任何參與者擔(dān)任。這些礦工在網(wǎng)絡(luò)中收集并驗(yàn)證交易,同時(shí)將通過驗(yàn)證的交易信息組裝成區(qū)塊,并以Merkle樹形式組織交易信息,將Merkle樹根值作為交易信息的唯一標(biāo)識(shí)放入?yún)^(qū)塊頭,任何對(duì)交易信息甚至是交易信息存儲(chǔ)順序的改動(dòng)都將引起Merkle樹根值的變化,從而使得區(qū)塊內(nèi)容不一致。每個(gè)區(qū)塊的區(qū)塊頭中都包含上一個(gè)區(qū)塊的區(qū)塊頭信息的哈希值,一個(gè)個(gè)區(qū)塊被有序地鏈接在一起,區(qū)塊鏈結(jié)構(gòu)如圖1所示。
圖1 區(qū)塊鏈結(jié)構(gòu)Fig.1 Blockchain structure
為保證“鏈”內(nèi)容的一致性,區(qū)塊鏈技術(shù)使用了分布式共識(shí)機(jī)制,如比特幣使用的工作量證明(Proof of Work,PoW)的共識(shí)機(jī)制。每個(gè)區(qū)塊通過在區(qū)塊頭中放入一個(gè)一次性數(shù),使得區(qū)塊頭的哈希值不大于某個(gè)目標(biāo)值,從而成為一個(gè)合法區(qū)塊。為此,競(jìng)爭(zhēng)者不斷嘗試不同的一次性數(shù),而這往往需要巨大的算力資源來實(shí)現(xiàn),這使得成功篡改某個(gè)區(qū)塊中的內(nèi)容的難度隨著塊數(shù)量的增加而呈指數(shù)級(jí)上升。從本質(zhì)上講,共識(shí)機(jī)制的作用即在于將用于保證區(qū)塊鏈這個(gè)公共賬本的內(nèi)容的一致性而進(jìn)行的一致性投票與現(xiàn)實(shí)行為或者物質(zhì)資源聯(lián)系起來,其最初的目的是為了防御女巫攻擊(Sybil Attack)。
隨著區(qū)塊鏈的發(fā)展,出現(xiàn)了更多成熟且擁有不同用途的區(qū)塊鏈系統(tǒng)。針對(duì)不同的區(qū)塊鏈系統(tǒng),研究人員提出了更多不同的應(yīng)用于區(qū)塊鏈系統(tǒng)的共識(shí)機(jī)制,如權(quán)益證明(Proof of Stake,PoS)機(jī)制以及各類拜占庭容錯(cuò)(Byzantine Fault Tolerance,BFT)機(jī)制[15]等。以太坊[16]是一個(gè)總體上類似于比特幣系統(tǒng)的區(qū)塊鏈系統(tǒng),其最大的不同在于其支持更加復(fù)雜的可執(zhí)行腳本,一般被稱為“智能合約”,支持由圖靈完備的編程語言編寫。使用智能合約將一些簡單的業(yè)務(wù)邏輯以合約形式部署到區(qū)塊鏈,由以太坊交易觸發(fā)執(zhí)行。另外一個(gè)較為流行的平臺(tái)是超級(jí)賬本(Hyperledger)的Fabric[17],它是聯(lián)盟鏈中的典型代表,多用于企業(yè)間的項(xiàng)目,其同樣支持類似于智能合約的可執(zhí)行腳本,稱為鏈碼(Chain Code)。
但是,就目前區(qū)塊鏈的研究現(xiàn)狀而言,要真正實(shí)現(xiàn)廣泛而實(shí)際的應(yīng)用,仍面臨諸多關(guān)鍵挑戰(zhàn)和技術(shù)瓶頸。其中,最為突出的就是區(qū)塊鏈的交易吞吐量和交易速率問題,在業(yè)內(nèi)也被稱為“可擴(kuò)展性”問題[18]。該問題的核心指標(biāo)通常使用每秒交易數(shù)(Transaction Per Second,TPS)來表示。一般地,比特幣的TPS可以達(dá)到7,以太坊在經(jīng)過幾次性能提升后這一數(shù)值范圍可以達(dá)到30~40。這些性能表現(xiàn)與Visa等目前主流的中心化支付系統(tǒng)仍無法相比。對(duì)于可擴(kuò)展性問題,其最大的成因來自于目前區(qū)塊鏈技術(shù)對(duì)共識(shí)機(jī)制所持的保守和謹(jǐn)慎的態(tài)度。尤其是在比特幣和以太坊這一類涉及大數(shù)額資金轉(zhuǎn)移的數(shù)字貨幣系統(tǒng)中,一個(gè)強(qiáng)共識(shí)機(jī)制被看作是保證系統(tǒng)正常運(yùn)轉(zhuǎn)的核心要素。因此,在該類系統(tǒng)中,每一筆交易都需要經(jīng)過較長時(shí)間的驗(yàn)證和確認(rèn)后才會(huì)被視為合法有效。
目前,有較多研究團(tuán)隊(duì)都在積極探索并提出相應(yīng)的解決方案[19],以應(yīng)對(duì)區(qū)塊鏈的可擴(kuò)展性問題。這些解決方案一般可以分為兩類,第1類是通過直接修改區(qū)塊鏈設(shè)計(jì)的鏈上解決方案,簡單的如此前比特幣系統(tǒng)出現(xiàn)的硬分叉,就是因?yàn)橐徊糠钟脩魶Q定上調(diào)區(qū)塊大小限制而導(dǎo)致的,其目的為增加比特幣交易的吞吐量。還有如康奈爾大學(xué)團(tuán)隊(duì)針對(duì)比特幣系統(tǒng)提出的比特幣-NG[20],通過升級(jí)比特幣使用的PoW算法,縮短挖礦和確認(rèn)區(qū)塊的時(shí)間,另外還有以太坊社區(qū)所提出的分片技術(shù)[21],其將整個(gè)以太坊網(wǎng)絡(luò)分割成多個(gè)“宇宙”,其中所包含的交易可以由不同驗(yàn)證者同時(shí)進(jìn)行處理。第2類則是鏈下解決方案,在不改變現(xiàn)有主鏈設(shè)計(jì)的前提下,在其外實(shí)現(xiàn)擴(kuò)容,如比特幣中的閃電網(wǎng)絡(luò)[22]和側(cè)鏈[23]技術(shù)以及以太坊所提出的狀態(tài)通道[24]。這一類解決方案的核心思想主要是在不改變主鏈設(shè)計(jì)的前提下,通過其他渠道快速進(jìn)行交易,通過定時(shí)向主鏈同步交易數(shù)據(jù),在享受底層區(qū)塊鏈帶來安全性的同時(shí),提高交易吞吐量。
基于以上對(duì)區(qū)塊鏈技術(shù)的分析,不難發(fā)現(xiàn)區(qū)塊鏈本質(zhì)上是一個(gè)公用賬本,通過參與者對(duì)賬本內(nèi)容的共同維護(hù)來實(shí)現(xiàn)去中心化的信任管理。本文利用區(qū)塊鏈實(shí)現(xiàn)一種去中心化、可信的邊緣計(jì)算資源分配方法。同時(shí),針對(duì)區(qū)塊鏈目前仍存在的可擴(kuò)展性問題,提出面向資源分配的側(cè)鏈解決方案。基于以太坊平臺(tái)以及利用智能合約對(duì)分配方法進(jìn)行實(shí)現(xiàn),并且使用以太坊的私有鏈網(wǎng)進(jìn)行仿真實(shí)驗(yàn)。
目前,研究人員正著力于探索區(qū)塊鏈技術(shù)在去中心化計(jì)算資源管理上的潛力。其中最為突出的基于區(qū)塊鏈的、去中心化的計(jì)算服務(wù)平臺(tái),如iExec[25]和Golem[26],旨在通過使用基于區(qū)塊鏈的資源管理和財(cái)務(wù)激勵(lì),將一切可能的用戶設(shè)備包括個(gè)人電腦、私人服務(wù)器甚至是整個(gè)數(shù)據(jù)中心在一個(gè)邏輯層面協(xié)同工作,以提供較強(qiáng)的計(jì)算能力來滿足用戶處理復(fù)雜計(jì)算任務(wù)和應(yīng)用的需求。另外,還有文獻(xiàn)[27]提出的SmartEdge,即基于以太坊的邊緣計(jì)算智能合約,提供低成本、低開銷的計(jì)算資源管理,使物聯(lián)網(wǎng)設(shè)備可以與邊緣計(jì)算節(jié)點(diǎn)自動(dòng)交易以請(qǐng)求計(jì)算卸載服務(wù)。EdgeChain[28]是一種基于區(qū)塊鏈的邊緣計(jì)算架構(gòu),其建立了一個(gè)成本和定價(jià)模型,以優(yōu)化跨多個(gè)移動(dòng)網(wǎng)絡(luò)運(yùn)營商的應(yīng)用程序布局,使得提供服務(wù)的移動(dòng)網(wǎng)絡(luò)運(yùn)營者可以得到報(bào)酬以激勵(lì)其繼續(xù)提供計(jì)算能力。
上述大部分利用區(qū)塊鏈技術(shù)管理分散計(jì)算資源的方案,本質(zhì)上仍是利用了基于區(qū)塊鏈的虛擬貨幣系統(tǒng)作為結(jié)算手段來激勵(lì)資源共享行為,但對(duì)于如何利用區(qū)塊鏈技術(shù)實(shí)現(xiàn)去中心化的可信資源分配,未進(jìn)行深入和具體的研究和設(shè)計(jì)。另外,以上研究大多基于以太坊平臺(tái),本質(zhì)上是運(yùn)行在以太坊平臺(tái)上的去中心化應(yīng)用(Decentralized Application,DApp),缺少獨(dú)立于現(xiàn)有區(qū)塊鏈平臺(tái)的、系統(tǒng)性研究的支撐。本文旨在設(shè)計(jì)一種獨(dú)立于現(xiàn)有平臺(tái)的、基于區(qū)塊鏈的、去中心化的可信邊緣計(jì)算資源分配方法。
對(duì)于邊緣計(jì)算資源分配方法的總體結(jié)構(gòu)設(shè)計(jì),不同于圖2(a)所示的一般中心化方案結(jié)構(gòu),其中所涉及工作都由單一的控制實(shí)體負(fù)責(zé),雖然可能會(huì)設(shè)置中間層來負(fù)責(zé)與底層終端設(shè)備的直接交互工作,但是本質(zhì)上仍是中心化的管理方案,不能避免上文提到的有關(guān)中心化方案所面臨的問題。在本文方法的設(shè)計(jì)中,如圖2(b)所示,所有參與者都通過對(duì)等網(wǎng)絡(luò),以點(diǎn)對(duì)點(diǎn)通信的方式進(jìn)行交互來完成資源分配工作。為了保證工作的順利進(jìn)行和可信資源的分配,需要由網(wǎng)絡(luò)中所有的參與者共同維護(hù)一個(gè)賬本。賬本用于記錄有關(guān)資源分配的關(guān)鍵信息,記賬的工作由系統(tǒng)中的管理節(jié)點(diǎn)負(fù)責(zé),而管理員本身可以由任何有能力的參與者擔(dān)任,其記賬權(quán)根據(jù)共識(shí)協(xié)議而非其固有身份屬性決定。因此,本文方法是完全的去中心化的方法。
圖2 邊緣計(jì)算資源分配方法的總體結(jié)構(gòu)Fig.2 Overall structure of edge computing resource allocation method
本文方法中的參與者主要包括3種角色,分別是資源提供者、資源請(qǐng)求者和管理員,其中,資源提供者是指擁有空閑計(jì)算資源的邊緣設(shè)備,其參與目的在于貢獻(xiàn)空閑資源。為此,其根據(jù)自身資源情況向網(wǎng)絡(luò)中廣播資源發(fā)布消息(Resource Announcement Message),消息描述了資源的可用性信息;資源請(qǐng)求者一般指擁有無法獨(dú)立完成的計(jì)算任務(wù)的邊緣設(shè)備,參與的目的在于為計(jì)算任務(wù)的順利執(zhí)行而請(qǐng)求資源協(xié)助。為此,其通過網(wǎng)絡(luò)收集上述資源信息,并合法地對(duì)可用資源發(fā)出請(qǐng)求,即資源請(qǐng)求消息(Resource Request Message);管理員類似于比特幣系統(tǒng)中的“礦工”,負(fù)責(zé)收集和驗(yàn)證網(wǎng)絡(luò)中的資源請(qǐng)求消息,而資源請(qǐng)求消息則類似于比特幣系統(tǒng)中的“交易”,通過驗(yàn)證的“交易”被打包成區(qū)塊并發(fā)布到網(wǎng)絡(luò)中,接受其他節(jié)點(diǎn)的驗(yàn)證。當(dāng)區(qū)塊被其他節(jié)點(diǎn)接受并加入到最新區(qū)塊鏈的末端,即代表全網(wǎng)根據(jù)其中所包含的“交易”內(nèi)容達(dá)成共識(shí),實(shí)現(xiàn)資源分配。記錄的“交易”信息指示了資源分配關(guān)系,各參與者將根據(jù)這些信息進(jìn)行下一步操作。
關(guān)于參與者的身份驗(yàn)證,本文引入一般區(qū)塊鏈系統(tǒng)所普遍采用的非對(duì)稱加密體系,為每個(gè)加入到網(wǎng)絡(luò)的參與者分配公/私密鑰對(duì),公鑰用作身份標(biāo)識(shí),私鑰生成數(shù)字簽名用于驗(yàn)證身份的真實(shí)性。
如2.1節(jié)所述,在本文方法的設(shè)計(jì)中,“交易”本質(zhì)上為在網(wǎng)絡(luò)中傳播的資源請(qǐng)求消息,當(dāng)這類“交易”信息經(jīng)管理員驗(yàn)證并記錄到區(qū)塊鏈中時(shí),意味著資源分配的完成,而“交易”信息指示了資源分配關(guān)系。具體地,資源請(qǐng)求消息由資源請(qǐng)求者對(duì)帶有資源提供者簽名的資源發(fā)布消息及其欲請(qǐng)求的資源量信息再次簽名來完成。其中資源發(fā)布消息由資源提供者簽名并發(fā)布,消息包含了資源的可用性信息,具體如下:
Provider:資源提供者身份標(biāo)識(shí);
Volume:資源提供者可以提供的資源總量;
startTime:資源可用開始時(shí)間;
endTime:資源可用結(jié)束時(shí)間;
Timestamp:消息發(fā)布時(shí)間戳;
Sign:數(shù)字簽名,用于確認(rèn)提供者身份。
當(dāng)資源請(qǐng)求者在網(wǎng)絡(luò)中收集到這一類資源發(fā)布消息時(shí),其根據(jù)自身所需,針對(duì)指定的資源發(fā)出資源請(qǐng)求消息,即本文方法中的“交易”,具體包含:
resourceInfo:所請(qǐng)求資源信息,即上文中由資源提供者發(fā)布的完整的資源發(fā)布消息,這里簡單使用一條字段代指;
Requester:資源請(qǐng)求者身份標(biāo)識(shí);
Volume:請(qǐng)求者所請(qǐng)求的資源量;
Timestamp:交易發(fā)布時(shí)間戳;
Sign:數(shù)字簽名,用于確認(rèn)請(qǐng)求者身份。
如上所述,資源請(qǐng)求消息作為“交易”由資源請(qǐng)求者發(fā)布并在網(wǎng)絡(luò)中傳播。與此同時(shí),管理員在網(wǎng)絡(luò)中收集并驗(yàn)證這一類“交易”,其驗(yàn)證工作具體如下:
1)通過請(qǐng)求者的簽名驗(yàn)證消息內(nèi)容的真實(shí)性;
2)通過消息中資源信息部分所包含的資源提供者的簽名驗(yàn)證所請(qǐng)求資源的真實(shí)性;
3)回溯區(qū)塊鏈,檢查是否已有包含此消息的區(qū)塊存在,避免重復(fù)打包;
4)根據(jù)消息發(fā)布時(shí)間戳和所請(qǐng)求資源的可用時(shí)間范圍信息,判斷該請(qǐng)求的有效性,資源提供者無法在時(shí)間限制范圍之外的時(shí)間提供資源;
5)回溯區(qū)塊鏈,遍歷所有以往對(duì)資源發(fā)出的其他請(qǐng)求信息,計(jì)算并判斷其目前剩余的可用資源總量是否仍滿足本次交易中請(qǐng)求者所請(qǐng)求的資源量,避免資源的過度分配。
對(duì)于通過驗(yàn)證的資源請(qǐng)求,管理員將其加入正在組裝的區(qū)塊中,根據(jù)共識(shí)協(xié)議,一旦獲得出塊權(quán)便將區(qū)塊發(fā)布到網(wǎng)絡(luò)。具體的區(qū)塊的構(gòu)造如圖3所示,基本與比特幣系統(tǒng)中對(duì)區(qū)塊的構(gòu)造類似。
圖3 區(qū)塊組成Fig.3 Block composition
以假設(shè)使用類似于比特幣工作量證明的共識(shí)機(jī)制為例,管理員在收集和驗(yàn)證網(wǎng)絡(luò)中的交易信息的同時(shí),將通過驗(yàn)證的交易組裝成區(qū)塊,并不斷嘗試一次性數(shù)(Nonce),一旦包含該一次性數(shù)的區(qū)塊頭的哈希值小于規(guī)定目標(biāo)值(Target),管理員將該區(qū)塊廣播。其他管理員接收并對(duì)區(qū)塊進(jìn)行如下驗(yàn)證:1)檢查區(qū)塊引用的上一個(gè)區(qū)塊是否有效;2)檢查區(qū)塊的時(shí)間戳是否比上一個(gè)區(qū)塊大;3)檢查區(qū)塊的工作量證明是否有效;4)檢查區(qū)塊所包含的交易的合法性。
若驗(yàn)證通過,則管理員將接受該區(qū)塊,將其加入本地區(qū)塊鏈并在其后嘗試制造新塊,即視該塊的區(qū)塊頭哈希值為新區(qū)塊應(yīng)包含的父區(qū)塊哈希值。至此,區(qū)塊中所包含的請(qǐng)求信息成功被記錄到區(qū)塊鏈并且被認(rèn)為是可信的,這意味著資源分配的實(shí)現(xiàn)。根據(jù)鏈上所記錄信息,當(dāng)資源請(qǐng)求者向資源提供者發(fā)出資源訪問請(qǐng)求時(shí),后者可以根據(jù)前者所提供的鏈上信息索引及其身份標(biāo)識(shí)驗(yàn)證該訪問請(qǐng)求的合法性。若為合法訪問,則資源提供者必須響應(yīng),并提供相應(yīng)的計(jì)算資源。本文方法的研究范圍為:從參與者發(fā)布資源和請(qǐng)求消息,到管理員驗(yàn)證并將合法的請(qǐng)求消息作為“交易”記錄到區(qū)塊鏈,最后資源提供者根據(jù)鏈上信息對(duì)來自資源請(qǐng)求者的資源訪問進(jìn)行合法性驗(yàn)證為止。至于具體的資源訪問過程及其后一系列操作屬于訪問控制和其他研究領(lǐng)域,暫不在本文方法的研究范圍之內(nèi)。在本文方法的仿真實(shí)現(xiàn)中,僅需簡單模擬相關(guān)的驗(yàn)證過程以證明所設(shè)計(jì)方法的可行性和正確性即可。
本文方法擺脫中心化模式的做法,將資源分配的工作分散,由參與者自行通過對(duì)等網(wǎng)絡(luò)互相通信來完成,以此擺脫傳統(tǒng)信任模式和單點(diǎn)故障所帶來的不利影響。同時(shí)使用區(qū)塊鏈技術(shù),記錄有關(guān)資源分配的關(guān)鍵信息,保證了資源分配的可信和可靠。
在本文方法中,所有資源請(qǐng)求及其中所包含的資源信息都必須通過其他節(jié)點(diǎn)的驗(yàn)證后記錄到區(qū)塊并得到全網(wǎng)共識(shí),區(qū)塊隨時(shí)間不斷累加且有序鏈接,對(duì)其中任何一個(gè)區(qū)塊內(nèi)的任何數(shù)據(jù)任何修改都會(huì)影響該區(qū)塊以及鏈接在其后的所有區(qū)塊內(nèi)容的變化。因此,區(qū)塊鏈技術(shù)保證了資源分配過程中相關(guān)信息的可信和安全存儲(chǔ)。
在保證資源分配有關(guān)信息的可信存儲(chǔ)的基礎(chǔ)上,資源提供者可以根據(jù)區(qū)塊鏈上記錄的相關(guān)信息,驗(yàn)證來自其他參與者資源訪問請(qǐng)求的合法性。以此,可以避免參與者對(duì)資源的非法訪問和過度使用。
由于多數(shù)參與者都為資源受限的邊緣設(shè)備,管理員為了驗(yàn)證、記錄并維護(hù)資源請(qǐng)求消息,需要保存完整的區(qū)塊信息,而其余參與者只是利用了查詢功能獲取鏈上數(shù)據(jù)來進(jìn)行一些驗(yàn)證工作。因此,在本文方法中,除了管理員作為全節(jié)點(diǎn)需要保存完整的區(qū)塊內(nèi)容外,其他的參與者只需運(yùn)行輕節(jié)點(diǎn),即僅存儲(chǔ)區(qū)塊頭信息。如當(dāng)一個(gè)輕節(jié)點(diǎn)用戶想要驗(yàn)證某個(gè)資源請(qǐng)求的合法性時(shí),其可以從任意一個(gè)管理員處獲取Merkle Proof來進(jìn)行驗(yàn)證,而無需保存完整的區(qū)塊鏈副本。以圖3的區(qū)塊結(jié)構(gòu)為例,其中的第1個(gè)資源請(qǐng)求(編號(hào)為0)的Merkle Proof即為“哈希值1”和“哈希值23”。具體驗(yàn)證方法如下:
1)根據(jù)該資源請(qǐng)求消息記錄計(jì)算出其哈希值(哈希值0)。
2)將哈希值0與Merkle Proof(哈希值1)拼接并算出新的哈希值(哈希值01)。
3)將哈希值01與Merkle Proof(哈希值23)拼接算出最終的根哈希值。
4)將算出的根哈希值與自己保存的塊頭信息中的根哈希比對(duì)來判斷其真實(shí)性。
因此,這種簡單驗(yàn)證的方法可以增強(qiáng)本文方法的可行性。
為實(shí)現(xiàn)本文基于區(qū)塊鏈的邊緣計(jì)算資源分配方法,需要解決3個(gè)問題。首先,如何實(shí)現(xiàn)底層區(qū)塊鏈網(wǎng)絡(luò)的問題;其次,如何實(shí)現(xiàn)參與者對(duì)于資源和資源請(qǐng)求信息的發(fā)布及其有效存儲(chǔ)的問題;最后,為了提高系統(tǒng)的可用性,使其滿足實(shí)際應(yīng)用的要求,如何提高資源請(qǐng)求處理的效率,提高系統(tǒng)吞吐量。針對(duì)上述問題,本文設(shè)計(jì)了基于以太坊平臺(tái)及其所支持側(cè)鏈技術(shù)的實(shí)現(xiàn)方案。該方案主要實(shí)現(xiàn)了3個(gè)功能,分別為資源和資源請(qǐng)求信息的發(fā)布、對(duì)資源請(qǐng)求的驗(yàn)證和存儲(chǔ)以及基于鏈上所存儲(chǔ)信息的相關(guān)驗(yàn)證功能,并且配以可視化的前端頁面設(shè)計(jì),方便用戶使用以上功能。具體的系統(tǒng)參與者操作過程如圖4所示。
圖4 系統(tǒng)參與者操作過程Fig.4 Operation process of system participant
在實(shí)際部署和使用智能合約時(shí),利用側(cè)鏈技術(shù)將所設(shè)計(jì)智能合約部署在以太坊主鏈之外,即在側(cè)鏈上運(yùn)行智能合約,以擺脫以太坊主鏈對(duì)使用效率的限制,大幅提高系統(tǒng)吞吐量,并且可以有效降低成本。實(shí)現(xiàn)架構(gòu)主要由以太坊主鏈網(wǎng)絡(luò)、以太坊側(cè)鏈網(wǎng)絡(luò)、智能合約和應(yīng)用程序前端組成,如圖5所示。
圖5 實(shí)現(xiàn)架構(gòu)Fig.5 Implementation architecture
首先依賴以太坊平臺(tái)可以實(shí)現(xiàn)底層區(qū)塊鏈網(wǎng)絡(luò)的搭建,各參與節(jié)點(diǎn)可以通過以太坊客戶端(如Go-ethereum,Get)參與到網(wǎng)絡(luò)中,實(shí)現(xiàn)對(duì)各項(xiàng)功能的操作,并參與到區(qū)塊鏈網(wǎng)絡(luò)的維護(hù)中。
其次以太坊支持圖靈完備語言編程的智能合約(一種持久性的自動(dòng)執(zhí)行腳本)。使用智能合約,一方面可以將所涉及的操作流程以代碼形式寫入智能合約,用戶通過以太坊交易觸發(fā)智能合約執(zhí)行,實(shí)現(xiàn)對(duì)各種功能的操作,在此過程中,管理員的關(guān)鍵工作在于負(fù)責(zé)合約的具體執(zhí)行以及維護(hù)合約作為以太坊內(nèi)部賬戶的賬戶狀態(tài);另一方面,利用智能合約的存儲(chǔ)功能可以存儲(chǔ)由用戶發(fā)布的資源及資源請(qǐng)求信息,即關(guān)于資源分配的“交易”信息,內(nèi)容的存儲(chǔ)同樣以Merkle樹的形式進(jìn)行(具體為以太坊獨(dú)有的改進(jìn)的Merkle Patricia Tree結(jié)構(gòu)),任何對(duì)其內(nèi)容的改變都會(huì)影響合約賬戶的存儲(chǔ)根值(Storage Root),進(jìn)而影響合約賬戶的賬戶狀態(tài)并最終影響整個(gè)以太坊的狀態(tài)。因此,通過智能合約同樣可以保證所記錄信息的難以篡改性。
最后為了避免直接在以太坊網(wǎng)絡(luò)上部署智能合約可能會(huì)面臨的性能瓶頸問題,在本文實(shí)現(xiàn)方案中,智能合約被部署到側(cè)鏈,而在主鏈部署一個(gè)對(duì)應(yīng)的側(cè)鏈合約,作為側(cè)鏈與主鏈之間的橋梁。本文方法所涉及參與方主要依靠側(cè)鏈實(shí)現(xiàn)交互,所產(chǎn)生的資源和資源請(qǐng)求等業(yè)務(wù)數(shù)據(jù)在側(cè)鏈上被處理并記錄在系統(tǒng)賬戶中。同時(shí),通過與主鏈上的側(cè)鏈合約(賬戶)的連接和交互,定期地將側(cè)鏈上更新的數(shù)據(jù)同步至主鏈(為保證性能,僅上傳側(cè)鏈中區(qū)塊數(shù)據(jù)的Merkle根值,如圖6所示,其可以唯一標(biāo)識(shí)區(qū)塊中所包含的所有更新的用戶狀態(tài)),以充分利用以太坊主網(wǎng)絡(luò)帶來的強(qiáng)大安全性保證。當(dāng)發(fā)現(xiàn)異常時(shí),側(cè)鏈上的用戶可以向主鏈發(fā)出驗(yàn)證查詢和挑戰(zhàn)。
圖6 側(cè)鏈數(shù)據(jù)存證Fig.6 Deposit of side-chain data
在區(qū)塊鏈網(wǎng)絡(luò)運(yùn)行正常、合約部署成功且被正常執(zhí)行的情況下,參與方可以基于前端頁面實(shí)現(xiàn)資源和資源請(qǐng)求信息的發(fā)布以及相關(guān)的驗(yàn)證工作。
根據(jù)以上分析,基于以太坊區(qū)塊鏈平臺(tái)的邊緣計(jì)算資源分配的實(shí)現(xiàn)流程如下:
采用XRF法[15]檢測(cè)樣品(NaCl、城市固體廢棄物模擬組分和廚余沼渣)中的Cl含量;取約3 g樣品,分別將硼酸和樣品用壓片機(jī)(10 MPa下恒壓30 s)壓制成片放入 XRF儀器中,測(cè)定其中的 Cl含量。
1)參與各方需要注冊(cè)成為以太坊區(qū)塊鏈平臺(tái)用戶,注冊(cè)可以獲取一個(gè)公/私密鑰對(duì),公鑰作為用戶的身份標(biāo)識(shí),私鑰可以生成數(shù)字簽名用于身份驗(yàn)證。
2)參與各方通過約定共同制定一份智能合約,合約中規(guī)定了發(fā)布和存儲(chǔ)資源及資源請(qǐng)求信息的執(zhí)行邏輯。寫好的合約將被部署到側(cè)鏈,一旦合約成功部署,便不可更改。具體的側(cè)鏈實(shí)現(xiàn)方法則采用以太坊所支持的Loom Network(LN)。使用Loom SDK部署智能合約,其將為合約單獨(dú)創(chuàng)建一條專用的DApp鏈,參與者將在該專用鏈上通過合約實(shí)現(xiàn)相關(guān)功能的操作,而避免與主鏈上的用戶競(jìng)爭(zhēng)資源,大幅提高系統(tǒng)效率。
3)合約一旦部署成功,參與者通過前端頁面輸入相關(guān)數(shù)據(jù),可以向目標(biāo)智能合約發(fā)送資源發(fā)布消息和資源請(qǐng)求消息,這些消息本質(zhì)上具有參數(shù)(資源信息和資源請(qǐng)求信息)的交易。
4)管理員收集網(wǎng)絡(luò)中的相關(guān)交易,并執(zhí)行交易所觸發(fā)的智能合約。新的資源和資源請(qǐng)求信息由此存儲(chǔ)到了智能合約中,這將導(dǎo)致合約狀態(tài)發(fā)生變化。通過運(yùn)行共識(shí)機(jī)制,管理員以區(qū)塊形式將更新后的合約狀態(tài)發(fā)布出去,其他管理員驗(yàn)證合約的執(zhí)行并同步合約的最新狀態(tài)。當(dāng)全網(wǎng)的合約狀態(tài)達(dá)成一致,即代表新的資源和資源請(qǐng)求信息成功存儲(chǔ)至區(qū)塊鏈,資源分配工作完成。
5)DApp鏈定期與以太坊主鏈進(jìn)行數(shù)據(jù)同步,將一段時(shí)間內(nèi)智能合約中更新的數(shù)據(jù)上傳至主鏈進(jìn)行存證。具體是通過以太坊交易的形式,將側(cè)鏈中更新的區(qū)塊的哈希值存入主鏈中的DApp合約賬戶中進(jìn)行鎖定。數(shù)據(jù)的可信存儲(chǔ)由以太坊底層網(wǎng)絡(luò)及其共識(shí)協(xié)議保證。側(cè)鏈用戶可以通過查詢主鏈鎖定數(shù)據(jù)進(jìn)行相關(guān)驗(yàn)證工作。
6)以上操作包括資源請(qǐng)求者可以對(duì)指定資源提供者發(fā)出資源訪問請(qǐng)求,以及資源提供者可以根據(jù)鏈上信息驗(yàn)證來自各方的資源訪問請(qǐng)求的合法性,皆可通過前端頁面完成可視化操作。
為了評(píng)估本文所提出的方法的正確性和可行性,本文建立以太坊私有鏈網(wǎng)絡(luò)來模擬真實(shí)應(yīng)用環(huán)境。通過基于Solidity語言的智能合約編寫以及基于NodeJS的前端開發(fā),并使用Loom Network將合約部署到專用的DApp鏈,實(shí)現(xiàn)對(duì)主鏈計(jì)算工作的卸載。
在完成Loom安裝后,首先使用Loom init和Loom run命令初始化DApp側(cè)鏈。然后使用Truffle unbox webpack命令從Truffle官網(wǎng)獲取空項(xiàng)目。合約的編寫使用Solidity語言,合約源碼存放于以.sol為擴(kuò)展名的文件中,文件放置于contract文件夾中。合約編寫完成后使用truffle compile命令編譯代碼,編譯生成以.json為擴(kuò)展名的字節(jié)碼文件存放于新生成的build文件夾中。為了使Truffle連接到側(cè)鏈,首先需要通過npm install loom-truffle-provider-save命令安裝一個(gè)Loom Truffle Provider,然后修改truffle.js進(jìn)行相應(yīng)的配置。成功配置后,使用truffle migrate-network loom_dapp_chain命令將合約部署至側(cè)鏈,這一過程將消耗燃?xì)庵?以太幣)。
資源信息的發(fā)布如圖7所示。用戶通過輸入資源總量信息(簡單用數(shù)字表示)以及資源可用的開始時(shí)間和結(jié)束時(shí)間,點(diǎn)擊確定按鈕生成資源發(fā)布消息,消息的其他數(shù)據(jù)如時(shí)間戳和簽名等由系統(tǒng)自動(dòng)生成。消息將觸發(fā)智能合約,執(zhí)行的結(jié)果是將消息包含的資源信息存儲(chǔ)到智能合約中,并且系統(tǒng)會(huì)自動(dòng)計(jì)算出一個(gè)資源ID以唯一地標(biāo)識(shí)資源,ID具體由資源提供者身份標(biāo)識(shí)和消息發(fā)布時(shí)間戳計(jì)算哈希得到,具體后臺(tái)數(shù)據(jù)如圖8所示。
圖7 資源信息的發(fā)布Fig.7 Announce of resource information
圖8 資源信息記錄Fig.8 Records of resource information
對(duì)于發(fā)布資源請(qǐng)求信息,過程與發(fā)布資源信息類似,如圖9所示,用戶通過前端頁面輸入所要請(qǐng)求的資源的ID以及所需資源量,點(diǎn)擊確定按鈕生成資源請(qǐng)求消息。系統(tǒng)將通過資源ID檢索到對(duì)應(yīng)資源信息(如果存在),并且判斷其剩余資源量是否能滿足該請(qǐng)求以及請(qǐng)求發(fā)出時(shí)間是否在資源的可用時(shí)間范圍內(nèi)。合法的資源請(qǐng)求將被記錄到智能合約中,即實(shí)現(xiàn)數(shù)據(jù)的“上鏈”,具體后臺(tái)數(shù)據(jù)如圖10所示。在本文方法的設(shè)計(jì)和實(shí)驗(yàn)中,假設(shè)用戶可以以某種方式獲取到已發(fā)布的包括資源ID在內(nèi)的資源信息,則應(yīng)著重關(guān)注于針對(duì)已獲取到的資源的請(qǐng)求及請(qǐng)求信息的存儲(chǔ)。
圖9 資源請(qǐng)求信息的發(fā)布Fig.9 Announce of resource request information
圖10 資源請(qǐng)求信息記錄Fig.10 Records of resource requests information
當(dāng)資源請(qǐng)求通過驗(yàn)證成功記錄到區(qū)塊鏈上時(shí),資源請(qǐng)求者可以憑借相應(yīng)的資源請(qǐng)求記錄的ID信息向指定的資源提供者發(fā)出資源訪問請(qǐng)求。根據(jù)到達(dá)的訪問請(qǐng)求以及區(qū)塊鏈上的資源請(qǐng)求信息,資源提供者可以對(duì)訪問請(qǐng)求的合法性進(jìn)行驗(yàn)證,即通過請(qǐng)求者身份標(biāo)識(shí)信息以及資源請(qǐng)求ID信息,查詢并驗(yàn)證是否存在這樣一個(gè)資源請(qǐng)求,其中的請(qǐng)求者身份與當(dāng)前訪問請(qǐng)求者的身份相符。若驗(yàn)證通過,資源提供者將向其開放部分資源。若請(qǐng)求者身份信息有誤或者根本沒有這樣一條資源請(qǐng)求信息的記錄,則驗(yàn)證不通過,資源提供者將拒絕該請(qǐng)求。
上述實(shí)驗(yàn)說明了本文所提出的資源分配方法可以以去中心化方式順利進(jìn)行資源分配,確保有關(guān)資源分配的關(guān)鍵信息的可信存儲(chǔ),以此有效防止對(duì)資源的錯(cuò)用和濫用,實(shí)現(xiàn)可信的計(jì)算資源分配。本文實(shí)驗(yàn)基于本地測(cè)試網(wǎng)絡(luò)進(jìn)行,在正式應(yīng)用時(shí)需要根據(jù)真實(shí)網(wǎng)絡(luò)環(huán)境進(jìn)行相應(yīng)的調(diào)整。
本文針對(duì)傳統(tǒng)中心化方案的單點(diǎn)故障及信任問題,提出一種基于區(qū)塊鏈的去中心化資源分配方法。以去中心化手段對(duì)資源分配過程中所涉及的關(guān)鍵信息進(jìn)行驗(yàn)證及存儲(chǔ),達(dá)到以可信方式去中心化控制分配過程的目的。同時(shí),使用以太坊及其所支持的智能合約技術(shù)對(duì)本文方法進(jìn)行實(shí)現(xiàn),并運(yùn)用側(cè)鏈技術(shù)對(duì)以太坊擴(kuò)容。下一步將針對(duì)現(xiàn)有主流共識(shí)機(jī)制進(jìn)行研究,改進(jìn)工作量證明共識(shí)機(jī)制,以更加完善本文去中心化的資源分配方法。