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