張亞男, 陳衛(wèi)衛(wèi), 付印金, 徐 堃
(陸軍工程大學(xué) 指揮控制工程學(xué)院, 南京 210007)
近年來, 隨著云存儲技術(shù)的迅猛發(fā)展, 越來越多的企業(yè)和個(gè)人將數(shù)據(jù)存儲在云上. 同時(shí), 為避免傳統(tǒng)的單一云存儲服務(wù)帶來的供應(yīng)商鎖定和服務(wù)中斷導(dǎo)致數(shù)據(jù)丟失等問題, 多云存儲技術(shù)應(yīng)運(yùn)而生, 用戶可以通過云服務(wù)代理(cloud service brokerage, CSB)將數(shù)據(jù)存儲在不用的云上以節(jié)約成本和降低風(fēng)險(xiǎn). 根據(jù)IDC 最新研究報(bào)告預(yù)測, 到2025 年全球數(shù)據(jù)總量將從2018 年的33 ZB 增長到175 ZB, 其中大約49%的數(shù)據(jù)將存儲在云環(huán)境中[1]. 而據(jù)另一項(xiàng)調(diào)查顯示, 云環(huán)境中近75%的外包數(shù)據(jù)是重復(fù)的副本[2], 浪費(fèi)了大量存儲資源. 為降低云服務(wù)提供商(cloud service provider, CSP)的存儲成本, 云存儲服務(wù)中普遍采用了數(shù)據(jù)去重(data deduplication)技術(shù). 通過將云服務(wù)器中的重復(fù)數(shù)據(jù)刪除, 僅保留一個(gè)副本以實(shí)現(xiàn)存儲空間的高效利用.
當(dāng)前越來越多的ICT (information and communication technology)廠商加入云服務(wù)代理產(chǎn)業(yè)領(lǐng)域, 其中既有單純的CSP, 也有傳統(tǒng)的IT 廠商. CSB 通過對其管理的多云進(jìn)行數(shù)據(jù)去重降低成本、提高服務(wù)質(zhì)量和效益. 盡管如此, 由于CSB 之間是隔離的, CSB 及為其提供存儲服務(wù)的CSP 實(shí)際上仍然是一座座“信息孤島”, 數(shù)據(jù)去重的范圍僅限于以單一代理為中心的云存儲服務(wù)器群. 因此, 云服務(wù)器上仍然有大量的冗余數(shù)據(jù).
國內(nèi)外學(xué)者對多云的重刪管理進(jìn)行了深入研究.MetaStorage[3]作為一種地理分布式代理架構(gòu), 將協(xié)調(diào)器組件部署在每個(gè)代理上, 無須中央控制, 避免了單點(diǎn)故障, 但是需要協(xié)調(diào)器頻繁交換數(shù)據(jù)信息, 管理難度大, 并且該方案默認(rèn)代理屬于同一個(gè)組織. ClouDedup[4]是一種基于訪問控制機(jī)制的去重方案, 但同時(shí)該方案也引入了第三方密鑰服務(wù)器管理數(shù)據(jù)塊密鑰. 缺點(diǎn)是選擇一個(gè)所有代理普遍信任的第三方本身具有一定難度, 同時(shí)也額外增加了存儲成本. CloudShare[5]是一種基于區(qū)塊鏈技術(shù)的云端數(shù)據(jù)去重方案, 使用區(qū)塊鏈將多個(gè)云服務(wù)提供商聯(lián)合在一起, 跨用戶進(jìn)行數(shù)據(jù)去重. 其最大缺點(diǎn)是無法解決不同云的數(shù)據(jù)存儲格式和接口不同帶來的影響.
本文提出了一種基于區(qū)塊鏈技術(shù)的多代理聯(lián)合去重方案(Blockchain based multi-brokerage deduplicating alliance, BMBDA), 將松散的CSB 組織起來形成一個(gè)聯(lián)盟, 并為聯(lián)盟內(nèi)的CSB 提供不同云上所存儲的數(shù)據(jù)的全局一致視圖(全局索引表), 處于聯(lián)盟內(nèi)的CSB 成員通過全局視圖判斷待上傳數(shù)據(jù)在云上是否已有重復(fù)副本. 如果沒有, CSB 則將數(shù)據(jù)上傳至云上, 同時(shí)更新對應(yīng)的索引. 反之, 則僅需添加這次上傳的數(shù)據(jù)索引, 將地址指針指向云上的唯一副本. 通過對多個(gè)云上的數(shù)據(jù)聯(lián)合去重,可以進(jìn)一步節(jié)約云存儲空間以降低成本. 同時(shí), 用戶不必真正上傳冗余副本, 可以節(jié)省帶寬并提高用戶體驗(yàn).
多云存儲, 是指依靠代理將多個(gè)供應(yīng)商的不同云存儲服務(wù)虛擬化聯(lián)合管理, 為用戶提供統(tǒng)一的存取接口. 多云存儲系統(tǒng)按照布局差異可以分為集中式代理架構(gòu)和分布式代理架構(gòu)兩種[6]. 其主要工作是, 首先對用戶上傳的數(shù)據(jù)進(jìn)行預(yù)處理, 如分塊、加密、去重等.然后根據(jù)用戶需求, 綜合考量網(wǎng)絡(luò)延遲、存取費(fèi)用、安全性等因素計(jì)算出最佳策略. 最后將用戶數(shù)據(jù)上傳,同時(shí)更新索引表. 通過將用戶的數(shù)據(jù)合理部署在公有云、私有云或混合云上, 進(jìn)一步降低存儲成本, 此外還有避免單點(diǎn)故障導(dǎo)致數(shù)據(jù)丟失、保持高可用的業(yè)務(wù)連續(xù)性、提高云服務(wù)的安全可靠性等優(yōu)點(diǎn). 據(jù)IBM 商業(yè)價(jià)值研究院預(yù)計(jì), 到2021 年將有98%的企業(yè)采用多云架構(gòu)[7]. 隨著多云存儲領(lǐng)域的快速發(fā)展, CSB 廠商推出了大量云存儲管理產(chǎn)品, 如表1 所示.
表1 CSB 各類多云管理產(chǎn)品對比
盡管云存儲市場上存在很多的多云管理產(chǎn)品, 但是尚未發(fā)現(xiàn)一款能夠?qū)崿F(xiàn)將所有云存儲服務(wù)(涵蓋公有云、私有云和混合云)統(tǒng)一管理的產(chǎn)品. CSB 可以將數(shù)據(jù)去重技術(shù)應(yīng)用在為自己提供存儲服務(wù)的云上以消除冗余數(shù)據(jù), 但是對于用戶通過其他CSB 存儲在另外云上的重復(fù)數(shù)據(jù)則無法做到進(jìn)一步的去重.
區(qū)塊鏈(Blockchain)[8]的概念來源于中本聰在2008 年提出的數(shù)字加密貨幣系統(tǒng)——比特幣(Bitcoin).區(qū)塊鏈的本質(zhì)是一種開放的去中心化的分布式數(shù)據(jù)庫,由一系列數(shù)據(jù)區(qū)塊按照產(chǎn)生時(shí)間有序鏈接而成. 每個(gè)區(qū)塊由兩部分構(gòu)成, 區(qū)塊頭負(fù)責(zé)記錄Merkle 根哈希、父哈希值、時(shí)間戳、計(jì)算難度以及隨機(jī)數(shù)等信息, 區(qū)塊體中則包含交易計(jì)數(shù)器以及詳細(xì)的交易數(shù)據(jù), 如圖1.
圖1 區(qū)塊鏈結(jié)構(gòu)
區(qū)塊鏈系統(tǒng)工作過程大致如下: 首先, 交易參與者將交易信息發(fā)布到P2P 網(wǎng)絡(luò), 礦工節(jié)點(diǎn)收到交易信息,經(jīng)驗(yàn)證無誤后將其放入交易池. 然后, 礦工節(jié)點(diǎn)將當(dāng)前目標(biāo)難度值T與hashMerkleRoot 等字段組成區(qū)塊頭,并在區(qū)塊頭中加入不同的隨機(jī)值, 計(jì)算區(qū)塊頭哈希值,直到此哈希值小于或等于目標(biāo)值(此過程被稱作“挖礦”). 最后, 成功計(jì)算到結(jié)果的礦工將交易池中的交易進(jìn)行打包作為區(qū)塊體, 與區(qū)塊頭封裝在一起向全網(wǎng)廣播, 由其他節(jié)點(diǎn)進(jìn)行驗(yàn)證. 一旦被集體接受就無法改變,這使得交易是不可篡改的, 并且是可信和可審計(jì)的.
智能合約(smart contract)豐富了區(qū)塊鏈技術(shù)的應(yīng)用形式, 這個(gè)術(shù)語最早由跨領(lǐng)域法律學(xué)者Szabo 在1995 年提出, 將其定義為“一套以數(shù)字形式定義的承諾, 包括合約參與方可以在上面執(zhí)行這些承諾的協(xié)議”[9].狹義上的智能合約一般是指部署在區(qū)塊鏈上可以自動執(zhí)行的代碼, 以太坊(Ethereum)[10]就是一個(gè)運(yùn)行智能合約的分布式平臺, 這些智能合約運(yùn)行在眾多以太坊虛擬機(jī)上. 以太坊的出現(xiàn)使區(qū)塊鏈應(yīng)用不再局限于數(shù)字貨幣[11]. 區(qū)塊鏈技術(shù)作為顛覆性的創(chuàng)新技術(shù), 因其去中心化、不可篡改、安全性等特性, 近年來已逐步應(yīng)用在到金融、版權(quán)、資產(chǎn)和醫(yī)療等各種領(lǐng)域中.
數(shù)據(jù)去重, 也稱重復(fù)數(shù)據(jù)刪除, 是指在滿足數(shù)據(jù)冗余度要求的前提下, 只傳輸和存儲一個(gè)數(shù)據(jù)對象副本,其他重復(fù)副本由指向該對象數(shù)據(jù)的指針替換, 從而降低存儲空間和傳輸帶寬開銷[12]. 在云環(huán)境中數(shù)據(jù)去重的一般工作流程大致為: 首先, 服務(wù)器對已存儲的數(shù)據(jù)進(jìn)行哈希計(jì)算, 得到它們對應(yīng)的簽名值. 然后, 將這些簽名值與用戶待上傳數(shù)據(jù)的簽名值進(jìn)行匹配計(jì)算, 以此判斷與原存儲數(shù)據(jù)是否重復(fù). 最后, 如果重復(fù)則刪除相同的數(shù)據(jù), 且該用戶無須再次上傳, 并將指向原存儲數(shù)據(jù)的指針返回給用戶以便下次訪問; 如果不重復(fù)則存儲用戶上傳的數(shù)據(jù), 并將指針返回給用戶. 數(shù)據(jù)去重按照去重粒度可以分為文件級、塊級和字節(jié)級去重,按照工作域可以分為客戶端、代理端和服務(wù)器端去重.通過采用數(shù)據(jù)去重技術(shù), 可以為備份系統(tǒng)節(jié)約83%的存儲空間, 為主存系統(tǒng)節(jié)約68%的存儲空間, 為固態(tài)硬盤節(jié)約28%的存儲空間, 為云虛擬機(jī)中通用數(shù)據(jù)的存儲節(jié)約高達(dá)80%的空間[13].
采用數(shù)據(jù)去重技術(shù)僅存儲一個(gè)數(shù)據(jù)副本會降低安全性, 因此在數(shù)據(jù)去重中廣泛應(yīng)用了糾刪碼技術(shù)(erasure coding, EC), 通過增加少量冗余增加系統(tǒng)的可靠性[14]. 其安全性可以用式(1)表示:
BMBDA 的目標(biāo)是將各自獨(dú)立的CSB 聯(lián)合起來,提供跨更多云的重刪服務(wù), 如圖2 所示. 為此, 采用區(qū)塊鏈技術(shù)解決CSB 互不信任的問題, 保證共享數(shù)據(jù)可信且不被惡意篡改, 為聯(lián)合去重提供基礎(chǔ).
圖2 不同去重方案對比
一旦CSB 加入聯(lián)盟并積極工作, 它可以通過更大范圍的重刪消除冗余數(shù)據(jù), 從而為CSP 節(jié)省存儲資源,尤其是降低了邊緣建設(shè)成本. 對于CSB 來說, 通過數(shù)據(jù)去重可以減少上傳的數(shù)據(jù), 進(jìn)而節(jié)約了云服務(wù)器的租用成本. 同時(shí), 存儲一份數(shù)據(jù)還可能得到額外的收入.例如代理a已上傳過數(shù)據(jù)A, 當(dāng)代理b要上傳相同的數(shù)據(jù)A時(shí), 代理b向代理a支付少量費(fèi)用以換取指向已存儲數(shù)據(jù)A的地址指針, 同時(shí)無須上傳整個(gè)數(shù)據(jù)A,這對于代理a和代理b來說是雙贏的. 合作可以最大限度地提高利潤, 也為用戶帶來更為快捷的上傳體驗(yàn),因此認(rèn)為CSB 傾向于合作.
CSB 基于自身的利益考慮, 在商業(yè)環(huán)境中無法做到完全互信, 使用區(qū)塊鏈可以很好地解決這些問題. 首先, 區(qū)塊鏈?zhǔn)且粋€(gè)分布式的系統(tǒng), 無須任何一個(gè)共同信任的中央機(jī)構(gòu)即可達(dá)成共識. 其次, 區(qū)塊鏈可以將數(shù)據(jù)快速同步至各節(jié)點(diǎn), 為聯(lián)盟中的CSB 提供當(dāng)前數(shù)據(jù)的強(qiáng)一致性全局視圖. 最后, 區(qū)塊鏈一旦達(dá)成共識幾乎不可能被篡改, 且是可審計(jì)的. CSB 篡改數(shù)據(jù)將會被發(fā)現(xiàn), 而且無法抵賴.
為應(yīng)對上述威脅, BMBDA 模型采用了區(qū)塊鏈技術(shù), 以便多個(gè)CSB 開展合作, 而無須依賴可值得信任的中心. 與傳統(tǒng)方案相比, 可以節(jié)約更多的存儲成本,更少的帶寬占用. BMBDA 模型可以簡單劃分為核心工作層和文件處理層, 如圖3 所示.
圖3 BMBDA 模型
BMBDA 模型核心工作層由CSB 和區(qū)塊鏈系統(tǒng)組成, 區(qū)塊鏈采用以太坊框架. CSB 將文件上傳、下載、刪除等元數(shù)據(jù)寫入?yún)^(qū)塊鏈, 通過區(qū)塊鏈同步至各CSB,CSB 讀取新區(qū)塊內(nèi)容并更新全局索引表. 通過引入?yún)^(qū)塊鏈, 可以保證全局索引的強(qiáng)一致性, 使得聯(lián)盟內(nèi)的CSB 在每個(gè)時(shí)刻對整個(gè)系統(tǒng)存儲的文件都具有一致的全局視圖. 當(dāng)用戶通過不同CSB 上傳相同文件副本時(shí),由最先執(zhí)行上傳操作(也是實(shí)際存儲文件副本) 的CSB 返回給后執(zhí)行上傳操作的CSB 該副本存儲在云上的地址, 而后者則僅需向前者支付少量費(fèi)用. 區(qū)塊鏈的特殊結(jié)構(gòu)使得新區(qū)塊一旦被集體接受便幾乎無法更改, 保證CSB 聯(lián)盟的可靠性.
文件處理層包括用戶端和CSP, 主要工作為文件的上傳和下載. 其中用戶端的主要執(zhí)行文件哈希、通過糾刪碼技術(shù)分塊等數(shù)據(jù)預(yù)處理任務(wù), 以及對云上下載的數(shù)據(jù)進(jìn)行讀取恢復(fù). CSP 端主要負(fù)責(zé)文件的存儲,并將存儲地址通過CSB 返回給用戶.
本文的方案中, 處于聯(lián)盟內(nèi)的CSB 共同維護(hù)一個(gè)全局視圖, 因此需要考慮以下因素.
(1) CSB 在對外宣稱自己將某個(gè)文件副本上傳至云端后, 多個(gè)用戶可能通過不同的CSB 上傳相同文件副本, 后者通過全局視圖得知該副本已被上傳過, 此時(shí)只需要以少量費(fèi)用向前者換取文件實(shí)際存儲地址即可.假如前者為節(jié)省存儲開銷, 擅自將該副本在云端刪除,同時(shí)拒絕承認(rèn)其惡意行為, 當(dāng)其他用戶想要下載該文件副本時(shí), 將會失敗.
(2)競爭對手可能與惡意CSB 勾結(jié), 即使該CSB從未幫助任何用戶上傳過某個(gè)文件, 也可以在擁有全局視圖的情況下假裝自己也上傳過該數(shù)據(jù)的相同副本,進(jìn)而竊取其他用戶存儲的數(shù)據(jù).
為便于實(shí)現(xiàn)數(shù)據(jù)的全局去重, 避免錯(cuò)誤刪除造成用戶數(shù)據(jù)丟失, 文本專門設(shè)計(jì)了全局索引表, 用于存放用戶通過代理上傳文件的元數(shù)據(jù)信息. CSB 除維護(hù)自身的本地索引表外, 還共同維護(hù)一張全局索引表, 如圖4所示. CSB 將用戶上傳、刪除文件的元數(shù)據(jù)信息寫入?yún)^(qū)塊, 經(jīng)區(qū)塊鏈達(dá)成共識并產(chǎn)生新塊后, 所有CSB 同步讀取新區(qū)塊的內(nèi)容并更新全局索引表. 全局索引表以文件指紋值作為行鍵, 存儲了實(shí)際執(zhí)行存儲操作的代理、所有上傳相同副本的代理和上傳相同副本的用戶信息. 當(dāng)用戶刪除自己上傳的文件時(shí), CSB 將其對應(yīng)的本地索引條目刪除, 同時(shí)將用戶刪除文件副本的元數(shù)據(jù)信息寫入?yún)^(qū)塊, 經(jīng)區(qū)塊鏈同步至各CSB, 刪除全局索引表中該文件副本條目下用戶及對應(yīng)CSB 的信息.如果當(dāng)前僅有該用戶上傳過文件副本, 則刪除全局索引表中文件副本對應(yīng)的整行條目.
圖4 索引表設(shè)計(jì)
針對本文所提出的方案, 設(shè)計(jì)了多代理聯(lián)合去重算法. 首先, 計(jì)算文件簽名值. 然后CSB 在本地索引中比較簽名值, 查找是否存儲過相同副本. 如果存儲過,則僅需更新本地和全局索引表. 反之, 則需要比較全局索引中文件的簽名值, 查找是否有其他CSB 上傳過相同副本. 如果其他CSB 上傳過相同副本, 則該CSB 支付少量費(fèi)用從實(shí)際執(zhí)行存儲的CSB 獲取文件副本在云中的存儲地址, 同時(shí)更新本地和全局索引. 為避免CSB 在擁有全局視圖的情況下非法竊取用戶數(shù)據(jù), 在此過程中實(shí)際執(zhí)行存儲操作的CSB 會對執(zhí)行上傳操作的CSB 進(jìn)行隨機(jī)提問, 如算法1 中第12–15 行所示.最后, 如果所有CSB 都未上傳過該文件副本, 則該CSB 上傳該副本, 并在本地和全局索引中增加對應(yīng)條目. 算法如算法1 (算法符號標(biāo)記及含義詳見表2).
算法1. 多代理聯(lián)合去重算法輸入: File輸出: Update Global_index_table, Local_index_table, upload file for each file k do fp= hash(k) //計(jì)算文件k 的簽名值 rl= search the fp in Local_index_table //在本地索引中查找的簽名值 if rl==true then update the record in Local_index_table //更新本地索引 update the record in Global_index_table //更新全局索引 else rg=search the fp in Global_index_table //在全局索引中查找k 的簽名值 if rg==true then fpn_CSBSave= SHA(k+nonce) //加入隨機(jī)數(shù)與文件合并哈希 the CSB_save send nonce to the CSB_put //返回隨機(jī)數(shù) fpn_CSBPut=SHA(k+nonce) //計(jì)算隨機(jī)數(shù)與文件哈希 if fpn_CSBPut==fpn_CSBSave then //判斷是否合法上傳 update the record in Global_index_table //更新全局索引 the CSB_save send file_address of k to the CSB_put //返回文件k 在云中的存儲地址 else the CSB upload the file k to cloud //代理將用戶文件k 上傳至云 insert a new record in Local_index_table //更新本地索引 insert a new record in Global_index_table //更新全局索引end k
表2 算法符號標(biāo)記及含義
針對上文提到的威脅模型, 及其可能帶來的問題進(jìn)行安全性分析:
首先, 由于區(qū)塊鏈的特殊結(jié)構(gòu)使得篡改區(qū)塊內(nèi)容幾乎不可能, 因此CSB 一旦將某個(gè)文件副本上傳至云,并通過區(qū)塊鏈同步到各CSB, 他的行為將被所有節(jié)點(diǎn)記錄下來. 由于區(qū)塊鏈可追溯的特性, 盡管實(shí)際執(zhí)行存儲的CSB 可能為節(jié)約成本刪除云端文件, 并且不將該行為寫入?yún)^(qū)塊, 但是可以被很容易發(fā)現(xiàn)并且無法抵賴.由于惡意行為造成的損失遠(yuǎn)大于合法行為帶來的收益,并且總會被發(fā)現(xiàn), 因此CSB 幾乎不可能惡意刪除存儲在云中的文件.
其次, 盡管聯(lián)盟內(nèi)的所有CSB 都擁有存儲文件的全局視圖, 但是CSB 仍然無法通過其他CSB 獲取其自身從未上傳過的文件. 因?yàn)槿炙饕硎峭ㄟ^區(qū)塊鏈同步而來, 具有較強(qiáng)的一致性, 雖然CSB 可以修改自己存儲的全局索引表, 但是無法篡改其他CSB 上存儲的全局索引表, 因此企圖通過篡改全局視圖竊取用戶數(shù)據(jù)的辦法是行不通的. 另外在提問環(huán)節(jié), 實(shí)際存儲文件副本的CSB 隨機(jī)產(chǎn)生一個(gè)隨機(jī)數(shù), 與文件合并計(jì)算SHA-256 或者M(jìn)D5 值, 然后將隨機(jī)數(shù)返回給要上傳相同文件副本的CSB. 加密算法的特性使得即使原始數(shù)據(jù)哪怕有1 bit 不同, 也幾乎不可能產(chǎn)生相同的哈希值.由于惡意CSB 和競爭對手沒有整個(gè)文件數(shù)據(jù), 因此幾乎不可能正確回答問題.
實(shí)驗(yàn)代碼采用Python 語言編寫, 測試環(huán)境部署在Windows 10 操作系統(tǒng)上, 硬件環(huán)境為Intel(R) Core(TM)i5-10200HCPU @2.40GHz 處理器, 8 GB 內(nèi)存容量. 數(shù)據(jù)集采用搜狗實(shí)驗(yàn)室中的全網(wǎng)新聞數(shù)據(jù)2012 版, 從中隨機(jī)選取14000 篇新聞進(jìn)行后續(xù)實(shí)驗(yàn). 實(shí)驗(yàn)?zāi)M了多個(gè)用戶通過3 個(gè)云代理向不同的云服務(wù)器存儲文件,區(qū)塊鏈采用PoW 共識算法. 使用Python 語言的multiprocessing 工具包, 建立4 個(gè)進(jìn)程, 進(jìn)程1–3 分別對應(yīng)代理1–3, 協(xié)助用戶存儲文件, 各個(gè)進(jìn)程之間相互獨(dú)立. 進(jìn)程4 模擬了區(qū)塊鏈挖礦過程, 前3 個(gè)進(jìn)程分別與第4 個(gè)進(jìn)程交互, 以同步更新全局視圖.
(1)去重效果比較
去重率是衡量系統(tǒng)好壞的一個(gè)重要指標(biāo), 去重率越高就越能夠節(jié)省云存儲空間, 提高帶寬利用率, 降低云服務(wù)代理存儲開銷. 其計(jì)算公式如下:
由式(5)可以看出, 系統(tǒng)去重率和DUPxyz有關(guān), 理想情況下,DUPxyz越大, 系統(tǒng)去重率越大. 當(dāng)DUPxyz=0時(shí), 系統(tǒng)去重率達(dá)到下界, 此時(shí)經(jīng)單代理內(nèi)部去重后,代理之間向云上存儲的數(shù)據(jù)沒有任何一個(gè)是重復(fù)的.當(dāng)經(jīng)過單代理內(nèi)部去重后仍然存在重復(fù)數(shù)據(jù), 且所有重復(fù)數(shù)據(jù)都被檢測到并去重, 此時(shí)去重率達(dá)到上界.
由圖6 可以看出, 本文所提方案能夠明顯降低存儲空間. 使用傳統(tǒng)的單代理內(nèi)部去重方案在代理1、代理2、代理3 上的去重率分別為2.97%、4.68%、9.08%,而使用BMBDA 方案在不同代理上的去重率分別可以達(dá)到4.33%、9.90%、12.68%, 明顯高于前一方案, 并且隨著用戶上傳文件數(shù)量的增加, 去重率越來越高. 使用BMBDA 方案后, 整個(gè)系統(tǒng)的去重率從5.99%提高到了9.90%, 相應(yīng)地, 上傳文件副本產(chǎn)生的網(wǎng)絡(luò)帶寬開銷也隨之降低. 因此本文所提出方案可以顯著提高去重效果, 為云服務(wù)代理提供更大的收益和更好的服務(wù)質(zhì)量. 出于利益最大化考慮, 越來越多的CSB 會加入代理聯(lián)盟, 這也進(jìn)一步佐證了本方案的可行性.
圖5 文件去重示意圖
圖6 去重效果對比
(2)性能評估
區(qū)塊鏈的特殊結(jié)構(gòu)和共識機(jī)制使得其具有效率不高的缺點(diǎn), 可能影響本文所提方案的性能, 因此設(shè)計(jì)實(shí)驗(yàn)對文件以不同速率上傳的情況進(jìn)行分析. 本文適當(dāng)調(diào)整了PoW 算法“挖礦”難度, 將出塊時(shí)間設(shè)置為3 s.
由圖7 可以看出, 當(dāng)文件上傳速率高于1 時(shí), 去重率趨于平穩(wěn). 因?yàn)榉抡鎱^(qū)塊鏈每3 s 生成一個(gè)區(qū)塊, 每個(gè)區(qū)塊包含7 筆“交易” (文件上傳)信息, 當(dāng)每個(gè)代理都以0.8 個(gè)/s 的速率上傳文件時(shí), 區(qū)塊鏈就剛好可以將所有交易打包生成區(qū)塊, 而不會存在大量交易排隊(duì)等待的現(xiàn)象.在文件傳輸速率高于1 時(shí), 系統(tǒng)去重率仍然會有極小變化, 這是因?yàn)榭赡艽嬖诓煌脩魩缀跬瑫r(shí)上傳相同副本的情況, 同時(shí)又發(fā)生在打包一個(gè)區(qū)塊時(shí)段內(nèi), 然而此時(shí)全局索引表上還沒有該重復(fù)副本的元數(shù)據(jù)信息.
圖7 不同上傳速率對系統(tǒng)去重的影響
綜上, 雖然區(qū)塊鏈性能瓶頸對高上傳速率下的去重率有一定影響, 但并不妨礙其使用. 并且即使在文件上傳速率很高時(shí), BMBDA 方案也顯示出了較好的數(shù)據(jù)去重能力, 明顯好于現(xiàn)有的單代理數(shù)據(jù)去重方案.
針對多云環(huán)境下的數(shù)據(jù)冗余問題, 本文提出了一種基于區(qū)塊鏈的多代理聯(lián)合去重方案, 通過區(qū)塊鏈將云服務(wù)代理聯(lián)合起來, 進(jìn)行覆蓋更多用戶和云的去重工作. 為促成這種聯(lián)合引入了區(qū)塊鏈技術(shù)而非受信任的第三方,區(qū)塊鏈不可篡改的特性也有助于提高系統(tǒng)的安全穩(wěn)定性. 通過聯(lián)合去重, 進(jìn)一步降低了存儲空間, 節(jié)約了網(wǎng)絡(luò)帶寬, 同時(shí)實(shí)現(xiàn)了用戶、云服務(wù)代理和云服務(wù)提供商的共贏. 該方案特別適用于處于起步階段的云服務(wù)代理商,他們由于初期投入成本受限往往只能代理某個(gè)地區(qū)個(gè)別云服務(wù)商的存儲產(chǎn)品, 同時(shí)由于合作能夠降低存儲開銷并提高用戶存儲體驗(yàn), 因此市場競爭力也大為提高. 例如, 很多用戶可能將某部流行電影存到云盤上以備今后觀看, 使用本文方案此過程可能僅需幾秒.
未來工作應(yīng)著重解決兩個(gè)問題: 首先是區(qū)塊鏈性能瓶頸問題, 導(dǎo)致文件元數(shù)據(jù)同步時(shí)間長、去重效率不高. 其次是負(fù)載均衡問題, 例如集中下載某個(gè)副本可能造成實(shí)際存儲該副本的云提供商服務(wù)癱瘓. 針對以上問題, 一是可以通過提高區(qū)塊鏈中的塊存儲容量, 提高文件元數(shù)據(jù)同步的平均時(shí)間. 例如Bitcoin-NG[15]技術(shù)可以在不改變塊容量的基礎(chǔ)上, 引入微區(qū)塊實(shí)現(xiàn)輔助擴(kuò)容. 二是通過選擇更加合適的共識算法, 進(jìn)一步提高區(qū)塊鏈的出塊速度. 三是使用糾刪碼技術(shù)對文件分塊, 合理分配將塊文件存儲到多個(gè)云上, 同時(shí)避免單點(diǎn)存儲造成性能瓶頸和安全性下降.