深度分析重刪和壓縮在數(shù)據(jù)存儲(chǔ)的應(yīng)用
重刪和壓縮技術(shù)是最有效節(jié)約存儲(chǔ)空間的熱門技術(shù),目前普遍應(yīng)用在主存、閃存、備份軟件和數(shù)據(jù)傳輸軟件中,但數(shù)據(jù)重刪和壓縮技術(shù)區(qū)別是什么,在主存儲(chǔ)和閃存中是如何實(shí)現(xiàn)的?這就是今天需要我們一起探討、解答的問題。
對于經(jīng)常感覺硬盤空間不足,在更新小電影之前先要做碎片整理或通過小電影生命周期管理刪除數(shù)據(jù)的同學(xué),今天的內(nèi)容需要打起十二分精神來學(xué)習(xí)了。下面的內(nèi)容將會(huì)革命性和創(chuàng)造性的改變你原來為了騰出多余空間,而費(fèi)盡周折手工操作的方式,進(jìn)而可釋放你的右手,讓你去做更多有意義的事。
重刪壓縮技術(shù)區(qū)別和聯(lián)系
數(shù)據(jù)重刪一般采用Hash算法,根據(jù)塊計(jì)算出Hash值,根據(jù)Hash值得重復(fù)情況判斷是否有重復(fù)數(shù)據(jù)。而數(shù)據(jù)壓縮是一種字節(jié)級的數(shù)據(jù)縮減技術(shù),其思想是采用編碼技術(shù),常用的如Huffman編碼等,將較長的數(shù)據(jù)用較短的、經(jīng)過編碼的格式來表示,以此達(dá)到減少數(shù)據(jù)大小的目。
從效果上來看,可以認(rèn)為重復(fù)數(shù)據(jù)刪除是一種基于“數(shù)據(jù)塊”的壓縮,而數(shù)據(jù)壓縮是一種基于“字節(jié)”的重復(fù)數(shù)據(jù)刪除。從應(yīng)用上來看,重刪和壓縮通常會(huì)配合起來一起使用。如在備份場景中,為了提高數(shù)據(jù)的縮減效率,在數(shù)據(jù)經(jīng)過重刪之后會(huì)對唯一數(shù)據(jù)塊再執(zhí)行一次壓縮。這樣,數(shù)據(jù)的縮減效果就是重刪和壓縮效果的疊加。
主存儲(chǔ)重刪和壓縮技術(shù)
為了更好的討論主存儲(chǔ)系統(tǒng)的重刪和壓縮技術(shù),我們引入備份存儲(chǔ)為參照來進(jìn)行分析。重刪和壓縮功能在備份場景上的應(yīng)用中首先取得了成功,這個(gè)需求就被自然而然地遷移到了主存儲(chǔ)場景上。
但因?yàn)橹鞔鎯?chǔ)場景中的IO模型與備份場景中的IO模型存在非常明顯的差異,這就導(dǎo)致了主存儲(chǔ)場景和備份場景中,重刪在架構(gòu)上存在比較大的區(qū)別。下面將從幾個(gè)不同的方面來說明這些差異對重刪架構(gòu)帶來的影響。
IO大小不同
在備份場景中,備份任務(wù)通常都是以備份流的形式進(jìn)入系統(tǒng),這是的IO都是比較大的,一般都是MB級別;但在主存儲(chǔ)場景中,以虛擬桌面(Virtual Desktop Infrasture, VDI)為例,IO大小通常都是幾十KB,以8~32KB的IO為主。
IO模式不同
在備份場景中,備份任務(wù)都是以順序?qū)憽㈨樞蜃x為主;但在主存儲(chǔ)場景中,存在較大比例的隨機(jī)讀寫,VDI場景中就存在大概約30%的隨機(jī)讀寫。此外,備份場景中,對已經(jīng)備份的數(shù)據(jù),基本上沒有覆蓋寫操作,但在主存儲(chǔ)場景中,覆蓋寫比例比較大,筆者所在團(tuán)隊(duì)曾經(jīng)做過針對VDI場景下的覆蓋寫統(tǒng)計(jì),在VDI場景下,運(yùn)行時(shí)大約90%的IO存在覆蓋寫。
性能要求不同
在備份場景中,系統(tǒng)追求的是高帶寬,需要在更短的時(shí)間窗口內(nèi)完成備份任務(wù),對時(shí)延的要求相對不高;但在主存儲(chǔ)場景,系統(tǒng)追求高IOPS和低時(shí)延,如果在IO的下盤路徑中增加重刪的處理,則可能會(huì)增大IO的響應(yīng)時(shí)延。
特性要求不同
在備份場景中,重刪是一個(gè)必備特性;但在主存儲(chǔ)場景中,重刪,包括壓縮是一個(gè)可選特性。相應(yīng)的,定位不同,系統(tǒng)分配給重刪的計(jì)算資源、內(nèi)存資源等也就會(huì)不同。在備份場景中,絕大部分的計(jì)算資源都分配給重刪進(jìn)行分塊和壓縮,但在主存儲(chǔ)場景中,重刪會(huì)更多的讓渡于其他特性,這樣分配給重刪的資源注定很有限。
基于以上的差異,發(fā)現(xiàn)主存儲(chǔ)場景和備份場景中重刪方案存在如下明顯差異,下面我們站在重刪技術(shù)上,來分析下重刪技術(shù)在不同場景的差異。
重刪時(shí)刻的不同
為了避免對生產(chǎn)環(huán)境的性能產(chǎn)生影響,大部分廠商都會(huì)采用后處理的方式進(jìn)行重刪,這和備份場景中的在線重刪方式明顯不同。
分塊方式不同
由于在主存儲(chǔ)場景中,IO通常較小,并且所操作的邏輯塊地址LBA比較離散,不是嚴(yán)格連續(xù)的,所以不適合進(jìn)行變長分塊。變長分塊在這種較大數(shù)據(jù)量、連續(xù)的數(shù)據(jù)時(shí)可以發(fā)揮較好的分塊效果,能將兩次備份之間不同數(shù)據(jù)產(chǎn)生的影響降到最低,但這種效果的前提是可以用來切分的數(shù)據(jù)較多,并且需要較多的計(jì)算資源。
在主存儲(chǔ)場景中,IO比較小,并且比較離散,如果為了實(shí)現(xiàn)變長重刪,就需要將這些離散IO周圍的數(shù)據(jù)補(bǔ)齊,如果這些待補(bǔ)齊的地址上沒有被寫過數(shù)據(jù),則可以直接補(bǔ)0;如果是寫過數(shù)據(jù),則需要把這些數(shù)據(jù)讀上來,補(bǔ)充完整之后再執(zhí)行變長分塊。同時(shí),這些操作都要發(fā)生在寫的IO流程中,將顯著增加系統(tǒng)的讀寫壓力。此外,由于主存儲(chǔ)中,IO的覆蓋寫比例較高,如果都采用這樣的方式,每次覆蓋寫都需要經(jīng)歷這些復(fù)雜的流程,同時(shí)還涉及到對原來已經(jīng)寫入的系統(tǒng)元數(shù)據(jù)的修改(如LUN的元數(shù)據(jù)),這些操作在主存儲(chǔ)設(shè)備中,代價(jià)都是很大的,自然對系統(tǒng)性能影響可能也會(huì)比較明顯。
查重方式不同
在備份設(shè)備中,因?yàn)閿?shù)據(jù)具有較強(qiáng)的局部性,一般會(huì)采用抽樣的方式,用少量甚至一個(gè)分塊的指紋代表一個(gè)大塊,通常這些大塊都是MB規(guī)模。但在主存儲(chǔ)場景中,IO的連續(xù)性不是很強(qiáng),通常不會(huì)采用抽樣,或者采用很少塊組織起來進(jìn)行抽樣的方式。
主存儲(chǔ)重刪實(shí)現(xiàn)方式
EMC的VNX/VNX2以及Netapp的FAS系列都支持重刪(后處理的定長)功能,這里以Netapp的FAS系列中的重刪壓縮為例進(jìn)行簡單的介紹。
- 數(shù)據(jù)按照4KB進(jìn)行實(shí)時(shí)分塊并計(jì)算指紋,并將指紋保存到更改日志文件中,數(shù)據(jù)同時(shí)寫入磁盤中。如果用戶配置了在線壓縮功能,則數(shù)據(jù)在下盤之前將會(huì)被先壓縮。
- 根據(jù)后處理設(shè)置的系統(tǒng)空閑時(shí)間,當(dāng)?shù)竭_(dá)指定的時(shí)刻時(shí),系統(tǒng)啟動(dòng)重刪功能,此時(shí)將對更改日志文件中的指紋進(jìn)行排序,并根據(jù)更改日志文件生成指紋數(shù)據(jù)庫。
- 根據(jù)指紋庫進(jìn)行比對查重。
- 對指紋相同的數(shù)據(jù)塊執(zhí)行逐字節(jié)比對,如果數(shù)據(jù)塊完全相同,則執(zhí)行后續(xù)的操作,否則不做處理。
- 對于重復(fù)的塊依次執(zhí)行如下操作。更改數(shù)據(jù)塊指針、更改數(shù)據(jù)塊引用計(jì)數(shù)、釋放數(shù)據(jù)塊存儲(chǔ)空間,對重復(fù)塊不做任何處理。
Netapp的FAS既可以支持配置成在線壓縮,也可以配置成后處理壓縮,也可以配置成在線壓縮和后處理壓縮同時(shí)開啟。
閃存的重刪和壓縮技術(shù)
在全閃存領(lǐng)域,重刪和壓縮的使用呈現(xiàn)出一片欣欣向榮的景象。重刪從傳統(tǒng)陣列中的一個(gè)可選特性,變成全閃存陣列中的一個(gè)必備和門檻特性。在全閃存陣列中,SSD磁盤中的Flash顆粒有壽命的限制,而重刪特性的加入正好可以減少主機(jī)需要寫入的次數(shù)和數(shù)據(jù)量,以此達(dá)到延長SSD的使用時(shí)間,保護(hù)用戶投入價(jià)值。
既然閃存場景中,重刪變的尤為重要,我們下面以EMC的XtremIO中的重刪為基礎(chǔ),介紹重刪在全閃存陣列中的實(shí)現(xiàn)方法。
- 主機(jī)數(shù)據(jù)在進(jìn)入存儲(chǔ)系統(tǒng)時(shí)將被按照固定大小8KB進(jìn)行分塊,同時(shí)利用強(qiáng)Hash函數(shù)SHA1計(jì)算數(shù)據(jù)塊的指紋。
- 指紋按照對應(yīng)的規(guī)則打散,在查重時(shí),按照相同的規(guī)則,將指紋發(fā)送到對應(yīng)的節(jié)點(diǎn)上進(jìn)行查重,如果為新塊,則將該新塊發(fā)送到對應(yīng)的節(jié)點(diǎn)上,操作成功之后返回主機(jī)寫成功;如果是重復(fù)塊,則增加引用計(jì)數(shù)。
- 目標(biāo)節(jié)點(diǎn)接收到數(shù)據(jù)之后寫入Cache中并進(jìn)行壓縮,當(dāng)Cache中緩存的數(shù)據(jù)達(dá)到刷盤水位要求時(shí),將數(shù)據(jù)按照指紋的分布規(guī)則寫入對應(yīng)的存儲(chǔ)空間中。
XtremIO重刪技術(shù)有幾個(gè)主要特點(diǎn):
- 主機(jī)數(shù)據(jù)是在寫入Cache之前完成重刪壓縮操作,為先重刪后壓縮。
- 采用強(qiáng)Hash計(jì)算指紋。
- 重刪后的新數(shù)據(jù)按照數(shù)據(jù)的指紋,直接打散到對應(yīng)的存儲(chǔ)空間的單盤上進(jìn)行保存,沒有中間的全局的映射層。
- 不進(jìn)行全局的垃圾回收,依賴單盤自身的垃圾回收功能。
下面將以XtremIO和Purestorage為基礎(chǔ),介紹重刪在全閃存陣列中的幾類重要技術(shù)和常用方法。
在線重刪
在全閃存中一定會(huì)采用在線的方式實(shí)現(xiàn)重刪功能,包括壓縮功能。主要的因?yàn)檫€是SSD盤存在壽命限制。在第一部分介紹重刪基礎(chǔ)時(shí)已經(jīng)說過,如果后處理,數(shù)據(jù)需要先寫到磁盤上,在空閑時(shí)再將數(shù)據(jù)讀上來進(jìn)行重刪,之后再寫入存儲(chǔ)空間中,這樣相比在線處理增加了一次寫操作,也就增加了SSD盤的磨損,縮短了其使用壽命。所以,全閃存陣列中采用在線的方式實(shí)現(xiàn)重刪壓縮,在這一點(diǎn)上,所有的友商都是一致的。
分塊大小
XtremIO在推出的初期,使用的分塊大小為4KB,當(dāng)其下一代產(chǎn)品推出時(shí),XtremIO頂著被人詬病的壓力,采用破壞性升級的方式將分塊大小強(qiáng)行升級為8KB,也反映出Xtremio在分塊大小上的演變過程。同時(shí),Purestoarge也號稱支持512B~32KB的“變長”重刪,但實(shí)質(zhì)上這里的變長重刪并不是備份領(lǐng)域中的字節(jié)級的變長,而是4KB整數(shù)倍的變長。另外,HP在其3PAR中提出使用16KB的分塊。可見,在重刪分塊大小上各個(gè)廠商都有自己的想法。
元數(shù)據(jù)的管理
在XtremIO中,系統(tǒng)采用兩階段元數(shù)據(jù)的方式實(shí)現(xiàn)重刪,第一階段是LBA到指紋的映射關(guān)系;第二階段是指紋到物理塊地址之間的映射關(guān)系。
弱Hash加逐字節(jié)對比
XtremIO的重刪采用了強(qiáng)Hash函數(shù)計(jì)算指紋,查重的過程中只比較指紋而不進(jìn)行逐字節(jié)對比;但在Purestorage的實(shí)現(xiàn)中,它使用了弱Hash并采用了逐字節(jié)對比的方式實(shí)現(xiàn)重刪。
這里簡單解釋一下強(qiáng)Hash和弱Hash的區(qū)別。強(qiáng)弱Hash是一個(gè)相對的概念,強(qiáng)Hash是指發(fā)生Hash沖突的概率非常低(Hash沖突是指數(shù)據(jù)不同但計(jì)算出的Hash值相同),弱Hash是指發(fā)生Hash沖突的概率相對要高一些,但也不是絕對的高。
在Purestorage中,數(shù)據(jù)先經(jīng)過弱Hash進(jìn)行比較,如果弱Hash不同,則數(shù)據(jù)一定不同;弱Hash相同,則需要將對應(yīng)的數(shù)據(jù)讀上來進(jìn)行逐字節(jié)對比,以此來確認(rèn)數(shù)據(jù)是否真的是相同的。除Purestorage之外,HP的3PAR也使用了弱Hash加逐字節(jié)對比的方法實(shí)現(xiàn)重刪。
Scale-out與Scale-up
在全閃存陣列中,XtremIO可以實(shí)現(xiàn)雙控級的Scale-out,并宣稱能達(dá)到線性的性能提升,目前最多支持8個(gè)雙控也就是16控的擴(kuò)展,并實(shí)現(xiàn)全局的重刪。但與XtremIO不同,Purestorage依然在雙控的方向上耕耘,只支持Scale-up。
加速卡或加速芯片
在眾多的全閃存廠商中,目前看到的只有HP 3PAR及Skyera在重刪過程中使用加速功能。HP 3PAR將重刪查找及逐字節(jié)對比的功能放到了ASIC上。
不好意思插錯(cuò)圖了,但換個(gè)角度來說,這么多美女你不可能全部像悠悠美那樣掌握在手中(選出屬于你的那個(gè)就夠了),按照婚姻法(特指我國),充其量僅且只有一個(gè)你可以天天捧在手中(也可能一個(gè)都沒有)。這與重刪技術(shù)的單實(shí)例思想是驚人一致的。法律之外情況如何,那就應(yīng)另當(dāng)別論(大家理解的可能比我透徹,再此不做解釋),言歸正傳。
以前,在存儲(chǔ)系統(tǒng)中存放了很多重復(fù)數(shù)據(jù),以至占用了大量硬盤空間。現(xiàn)在,利用重復(fù)數(shù)據(jù)刪除只需要存儲(chǔ)一份數(shù)據(jù)(文件或塊)。而數(shù)據(jù)壓縮技術(shù)在比較小的范圍內(nèi),以幾個(gè)比特到幾個(gè)字節(jié)查找并消除重復(fù)數(shù)據(jù),而重復(fù)數(shù)據(jù)刪除是在比較大的范圍內(nèi)查找重復(fù)數(shù)據(jù)。通過這篇文章,你可以大膽地告訴媽媽,她老人家可以不用再擔(dān)心我們的磁盤空間不夠用了。