文/ 沈佳杰 萬(wàn)儼慧 向望 趙澤宇
糾刪碼[1]廣泛應(yīng)用于分布式存儲(chǔ)系統(tǒng)[2]來(lái)保證數(shù)據(jù)可靠性。通過(guò)將用戶數(shù)據(jù)編碼生成多個(gè)塊并保存至多個(gè)存儲(chǔ)節(jié)點(diǎn),糾刪碼存儲(chǔ)系統(tǒng)可以保證在部分存儲(chǔ)節(jié)點(diǎn)失效的情況下恢復(fù)出用戶原始數(shù)據(jù)。與此同時(shí),糾刪碼存儲(chǔ)系統(tǒng)能通過(guò)并行化讀取存儲(chǔ)節(jié)點(diǎn)中保存的用戶數(shù)據(jù)來(lái)提升數(shù)據(jù)讀取操作的性能[3]。
由于單個(gè)數(shù)據(jù)中心存在數(shù)據(jù)失效和網(wǎng)絡(luò)不可達(dá)等問(wèn)題,跨數(shù)據(jù)中心分布式存儲(chǔ)系統(tǒng)需要在各個(gè)存儲(chǔ)節(jié)點(diǎn)執(zhí)行數(shù)據(jù)備份操作。在單個(gè)數(shù)據(jù)中心存儲(chǔ)節(jié)點(diǎn)失效時(shí),糾刪碼存儲(chǔ)系統(tǒng)將使用新存儲(chǔ)節(jié)點(diǎn)替換失效節(jié)點(diǎn),恢復(fù)出失效節(jié)點(diǎn)存儲(chǔ)的數(shù)據(jù)。
為了保證存儲(chǔ)數(shù)據(jù)的可靠性,糾刪碼存儲(chǔ)系統(tǒng)需要執(zhí)行數(shù)據(jù)分片操作和數(shù)據(jù)編碼操作,生成多個(gè)數(shù)據(jù)分片,將編碼后的數(shù)據(jù)寫入到各個(gè)校區(qū)存儲(chǔ)節(jié)點(diǎn)。同時(shí),為了保證存儲(chǔ)節(jié)點(diǎn)存儲(chǔ)數(shù)據(jù)的負(fù)載均衡,大規(guī)模存儲(chǔ)系統(tǒng)需要引入一定數(shù)量的邏輯控制節(jié)點(diǎn)[3]。邏輯控制節(jié)點(diǎn)需要根據(jù)各個(gè)存儲(chǔ)節(jié)點(diǎn)負(fù)載情況,選擇適合的存儲(chǔ)節(jié)點(diǎn)寫入分片數(shù)據(jù)。
圖1展示了大規(guī)模糾刪碼鍵值存儲(chǔ)系統(tǒng)數(shù)據(jù)寫入過(guò)程。當(dāng)用戶端設(shè)備收到數(shù)據(jù)寫入請(qǐng)求后,邏輯控制節(jié)點(diǎn)會(huì)選擇4個(gè)存儲(chǔ)節(jié)點(diǎn)執(zhí)行數(shù)據(jù)寫入操作。邏輯控制節(jié)點(diǎn)將用戶數(shù)據(jù)編碼生成數(shù)據(jù)分片A和數(shù)據(jù)分片B,編碼生成校驗(yàn)分片A+B和校驗(yàn)分片A+2*B,并將這些分片寫入存儲(chǔ)節(jié)點(diǎn)。通過(guò)執(zhí)行這些數(shù)據(jù)寫入操作,糾刪碼存儲(chǔ)系統(tǒng)能保證在部分存儲(chǔ)節(jié)點(diǎn)失效的情況下依然可以獲取原始的用戶數(shù)據(jù)分片A和數(shù)據(jù)分片B。
圖1 大規(guī)模糾刪碼鍵值存儲(chǔ)系統(tǒng)數(shù)據(jù)寫入過(guò)程
在實(shí)際存儲(chǔ)系統(tǒng)中,邏輯控制節(jié)點(diǎn)下屬的存儲(chǔ)節(jié)點(diǎn)往往部署在同一校區(qū)的數(shù)據(jù)中心。當(dāng)出現(xiàn)跨校區(qū)的主干網(wǎng)絡(luò)擁塞和單校區(qū)數(shù)據(jù)中心失效等故障時(shí),基于單校區(qū)數(shù)據(jù)中心的糾刪碼鍵值存儲(chǔ)系統(tǒng)往往難以保證存儲(chǔ)數(shù)據(jù)的可用性。
為了應(yīng)對(duì)可能出現(xiàn)單個(gè)數(shù)據(jù)中心失效的問(wèn)題,數(shù)據(jù)備份方案需要將用戶數(shù)據(jù)存儲(chǔ)到分布在各個(gè)校區(qū)數(shù)據(jù)中心的存儲(chǔ)節(jié)點(diǎn)。當(dāng)單個(gè)數(shù)據(jù)中心存儲(chǔ)節(jié)點(diǎn)失效時(shí),糾刪碼存儲(chǔ)系統(tǒng)可以讀取存儲(chǔ)在其他校區(qū)數(shù)據(jù)中心的數(shù)據(jù),恢復(fù)出失效數(shù)據(jù)中心的數(shù)據(jù),實(shí)現(xiàn)對(duì)多個(gè)校區(qū)用戶端設(shè)備持續(xù)提供在線存儲(chǔ)服務(wù)。同時(shí),為了提升數(shù)據(jù)備份操作的網(wǎng)絡(luò)傳輸效率,糾刪碼存儲(chǔ)系統(tǒng)需要充分利用各個(gè)節(jié)點(diǎn)之間的網(wǎng)絡(luò)帶寬資源。
本文設(shè)計(jì)了跨校區(qū)數(shù)據(jù)備份方案來(lái)保證數(shù)據(jù)可靠性,并將數(shù)據(jù)備份方案部署到了復(fù)旦大學(xué)校園網(wǎng)絡(luò)。
基于網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)的邏輯控制平面
為了充分利用跨校區(qū)主干網(wǎng)的帶寬資源,邏輯控制節(jié)點(diǎn)被部署在各個(gè)校區(qū)的數(shù)據(jù)中心來(lái)轉(zhuǎn)發(fā)需要備份的用戶數(shù)據(jù),將接收到的備份數(shù)據(jù)寫入存儲(chǔ)節(jié)點(diǎn)。同時(shí),使用層次化存儲(chǔ)結(jié)構(gòu)[3]來(lái)歸并數(shù)據(jù)備份過(guò)程中的數(shù)據(jù)傳輸操作,提升跨校區(qū)數(shù)據(jù)中心之間執(zhí)行數(shù)據(jù)備份操作的性能,保障用戶應(yīng)用的存儲(chǔ)服務(wù)質(zhì)量。
圖2展示了邏輯控制與存儲(chǔ)空間分離的糾刪碼存儲(chǔ)系統(tǒng)結(jié)構(gòu)。用戶端設(shè)備根據(jù)本機(jī)的IP信息獲取其所在校區(qū)的邏輯控制節(jié)點(diǎn),并將數(shù)據(jù)讀寫請(qǐng)求發(fā)送到該邏輯控制節(jié)點(diǎn)。在接收到數(shù)據(jù)寫入請(qǐng)求時(shí),邏輯控制節(jié)點(diǎn)將數(shù)據(jù)寫入到其所屬校區(qū)的存儲(chǔ)節(jié)點(diǎn)。當(dāng)數(shù)據(jù)量較小的情況下,邏輯控制節(jié)點(diǎn)會(huì)將數(shù)據(jù)緩存在本地存儲(chǔ)空間來(lái)保證數(shù)據(jù)寫入的效率。
圖2 邏輯控制和存儲(chǔ)空間分離的存儲(chǔ)架構(gòu)
在此基礎(chǔ)上,邏輯控制節(jié)點(diǎn)需要執(zhí)行數(shù)據(jù)備份操作,即將用戶寫入的數(shù)據(jù)保存到其他校區(qū)數(shù)據(jù)中心的存儲(chǔ)節(jié)點(diǎn)。由于小數(shù)據(jù)量讀寫操作會(huì)引起較大數(shù)據(jù)傳輸時(shí)延,數(shù)據(jù)備份方案需要優(yōu)化備份數(shù)據(jù)跨校區(qū)傳輸過(guò)程來(lái)提升數(shù)據(jù)傳輸操作的執(zhí)行效率。
圖3展示了跨校區(qū)數(shù)據(jù)備份操作的傳輸過(guò)程。當(dāng)接收到本校區(qū)的用戶端設(shè)備和應(yīng)用服務(wù)器的數(shù)據(jù)備份請(qǐng)求后,本校區(qū)邏輯控制節(jié)點(diǎn)將緩存這些數(shù)據(jù)備份請(qǐng)求,并將其歸并后傳輸?shù)狡渌^(qū)的邏輯控制節(jié)點(diǎn)來(lái)完成數(shù)據(jù)備份操作。
圖3 跨校區(qū)數(shù)據(jù)備份操作的傳輸過(guò)程
由于諸多用戶端設(shè)備需要將數(shù)據(jù)寫入本校區(qū)邏輯控制節(jié)點(diǎn),邏輯控制節(jié)點(diǎn)需要高效的數(shù)據(jù)備份機(jī)制,充分利用跨校區(qū)網(wǎng)絡(luò)帶寬資源來(lái)處理和傳輸這些備份數(shù)據(jù)。
基于對(duì)象內(nèi)容的數(shù)據(jù)備份方案
為了提升跨校區(qū)數(shù)據(jù)備份操作的執(zhí)行效率,本文提出了基于對(duì)象內(nèi)容的數(shù)據(jù)備份方案,將多個(gè)待備份對(duì)象數(shù)據(jù)歸并成數(shù)據(jù)包,保障備份數(shù)據(jù)的傳輸效率,減少數(shù)據(jù)備份操作所消耗的時(shí)間。
圖4展示了用戶端設(shè)備執(zhí)行數(shù)據(jù)寫入操作的過(guò)程。當(dāng)用戶端設(shè)備向本校區(qū)邏輯控制節(jié)點(diǎn)執(zhí)行數(shù)據(jù)寫入操作時(shí),邏輯控制節(jié)點(diǎn)會(huì)將接收到的數(shù)據(jù)寫入緩存區(qū)。當(dāng)緩存的數(shù)據(jù)量超過(guò)一個(gè)閾值,邏輯控制節(jié)點(diǎn)將緩存的本地存儲(chǔ)節(jié)點(diǎn)的備份數(shù)據(jù)打包發(fā)送到備份邏輯控制節(jié)點(diǎn)。
圖4 邏輯控制節(jié)點(diǎn)數(shù)據(jù)寫入過(guò)程
此外,邏輯控制節(jié)點(diǎn)會(huì)接收來(lái)自其他校區(qū)邏輯控制節(jié)點(diǎn)的數(shù)據(jù)備份請(qǐng)求,將備份數(shù)據(jù)根據(jù)編碼規(guī)則寫入各個(gè)存儲(chǔ)節(jié)點(diǎn)。由于執(zhí)行跨校區(qū)數(shù)據(jù)讀取操作通常會(huì)帶來(lái)較大的數(shù)據(jù)讀取時(shí)延,糾刪碼存儲(chǔ)系統(tǒng)能利用各個(gè)校區(qū)的備份數(shù)據(jù)來(lái)提升用戶端設(shè)備讀取數(shù)據(jù)的性能。
圖5展示了跨校區(qū)邏輯控制節(jié)點(diǎn)之間數(shù)據(jù)備份操作的執(zhí)行過(guò)程。當(dāng)接收其他校區(qū)節(jié)點(diǎn)發(fā)送的備份請(qǐng)求,備份邏輯控制節(jié)點(diǎn)會(huì)將其中的對(duì)象寫入到本校區(qū)的存儲(chǔ)節(jié)點(diǎn)。為了保證各個(gè)校區(qū)可以充分利用備份提升數(shù)據(jù)讀取操作的性能,備份節(jié)點(diǎn)所在校區(qū)用戶發(fā)起數(shù)據(jù)讀取操作時(shí)會(huì)直接從其存儲(chǔ)節(jié)點(diǎn)讀取用戶數(shù)據(jù)。
圖5 跨校區(qū)數(shù)據(jù)備份操作的執(zhí)行過(guò)程
緩存?zhèn)浞輸?shù)據(jù)讀取性能優(yōu)化
為了減少在線應(yīng)用執(zhí)行跨校區(qū)數(shù)據(jù)讀取操作所消耗的時(shí)間,本文提出了基于域名解析的讀寫重定向方案。根據(jù)域名和源IP地址,域名解析服務(wù)器將返回同一校區(qū)的邏輯控制節(jié)點(diǎn)的地址。在此基礎(chǔ)上,用戶端設(shè)備將訪問(wèn)同一校區(qū)的邏輯控制節(jié)點(diǎn),執(zhí)行用戶數(shù)據(jù)的讀寫操作。
在日常數(shù)據(jù)讀寫過(guò)程中,用戶端設(shè)備通過(guò)HTTP協(xié)議來(lái)訪問(wèn)存儲(chǔ)在遠(yuǎn)端的用戶數(shù)據(jù)。根據(jù)糾刪碼存儲(chǔ)系統(tǒng)的域名,用戶端設(shè)備能訪問(wèn)存儲(chǔ)在糾刪碼存儲(chǔ)系統(tǒng)中的用戶數(shù)據(jù)。通過(guò)將用戶的數(shù)據(jù)讀寫請(qǐng)求重定向到同一校區(qū)的邏輯控制節(jié)點(diǎn),基于域名解析的數(shù)據(jù)重定向方案有效避免了跨校區(qū)數(shù)據(jù)傳輸操作帶來(lái)的開銷。
圖6展示了基于域名解析的讀寫重定向方案的執(zhí)行過(guò)程。邏輯控制節(jié)點(diǎn)將注冊(cè)信息發(fā)送到域名解析服務(wù)器。在不同校區(qū)的用戶端設(shè)備通常會(huì)被分配不同地址段的IP地址,域名解析服務(wù)器能根據(jù)訪問(wèn)的域名和源IP地址,分析用戶端設(shè)備所處的校區(qū),將相應(yīng)校區(qū)的邏輯控制節(jié)點(diǎn)IP地址返回給用戶端設(shè)備,實(shí)現(xiàn)將訪問(wèn)用戶數(shù)據(jù)的請(qǐng)求重定向到統(tǒng)一校區(qū)的邏輯控制節(jié)點(diǎn)。
圖6 讀寫重定向執(zhí)行過(guò)程
原型糾刪碼鍵值存儲(chǔ)系統(tǒng)實(shí)現(xiàn)
為了測(cè)試該跨校區(qū)數(shù)據(jù)備份方案的有效性,本文實(shí)現(xiàn)了原型糾刪碼鍵值存儲(chǔ)系統(tǒng)執(zhí)行數(shù)據(jù)備份操作。由于小數(shù)據(jù)量讀寫操作往往會(huì)帶來(lái)較大時(shí)延開銷,基于對(duì)象內(nèi)容的數(shù)據(jù)備份算法需要緩存用戶寫入的數(shù)據(jù),并將其發(fā)送到備份邏輯控制節(jié)點(diǎn)。
圖7展示了邏輯控制節(jié)點(diǎn)中數(shù)據(jù)備份功能模塊的軟件架構(gòu)。邏輯控制節(jié)點(diǎn)接收從用戶端設(shè)備發(fā)送的數(shù)據(jù)寫入請(qǐng)求,并將待寫入的數(shù)據(jù)存放到緩存區(qū)。當(dāng)緩存區(qū)的數(shù)據(jù)量超過(guò)一個(gè)閾值,備份請(qǐng)求生成器生成數(shù)據(jù)備份請(qǐng)求,實(shí)現(xiàn)將數(shù)據(jù)備份請(qǐng)求通過(guò)通信接口發(fā)送到備份邏輯控制節(jié)點(diǎn)和存儲(chǔ)節(jié)點(diǎn)。由于緩存區(qū)的數(shù)據(jù)保存于本地存儲(chǔ)空間,糾刪碼存儲(chǔ)系統(tǒng)能保障在線應(yīng)用讀寫數(shù)據(jù)的性能。
圖7 邏輯控制節(jié)點(diǎn)緩存區(qū)設(shè)計(jì)
為了描述備份對(duì)象的特性,原型系統(tǒng)在邏輯控制節(jié)點(diǎn)之間傳輸?shù)膫浞輸?shù)據(jù)中加入了元數(shù)據(jù),生成數(shù)據(jù)包發(fā)送到備份邏輯控制節(jié)點(diǎn)。
圖8展示了各校區(qū)邏輯控制節(jié)點(diǎn)之間傳輸備份對(duì)象數(shù)據(jù)的過(guò)程。發(fā)起數(shù)據(jù)備份操作的邏輯存儲(chǔ)節(jié)點(diǎn)將多個(gè)對(duì)象組成對(duì)象數(shù)據(jù)包,并在傳輸數(shù)據(jù)的頭部加上元數(shù)據(jù),發(fā)送到備份邏輯控制節(jié)點(diǎn)。
圖8 邏輯控制節(jié)點(diǎn)傳輸對(duì)象的過(guò)程
當(dāng)備份邏輯控制節(jié)點(diǎn)接收到其他邏輯控制節(jié)點(diǎn)發(fā)送的數(shù)據(jù)備份請(qǐng)求時(shí),會(huì)將備份數(shù)據(jù)分解為用戶寫入的對(duì)象,并寫入其所在數(shù)據(jù)中心存儲(chǔ)節(jié)點(diǎn)。這樣當(dāng)備份節(jié)點(diǎn)所在校區(qū)用戶端設(shè)備執(zhí)行數(shù)據(jù)讀取操作時(shí),就可以直接從備份節(jié)點(diǎn)讀取數(shù)據(jù)。
實(shí)驗(yàn)設(shè)置
為了驗(yàn)證本文中提出的跨校區(qū)數(shù)據(jù)備份算法的有效性,本文設(shè)計(jì)了測(cè)試實(shí)驗(yàn),在復(fù)旦大學(xué)邯鄲校區(qū)和江灣校區(qū)數(shù)據(jù)中心部署了25臺(tái)服務(wù)器作為用戶端設(shè)備、邏輯控制節(jié)點(diǎn)和存儲(chǔ)節(jié)點(diǎn)來(lái)測(cè)試不同數(shù)據(jù)備份方案的性能。
實(shí)驗(yàn)測(cè)試了在各種數(shù)據(jù)量情況下,分析批量傳輸操作對(duì)備份用戶數(shù)據(jù)的影響,以及從邯鄲校區(qū)向江灣校區(qū)數(shù)據(jù)備份操作的性能,主要比較了跨校區(qū)執(zhí)行數(shù)據(jù)備份操作消耗的時(shí)間和吞吐率。其中,吞吐率為單位時(shí)間內(nèi)備份的數(shù)據(jù)量,單位為MB/s。
此外,實(shí)驗(yàn)將分析數(shù)據(jù)備份存儲(chǔ)對(duì)數(shù)據(jù)讀取操作性能的影響。實(shí)驗(yàn)統(tǒng)計(jì)了不同數(shù)據(jù)量情況下數(shù)據(jù)備份操作和數(shù)據(jù)讀取操作的時(shí)延和吞吐率。其中,時(shí)延為完成數(shù)據(jù)讀取操作需要的時(shí)間,吞吐率為單位時(shí)間用戶端設(shè)備讀取的數(shù)據(jù)量。
數(shù)據(jù)備份操作性能分析
為了分析在數(shù)據(jù)備份過(guò)程中對(duì)多個(gè)對(duì)象執(zhí)行數(shù)據(jù)歸并操作對(duì)數(shù)據(jù)傳輸效率的影響,實(shí)驗(yàn)測(cè)試了對(duì)象歸并前后備份數(shù)據(jù)的效率。圖9展示了不同對(duì)象大小情況下,數(shù)據(jù)備份操作的性能。
圖9(a)展示了不同對(duì)象大小情況下,數(shù)據(jù)備份操作消耗的時(shí)間。由于跨校區(qū)主干網(wǎng)存在較大數(shù)據(jù)傳輸時(shí)延,頻繁執(zhí)行小數(shù)據(jù)量的備份操作會(huì)消耗較多的時(shí)間。通過(guò)歸并對(duì)象數(shù)據(jù),數(shù)據(jù)備份方案能充分利用跨校區(qū)網(wǎng)絡(luò)帶寬資源,減少數(shù)據(jù)備份操作消耗的時(shí)間。
圖9(b)比較了不同對(duì)象大小情況下,數(shù)據(jù)備份操作的吞吐率。當(dāng)需要備份的對(duì)象數(shù)據(jù)量較小的情況下,通過(guò)歸并小數(shù)據(jù)量備份操作,基于對(duì)象內(nèi)容的數(shù)據(jù)備份方案可以有效提升數(shù)據(jù)備份操作的跨校區(qū)傳輸性能。
圖9 不同對(duì)象大小情況下,數(shù)據(jù)備份操作的性能
數(shù)據(jù)讀取操作性能分析
在沒(méi)緩存的情況下,用戶端設(shè)備將訪問(wèn)本校區(qū)的邏輯控制節(jié)點(diǎn),獲取保存在其他校區(qū)存儲(chǔ)節(jié)點(diǎn)的數(shù)據(jù)。為了分析跨校區(qū)的數(shù)據(jù)讀取性能,實(shí)驗(yàn)將測(cè)試各個(gè)校區(qū)緩存的備份數(shù)據(jù)對(duì)數(shù)據(jù)讀取操作性能的影響。圖10展示了不同數(shù)據(jù)量情況下,邏輯控制節(jié)點(diǎn)執(zhí)行數(shù)據(jù)讀取操作的性能。
圖10(a)展示了不同數(shù)據(jù)量情況下,數(shù)據(jù)讀取操作的時(shí)延。當(dāng)讀取數(shù)據(jù)量較小,由于需要執(zhí)行跨校區(qū)數(shù)據(jù)傳輸操作,在沒(méi)有緩存?zhèn)浞輸?shù)據(jù)情況下用戶端設(shè)備往往消耗較長(zhǎng)的時(shí)延來(lái)讀取存儲(chǔ)節(jié)點(diǎn)保存的數(shù)據(jù)。
圖10(b)展示了不同數(shù)據(jù)量情況下,數(shù)據(jù)讀取操作的吞吐率。當(dāng)執(zhí)行小數(shù)據(jù)量讀取操作時(shí),用戶端設(shè)備能讀取邏輯控制節(jié)點(diǎn)所在校區(qū)的存儲(chǔ)節(jié)點(diǎn)保存的備份用戶數(shù)據(jù),減少跨校區(qū)數(shù)據(jù)傳輸帶來(lái)的時(shí)延,提升糾刪碼鍵值存儲(chǔ)系統(tǒng)數(shù)據(jù)讀取操作的效率,保障在線應(yīng)用的用戶體驗(yàn)。
圖10 不同數(shù)據(jù)量情況下,邏輯控制節(jié)點(diǎn)所在校區(qū)數(shù)據(jù)讀取操作的性能
總結(jié)來(lái)看,本文研究了跨校區(qū)糾刪碼鍵值存儲(chǔ)系統(tǒng)數(shù)據(jù)備份方案。通過(guò)合理使用跨校區(qū)主干網(wǎng)絡(luò)資源,設(shè)計(jì)了基于網(wǎng)絡(luò)拓?fù)涞倪壿嬁刂破矫妗榱藴p少小數(shù)據(jù)量傳輸對(duì)跨校區(qū)數(shù)據(jù)備份操作和數(shù)據(jù)讀寫操作的影響,提出了基于對(duì)象內(nèi)容的數(shù)據(jù)備份方案和基于域名解析的讀寫重定向方案。同時(shí),實(shí)現(xiàn)了原型糾刪碼存儲(chǔ)系統(tǒng),并部署了提出的數(shù)據(jù)備份方案。依托復(fù)旦大學(xué)校園網(wǎng)絡(luò),實(shí)驗(yàn)驗(yàn)證了該糾刪碼存儲(chǔ)系統(tǒng)數(shù)據(jù)備份方案可以有效地提升數(shù)據(jù)備份操作的執(zhí)行效率,減少跨校區(qū)數(shù)據(jù)讀寫操作的傳輸開銷。