大數據由于與智慧城市、物聯(lián)網(wǎng)、移動(dòng)互聯(lián)等前景廣闊的項目息息相關(guān),成為時(shí)下最炙手可熱的IT技術(shù)。在此背景下,眾多的IT廠(chǎng)商紛紛推出基于Hadoop的大數據一體機,力圖表明已經(jīng)做好準備迎接大數據時(shí)代。不過(guò),大部分IT廠(chǎng)商談及的幾乎都是產(chǎn)品特點(diǎn)和市場(chǎng)表現,一旦涉及具體的技術(shù)細節都深藏不露,例如近年來(lái),Erasure Code作為可有效提升存儲效率、安全性和便捷性的新興存儲技術(shù),備受IT和互聯(lián)網(wǎng)業(yè)界青睞,但卻對此技術(shù)秘而不宣。近日,筆者有機會(huì )近距離接觸到浪潮云海大數據一體機SDA60000,對Erasure Code在這款產(chǎn)品中的應用細節探了一回究竟。
眾所周知,Hadoop之所以問(wèn)世,很大一部分原因是為了解決數據的分布式存儲問(wèn)題。由此可見(jiàn),存儲在整個(gè)Hodoop體系下的地位有多么重要。SDA60000作為一款面向大數據分析、處理的軟硬一體化產(chǎn)品,在存儲方面做了針對性的設計:硬件上使用了大容量的SATA硬盤(pán),單機柜可提供700TB以上的裸容量;軟件方面,部署了浪潮在開(kāi)源Hadoop基礎上做了深度優(yōu)化后的浪潮云谷一體機系統軟件,通過(guò)HDFS文件系統實(shí)現對海量數據的快速存儲。這其中,Erasure code的巧妙使用,使得HDFS的存儲機制得到了進(jìn)一步改良。
Erasure Code:互聯(lián)網(wǎng)巨頭們的“最?lèi)?ài)”
Erasure Code 最早是無(wú)線(xiàn)通信中有噪信道編碼的一種,也叫糾刪碼。Erasure Code設計的初衷,是希望利用這項技術(shù)將數據分割成不可識別的數據塊,使用額外的信息追加到每個(gè)數據塊中,允許從一些數據塊的子集就可以復原完整的數據集,數據塊可以分布在一個(gè)數據中心、城市、地區或全球任何地方的不同存儲位置。這種方式將大大提升數據存儲的便利性和安全性。
從某種程度而言,Erasure Code 是對RAID 5 算法的改良和優(yōu)化。最常見(jiàn)的Erasure Code是Reed Solomon算法。如圖1所示,假設總共有n塊數據,其中k塊用來(lái)存放數據,m塊用來(lái)存儲erasure編碼(k+m=n),只要壞掉的數據塊數量不超過(guò)m塊,都可以通過(guò)erasure編碼將其余的恢復出來(lái)。也就是說(shuō),通常k+m的erasure編碼,能容m塊數據故障的場(chǎng)景,這時(shí)候的存儲成本是1+m/k,通常m<k。因此,通過(guò)erasure編碼,我們能夠把副本數降到1.x。
圖1 Reed Solomon Erasure Code 算法
當前,Microsoft、Google、Facebook、Amazon、淘寶等互聯(lián)網(wǎng)巨頭早已開(kāi)始研究Erasure code編碼存儲技術(shù),并將其實(shí)際應用到各自主流存儲系統中。
Google GFS II中采用了最基本的RS(6,3)編碼,將一個(gè)待編碼數據單元(Data Unit)分為6個(gè)數據塊(data block),再添加3個(gè)校驗塊(parity block),最多可容包括校驗塊在內的任意3個(gè)數據塊錯誤。
微軟在其云存儲平臺Windows Azure Storage中將校驗塊分為全局校驗塊、局部校驗塊。當發(fā)生任何一個(gè)數據塊錯誤時(shí),恢復代價(jià)由傳統RS(12,4)編碼的12(通過(guò)網(wǎng)絡(luò )傳輸的數據塊數量),變?yōu)?,恢復過(guò)程的網(wǎng)絡(luò )I/O開(kāi)銷(xiāo)減半。
Facebook HDFS RAID的早期編碼方式是RS(10,4),為減少數據恢復的網(wǎng)絡(luò )I/O,Facebook于VLDB 2013發(fā)表名為“XORing Elephants”的LRC編碼方法,除了在原先的10個(gè)數據塊之后添加4個(gè)校驗塊外,還將10個(gè)數據塊均分為2組,每組單獨計算出一個(gè)局部校驗塊,將數據恢復代價(jià)由原來(lái)的10降低為5。
采眾家之長(cháng) 浪潮SDA60000中的Erasure Code
當然,天下沒(méi)有免費的午餐,HDFS Erasure Code在提升存儲空間利用率的同時(shí),由于數據校驗塊的計算需要額外的CPU時(shí)間,加上完整的數據塊只有一份,在高并發(fā)讀取時(shí)效果不理想。故此,應用Erasure Code需根據數據量和性能需求制定有針對性的策略:對于數據量大,存儲空間緊張,訪(fǎng)問(wèn)頻度低的數據采用Erasure Code方式。
浪潮云海大數據一體機SDA60000借鑒了各大廠(chǎng)商的研發(fā)和優(yōu)化經(jīng)驗,采用Erasure code對HDFS的存儲機制進(jìn)行改良,它采用的RS因子為RS(10,4),即為每10個(gè)數據塊生成4個(gè)校驗塊,每個(gè)集群可容忍最多4個(gè)節點(diǎn)失效,數據冗余度為1.4。通過(guò)Erasure code技術(shù),SDA60000在保證了數據容錯的基礎上大幅提升了存儲空間利用率。
圖2 SDA60000 Erasure Code 策略
如圖2所示,浪潮云海大數據一體機SDA60000可為HDFS的每一個(gè)目錄制定靈活的Erasure Code策略,通過(guò)制定RAID間隔,SDA 60000可以實(shí)時(shí)偵測特定目錄中數據的冷熱程度,當系統發(fā)現某些數據在很長(cháng)一段時(shí)間沒(méi)有被訪(fǎng)問(wèn)時(shí),自動(dòng)將底層的存儲機制從默認的三副本轉化為Erasure Code,以提升文件系統的空間利用率。
在實(shí)際應用中HDFS Erasure Code功能非常適合海量歷史數據的存儲,是圖片視頻數據,音頻數據和日志數據理想的動(dòng)態(tài)歸檔方案,在政府、公安、醫療和科研等行業(yè)具有廣泛的應用前景。
相對于傳統的業(yè)務(wù)系統,大數據分析系統對于數據可用性和數據處理性能要求更為苛刻,浪潮云海大數據一體機將進(jìn)一步發(fā)揮其軟硬件一體的優(yōu)勢,一方面,優(yōu)化軟件算法并針對硬件情況調優(yōu)參數,另一方面,借助于浪潮強大的硬件研發(fā)能力,通過(guò)FPGA(Field-Programmable Gate Array)加速卡,SSD緩存加速等技術(shù)加速編碼速度,提升磁盤(pán)IO性能。
浪潮是領(lǐng)先的云數據產(chǎn)品及方案供應商,目前已全面涉足軟件定義數據中心,強調以硬件重構和軟件定義相結合的融合架構,來(lái)實(shí)現數據中心所有資源的全虛擬化、全自動(dòng)化,更好的滿(mǎn)足大數據、云計算應用對IT基礎架構的要求。浪潮云海大數據一體機SDA60000作為一款融合架構產(chǎn)品,將是未來(lái)軟件定義數據中心支撐平臺的重要選擇之一。