蔡振華,林嘉韻,劉芳
(中山大學數據科學與計算機學院,廣東 廣州 510006)
隨著大數據、物聯網和邊緣計算的高速發展,數據規模呈指數級別增長。存儲系統作為數據存儲的基礎設施,面臨更大容量、更安全可靠、更低訪問延遲等諸多挑戰。傳統的大規模存儲系統存在缺乏安全保障、可擴展性受限等問題,難以滿足大數據應用的需求[1-2]。
區塊鏈技術具有防篡改和去中心化的特性,已經被廣泛應用于金融、銀行、供應鏈等多個領域,相比傳統的中心化解決方案,區塊鏈可以有效地保證數據安全和系統架構的去中心化,解決機構間合作的信任和效率問題[1-2]。
在分布式存儲系統中引入區塊鏈技術,可以提高存儲系統的安全性和可擴展性。然而,將區塊鏈應用到存儲系統中,也帶來了新的挑戰,如區塊鏈的查詢性能瓶頸、存儲空間開銷增大等。
如圖1所示,當前區塊鏈技術與存儲技術的融合主要有3個方向的工作。

圖1 區塊鏈存儲研究分類Figure 1 Classification of blockchain storage research
1)基于區塊鏈構建的去中心化存儲系統。早期的去中心化存儲基于對等網絡實現,由個人用戶提供存儲空間,如Ocean Store[3]和星際文件系統(IPFS,inter-planetary file system)等,但是這些系統沒有很好地解決存儲空間激勵的問題,難以讓用戶長期存儲他人的文件。區塊鏈技術的引入,彌補了這方面的不足,利用區塊鏈的虛擬貨幣(Tokens),可以有效激勵用戶提供存儲空間。具有代表性的基于區塊鏈的去中心化存儲系統,有結合IPFS與區塊鏈技術的Filecoin,以及開源項目Sia、Storj、SAFE Network等。
2)基于區塊鏈優化已有系統的存儲性能。針對中心化架構系統面臨的單點故障、數據安全性低、隱私保護能力不足等問題,將區塊鏈技術應用于域名系統、物聯網系統、超級計算系統、數據庫系統中,為系統設計去中心化的架構、利用分布式賬本提高數據安全性與數據溯源能力。
3)區塊鏈系統自身的存儲方法與優化。針對區塊鏈的存儲空間利用率低、查詢性能低等問題進行優化,如采用糾刪碼降低區塊鏈的存儲空間開銷[4-5],使用索引等技術提高區塊鏈系統的查詢效率。
中心化存儲系統存在服務器單點故障、數據丟失、隱私泄露等問題,在對等網絡等技術相對成熟的背景下,去中心化存儲應運而生。在去中心化存儲系統中,用戶上傳到存儲系統的文件被切分、加密、分散保存在多個用戶提供的存儲空間中。目前有大量基于IPFS開發的去中心化項目,如匿名交易平臺OpenBazaar、社交媒體網絡AKASHA等。
然而,去中心化存儲系統面臨存儲激勵問題,即如何激勵用戶提供存儲空間,長期保存其他用戶的文件。將區塊鏈技術作為去中心化存儲系統的激勵層,可以有效緩解該問題。引入區塊鏈之后,一方面,用戶通過提供存儲空間獲得虛擬貨幣獎勵,為租用存儲空間、訪問文件支付費用,建立了良好的經濟模式[6];另一方面,利用分布式賬本保存元數據信息、控制訪問權限,提高了系統的數據安全性[7-9]。
以文件的上傳和下載過程分析去中心化存儲系統的工作方式。基于區塊鏈的去中心化存儲的文件上傳過程如圖2所示。

圖2 基于區塊鏈的去中心化存儲的文件上傳過程Figure 2 File upload process of blockchain based decentralized storage
虛線框部分代表引入區塊鏈機制之后的變化有兩方面。一方面,區塊鏈賬本存儲文件分片的元數據,可保證數據防篡改、可溯源。另一方面,將區塊鏈發行的虛擬貨幣作為獎勵,可以激勵用戶提供存儲空間。
文件上傳的算法如下。
算法1文件上傳
chunks=Cut(file)//把文件切分成相同大小的分片
For c in chunks:
c=Encrypt(c)//對文件分片進行加密
cs=Replicate(c)//將加密分片通過糾刪碼編碼成冗余分片
m=Store(cs)//將冗余分片存儲到分布式節點中
hash=Hash(c)//生成加密分片的哈希值
StoreLedger(hash,m)//將分片哈希值與元數據等信息存儲到區塊鏈
基于區塊鏈的去中心化存儲的文件下載過程如圖3所示。

圖3 基于區塊鏈的去中心化存儲的文件下載過程Figure 3 File download process of blockchain based decentralized storage
虛線框部分代表存儲元數據的區塊鏈賬本。用戶通過文件名的哈希值向區塊鏈賬本發起查詢,后者返回文件的元數據信息;用戶根據元數據到對等網絡的存儲節點中獲取數據,后者返回文件數據。
去中心化存儲系統引入區塊鏈后,不僅鼓勵了用戶更積極地提供存儲空間,還提高了數據安全性。中心化存儲、去中心化存儲和基于區塊鏈的去中心化存儲系統對比如表1所示。

表1 中心化、去中心化、基于區塊鏈的去中心化存儲對比Table 1 Comparison of centralized storage,decentralized storage and decentralized storage based on blockchain
由表1可知,基于區塊鏈的去中心化存儲有如下特點。
1)隱私保護能力強。經過分片、加密后存儲的文件,在其他用戶硬盤中顯示為部分分片的密文數據,只有通過數據擁有者的密鑰才可以查看完整數據,有效地防止了數據泄露。同時,通過區塊鏈控制數據訪問權限,增強了隱私保護能力。
2)數據安全性強。去中心化的存儲系統架構緩解了中心化存儲面臨的單點故障等問題。此外,區塊鏈技術的防篡改與可溯源特性,提高了數據安全性。
3)響應速度快。由于去中心化的分布式架構,存儲設備分散在不同地區,可以同時快速響應多地的設備請求,有利于提高系統的數據收集和處理能力,加快物聯網應用和邊緣計算的響應速度。
4)下載速度快。文件分片被存儲在不同節點,用戶下載文件時能夠以并行方式進行。
5)閑置存儲資源利用率高。激勵用戶提供存儲資源,可以提高網絡上大量閑置存儲空間的利用率。
6)存儲激勵能力強。在去中心存儲系統中,需要設定良好的經濟模式,以持續激勵用戶提供存儲空間。區塊鏈發行的虛擬貨幣,為存儲激勵提供了一個可行的解決方案。中心化存儲系統不涉及激勵。
7)存儲空間開銷大。從用戶設備的角度來看,中心化存儲并不需要額外的存儲空間開銷,去中心化存儲需要保存其他用戶的數據,引入區塊鏈之后需要保存分布式賬本,存儲空間開銷較大。
基于區塊鏈構建的去中心化存儲系統引起了廣泛的關注,本小節介紹幾個具有代表性的去中心化存儲開源項目。
Filecoin是普林斯頓大學的研究項目,它是構建于IPFS上層的去中心化的存儲網絡,作為IPFS的激勵層存在。PPIO是PPLabs團隊開發的去中心化的數據存儲和分發平臺,致力于提高數據的分發能力。Storj是StorjLabs公司發起的去中心化存儲網絡項目,它根據用戶提供的存儲空間容量,按月發放虛擬貨幣獎勵,Storj兼容AmazonS3存儲系統,使第三方平臺更容易集成、遷移到Storj。SAFENetwork(safe access for everyone network)[6]是MaidSafe公司開發的項目,主張建立一個任何人都能安全訪問的去中心化網絡,保護用戶的隱私和數據自治權。Sia[4]是Nebulous Labs公司創建的去中心化存儲項目,通過保存在區塊鏈上的智能合約,自動維護存儲提供方與用戶的合約關系,無須依靠可信第三方。
從技術手段、空間利用率、數據安全性、項目狀況、應用場景等方面對上述5個項目進行比較,如表2所示。

表2 5個代表性的去中心化存儲項目比較Table 2 Comparison of 5 representative decentralized storage projects
1)技術手段。在數據冗余方面,Filecoin、PPIO、Storj、Sia采用了糾刪碼技術,提高了數據的可靠性。在存儲空間開銷方面,Filecoin、PPIO、Storj、SAFENetwork采用了重復數據刪除技術,提高了存儲空間利用率。
2)空間利用率。在存儲系統中,重復數據刪除技術可以有效降低數據冗余,糾刪碼在一定程度上增加了數據冗余。SAFE Network采用了重復數據刪除技術,空間利用率最高;Filecoin、PPIO、Storj兩者兼用,次之;Sia采用了糾刪碼技術,空間利用率最低。
3)數據安全性。除了SAFE Network未提及,其他系統均采用了糾刪碼的數據冗余方式。除了Filecoin需要用戶自行加密,其他系統均采用了加密算法,保證了數據的可靠性和私密性,安全性高。
4)項目狀況。各項目的關鍵時間節點如圖4所示。
PPIO僅開放部分代碼,其他項目均已在GitHub或GitLab開源。Sia在2016年發布了正式版本,其他項目均處于測試階段。
5)應用場景。雖然上述去中心化存儲系統都可用于存儲數據、管理數據和出租存儲空間,但側重點不同。如圖5所示,用戶可以根據自身需求和存儲場景選擇合適的系統。
Filecoin和Sia適合作為存儲基礎設施。其中,Filecoin希望建立一個去中心化的存儲市場,將存儲與數據的定價交給市場而不是企業,它是基于IPFS構建的,適合基于IPFS進行開發的用戶;Sia專注于為去中心化存儲提供一個功能豐富的平臺,發布了正式版本,能夠提供更穩定、成熟的服務,在靜態內容,如視頻、音頻等數據的存儲方面表現良好。

圖4 基于區塊鏈的去中心化存儲項目進展Figure 4 Progress of decentralized storage projects based on blockchain

圖5 系統應用場景決策樹Figure 5 System application scene decision tree
PPIO、Storj與SAFE Network可以作為應用開發平臺。PPIO關注流媒體數據的服務質量,適合音視頻應用的開發者;Storj兼容亞馬遜S3存儲系統,適合希望從S3遷移的用戶;SAFE Network看重用戶的隱私與數據自主權,希望建立一個言論自由、隱私受保護、安全的通信網絡,適合對隱私與安全要求更高的場景。
由于區塊鏈技術的去中心化和防篡改特性,人們研究如何應用區塊鏈技術優化已有系統的存儲性能,這些研究工作涉及域名系統、超算系統、數據庫、物聯網等領域。
針對域名系統的單點故障和信任問題,普林斯頓大學研發了基于區塊鏈的域名系統Blockstack[10],該系統具有去中心化和無須信任的特性,可以提高域名系統的安全性和可擴展性。在該系統中,區塊鏈記錄域名及其對應地址的路由信息、地址信息被存儲在第三方云存儲服務器上。
Blockstack架構如圖6所示。

圖6 Blockstack架構Figure 6 Architecture of Blockstack
數據的查詢路徑為:在區塊鏈上查找域名對應的哈希值;通過哈希值查找對等網絡節點的路由文件;根據路由文件中的地址信息訪問云存儲服務器獲取地址信息。Blockstack不僅可以應用于域名系統,也可以用于存儲其他類型的數據。
超級計算系統中,通常需要進行數據溯源。針對現有基于數據庫與文件系統的方法準確度不高、I/O開銷大等問題,In_memory Blockchain[11]將賬本放置在超級計算系統的計算節點內存中,在計算節點和存儲節點(對應易失內存與非易失存儲)上驗證數據的合法性,防止內存數據丟失影響數據的準確性,該方案具有更高的數據溯源性能。
數據庫通常是中心化的管理方式,由管理員控制整個系統,存在數據冗余度高、安全性不足等問題。區塊鏈技術有助于解決上述問題,數據庫和區塊鏈技術的結合,可以構建既有數據管理能力,又具備去中心化、防篡改等特性的區塊鏈數據庫。
具有代表性的區塊鏈數據庫有BigchainDB、ChainSQL、RecordsKeeper等項目,具有吞吐量高、防篡改、可溯源和去中心化的特點。BigchainDB能夠存儲PB級別數據,寫性能達到每秒100萬次,延遲在亞秒級別。ChainSQL將對數據表的所有操作以日志形式記錄在區塊鏈賬本上,提供數據防篡改服務,支持多種數據庫如MySQL、Oracle等。RecordsKeeper是一個開源的Key-Value數據存儲平臺,通過分布式賬本與數據加密技術提供可驗證和安全的數據存儲服務。
BeeKeeper[12]將區塊鏈技術引入物聯網系統中,使設備能夠自由加入和退出物聯網,提高了系統的可拓展性。Shafagh等[13]針對物聯網中存在的數據隔離問題,將物聯網設備產生的數據存儲到云端,提高數據共享能力,并利用區塊鏈控制權限,保證數據安全。對于自動化銷售系統,Yoo等[14]引入區塊鏈和智能合約,利用智能合約代替人力執行操作,降低了管理成本,提高了系統的安全性。針對物聯網數據分析任務的網絡傳輸帶寬要求高的問題,Xu等[15]提出在物聯網設備上執行特定數據分析操作的方法,減少設備間的數據傳輸,加快數據分析任務的執行速度。Wu等[16]在電網系統中應用區塊鏈技術,基于聯盟鏈構建了智能電網系統,緩解了單點故障、數據被篡改等問題。
區塊鏈系統自身的存儲同樣面臨著挑戰。在存儲空間開銷方面,全副本和區塊鏈膨脹問題導致了龐大的存儲開銷。在I/O性能方面,大部分區塊鏈使用了LevelDB作為底層數據庫,該數據庫讀速度慢[17],影響了區塊鏈的查詢性能。因此,需要對區塊鏈系統的存儲方法進行優化。本節主要介紹降低存儲空間開銷、提高查詢性能兩個方面的工作。
當前主流的區塊鏈系統內主要有全節點和輕節點兩種節點,以匹配不同節點的存儲容量[18]。由于區塊鏈上的數據不可刪除,設備需要存儲的數據量將不斷增長。將糾刪碼引入區塊鏈系統,有助于減小全節點的負擔,只存儲編碼區塊的節點稱為糾刪碼節點。一個完整區塊被分成K塊,采用糾刪碼編碼成K+R個編碼區塊,任意K個編碼區塊都可以恢復出完整區塊。糾刪碼節點只需存儲其中一個編碼區塊,即完整區塊的,因此降低了存儲負擔。
4.1.1 基于糾刪碼的區塊鏈
區塊鏈系統通過將糾刪碼的編/解碼過程嵌入區塊鏈的打包與同步過程來集成糾刪碼。
1)嵌入編碼過程。糾刪碼節點在同步新的區塊文件時,需要先對文件進行編碼操作,再存儲編碼后的區塊文件,如圖7所示。區塊鏈系統中參與挖礦的節點負責記賬、產生區塊、并將新的區塊廣播到全網。為了方便后續的解碼操作,還需生成相應的解碼信息,一并存入糾刪碼節點中。

圖7 在區塊鏈中嵌入糾刪碼編碼過程(虛線框內為引入糾刪碼技術后的過程)Figure 7 Encoding process of erasure code in blockchain (the additional process after the integration of erasure code is in the dotted frame)
2)嵌入解碼過程。當新的節點加入系統時,它需要從鄰近節點處同步區塊鏈。由于鄰近節點可能只保存了部分編碼塊,無法提供完整的區塊文件,因此在進行區塊同步時,需要首先判斷鄰近節點的存儲數據類型,即存儲的是編碼塊還是完整區塊,如果不是完整區塊,則需要先進行區塊文件解碼,恢復出完整區塊再進行同步,如圖8所示。

圖8 在區塊鏈中嵌入糾刪碼解碼的過程(虛線框內為集成糾刪碼技術后添加的過程)Figure 8 Decoding process of erasure code in blockchain (the additional process after the integration of erasure code is in the dotted frame)
4.1.2 糾刪碼節點的優勢
全節點、輕節點和糾刪碼節點的比較如表3所示。
相比全節點和輕節點,糾刪碼節點有以下4個優勢。
1)存儲需求低。糾刪碼不僅降低了對節點存儲資源的需求,而且有效改善了區塊鏈系統的可擴展性,即節點可以根據自身容量大小,選擇存儲的編碼塊數量,即使是小型設備也能夠參與區塊鏈系統,有助于將區塊鏈技術擴展到物聯網。
2)網絡帶寬開銷小。通過糾刪碼降低對設備存儲容量的要求,有助于增加物聯網設備的數量,從而在初始化和同步節點時減少網絡帶寬開銷。
3)數據可用性高。降低節點的存儲需求,允許更多低存儲容量的節點參與存儲,增加系統中參與區塊重構的節點比例,進而提高區塊鏈系統的可用性。
4)數據安全性高。引入糾刪碼后,若要篡改糾刪碼節點中存儲的數據,需要保證篡改前后區塊的哈希值一致,并且使該編碼塊與其他任意編碼塊的組合的解碼結果相同,這是難以實現的。相當于多了一種區塊鏈驗證手段,這樣有利于維護區塊鏈的安全性。

表3 3種區塊鏈節點的比較Table 3 Comparison of 3 types of nodes in blockchain
區塊鏈系統常用LevelDB數據庫存儲數據,該數據庫以日志合并樹(LSM-Tree,the log-structured merge-tree)作為數據結構,該數據庫的讀速度慢,且一次查詢可能需要執行額外多次內部查詢,影響了區塊鏈的查詢性能。下面介紹兩種提高查詢性能的方法,分別是在區塊鏈上構建查詢層和在區塊鏈內部加入輔助索引。
4.2.1 外聯數據庫
外聯數據庫的思想來自EtherQL[19],通過在區塊鏈外部設置數據庫,監聽并同步區塊鏈數據到數據庫;通過數據庫接口進行數據查詢,該數據庫架構如圖9所示。
4.2.2 內置索引
內置索引的方法在區塊鏈系統內部建立查詢層。王千閣等[20]提出為主鍵建立輔助索引,提高區塊鏈系統的查詢性能。在該方法中,主鍵指向的是數據的物理地址,而輔助索引指向的是數據對應的主鍵,架構如圖10所示。

圖9 外聯數據庫架構Figure 9 Architecture of external database

圖10 內置索引架構Figure 10 Architecture of built-in index
焦通等[21]擴展了區塊鏈中數據交易的數據結構,增加了交易信息的索引記錄,相比使用哈希值進行查找交易的方法,該方法豐富了區塊鏈系統的查詢語義。
4.2.3 查詢性能優化方法對比
本節從查詢速度、額外空間開銷、性能影響、可擴展性等方面對比了外聯數據庫與內置索引方法,如表4所示。
1)查詢速度。使用外聯數據庫和內置索引的方式有助于提高區塊鏈的數據查詢速度。以select為例,理論分析單次查詢的時間復雜度,Ts(k)為系統讀取耗時,k為選擇度,T(N)為LevelDB執行一次隨機查找的耗時,外聯數據庫較內置索引更快[20]。
2)存儲空間開銷。外聯數據庫需要存儲區塊鏈的全部數據和索引,內置索引只需要增加索引信息,因此前者的存儲空間開銷較大。
3)性能影響。外聯數據庫對數據的查找和更新不影響區塊鏈,而內置索引方法需要同步索引信息,降低了系統的吞吐量。
4)可擴展性。外聯數據庫的部署、擴展容易。內置索引需要修改系統內部代碼,可擴展性較低。

表4 外聯數據庫與內置索引的比較Table 4 Comparison of external database method and built-in index
區塊鏈存儲提高了系統的存儲性能,但面臨著諸多挑戰。
1)分布式賬本的存儲空間開銷大。分布式賬本是區塊鏈技術的核心,然而,賬本的多副本特性需要大量的額外存儲空間,增加了存儲成本,導致空間利用率有限,難以支撐大規模應用。如大規模物聯網中包括大量異構的小容量設備,節點存儲能力有限,難以持續滿足分布式賬本不斷膨脹的存儲需求。
2)區塊鏈系統查詢性能的提高帶來了新的問題。使用索引、外聯數據庫等技術,能夠提高區塊鏈存儲的查詢性能。然而,這些技術通過空間換取時間,降低了查詢時間,卻增加了存儲空間開銷,影響了系統的可擴展性,難以較好地滿足多方面的需求。
3)去中心化存儲系統不夠穩定、可靠。去中心化存儲通過引入區塊鏈技術得到改進,然而,去中心化存儲仍面臨著穩定性不足、冷啟動引起的系統性能抖動等問題。當在線的存儲節點較少時,可用文件的數量隨之減少,使數據可靠性、服務質量降低,影響用戶體驗。同時,目前大部分的去中心化存儲系統并未給出存儲的耐久性數據,難以證明存儲系統的可靠性。
4)數據隱私與監管方式尚不成熟。區塊鏈上記錄的數據交易是公開透明的,對于數據的共享和驗證有利,卻不利于用戶的隱私保護。用戶可能通過匿名平臺進行非法交易、發布與傳播非法內容,對于這些內容需要監管。
5)區塊鏈存儲結構和系統發展的可擴展性不足。區塊鏈的鏈狀存儲結構可能演變為樹狀、網狀、格點狀等結構,區塊鏈也發展出了分片、可編輯技術。存儲系統需要適應新技術的不斷演化,因此要求區塊鏈存儲系統具有良好的可擴展性,能夠以較小的修改開銷滿足對新特性的支持。
6)區塊鏈技術對非易失存儲系統的壽命與性能的挑戰。非易失存儲介質的寫/擦除次數有限,存在使用壽命有限的問題,且寫延遲和寫功耗相對較高。面對讀寫不平衡、隨機小寫頻繁的區塊鏈應用,非易失存儲系統的壽命和平均I/O性能問題將更為突出,需要研究如何減少寫次數和寫入數據量,提高系統整體訪問性能和延長非易失存儲介質的使用壽命。
由這些挑戰可預見,區塊鏈存儲未來研究的趨勢主要有以下4方面。
1)低存儲空間開銷的區塊鏈存儲系統。在大規模網絡中,設備的存儲能力常常是異構的,需要考慮小容量設備的存儲能力。低空間開銷的區塊鏈存儲系統,有利于區塊鏈部署到大規模異構網絡中,適應更多類型的系統與場景。糾刪碼技術能夠降低存儲空間開銷,然而,糾刪碼與區塊鏈技術結合的工作尚不夠完善。關于糾刪碼節點的比例、節點容量溢出、編碼系數設置和區塊同步等問題亟待解決。
2)高效的區塊鏈存儲查詢技術。區塊鏈存儲系統中需要對數據進行查詢,然而,其查詢性能受限于區塊鏈的數據結構、查詢方法、架構設計等多個方面。在保證低存儲空間開銷的同時,提高其查詢性能將有利于區塊鏈存儲在更多場景的應用。
3)可靠穩定的去中心化存儲服務。基于區塊鏈的去中心化存儲系統是未來的發展趨勢,對于該存儲系統的數據可靠性、服務穩定性的研究,將成為重要部分,使去中心化存儲能夠取代中心化的存儲系統。
4)隱私數據的保護與非法內容監管。在區塊鏈系統中,數據記錄是公開透明的,用戶身份是匿名的。信息世界的內容傳播速度快,對于用戶的隱私需要進行保護,同時,對于非法的監管至關重要。需要平衡用戶隱私與監管力度,防止非法內容的傳播。
區塊鏈存儲結合區塊鏈技術和存儲技術,提高了存儲系統的安全性和可擴展性,在許多應用領域有著巨大潛力,對未來的全球存儲融合、去中心化存儲趨勢有著巨大的推動作用。本文總結了目前區塊鏈與存儲技術相結合的3方面的工作:基于區塊鏈構建的去中心化的存儲系統;基于區塊鏈優化已有系統的存儲性能;區塊鏈系統自身的存儲方法與優化。對以上3方面的工作進行分析與比較,展示了這些工作的進展和特點。最后,展望了當前區塊鏈存儲所面臨的挑戰。