劉 云, 宋 凱, 陳路遙, 朱鵬俊
(昆明理工大學(xué)信息工程與自動化學(xué)院, 昆明 650500)
利用區(qū)塊鏈技術(shù)去中心化、不可篡改等特點將區(qū)塊鏈技術(shù)應(yīng)用到物聯(lián)網(wǎng)系統(tǒng),降低了物聯(lián)網(wǎng)信息交互的安全風(fēng)險,在一定程度上提升了數(shù)據(jù)安全性及可靠性等性能,使其更加符合各類場景的應(yīng)用要求[1,2].現(xiàn)有區(qū)塊鏈通量有限[3],平均每秒只能處理幾十筆交易,遠遠低于物聯(lián)網(wǎng)應(yīng)用每秒鐘處理成百甚至上千筆的交易量,即區(qū)塊鏈較低的交易吞吐量在很大程度上難以滿足物聯(lián)網(wǎng)場景下的業(yè)務(wù)需求[4].影響區(qū)塊鏈系統(tǒng)性能的因素主要是負載情況、計算資源和通信帶寬[5].而吞吐量與負載情況中每個區(qū)塊中的交易數(shù)及產(chǎn)生兩個區(qū)塊的時間間隔有關(guān)[6].
為了提高基于區(qū)塊鏈的物聯(lián)網(wǎng)系統(tǒng)的交易吞吐量, Qiu等[7]使用DDRL算法研究了一種基于許可的基于區(qū)塊鏈的物聯(lián)網(wǎng)架構(gòu),固定區(qū)塊生產(chǎn)者的塊大小,將共識協(xié)議選擇和網(wǎng)絡(luò)帶寬分配聯(lián)合優(yōu)化,提高了區(qū)塊鏈系統(tǒng)的吞吐量并滿足不同用戶的需求.Guo等[8]采用DRL算法固定了區(qū)塊間隔,將每個生產(chǎn)者的塊大小和生產(chǎn)塊數(shù)化為聯(lián)合優(yōu)化問題,提高了覆蓋的區(qū)塊鏈系統(tǒng)的吞吐量和底層移動邊緣計算系統(tǒng)中用戶的服務(wù)質(zhì)量.
增加區(qū)塊大小或減小區(qū)塊間隔對區(qū)塊鏈吞吐量性能有一定的提升,但它們之間并不是簡單的線性關(guān)系[9].為了滿足基于區(qū)塊鏈的物聯(lián)網(wǎng)系統(tǒng)的高交易吞吐量的需求,本文在計算資源和通信帶寬一定的情況下,提出最小損失函數(shù)算法去動態(tài)聯(lián)合調(diào)整區(qū)塊大小和區(qū)塊間隔.首先初始化狀態(tài)空間和行為空間以及其他系統(tǒng)參數(shù);其次根據(jù)狀態(tài)和動作輸入對構(gòu)建狀態(tài)空間和行為空間,在系統(tǒng)延遲性約束條件下,計算出符合約束條件的狀態(tài)空間和行為空間輸入對的行為價值函數(shù)作為預(yù)測值;最后逐一計算符合約束條件輸入對的行為價值函數(shù),利用損失函數(shù)對比行為價值函數(shù)的預(yù)測值和真實值,執(zhí)行吞吐量最大值去調(diào)整塊大小和塊間隔.仿真結(jié)果表明,最小損失算法動態(tài)調(diào)整區(qū)塊大小和區(qū)塊間隔,在基于區(qū)塊鏈的物聯(lián)網(wǎng)系統(tǒng)達到穩(wěn)定后顯著提高了區(qū)塊鏈物聯(lián)網(wǎng)系統(tǒng)的鏈上事務(wù)吞吐量.
在物聯(lián)網(wǎng)中,智能設(shè)備(如工業(yè)設(shè)備和監(jiān)視設(shè)備等)能夠以安全的方式存儲和處理那些使用傳感器收集環(huán)境數(shù)據(jù)或使用嵌入式攝像頭捕獲圖像或視頻.這些事務(wù)被轉(zhuǎn)發(fā)給控制層,經(jīng)控制器、服務(wù)器等設(shè)備處理后與區(qū)塊生產(chǎn)者完成去中心化的共享交易.當(dāng)區(qū)塊生產(chǎn)者之間達成共識后生成區(qū)塊,此時區(qū)塊鏈系統(tǒng)根據(jù)物聯(lián)網(wǎng)節(jié)點參數(shù)動態(tài)調(diào)整進行資源優(yōu)化,隨后將調(diào)整方案回復(fù)到控制層,最終實現(xiàn)物聯(lián)網(wǎng)層的優(yōu)化[10].考慮一個基于區(qū)塊鏈的物聯(lián)網(wǎng)系統(tǒng),它由兩部分組成(如圖1):生成數(shù)據(jù)后存儲、處理和共享事務(wù)的物聯(lián)網(wǎng);以可靠和安全的方式處理事務(wù)的區(qū)塊鏈系統(tǒng).
圖1 支持區(qū)塊鏈的物聯(lián)網(wǎng)系統(tǒng)模型
為了處理物聯(lián)網(wǎng)生成的交易,區(qū)塊生產(chǎn)者需要完成以下步驟[10]:(1) 生成區(qū)塊:收集,驗證交易并將其打包為一個區(qū)塊;(2) 將區(qū)塊追加到區(qū)塊鏈:將生成的區(qū)塊廣播給其他塊生成者,并在對新塊達成一致意見后,將該塊添加到它們的本地區(qū)塊鏈中.
在圖2所示的區(qū)塊模型圖中,區(qū)塊[11]由區(qū)塊頭和區(qū)塊主體兩部分構(gòu)成.區(qū)塊頭的大小為80字節(jié),包括4字節(jié)的版本號、32字節(jié)的上一區(qū)塊哈希值、32字節(jié)的Merkle根節(jié)點、4字節(jié)的時間戳、4字節(jié)的難度值和4字節(jié)的隨機數(shù).區(qū)塊主體利用默克爾樹結(jié)構(gòu)來記錄10 min內(nèi)的交易信息.
區(qū)塊鏈中每筆交易都要以字節(jié)的形式存儲在每一個新產(chǎn)生的區(qū)塊中,但是每個區(qū)塊容納的交易數(shù)量是有限的,因為每個區(qū)塊都有自己的容量.區(qū)塊容量也稱區(qū)塊大小,是指限定在每個區(qū)塊存儲的字節(jié)數(shù),代表了這個區(qū)塊能容納多少交易的能力.區(qū)塊間隔指的是上一區(qū)塊生成后到下一區(qū)塊生成的時間間隔,與區(qū)塊生成速率成反比關(guān)系.增大區(qū)塊容量可以容納更多的交易,減小區(qū)塊生成間隔意味著交易以更快的速度得到確認(rèn),兩種方式都可提高區(qū)塊鏈吞吐量性能,然而區(qū)塊鏈吞吐量性能與其影響因素之間并不是簡單的線性關(guān)系.區(qū)塊增大會導(dǎo)致出塊時間過長;區(qū)塊間隔變小,系統(tǒng)來不及處理過多交易,從而導(dǎo)致區(qū)塊變小.因此,我們需要動態(tài)考慮區(qū)塊大小和區(qū)塊間隔與當(dāng)前區(qū)塊生產(chǎn)者平均交易量的關(guān)系.
圖2 區(qū)塊模型圖Fig.2 Block model
為了提高基于區(qū)塊鏈的物聯(lián)網(wǎng)系統(tǒng)的吞吐量,提出最小損失函數(shù)算法對如圖1所示的優(yōu)化部分(物聯(lián)網(wǎng)和區(qū)塊鏈的整合過程)進行優(yōu)化,最小損失算法流程如圖3所示.
圖3 最小損失算法流程圖Fig.3 Flow chart of optimization model
最小損失函算法[12]包含一個初始化階段,該階段用狀態(tài)空間和行動空間近似得到行為價值函數(shù)的估計值;以及一個學(xué)習(xí)階段,用于選擇動作,系統(tǒng)控制和動態(tài)網(wǎng)絡(luò)更新[12].下述優(yōu)化算法的思路和詳細步驟均按照圖3所示的流程進行.
初始化階段,首先進行系統(tǒng)參數(shù)的初始化,接著在參數(shù)定義范圍內(nèi)逐一組合輸入狀態(tài)空間和行動空間參數(shù),在滿足約束條件的情況下計算集合的獎勵函數(shù)和行為價值函數(shù)近似為估計值.
3.1.1 約束條件 在區(qū)塊鏈物聯(lián)網(wǎng)系統(tǒng)參數(shù)滿足系統(tǒng)延遲的條件下進行吞吐量的優(yōu)化,如下定義約束條件.
利用最終完成時間(TTF)[13]來評估區(qū)塊鏈系統(tǒng)的延遲,該時間定義為交易確認(rèn)完成并變得不可逆的時間.交易處理包括兩個階段,即生成區(qū)塊和在驗證者之間就生成的塊達成共識.
TF,δ=TI+TC,δ
(1)
其中,TI是區(qū)塊間隔時間;TC,δ是共識等待時間,取決于所采用的共識算法PBFT共識協(xié)議.整個驗證過程分為兩部分:消息傳遞和消息驗證(驗證簽名及驗物理地址),共識等待時間又可細化為
TC,δ=TD,δ+TV,δ
(2)
其中,TD,δ為消息傳遞時間;TV,δ為消息驗證時間.為了滿足物聯(lián)網(wǎng)的延遲要求,假設(shè)應(yīng)該在一系列連續(xù)的塊間隔w(w>1)內(nèi)發(fā)出并驗證一個塊.TTF應(yīng)滿足約束如下式.
TF,δ≤w×TI
(3)
3.1.2 狀態(tài)空間和行動空間 決策紀(jì)元t(t=1,2,...)的狀態(tài)空間[13]定義為事務(wù)大小(交易規(guī)模)χ,風(fēng)險系數(shù)γ,物聯(lián)網(wǎng)節(jié)點的地理位置x,物聯(lián)網(wǎng)節(jié)點的計算能力c={ck},以及每對物聯(lián)網(wǎng)節(jié)點之間鏈路的數(shù)據(jù)傳輸速率為R={Ri,j}的并集,表示為
S(t)={χ,γ,x,c,R}(t)
(4)
其中,決策紀(jì)元t的動作空間[12]定義為區(qū)塊生產(chǎn)者a,區(qū)塊大小SB,區(qū)塊間隔TI的并集,表示為
A(t)={a,SB,TI}(t)
(5)
根據(jù)狀態(tài)空間和行動空間輸入對進行系統(tǒng)延遲約束條件的判斷
C1:TF,d≤w×TI
(6)
為在調(diào)整負載情況下獲得區(qū)塊鏈物聯(lián)網(wǎng)系統(tǒng)的最大吞吐量,將當(dāng)前獎勵[14](即時獎勵)定義為
(7)
其中,R(t)為獎勵函數(shù),代表了優(yōu)化目標(biāo).如果約束條件不能得到滿足,意味著區(qū)塊鏈物聯(lián)網(wǎng)系統(tǒng)在延遲方面的性能較差,為了避免無效情況發(fā)生,此時設(shè)置獎勵為0.
接著在系統(tǒng)延遲滿足約束的條件下去計算狀態(tài)紀(jì)元的行為-價值函數(shù)值Q(S,A)如下式.
A(t))|S(0)=S,A(0)=A]
(8)
其中,E[*]表示數(shù)學(xué)期望;μ為折現(xiàn)因子[15],滿足μ∈(0,1],反映了當(dāng)前獎勵和未來獎勵之間的權(quán)衡,通常取0.8.
學(xué)習(xí)階段的目標(biāo)是發(fā)現(xiàn)最優(yōu)策略,即根據(jù)當(dāng)前需要處理平均事務(wù)量來確定最佳動作,調(diào)整區(qū)塊大小和區(qū)塊間隔.首先逐一取出符合約束條件的狀態(tài)空間和行動空間參數(shù)對,計算當(dāng)前獎勵函數(shù)和行為價值函數(shù),接著利用最小損失函數(shù)對比當(dāng)前實際值和估計值,最終從這些獎勵中選擇收益最大和損失最小的行動作為實際行動.
3.2.1 算法實現(xiàn) 對同一個狀態(tài)紀(jì)元的不同參數(shù),進行式(7)獎勵函數(shù)及式(8)行為價值函數(shù)計算后得到真實值,并將這些值存在經(jīng)驗記憶庫D中,利用損失函數(shù)對比行為價值函數(shù)的真實值和估計值.損失函數(shù)[16]是一個非負實數(shù)函數(shù),用來量化模型預(yù)測和真實標(biāo)簽之間的差異.最小損失函數(shù)算法將反饋的獎勵信息轉(zhuǎn)化為對應(yīng)狀態(tài)的標(biāo)記,可實現(xiàn)樣本形式的統(tǒng)一,在計算方式相同和樣本形式統(tǒng)一的前提下使用參數(shù)估計方式直接對模型參數(shù)進行近似估計,即使用最小二乘法構(gòu)建損失函數(shù),讓預(yù)測值與真實值總的擬合誤差(即總殘差)達到最小.
L(θ)=[y(i)-Q(S(i),A(i+1);θ)]2
(9)
其中,y(i)為行為價值函數(shù)的狀態(tài)紀(jì)元的真實值,計算公式為式(10);Q(S(i),A(i+1);θ)為行為價值函數(shù)的狀態(tài)紀(jì)元的估計值;θ為真實值與估計值之間的差距,該函數(shù)的目的就是求解最優(yōu)的θ,讓函數(shù)值最小.
(10)
算法1:最小損失函數(shù)算法
輸入:決策紀(jì)元t的狀態(tài)空間S及行動空間A,構(gòu)成輸入對(S,A).
輸出:行為狀態(tài)值函數(shù)Q(S,A),以及損失函數(shù)L(θ).
Begin
(1) 初始化階段.加載歷史狀態(tài)轉(zhuǎn)換配置文件進行初始化,根據(jù)歷史經(jīng)驗記憶庫D中進行主網(wǎng)絡(luò)行為價值函數(shù)Q(S,A)的估計.
(2) 學(xué)習(xí)階段.對每一個決策紀(jì)元t執(zhí)行以下過程:
1) 輸入狀態(tài)空間和行為空間,使用輸入對(S,A)中對應(yīng)的值去檢驗該輸入對是否滿足物聯(lián)網(wǎng)區(qū)塊鏈系統(tǒng)延遲性的約束;
3) 觀察獎勵R(t)和下一個狀態(tài)S(t+1),將經(jīng)驗值(S(t),A(t),R(t),S(t+1))存儲到經(jīng)驗記憶庫D中;
5) 訓(xùn)練估計網(wǎng)絡(luò)中的參數(shù)以最小化損失函數(shù)L(θ)=[y(i)-Q(S(i),A(i+1);θ)]2,將目標(biāo)網(wǎng)絡(luò)中參數(shù)同步為估計網(wǎng)絡(luò)參數(shù);
End
3.2.2 性能分析 事務(wù)吞吐量反映區(qū)塊鏈物聯(lián)網(wǎng)系統(tǒng)處理交易的能力.最小損失函數(shù)算法在計算資源和通信帶寬一定的情況下,動態(tài)調(diào)整區(qū)塊大小和區(qū)塊間隔來提高基于區(qū)塊鏈的物聯(lián)網(wǎng)系統(tǒng)的事務(wù)吞吐量.考慮到上述因素,事務(wù)吞吐量的計算公式為
(11)
其中,SB表示塊大??;TI表示區(qū)塊間隔;χ表示事務(wù)的平均大小,即交易的平均規(guī)模.仿真過程將依次討論這3個變量獨自改變引起的吞吐量變化情況,以及整個吞吐量在4種不同方案的變化情況.
在仿真實驗中,考慮兩個物聯(lián)網(wǎng)節(jié)點密度不同的基于區(qū)塊鏈的物聯(lián)網(wǎng)系統(tǒng)場景,場景一設(shè)有100個物聯(lián)網(wǎng)節(jié)點和21個區(qū)塊生產(chǎn)者,分布在1 km×1 km的區(qū)域內(nèi);場景二設(shè)有1000個物聯(lián)網(wǎng)節(jié)點和21個區(qū)塊生產(chǎn)者,分布在1 km×1 km的區(qū)域內(nèi).擬議的最小損失函數(shù)算法框架的編程實現(xiàn)是使用Window 10系統(tǒng)中Python 3.8下的PyTorch 0.4.0.在進行共識過程的時候,選擇區(qū)塊鏈系統(tǒng)研究中常用的PBFT共識協(xié)議.表1總結(jié)了仿真中使用的參數(shù)設(shè)置.
表1 仿真參數(shù)設(shè)置
為了驗證擬議動態(tài)方案的可行性和吞吐量優(yōu)化情況,在仿真部分考慮了以下3種基線對比方案.(1) 靜態(tài)方案:固定塊大小為4 MB,塊間隔為13 s;(2) DDRL算法:固定塊大小為4 MB,塊生產(chǎn)者以不同間隔生成區(qū)塊;(3) DRL算法:固定塊間隔為13 s,塊生產(chǎn)者以不同大小的區(qū)塊來處理事務(wù).
根據(jù)式(11)可以看出,事務(wù)吞吐量與塊大小、塊間隔以及事務(wù)的平均規(guī)模有關(guān)系,在圖4~圖6中分別探索了這3個參數(shù)對基于區(qū)塊鏈的物聯(lián)網(wǎng)系統(tǒng)的吞吐量的影響,同時討論了4種方案的吞吐量變化趨勢.圖7討論了在情節(jié)變化的情況下4種方案的吞吐量對比.
(a)
(b)
TTF閾值對基于區(qū)塊鏈的物聯(lián)網(wǎng)系統(tǒng)的吞吐量的影響如圖4所示.隨著TTF閾值的增加,4種方案都獲得了更高的交易吞吐量,因為驗證器可以在一個塊中以更寬松的延遲約束來處理更多事務(wù).同時在場景一低密度物聯(lián)網(wǎng)節(jié)點的情況下,事務(wù)吞吐量比場景二高密度物聯(lián)網(wǎng)節(jié)點要高,因為在延遲相同的時候,密度低的場景可以讓區(qū)塊有更好的選擇和更多時間處理更多的事務(wù).但不論是哪個場景,提出的算法可以比基線一致的實現(xiàn)更高的吞吐量.
圖5檢查了具有不同交易規(guī)模的交易吞吐量,這在考慮不同類型的交易時是有意義的.通過仿真圖可以看出4種方案的吞吐量都隨著交易規(guī)模的增加而降低,因為對于大筆交易,一個區(qū)塊可以容納較少數(shù)量的交易.同時在兩個物聯(lián)網(wǎng)節(jié)點密度不同的場景下,提出的算法均可在平均交易大小變化的情況下獲得更高的吞吐量.
(a)
(b)
圖6討論了塊大小限制對吞吐量的影響,隨著區(qū)塊大小限制的增加,基于區(qū)塊鏈的物聯(lián)網(wǎng)系統(tǒng)可以處理更多交易,在兩個物聯(lián)網(wǎng)節(jié)點密度不同的場景下,提出的算法均可獲得更高的交易吞吐量,這適用于除固定區(qū)塊大小方案之外的所有方案.而TTF約束條件的存在限制了一個塊中的最大事務(wù)數(shù),且區(qū)塊增大會導(dǎo)致出塊時間變長而影響區(qū)塊間隔,因此吞吐量不會無限增加.
圖7討論4種方案在情節(jié)數(shù)增加的情況下吞吐量的變化,可以看出,在學(xué)習(xí)過程開始時,事務(wù)吞吐量較低,隨著情節(jié)數(shù)量的增加,吞吐量逐步提高并在大約4000情節(jié)后達到穩(wěn)定狀態(tài),這驗證了我們提出的方案的收斂性能.此外還可以發(fā)現(xiàn),靜態(tài)方案由于缺乏彈性而具有最低的吞吐量,DDRL算法和DRL算法的由于適當(dāng)調(diào)整區(qū)塊參數(shù)而具有較高的吞吐量,在兩個物聯(lián)網(wǎng)節(jié)點密度不同的場景下,所提出的算法可以獲得更高的吞吐量.
(a)
(b)
(a)
(b)
區(qū)塊鏈去中心化、不可篡改等特點在一定程度上降低了區(qū)塊鏈物聯(lián)網(wǎng)系統(tǒng)進行信息交互的安全風(fēng)險.但區(qū)塊鏈技術(shù)的通行量限制特點使其在很大程度上難以滿足物聯(lián)網(wǎng)場景下的高吞吐量業(yè)務(wù)需求.本文提出一種最小損失函數(shù)算法,動態(tài)調(diào)整區(qū)塊大小和區(qū)塊間隔,使得在保證基于區(qū)塊鏈的物聯(lián)網(wǎng)系統(tǒng)延遲性的同時提高鏈上事務(wù)吞吐量.仿真結(jié)果表明,在不同的仿真場景下,本文提出的算法能獲得比基線更高的吞吐量.下一步我們將考慮更多的共識協(xié)議,根據(jù)用戶的不同需求實現(xiàn)自適應(yīng)的調(diào)整,并將類似方案應(yīng)用于特定的邊緣計算案例.