洞見 - 雲端運算 - # 數據去重、碎片化、重複編碼、編碼去重
透過部分重複和編碼減少數據去重系統中的數據碎片化
核心概念
本文提出了一種基於圖論和編碼理論的方法,透過有限的重複和編碼來減少數據去重系統中的數據碎片化,並探討了存儲冗餘與文件碎片化之間的權衡。
Reducing Data Fragmentation in Data Deduplication Systems via Partial Repetition and Coding
數據去重是現代大數據存儲設備的一項關鍵功能,它指的是移除不同用戶存儲的重複數據塊的過程。儘管數據去重非常重要,但該方法的一些缺點,例如存儲穩健性和文件碎片化,此前尚未從理論角度進行過分析。存儲穩健性是指確保可以使用去重後的數據重建原始文件,而不會出現服務中斷和數據丟失。碎片化是指將不同用戶文件的去重數據塊按保留鄰近性的線性順序放置的問題,因為同一文件的相鄰數據塊可能會存儲在服務器上相距很遠的扇區中。
本文提出了一種新的數據碎片化理論模型,並介紹了透過有限重複(重複編碼)和編碼去重(例如線性編碼)來減少碎片化的基於圖論和編碼理論的新方法。除了緩解碎片化問題之外,有限重複和編碼去重還可以起到增加系統設計穩健性的雙重作用。
我們的工作貢獻有三方面。首先,我們以自迴避(簡單)路徑的形式描述了一種新的文件結構模型,這些路徑位於專門的圖中。其次,我們引入了一些新的指標來衡量基於圖結構文件的去重系統中的碎片化程度,包括衡量文件在去重並放置到服務器上時相鄰數據塊最壞情況下“擴展”程度的擴展指標;以及衡量在文件重建過程中必須更改服務器上的讀取位置的次數的最壞情況下的跳轉指標。對於擴展指標,我們建立了碎片化程度與文件圖帶寬之間的聯繫。具體來說,我們推導了碎片化程度的下限和上限,並描述了重複和編碼可以減少碎片化的問題實例。我們方法背後的關鍵思想是圖摺疊和信息論論證,以及圖算法(例如匹配)。對於跳轉指標,我們提供了一種新算法來計算由樹捕獲的層次數據結構的跳轉次數。第三,我們描述了如何在去重後添加受控重複和編碼冗餘,以確保存儲容量和碎片化程度之間的寶貴權衡。
數據去重是一種數據管理技術,用於現代大規模數據存儲系統中,透過移除不同用戶的內容副本來提高存儲效率 [1]-[4]。例如,像微軟和 Dropbox 這樣的雲存儲提供商,以及像 NetApp 這樣的智能數據基礎設施公司,都在其存儲系統中積極支持去重方案。
典型的去重算法首先將輸入文件拆分為更小的數據子單元,稱為“數據塊” [5]-[7],然後移除重複的數據塊,並將數據塊放置到服務器上。對於重複數據塊識別,通常使用哈希值 [5]-[7]。數據塊放置基於某種預先確定的協議或新數據塊的到達順序。去重後,每個文件都以“壓縮”形式存儲,其中包含一組解釋如何組裝文件的指針(例如,一組指向數據塊實際位置的哈希值,以及指示其順序的標籤)。在文件恢復階段,服務器使用壓縮描述,透過檢索由指針引導的數據塊來重新創建文件。在各種分塊策略下,數據塊大小與組裝指令長度之間的權衡是一個重要的實際系統壓縮特性,在 [5] 中有所論述。由於組裝指令數據的容量通常與實際用戶數據相比可以忽略不計,因此這種考慮與去重的協議級分析無關。
儘管去重算法可以顯著節省存儲空間,但它們也引入了一些讀取問題,包括數據碎片化 [8] 和數據不穩定性 [9]、[10]。數據碎片化的產生是由於將單個文件的信息塊存儲在多個可能相距很遠的位置,這會減慢數據檢索速度,並可能導致訪問大量次要的、不需要的插入數據時出現問題。另一方面,去重不穩定性是指當只保留每個數據塊的一個副本時,文件系統容易出現數據丟失(即缺乏穩健性)。在實踐中,透過使用緩存和專門的數據塊放置 [11],以及“不完全去重”協議(其中並非所有冗餘數據塊都被移除,而只是根據其流行程度移除一部分 [1]、[2]),這些問題得到了一定程度的緩解。
儘管去重得到了廣泛應用,並且該方法有許多實際實現,但對於此類系統在數據碎片化方面的理論性能極限,人們知之甚少。先前的工作 [4] 對去重對分佈式存儲代碼的影響進行了數學分析,而 [5] 則開始了對去重作為一種壓縮形式的信息論研究。其他一些工作 [6]、[7] 則側重於檢查錯誤對分塊和去重的影響。這些貢獻都沒有考慮碎片化問題,也沒有考慮與部分去重和文件檢索穩健性相關的問題。
在這裡,我們開始對存儲冗餘與文件碎片化之間的權衡進行首次分析。支持我們分析的關鍵特性是:a) 一種新的文件模型,這些文件以自迴避(簡單)路徑/遊走的形式共享數據塊,我們稱之為數據塊圖或文件圖。具體來說,我們將數據建模為由稀疏哈密頓路徑圖生成,其中節點表示數據塊,連接路徑上的節點對應於要存儲的文件;或者建模為層次結構,其數據塊組織在一棵樹上。哈密頓路徑要求用於對串聯文件的自然線性排序進行建模,並簡化具有挑戰性的分析。類似地,樹模型用於捕獲無處不在的層次數據中的數據塊組織;b) 幾種用於衡量碎片化程度的新指標,包括檢查分配的相鄰數據塊位置的最大擴展程度的最壞情況指標(即擴展指標)和捕獲讀取頭必須在服務器上移動以檢索文件的次數的最壞情況下的指標(即跳轉指標)。平均情況指標雖然在本工作中已正式定義,但將在其他地方進行檢查。
我們的主要貢獻是對最壞情況碎片化指標的約束,以及用於數據塊放置的算法,這些算法可以產生可證明良好的碎片化結果。最重要的是,我們針對完全去重的文件(其解決方案涉及對排列的優化,即對稱群)、具有數據塊重複的部分去重的文件(重複編碼去重)和編碼去重(其中存儲的數據塊可能表示系統用戶數據塊的線性(或通常是非線性)組合)檢查了去重系統的這些關鍵特性。
概述的分析涉及信息論論證,但也強烈依賴於圖論中與圖帶寬和相關概念有關的結果 [12],以及圖中的匹配。在前一種情況下,我們引入了圖摺疊,它允許人們將問題的域從圖轉移到函數。在這種情況下使用的其他思想包括圖分解和不同數據塊排列的串聯,以及在圖帶寬分析 [13] 的相關問題背景下已經建立的結果。我們還描述了一些與去重系統有關的示例,在這些示例中,允許保留同一數據塊的多個副本或使用編碼數據塊。在這些設置中,先驗地很明顯,冗餘數據塊有助於減少碎片化,因為串聯所有文件(例如,不執行去重)不會導致碎片化。目前完全未知的是,將碎片化減少到實際可接受的程度需要多少冗餘。此外,重複和/或編碼數據塊雖然會增加系統的穩健性,這是可取的,但會增加系統的存儲開銷。
與我們的新研究最接近的工作是確定了有冗餘和無冗餘信息檢索的最終性能極限的工作 [14]。在那裡,問題是在概率環境中提出的,不包括去重或碎片化模型。此外,信息被建模為透過遍歷一條長度無限增加的路徑而從馬爾可夫網格或環面產生。這項工作的主要目標是探索一維檢索與二維檢索方法的平均步行長度的擴展。這項工作還包括對編碼方法的分析,這些方法可以幫助減少降低數據空間維度所帶來的差距。第七節對這項工作進行了更詳細的描述,這項工作本身就很有趣。
本文的結構如下。第二節回顧了去重方法,並介紹了我們的分析所需的術語以及後續的問題表述。第三節根據文件和數據塊存儲模型的描述以及用於衡量碎片化程度的指標,描述了問題表述。第五節討論了在擴展指標下,未編碼、重複編碼和線性編碼數據塊存儲的碎片化約束和限制的相關結果。本節還介紹了我們的圖摺疊方法和基於該方法的相關約束。第六節介紹了跳轉碎片化指標的類似結果。第八節討論了一些未解決的問題。
深入探究
在實際應用中,如何根據不同的文件類型和訪問模式選擇合適的去重策略和碎片化指標?
在实际应用中,选择合适的去重策略和碎片化指标需要综合考虑文件类型、访问模式以及系统性能需求等多方面因素。以下是一些建议:
1. 文件类型:
对于文本文件、代码文件等结构化数据, 通常具有较高的重复率,适合采用固定大小分块的去重策略,例如固定长度分块(Fixed-Size Chunking)或基于内容定义分块(Content Defined Chunking)。
对于图像、音频、视频等非结构化数据, 重复数据块的边界可能不固定,适合采用可变大小分块的去重策略,例如基于滑动窗口的分块(Sliding Window Chunking)或基于 Rabin Fingerprints 的分块。
2. 访问模式:
对于频繁读取的文件, 应优先考虑降低读取延迟,可以选择最小化碎片数量的指标,例如跳跃度量(Jump Metric),并采用重复编码或编码去重等技术来减少碎片。
对于不常读取的文件, 可以容忍一定的读取延迟,可以选择最小化读取长度的指标,例如拉伸度量(Stretch Metric),并采用基本去重策略来节省存储空间。
对于需要随机访问的文件, 例如数据库文件,需要尽量避免数据碎片化,可以选择最小化最大碎片长度的指标,并采用基于索引的去重策略。
3. 系统性能需求:
对于存储空间有限的系统, 应优先考虑节省存储空间,可以选择基本去重策略,并根据实际情况选择合适的分块大小。
对于对性能要求较高的系统, 可以考虑采用重复编码、编码去重等技术来减少碎片,但需要权衡存储空间的开销。
总而言之, 选择合适的去重策略和碎片化指标需要在存储效率、读取性能和系统复杂度之间进行权衡。
如果考慮數據的安全性需求,例如數據加密和訪問控制,如何設計安全且高效的去重系統?
在设计安全且高效的去重系统时,需要将数据加密和访问控制等安全需求纳入考虑,以下是一些设计思路:
1. 数据加密:
客户端加密: 在数据上传到服务器之前,先在客户端进行加密,确保只有拥有密钥的用户才能解密和访问数据。这种方式可以有效防止未授权访问,但需要解决密钥管理和分发的问题。
服务器端加密: 数据在上传到服务器后进行加密,服务器存储和管理加密后的数据块。这种方式可以减轻客户端的负担,但需要确保服务器的安全性,防止数据泄露。
混合加密: 结合客户端加密和服务器端加密的优势,例如使用客户端加密保护数据内容,使用服务器端加密保护数据块的索引和元数据。
2. 访问控制:
基于身份的访问控制(IBAC): 根据用户的身份信息(例如用户名、角色等)来控制用户对数据块的访问权限。
基于属性的访问控制(ABAC): 根据用户的属性信息(例如部门、职位等)以及数据块的属性信息(例如创建时间、文件类型等)来控制用户对数据块的访问权限。
基于策略的访问控制(PBAC): 定义访问控制策略,根据预先设定的规则来控制用户对数据块的访问权限。
3. 安全高效的去重:
安全哈希算法: 采用抗碰撞性强的哈希算法,例如SHA-256或SHA-3,生成数据块的指纹,确保即使微小的数据修改也会导致指纹发生显著变化,防止恶意篡改。
加密去重: 在加密数据的基础上进行去重,例如使用 Convergent Encryption 技术,根据数据内容生成相同的加密密钥,使得相同的数据块即使加密后仍然可以被识别和去重。
安全多方计算(MPC): 在多个服务器之间进行分布式去重,每个服务器只拥有部分数据信息,防止单点数据泄露。
4. 其他安全措施:
数据完整性校验: 采用数据校验码(例如MD5、SHA-1等)或数字签名技术,确保数据块在存储和传输过程中不被篡改。
安全审计日志: 记录用户的访问操作和系统运行状态,以便于事后审计和追溯。
总而言之, 设计安全高效的去重系统需要综合考虑数据加密、访问控制、安全去重以及其他安全措施,在保障数据安全的同时,尽量减少性能损失。
除了重複編碼和線性編碼,還有哪些其他編碼技術可以用於數據去重,它們各自的優缺點是什麼?
除了重复编码和线性编码,还有其他一些编码技术可以用于数据去重,它们各自具有不同的优缺点:
编码技术
描述
优点
缺点
重复编码 (Repetition Coding)
存储多个相同数据块的副本。
实现简单,读取效率高,容错性好。
存储开销大,不适合重复率较低的数据。
线性编码 (Linear Coding)
存储数据块的线性组合,例如 XOR 编码。
存储效率比重复编码高,解码复杂度较低。
容错性不如重复编码,需要额外的计算开销。
纠删码 (Erasure Coding)
将数据块分成多个片段,并生成冗余校验片段,可以恢复丢失的数据块。
存储效率高,容错性好。
编码和解码复杂度较高,不适合频繁修改的数据。
喷泉码 (Fountain Coding)
生成无限长度的编码数据流,接收端可以从数据流中恢复原始数据块,即使部分数据丢失。
灵活度高,适用于网络传输环境。
编码和解码复杂度较高,需要额外的计算开销。
网络编码 (Network Coding)
在网络节点上对数据块进行编码和转发,可以提高网络吞吐量和可靠性。
适用于分布式存储系统,可以提高数据可用性。
编码和解码复杂度较高,需要网络节点的支持。
选择合适的编码技术需要根据具体的应用场景和需求进行权衡,例如:
对于存储空间有限且对数据可靠性要求较高的场景,可以选择纠删码或喷泉码。
对于需要频繁修改数据的场景,可以选择重复编码或线性编码。
对于分布式存储系统,可以考虑采用网络编码来提高数据可用性和系统性能。