楊國(guó)正,臧 鋮,陳嘉俊,張少鵬,鐘禮斌,黃 蓉
(1.浙商銀行股份有限公司金融科技部,浙江 杭州 311200;2.浙商銀行股份有限公司區(qū)塊鏈技術(shù)應(yīng)用研究院)
區(qū)塊鏈被納入“十四五”規(guī)劃中,表明了國(guó)家監(jiān)管與政策鼓勵(lì)區(qū)塊鏈技術(shù)發(fā)展在中國(guó)的數(shù)字經(jīng)濟(jì)中發(fā)揮關(guān)鍵作用的決心。
與歐美國(guó)家側(cè)重公鏈區(qū)塊鏈技術(shù)發(fā)展模式不同,我國(guó)區(qū)塊鏈技術(shù)的發(fā)展大多基于聯(lián)盟鏈的應(yīng)用,利用區(qū)塊鏈技術(shù)與傳統(tǒng)行業(yè)的創(chuàng)新結(jié)合,解決問(wèn)題、提高效率,從而賦能政府、企業(yè)的數(shù)字化轉(zhuǎn)型,賦能實(shí)體經(jīng)濟(jì)。因此,我國(guó)大量區(qū)塊鏈創(chuàng)新企業(yè)專注于尋找區(qū)塊鏈與傳統(tǒng)業(yè)務(wù)結(jié)合的創(chuàng)新點(diǎn),專注于提高聯(lián)盟鏈平臺(tái)底層的效率以支持更多的應(yīng)用場(chǎng)景。
以區(qū)塊鏈基礎(chǔ)技術(shù)平臺(tái)為例,創(chuàng)新利用區(qū)塊鏈自適應(yīng)交易打包方法,根據(jù)業(yè)務(wù)場(chǎng)景對(duì)數(shù)據(jù)存儲(chǔ)的需求對(duì)交易打包方法進(jìn)行自適應(yīng)配置,以提高在不同業(yè)務(wù)場(chǎng)景下的聯(lián)盟鏈共識(shí)效率。
區(qū)塊鏈技術(shù)是一種分布式賬本技術(shù),同時(shí)也是一個(gè)點(diǎn)對(duì)點(diǎn)的協(xié)作網(wǎng)絡(luò)。協(xié)作方節(jié)點(diǎn)共同維護(hù)數(shù)據(jù),每個(gè)協(xié)作方節(jié)點(diǎn)都有一份完整數(shù)據(jù),且所有協(xié)作方節(jié)點(diǎn)數(shù)據(jù)保持一致。這一切都需要依賴于區(qū)塊鏈的共識(shí)機(jī)制。
共識(shí)機(jī)制是指所有協(xié)作方在節(jié)點(diǎn)的預(yù)設(shè)規(guī)則下,通過(guò)多個(gè)節(jié)點(diǎn)交互,對(duì)鏈上數(shù)據(jù)、行為或流程達(dá)成一致的過(guò)程。其步驟如下:協(xié)作方節(jié)點(diǎn)將區(qū)塊(每個(gè)打包的交易叫做一個(gè)區(qū)塊)分發(fā)到其他協(xié)作方節(jié)點(diǎn)進(jìn)行共識(shí)驗(yàn)證,當(dāng)大多數(shù)節(jié)點(diǎn)驗(yàn)證區(qū)塊無(wú)誤(即各個(gè)協(xié)作方達(dá)成了共識(shí)),其他協(xié)作方節(jié)點(diǎn)同步該區(qū)塊。
這種協(xié)作方節(jié)點(diǎn)間達(dá)成共識(shí)的模式即為目前大多數(shù)聯(lián)盟鏈平臺(tái)采用的BFT 族共識(shí)算法,即拜占庭容錯(cuò)算法。拜占庭容錯(cuò)算法通過(guò)三個(gè)階段的共識(shí)對(duì)交易哈希、運(yùn)行結(jié)果進(jìn)行三次比對(duì),在三個(gè)階段的共識(shí)全部通過(guò)之后,交易數(shù)據(jù)才會(huì)寫入?yún)^(qū)塊鏈賬本。
圖1 RBFT算法流程
交易打包為區(qū)塊的條件有兩個(gè),打包時(shí)間(t)與交易筆數(shù)(n),即當(dāng)交易達(dá)到打包時(shí)間閾值或者交易筆數(shù)閾值時(shí),區(qū)塊鏈平臺(tái)將根據(jù)交易請(qǐng)求的先后順序進(jìn)行全部或者部分打包,進(jìn)行共識(shí)。在傳統(tǒng)的交易打包模式中,t 與n 參數(shù)在初始配置文件中進(jìn)行配置,若想對(duì)參數(shù)進(jìn)行修改則需要手動(dòng)修改配置文件,并重啟節(jié)點(diǎn)服務(wù)。
目前市面上大部分區(qū)塊鏈節(jié)點(diǎn)均采用的是固定的配置文件。例如“基于區(qū)塊鏈的交易處理方法”專利,節(jié)點(diǎn)在交易處理過(guò)程中,設(shè)定特定的時(shí)間間隔執(zhí)行交易打包。該模式適合比較單一的應(yīng)用場(chǎng)景。當(dāng)需在同一個(gè)節(jié)點(diǎn)鏈上實(shí)現(xiàn)多種應(yīng)用場(chǎng)景,數(shù)據(jù)上鏈穩(wěn)定性和效率會(huì)受到影響。例如,在實(shí)時(shí)交易場(chǎng)景下,業(yè)務(wù)應(yīng)用系統(tǒng)要求區(qū)塊鏈平臺(tái)的響應(yīng)時(shí)間盡可能的短,即打包時(shí)間盡可能的短;但是在批量數(shù)據(jù)登記場(chǎng)景下,交易請(qǐng)求數(shù)量激增,如果打包時(shí)間設(shè)置較短或者交易筆數(shù)n 設(shè)置較小,會(huì)導(dǎo)致區(qū)塊鏈打包區(qū)塊數(shù)量快速增多。當(dāng)區(qū)塊產(chǎn)生的速度超過(guò)區(qū)塊鏈平臺(tái)區(qū)塊緩存池上限時(shí),區(qū)塊數(shù)據(jù)會(huì)丟失,同時(shí)也會(huì)導(dǎo)致服務(wù)器資源使用急劇上升,使得數(shù)據(jù)上鏈效率降低。
目前,基于區(qū)塊鏈基礎(chǔ)技術(shù)平臺(tái)(下稱“區(qū)塊鏈平臺(tái)”)已實(shí)現(xiàn)多種應(yīng)用場(chǎng)景,例如供應(yīng)鏈金融、文件存證、日終批量數(shù)據(jù)存證等。在不同的應(yīng)用場(chǎng)景下,其業(yè)務(wù)要求響應(yīng)時(shí)效性和上鏈數(shù)據(jù)量具有較大差異,例如在供應(yīng)鏈金融場(chǎng)景,會(huì)涉及到客戶資產(chǎn)轉(zhuǎn)讓,資產(chǎn)質(zhì)押等操作,對(duì)區(qū)塊鏈平臺(tái)響應(yīng)的時(shí)效性要求較高。在日終批量數(shù)據(jù)存證上鏈場(chǎng)景,由于其數(shù)據(jù)上鏈并發(fā)量大且無(wú)時(shí)效性要求,可以犧牲一部分?jǐn)?shù)據(jù)上鏈時(shí)效性,來(lái)保證節(jié)點(diǎn)服務(wù)的穩(wěn)定性和上鏈數(shù)據(jù)不被丟失。為此,采用固定的區(qū)塊鏈打包參數(shù)僅適合某一個(gè)特定的場(chǎng)景,并不適合多種場(chǎng)景的情況。
在此基礎(chǔ)上,區(qū)塊鏈平臺(tái)創(chuàng)新開(kāi)發(fā)了一種自適應(yīng)配置交易打包方法,在控制交易打包的配置文件中設(shè)置了打包時(shí)間(t)、交易筆數(shù)(n)、打包時(shí)間初始值(P)與交易筆數(shù)初始值(q)等四個(gè)參數(shù),并根據(jù)業(yè)務(wù)的實(shí)際需求制定實(shí)時(shí)登記和批量登記的參數(shù)調(diào)整策略。在數(shù)據(jù)上鏈過(guò)程中,區(qū)塊鏈平臺(tái)會(huì)自動(dòng)記錄前一時(shí)間段i的每秒交易請(qǐng)求數(shù),并根據(jù)每秒交易請(qǐng)求數(shù)匹配配置文件中的參數(shù)策略,并實(shí)時(shí)刷新參數(shù)值。當(dāng)區(qū)塊鏈平臺(tái)觸發(fā)刷新后的打包參數(shù)閾值,平臺(tái)便會(huì)對(duì)交易按照時(shí)間順序進(jìn)行打包。通過(guò)區(qū)塊鏈基礎(chǔ)平臺(tái)自我調(diào)整區(qū)塊打包參數(shù)閾值,可同時(shí)滿足供應(yīng)鏈金融、批量數(shù)據(jù)存證等不同場(chǎng)景下的應(yīng)用需求。
為了直觀看出不同場(chǎng)景下,打包參數(shù)值對(duì)數(shù)據(jù)上鏈效率以及節(jié)點(diǎn)服務(wù)器性能的影響,分別在低壓力和高壓力情況下對(duì)節(jié)點(diǎn)進(jìn)行了實(shí)驗(yàn),實(shí)驗(yàn)節(jié)點(diǎn)分別部署在四臺(tái)4C8G的虛擬服務(wù)器上。
⑴低壓力實(shí)驗(yàn)
在低壓力,要求響應(yīng)實(shí)時(shí)性高的情況下,將打包時(shí)間t 設(shè)置為較小值,使其能快速達(dá)到打包時(shí)間閾值。分別將打包時(shí)間設(shè)置為100ms,200ms,300ms,400ms,500ms,600ms,每一秒發(fā)送20 筆交易,持續(xù)5s,再計(jì)算節(jié)點(diǎn)服務(wù)平均響應(yīng)時(shí)間(如表1、圖2)。
圖2 在不同t值情況下,節(jié)點(diǎn)服務(wù)平均響應(yīng)時(shí)間
表1 在不同t值情況下,節(jié)點(diǎn)服務(wù)平均響應(yīng)時(shí)間
表1 中t 值越小,節(jié)點(diǎn)服務(wù)平均響應(yīng)時(shí)間越短,上層業(yè)務(wù)應(yīng)用系統(tǒng)可以獲得更高效的區(qū)塊鏈服務(wù)。
⑵高壓力實(shí)驗(yàn)
在高壓力的情況下,將打包時(shí)間t 值設(shè)置得足夠大,使其只會(huì)觸發(fā)交易筆數(shù)的閾值。將交易筆數(shù)分別設(shè)置為200,400,600,觀察節(jié)點(diǎn)服務(wù)器CPU 及節(jié)點(diǎn)磁盤使用情況(圖3、圖4)。表2、表3 中顯示,在壓力恒定的情況下,交易筆數(shù)n越大,服務(wù)器CPU使用率和磁盤使用率越低,節(jié)點(diǎn)服務(wù)更穩(wěn)定,上鏈效率也會(huì)越高。
表2 在不同n值情況下,節(jié)點(diǎn)CPU平均使用率
圖3 在不同n值情況下,節(jié)點(diǎn)CPU平均使用率
表3 在不同n值情況下,節(jié)點(diǎn)磁盤平均讀寫情況
圖4 在不同n值情況下,節(jié)點(diǎn)磁盤平均讀寫情況
從實(shí)驗(yàn)結(jié)果可以得出,在低壓力情況下,隨著打包時(shí)間的增加,區(qū)塊鏈平臺(tái)平均響應(yīng)時(shí)間也會(huì)隨之增加。在高壓力情況,打包筆數(shù)設(shè)置較小時(shí),服務(wù)器CPU 平均使用率過(guò)高,會(huì)導(dǎo)致服務(wù)器不穩(wěn)定,出現(xiàn)未知錯(cuò)誤。若隨著并發(fā)量的增加,調(diào)整打包筆數(shù)參數(shù)的大小,使服務(wù)器CPU平均使用率可以保持在一個(gè)正常的水平。
為此,區(qū)塊鏈平臺(tái)需要根據(jù)當(dāng)前交易請(qǐng)求數(shù)來(lái)選擇最優(yōu)的區(qū)塊打包參數(shù),以保證區(qū)塊鏈平臺(tái)服務(wù)的高效性和穩(wěn)定性。當(dāng)某時(shí)間段內(nèi)交易請(qǐng)求數(shù)較少,且要求實(shí)時(shí)登記交易信息時(shí),區(qū)塊鏈平臺(tái)可以將打包時(shí)間t設(shè)置為較小值,提高區(qū)塊鏈響應(yīng)時(shí)間;隨著交易請(qǐng)求數(shù)增加,區(qū)塊鏈平臺(tái)可以將打包時(shí)間t 相應(yīng)比例調(diào)大,增加每個(gè)區(qū)塊中的交易筆數(shù)以提高數(shù)據(jù)上鏈效率;當(dāng)某段時(shí)間,數(shù)據(jù)上鏈請(qǐng)求量突然放大時(shí),區(qū)塊鏈平臺(tái)可以增大交易筆數(shù)n值,對(duì)數(shù)據(jù)進(jìn)行批量打包,減少區(qū)塊鏈平臺(tái)生成區(qū)塊速度和數(shù)量,防止區(qū)塊鏈數(shù)量超出區(qū)塊緩存池導(dǎo)致區(qū)塊數(shù)據(jù)丟失,同時(shí)提高批量交易登記效率。此外,在區(qū)塊鏈平臺(tái)中區(qū)高度越高,上鏈數(shù)據(jù)查詢效率會(huì)降低。為保證區(qū)塊鏈數(shù)據(jù)查詢效率,需適當(dāng)控制區(qū)塊高度。
顯然,在多樣化的應(yīng)用場(chǎng)景下,區(qū)塊鏈平臺(tái)需要能夠自適應(yīng)調(diào)節(jié)區(qū)塊打包參數(shù),故區(qū)塊鏈平臺(tái)采用如圖5中所示的自適應(yīng)交易打包流程。首先在區(qū)塊鏈平臺(tái)配置實(shí)時(shí)登記策略和批量登記策略的打包參數(shù),在區(qū)塊鏈平臺(tái)接收交易的過(guò)程中,平臺(tái)自動(dòng)根據(jù)前一時(shí)間段i 的每秒交易請(qǐng)求數(shù),實(shí)時(shí)刷新配置中對(duì)應(yīng)的打包時(shí)間或者交易筆數(shù)閾值,當(dāng)平臺(tái)觸發(fā)打包參數(shù)閾值,便會(huì)對(duì)交易按時(shí)間順序進(jìn)行打包,使區(qū)塊鏈平臺(tái)對(duì)打包參數(shù)的選擇更加合理。
圖5 自適應(yīng)交易打包流程
以下為區(qū)塊鏈平臺(tái)的一次實(shí)際應(yīng)用,配置打包的參數(shù)策略如下:
區(qū)塊鏈平臺(tái)在控制交易打包的配置文件中設(shè)置了四個(gè)參數(shù),分別為打包時(shí)間(t)、交易筆數(shù)(n),以及打包時(shí)間初始值(P)和交易筆數(shù)初始值(q)。
將打包時(shí)間初始值P 設(shè)置為0.05,將交易筆數(shù)初始值q設(shè)置為100。
當(dāng)區(qū)塊鏈平臺(tái)前一時(shí)間段i 內(nèi)每秒收到的交易請(qǐng)求數(shù)a≤b(b為自定義的閾值,b<q,例如取b=10),區(qū)塊鏈平臺(tái)采取實(shí)時(shí)登記策略,將打包時(shí)間t 設(shè)置為打包時(shí)間初始值P(例如0.05s)。此時(shí),區(qū)塊鏈平臺(tái)在收到交易請(qǐng)求后便會(huì)立刻進(jìn)行數(shù)據(jù)打包和節(jié)點(diǎn)共識(shí)。
隨著區(qū)塊鏈平臺(tái)i 秒內(nèi)收到的每秒交易請(qǐng)求數(shù)量的增大,例如每秒交易請(qǐng)求數(shù)a≥b且a≤c(c為自定義的閾值,c 小于q,例如取20)時(shí),區(qū)塊鏈平臺(tái)可根據(jù)增大的數(shù)量的量級(jí)讀取相應(yīng)的配置參數(shù)值。實(shí)時(shí)登記的策略上可以依次設(shè)置10個(gè)等級(jí)區(qū)間(例如i秒內(nèi),當(dāng)a≤10 時(shí),t=0.05;當(dāng)10<a≤20 時(shí),t=0.1;當(dāng)20<a≤30,t=0.15;當(dāng)30<a≤40 時(shí),t=0.2;……;當(dāng)90<a≤100 時(shí),t=0.5;最高等級(jí)打包時(shí)間內(nèi)的交易請(qǐng)求數(shù)a小于100)。
當(dāng)每秒交易請(qǐng)求數(shù)量過(guò)大時(shí),會(huì)觸發(fā)交易筆數(shù)的閾值。在這種情況下,區(qū)塊鏈平臺(tái)采取批量登記策略,將交易筆數(shù)值n變大。當(dāng)i秒內(nèi)每秒交易請(qǐng)求數(shù)a≥q 且a≤w 時(shí),設(shè)置打包時(shí)間t 為一較大值(例如5 秒)。當(dāng)i 秒內(nèi)每秒交易請(qǐng)求數(shù)a≥w 且a<f 時(shí),將交易筆數(shù)n更新為w。同上也可以依次設(shè)置10 個(gè)等級(jí)區(qū)間(例如i 秒 內(nèi),當(dāng)100≤a<200 時(shí),n=100;當(dāng)200≤a<300 時(shí),n=200;當(dāng)300≤a<400 時(shí),n=300;……依此類推,最高等級(jí)交易筆數(shù)不超過(guò)區(qū)塊鏈平臺(tái)處理交易的上限)。
區(qū)塊鏈平臺(tái)對(duì)交易打包模式的創(chuàng)新,旨在提高不同場(chǎng)景下的數(shù)據(jù)上鏈效率。區(qū)塊鏈平臺(tái)可以根據(jù)不同的交易請(qǐng)求數(shù)量,自適應(yīng)選擇其交易打包參數(shù)的最優(yōu)配置,從整體上提高區(qū)塊鏈平臺(tái)的處理效率。
眾所周知,區(qū)塊鏈共記一本賬、不可篡改、可追溯的特性使其天然適用于交易清算以及交易登記的場(chǎng)景,而區(qū)塊鏈的共識(shí)效率問(wèn)題使其一直無(wú)法應(yīng)用于證券等金融衍生品交易、清算、登記等場(chǎng)景。本文闡述了區(qū)塊鏈技術(shù)的特點(diǎn),研究了在交易打包方面提升了數(shù)據(jù)高頻上鏈場(chǎng)景下的系統(tǒng)吞吐量方法,并在區(qū)塊鏈平臺(tái)實(shí)現(xiàn)本文提出的靈活調(diào)整交易打包參數(shù)策略。實(shí)驗(yàn)結(jié)果表明,應(yīng)用該方法,區(qū)塊鏈節(jié)點(diǎn)服務(wù)器以及磁盤使用率更低,節(jié)點(diǎn)服務(wù)更穩(wěn)定,大幅提升了數(shù)據(jù)上鏈效率。下一步將繼續(xù)優(yōu)化該方法的參數(shù)配置策略,使其能夠適應(yīng)更多的數(shù)據(jù)上鏈場(chǎng)景,不斷提升數(shù)據(jù)上鏈效率,全面拓展區(qū)塊鏈的應(yīng)用場(chǎng)景,從而推動(dòng)區(qū)塊鏈技術(shù)賦能實(shí)體經(jīng)濟(jì),推動(dòng)我國(guó)數(shù)字產(chǎn)業(yè)化。