為什么說性能和存儲是區(qū)塊鏈時(shí)代必須攻克的技術(shù)難題
性能決定著每秒可以處理多少請求。舉個(gè)簡單的例子,2016年時(shí)淘寶雙十一訂單交易的創(chuàng)建就達(dá)到了每秒鐘17.5萬筆,而在區(qū)塊鏈領(lǐng)域,國內(nèi)外很多知名主鏈的TPS(每秒交易次數(shù))都不超過二位數(shù),因此極大限制了區(qū)塊鏈技術(shù)應(yīng)用于用戶數(shù)量較大的C端場景。目前,業(yè)內(nèi)公認(rèn)為性能最為領(lǐng)先的是迅雷鏈,它憑借獨(dú)創(chuàng)的同構(gòu)多鏈框架實(shí)現(xiàn)了百萬TPS的處理能力,也使得區(qū)塊鏈技術(shù)大規(guī)模應(yīng)用過程中的性能瓶頸迎刃而解。
再說存儲。
區(qū)塊鏈的存儲問題也是行業(yè)內(nèi)眾所周知的難題,區(qū)塊鏈不適合存儲大塊的數(shù)據(jù),但與我們生活息息相關(guān)的各種應(yīng)用又有大數(shù)據(jù)存儲的需要,比如圖片、存證等等。
迅雷鏈通過同構(gòu)多鏈框架,每個(gè)鏈上的記賬節(jié)點(diǎn)只需要記錄所在鏈的數(shù)據(jù),一定程度緩解了單個(gè)記賬節(jié)點(diǎn)存儲的壓力。但是為了安全性的考慮,一個(gè)鏈的多個(gè)記賬節(jié)點(diǎn)仍然存有全量數(shù)據(jù),對于大塊的數(shù)據(jù)比如合同、存證等可能高達(dá)幾兆的數(shù)據(jù)在鏈上存儲依然十分不經(jīng)濟(jì)。為了解決這個(gè)問題,迅雷鏈在去年7月份推出了針對區(qū)塊鏈應(yīng)用存儲的迅雷鏈文件系統(tǒng)TCFS,解決了區(qū)塊鏈上存儲大塊數(shù)據(jù)的問題,更適用于區(qū)塊鏈開發(fā)。
但這依然還不夠,區(qū)塊鏈數(shù)據(jù)的快速增長,歷史數(shù)據(jù)不斷增大,導(dǎo)致節(jié)點(diǎn)的存儲負(fù)擔(dān)越來越重,如比特幣全量數(shù)據(jù)大小已超過200GB,并以每月3-4GB的速度增長。如果你打算加入比特幣網(wǎng)絡(luò)啟動(dòng)一個(gè)全量節(jié)點(diǎn),在10M/s的下載速度的情況下需要6個(gè)小時(shí)才能完成數(shù)據(jù)的同步,如果只有1M/s的下載速度則需要60個(gè)小時(shí)。
新節(jié)點(diǎn)加入不僅需要消耗大量帶寬還需要占用大量的存儲空間,這次迅雷鏈繼續(xù)迎難而上。
在最近迅雷鏈發(fā)布的四大技術(shù)升級中,其中之一就是對存儲層進(jìn)行了優(yōu)化,通過存儲引擎可插拔技術(shù)和快照壓縮技術(shù)完美解決了區(qū)塊鏈存儲難題。
1. 存儲引擎可插拔
迅雷鏈將存儲層進(jìn)行了抽象,實(shí)現(xiàn)適配多種存儲引擎,以適應(yīng)不同數(shù)據(jù)量場景的要求:
當(dāng)數(shù)據(jù)量較小時(shí)可選擇輕量級單機(jī)數(shù)據(jù)庫,如leveldb,滿足性能和易維護(hù)的要求;
當(dāng)數(shù)據(jù)量較大時(shí)可選擇主流分布式存儲數(shù)據(jù)庫,增強(qiáng)節(jié)點(diǎn)的存儲能力。目前迅雷鏈已經(jīng)實(shí)現(xiàn)基于mongoDB存儲集群的樣例,其他擴(kuò)展需求只需要實(shí)現(xiàn)相應(yīng)的接口,就可以輕松、無縫切換掉底層存儲系統(tǒng)。
2. 快照壓縮
迅雷鏈通過構(gòu)建區(qū)塊數(shù)據(jù)快照,利用百萬共享計(jì)算節(jié)點(diǎn)進(jìn)行歷史數(shù)據(jù)存儲,并提供數(shù)據(jù)的完整性和存在性證明,使得迅雷鏈中參加共識的節(jié)點(diǎn)無需同步和存儲全量的歷史數(shù)據(jù),只需同步最新的區(qū)塊快照數(shù)據(jù)和最新的狀態(tài)數(shù)據(jù)即可,實(shí)現(xiàn)了真正的輕量記賬節(jié)點(diǎn)。具體工作流程如圖所示:
1)數(shù)據(jù)快照
利用基于百萬級的共享計(jì)算節(jié)點(diǎn)的TCFS(迅雷鏈文件系統(tǒng))存儲迅雷鏈的歷史數(shù)據(jù)和每個(gè)區(qū)塊的數(shù)據(jù)狀態(tài)快照,確保數(shù)據(jù)永不丟失,同時(shí)提供數(shù)據(jù)的完整性證明和存在性證明。
每個(gè)區(qū)塊的交易被確認(rèn)執(zhí)行之后,迅雷鏈會記錄當(dāng)前區(qū)塊高度的全局?jǐn)?shù)據(jù)狀態(tài),即數(shù)據(jù)快照。數(shù)據(jù)快照內(nèi)容包括區(qū)塊頭部信息、交易數(shù)據(jù)、所有賬戶數(shù)據(jù)以及共識投票信息等。歷史數(shù)據(jù)使用TCFS進(jìn)行歸檔存儲,TCFS提供數(shù)據(jù)安全性的保障。
2)真正的輕節(jié)點(diǎn)
加入迅雷鏈的節(jié)點(diǎn)只需要同步最新的狀態(tài)數(shù)據(jù)便可加入共識流程。
在之后的運(yùn)行過程中,只需保留最近的數(shù)據(jù),已歸檔的數(shù)據(jù)可刪除,本地存儲數(shù)據(jù)量不會過快的增長。
這使得一個(gè)輕節(jié)點(diǎn)也可加入共識流程,擴(kuò)大了適用范圍,使移動(dòng)設(shè)備加入迅雷鏈網(wǎng)絡(luò)成為可能。
3)快速啟動(dòng)
新節(jié)點(diǎn)的啟動(dòng)只需要下載極少量的數(shù)據(jù),即可快速完成啟動(dòng)并入共識流程,極大降低加入門檻,提高節(jié)點(diǎn)加入迅雷鏈的積極性。
在公網(wǎng)的環(huán)境下,節(jié)點(diǎn)由于網(wǎng)絡(luò)抖動(dòng)或其他原因,掉線一段時(shí)間后重連,這時(shí)節(jié)點(diǎn)不需要同步掉線期間錯(cuò)過的所有數(shù)據(jù),只需從最新快照開始同步。這部分的數(shù)據(jù)量是非常小的,能在短時(shí)間內(nèi)跟進(jìn)最新狀態(tài),重新加入到迅雷鏈網(wǎng)絡(luò)之中。
此次優(yōu)化不僅降低整個(gè)網(wǎng)絡(luò)的帶寬消耗,同時(shí)也提升了迅雷鏈網(wǎng)絡(luò)的魯棒性。
區(qū)塊鏈存儲的重要性不言而喻。迅雷鏈針對區(qū)塊鏈存儲問題提出新思路,以解決實(shí)際的問題為出發(fā)點(diǎn),保證主鏈性能的基礎(chǔ)上,優(yōu)化存儲技術(shù),使得區(qū)塊鏈開發(fā)變得更加簡單、可應(yīng)用。迅雷鏈對技術(shù)的不斷投入,解決了大型企業(yè)在區(qū)塊鏈上的存儲需求。而隨著研發(fā)的不斷深入,這些新技術(shù)必然會為區(qū)塊鏈技術(shù)落地實(shí)體經(jīng)濟(jì),帶來至關(guān)重要的驅(qū)動(dòng)力。