官术网_书友最值得收藏!

1.2 Linux開源存儲系統方案介紹

本節我們將介紹存儲技術的原理和實現,以及Linux開源存儲的解決方案,包括Linux系統單節點的存儲技術和方案(包括本地文件系統)、分布式存儲系統解決方案、軟件定義的存儲管理軟件等。

1.2.1 Linux單節點存儲方案

首先介紹Linux單節點存儲方案,包括本地的文件系統,以及通過各種網絡,比如以太網、光纖通道(Fibre Channel,FC)能夠導出的服務。

1.Linux本地文件系統

在Linux操作系統中,對于應用程序來講,所有設備都是以“文件”的形式使用的。例如,對于網絡程序,打開一個socket,其實返回的是一個文件描述符。如果不關注網絡,只從一個應用程序的角度來看文件系統,則Linux內核文件系統實現如圖1-2所示。

圖1-2 Linux內核文件系統實現

· 應用程序通過系統調用訪問文件(無論是塊設備文件,還是各種文件系統中的文件)。可以通過open系統調用,也可以通過memory map的方式調用來打開文件。

· Linux內核收到系統調用的軟中斷,通過參數檢查后,會調用虛擬文件系統(Virtual File System,VFS),虛擬文件系統會根據信息把相應的處理交給具體的文件系統,如ext2/3/4等文件系統,接著相應的文件I/O命令會轉化成bio命令進入通用的塊設備層,把針對文件的基于offset的讀/寫轉化成基于邏輯區塊地址(Logical Block Address,LBA)的讀/寫,并最終翻譯成每個設備對應的可識別的地址,通過Linux的設備驅動對物理設備,如硬盤驅動器(Harddisk Drive,HDD)或固態硬盤進行相關的讀/寫。

· 用戶態文件系統的管理。Linux文件系統的實現都是在內核進行的,但是用戶態也有一些管理機制可以對塊設備文件進行相應的管理。例如,使用parted命令進行分區管理,使用mkfs工具進行文件系統的管理,使用邏輯卷管理器(Logical Volume Manager,LVM)命令把一個或多個磁盤的分區進行邏輯上的集合,然后對磁盤上的空間進行動態管理。

簡言之,對于Linux操作系統中基于內核文件系統的支持,其實可以分為兩大塊:一是內核中虛擬文件系統、具體文件系統、內核通用塊設備及各個I/O子系統的支持;二是Linux用戶態與文件系統相關的管理系統,以及應用程序可以用的系統調用或庫文件(Glibc)的支持。

當然在用戶態也有一些用戶態文件系統的實現,但是一般這樣的系統性能不是太高,因為文件系統最終是建立在實際的物理存儲設備上的,且這些物理設備的驅動是在內核態實現的。那么即使文件系統放在用戶態,I/O的讀和寫也還是需要放到內核態去完成的。除非相應的設備驅動也被放到用戶態,形成一套完整的用戶態I/O棧的解決方案,就可以降低I/O棧的深度,另外采用一些無鎖化的并行機制,就可以提高I/O的性能。例如,由英特爾開源的SPDK(Storage Performance Development Kit)軟件庫,就可以利用用戶態的NVMe SSD(Non-Volatile Memory express)驅動,從而加速那些使用NVMe SSD的應用,如iSCSI Target或NVMe-oF Target等。

2.Linux遠程存儲服務

除了本地文件系統,Linux發行版本還自帶工具,用于提供基于以太網、光纖通道的遠程存儲服務,包括塊設備服務、文件系統服務,甚至是基于對象接口的服務。當然也有一些提供其他存儲服務的開源軟件。

1)塊設備服務

Linux常用的塊設備服務主要基于iSCSI(Internet Small Computer System Interface)和NVMe over Fabrics。

iSCSI協議是SCSI(Small Computer System Interface)協議在以太網上的擴展,一臺機器通過iSCSI協議即可通過傳輸控制協議/網際協議(Transmission Control Protocol / Internet Protocol,TCP/IP)為其他客戶提供共享的存儲設備。通過iSCSI協議被訪問的設備稱為Target,而訪問Target的客戶(Client)端稱為Initiator。目前Linux主流的iSCSI Target軟件是基于Kernel的Linux-IO,在用戶態可以使用targetcli工具進行管理。當然還有其他開源的iSCSI Target,如STGT、SCST等。iSCSI常用的iSCSI Initiator工具包括iscsiadm命令和libiscsi、open-iscsi等軟件開發包。

NVMe over Fabrics則是NVMe協議在Fabrics上的延伸,主要的設計目的是讓客戶端能夠更高效地訪問遠端的服務器上的NVMe盤。相對iSCSI協議,NVMe over Fabrics則完全是為高效訪問基于NVMe協議的快速存儲設備設計的,往往和帶有RDMA(Remote Direct Memory Access)功能的以太網卡,或者光纖通道、Infiniband一起工作。

2)文件存儲服務

基于不同的協議,在Linux中可以提供很多文件粒度的服務。例如,基于網絡文件系統(Network File System,NFS)協議的服務,服務器端可以直接加載支持網絡文件系統協議的daemon。網絡文件系統協議最早是由Sun公司在1984年開發的,目前已經發展到了NFSv4。

另外還有基于CIFS(Common Internet File System)的samba服務,使用這個服務可以向Windows客戶端共享文件。這樣Windows客戶端可以把一個網絡地址掛載成本地一塊磁盤。例如,一個地址為192.168.1.8的Linux服務器導出一個名為XYZ的目錄,實際指向/home/XYZ,那么客戶端就可以使用\\192.168.1.8\XYZ,但是需要通過samba服務器的用戶驗證。

此外,Linux還有其他文件服務,如基于文件傳輸協議(File Transfer Protocol, FTP)的服務,這里不再贅述。另外在Linux系統中,如果用戶熟悉SSH(Secure Shell)的一些命令,可以使用scp命令在不同Linux客戶端進行文件的復制,或使用wget命令進行文件的下載。這是普通用戶常用的功能,但需要服務器端的支持,不過這些服務器端程序的實現一般都比較簡單。

1.2.2 存儲服務的分類

按照接口,存儲服務可以分為3類:塊存儲服務、文件存儲服務,以及對象存儲服務。

1)塊存儲服務

對于塊存儲服務來說,操作的對象是一塊“裸盤”,訪問的方式是打開這塊“裸盤”,通過邏輯區塊地址對其進行讀/寫操作。對Linux本機訪問來說,可以理解為將一塊“盤”映射給主機使用。例如,可以通過磁盤陣列(Redundant Array of Independent Disks,RAID)等方式劃分出多個邏輯盤,并將這些邏輯盤映射給主機使用。操作系統會識別這些磁盤,也會屏蔽底層物理盤和邏輯盤的劃分細節,將整個磁盤看作一個裸設備來使用。在使用上,磁盤通過分區、格式化掛載之后則可以直接使用。

2)文件存儲服務

文件存儲服務,即提供以文件為基礎、與文件系統相關的服務,如目錄的瀏覽等。在客戶端看到的就是層次結構的目錄,目錄里面有相應的數據,包括下級目錄或文件等。對于Linux而言,基本文件的操作要遵循可移植操作系統接口(Portable Operating System Interface of UNIX,POSIX)文件系統的應用程序編程接口(Application Programming Interface,API)。其中,比較經典的就是Linux單機系統下的文件系統。如果是共享文件服務,則有一系列的協議,如網絡文件系統等。

3)對象存儲服務

相比塊存儲和文件存儲,對象存儲更簡潔。對象存儲采用扁平化的形式管理數據,沒有目錄的層次結構,并且對象的操作主要以put、get、delete為主。所以在對象存儲中,不支持類似read、write的隨機讀/寫操作,一個文件“put”到對象存儲之后,在讀取時只能“get”整個文件,如果要修改,必須重新“put”一個新的對象到對象存儲里。

此外,在對象存儲中,元數據(Metadata)會被獨立出來作為元數據服務器,主要負責存儲對象的屬性,其他則是負責存儲數據的分布式服務器,一般稱為OSD(Object Storage Device)。用戶訪問數據時,通常會通過客戶端發送請求到元數據服務器,元數據服務器負責反饋對象存儲所在的服務器ID,用戶通過ID直接訪問對應的OSD,并存取數據。

因為在對象存儲中沒有目錄的概念,所以文件存儲與對象存儲的本質區別就是有無層次結構。通常文件包含了元數據及內容構成,元數據用來存儲該文件的除內容之外的屬性數據,如文件的大小、存儲位置索引等。例如,在常規的文件系統中,數據內容按照塊大小會被分散到磁盤中,元數據中記錄了各個數據內容的索引位置,在訪問文件數據時,需要不斷查找元數據來定位到每一個數據頁,所以其讀/寫性能相對較低。

總的來說,對象存儲是為了克服塊存儲與文件存儲的缺點,并發揮它們各自的優點而出現的。塊存儲的優點是讀/寫速度快,缺點是不太適合共享;文件存儲的優點是利于共享,缺點是讀/寫速度慢。所以結合它們各自的優點出現了對象存儲,對象存儲不僅讀/寫速度快,而且適用于分布式系統中,利于共享。

1.2.3 數據壓縮

隨著計算能力的不斷提升,當代社會正在產生越來越巨量的數據,數據壓縮也被應用在生活的方方面面,如在網上打開的圖片、視頻、音頻等都是經過壓縮的。

壓縮可以分為無損壓縮和有損壓縮。無損壓縮可以通過壓縮文件完全恢復原始文件;而有損壓縮則會丟失一部分信息。對于文本、可執行程序的壓縮是無損壓縮的典型應用場景,因為任何一點信息的缺失都是不被允許的。有損壓縮在圖片、音頻、視頻方面被廣泛應用,因為人們對于損失的部分信息并不敏感。有損并不意味著信息是被隨機丟棄的,而是選擇丟棄對恢復影響最小的部分。有損壓縮既提高了效率,又保證了接受度。

這里主要討論無損壓縮。壓縮的意義在于,使壓縮文件在存儲時占用的體積更小,傳輸時使用的帶寬(Bandwidth)更少,傳輸速度更快。

1.數據壓縮基礎

壓縮的本質是用更小的數據量表示更多的數據。無損壓縮通常通過對數據中的冗余信息的處理來減小數據體積,因此是可逆的。無損壓縮可實現的基礎是真實世界的數據存在大量冗余,而通過對數據進行編碼,就能盡量減少這種冗余。在香農提出的信息論中,他借用物理中度量無序性和混亂度的熵(Entropy)來表示系統中各個狀態概率分布的程度,即系統不確定性的量度。分布越隨機,概率越平均,熵越大。用公式表示為

其中,PA)表示A信號發生的概率。通過該公式也可以看出概率分布越平均,熵就越大。

香農還定義了自信息量:

自信息量代表了信息中含有的比特數,粗略地講就是對S這個信息編碼所需要的比特數。從這個定義中可以看出,更高的概率意味著更小的信息量。信息熵就可以看作是自信息量對概率加權的求和,也就是信息編碼的平均比特數,因此,更大的信息熵就表示需要更多的編碼比特數,也就表示信號的分布更平均。實際上熵可以看作信息編碼的最小編碼率,即壓縮的極限編碼率。接下來,我們會討論兩種應用廣泛的編碼方式。

1)霍夫曼編碼

霍夫曼編碼是由美國計算機科學家大衛·霍夫曼(David Albert Huffman)于1952年攻讀博士期間發明的,是一種用于無損數據壓縮的熵編碼。熵編碼,是指對出現的每個不同符號,創建分配一個唯一的前綴碼。前綴碼是一種可變長度碼,并且每個碼字都具有前置性,即每個碼字都不會被其他碼字作為前置部分。

霍夫曼編碼的原理是,為出現頻率更高的字符分配更短的編碼。通過這種方式,可以減少平均自信息量,使編碼長度趨于信息熵。目前廣泛使用的壓縮算法(Compression Algorithm)都是使用霍夫曼編碼作為編碼方式的,如文件壓縮格式gzip、PKZIP,以及圖片壓縮格式PNG、JPEG等。

2)算術編碼

算術編碼是一種應用在無損數據壓縮領域的熵編碼。和其他熵編碼不同的是,算術編碼可以把整條信息編碼成一個一定精度的小數q(0.0≤q<1.0),如霍夫曼編碼為一條信息中每個字符至少分配一個符號。

算術編碼的基本原理是根據信源發射不同符號的概率,對區間[0,1]進行劃分,區間寬度代表各符號出現的概率。通過下邊的例子,可以有更清楚的理解。假設某個信源發射信號a1a2a3的概率分別為Pa1)=0.7、Pa2)=0.1、Pa3)=0.2,這個信源發送的信息是a1a2a3,使用算術編碼的編碼過程如圖1-3所示。那么a1a2a3這個信息就可以用[0.5460, 0.5600]這個區間中的任何一個數字來表示。

圖1-3 使用算數編碼的編碼過程

算術編碼是到目前為止編碼效率最高的一種統計熵編碼方式,比著名的霍夫曼編碼效率高10%左右。但由于其編碼的復雜性、實現技術的限制及專利權的限制,并不像霍夫曼編碼那樣應用廣泛。算術編碼有兩點優于霍夫曼編碼:①符號更緊湊;②編碼和符號的統計模型是分離的,可以和任何一種概率模型協同工作。

算術編碼是一種高效清除字符串中冗余信息的算法,可以按分數比特位逼近信源熵,突破了霍夫曼編碼只能按整數比特位逼近信源熵的限制。但是算術編碼的實現有一個缺陷就是很難在具有固定精度的計算機上完成無限精度的浮點運算。對于有限精度的計算機系統,最終區間會收斂到一個點,無法再細分。因此,需要解決無限序列和有限精度之間的矛盾,通過對區間進行動態調整來保證區間不會收斂到一個點,同時這種調整又不能使編碼和解碼引入歧義。因此,帶有區間調整算法的算術編碼和基于整數的算術編碼就被提了出來,這兩種編碼都是通過對縮減后的區間進行重新映射。非對稱數字系統(Asymmetric Numeral System,ANS)就使用了這種思想,并且在Facebook的Zstandard壓縮庫中已經做了代碼實現。

2.Linux下開源數據壓縮軟件

目前,越來越多優秀的開源數據壓縮軟件出現在大眾的視野中,這些開源數據壓縮軟件不僅免費,還提供了多種數據壓縮算法,并且支持多種存儲格式,因此被越來越多的用戶接受。下面介紹常見的開源數據壓縮軟件。

1)FreeArc

FreeArc是一個開源的數據壓縮軟件,集成了多種數據壓縮算法(如gzip、Multimedia、TrueAudio、Tornado、LZMA(Lempel-Ziv-Markov chain-Algorithm)、PPMD)和過濾器(如BCJ、DICT、DELTA、REP、LZP)。另外,FreeArc會根據文件類型自動選擇最優的數據壓縮算法,并支持數據恢復及算法加密(如AES +Twofish + Serpent)。FreeArc是目前壓縮效率較高的數據壓縮軟件之一。

2)7-Zip

7-Zip是一款開源數據壓縮軟件,其特點是使用了LZMA與LZMA2算法的7z格式,具有非常高的壓縮比。另外,7-Zip為7z與ZIP提供了更加完善的AES-256加密算法。7-Zip支持多種壓縮/解壓縮格式,如7z、gzip、ZIP、bzip2、XZ、TAR、WIN等。同時,7-Zip也支持其他格式文件的壓縮/解壓縮,如ARJ、CAB、CHM、cpio、Cramfs、DEB、DMG、FAT、HFS、ISO、LZH、LZMA、MBR、MSI、NSIS、NTFS、RAR、RPM、SquashFS、UDF、VHD、WIM、XAR、Z。對于ZIP及gzip格式的文件,7-Zip能夠提供的壓縮比比使用PKZIP和WinZip高2%~10%。

3)Snappy

Snappy是由Google開源的壓縮/解壓縮軟件,具有快速、穩定的特點,一直被用于Google的產品當中。它的目標不是最大限度地兼容其他壓縮格式,而是提供高速的壓縮速度和合理的壓縮比。例如,Snappy在64位的i7處理器上,可達約250MB/sec的壓縮速度、500MB/sec的解壓縮速度。相對于zlib,Snappy能夠提供更快的壓縮速度,但同時壓縮后的文件大小相對來說會增大20%~100%。

1.2.4 重復數據刪除

重復數據刪除(DEDUPE)在存儲備份系統中有很重要的應用,有利于更高效地利用存儲空間。重復數據刪除在維基百科上的定義為“一種可粗粒度去除冗余數據的特殊數據壓縮技術”,開宗明義地解釋了重復數據刪除和數據壓縮之間的聯系。

通俗地講,數據壓縮一般通過字符串或比特級的操作來去除冗余數據,然而重復數據刪除判斷數據冗余的粒度較大,一般是文件級別或塊級別的匹配,其目標是達到性能和去重復比例的平衡。

為何需要進行重復數據刪除呢?數據的快速增長是對數據中心最大的挑戰,爆炸式的數據增長會消耗巨大的存儲空間,這會迫使數據提供商去購買更多的存儲,然而即使這樣卻未必能趕上數據的增長速度。這樣的現實迫使我們去考慮一些問題:產生的數據是不是都被生產系統循環使用?如果不是,是不是可以把這些數據放到廉價的存儲系統中?怎么讓數據備份消耗的存儲更低?怎么讓備份的時間更短?數據備份后,可以保存的時間有多久(物理介質原因)?備份后的數據能不能正常取出?

在實際情況中,和生產系統連接的備份系統一般每隔一段時間就會對生產系統做一次主備份,即備份生產系統中的所有內容。在兩次主備份之間有很多增量式備份,且生產系統和備份系統的工作時間一般來講是互斥的。當然如果生產系統需要持續運行,那么備份系統則需要在生產系統相對空閑的時間來工作。也就是說,備份系統的工作時間是有限制的,一般這個時間被稱為備份窗口。需要被備份的數據必須在這個時間全部被遷移到備份系統中,這就對備份系統的吞吐率提出了要求。

那么怎么提高備份系統的吞吐率呢?純粹更換硬件是一種方法。例如,10年前,主流的備份系統用的是磁帶,其局限性在于吞吐率不夠而且只支持順序讀/寫。為滿足吞吐率方面的需求,主流的備份系統的后端存儲開始采用磁盤。

用于備份的數據,或者多次備份過來的數據可能是相似的,如果我們不是機械化地去備份這些數據,而是有意識地識別其中冗余的數據,然后對相同的數據只備份一份或少數幾份(出于數據可靠性方面的考慮),那么這種方法不僅減少了備份系統所需要的容量,還減少了備份時對帶寬的使用。舉一個現實的例子,郵件系統中有很多群發郵件,其內容相同,特別是附件。試問郵件備份系統中需要將用戶的相同附件都保存一份嗎?答案顯然是不必要的。郵件系統的例子體現出重復數據刪除的作用,不過郵件系統所用的重復數據刪除比較簡單,主要針對的是相同的文件。

簡言之,文件級別的重復數據刪除有很大的局限性。最淺顯的問題就是:如果文件內容只是略微有些不同,那要怎樣進行數據去重呢?換句話說,文件級別的粒度太大,而粒度太小就變成了常用數據壓縮技術,也不太合適。所以我們需要的是粒度適中的,如大小平均在8KB左右(經驗值)。這樣的重復數據刪除能讓空間(數據去重比率)和時間(備份性能)達到一個最佳的平衡點。

綜上所述,重復數據刪除一般用于備份系統中(或二級存儲)。衡量一個應用重復數據刪除的備份系統是不是優秀,有以下幾個主要特征。

· 數據去重復率。數據去重復率越大越能減少備份系統存儲方面的壓力,同時在二次或多次數據備份的時候,越能減少對網絡帶寬的使用。

· 吞吐率。使用了數據去重技術后,備份時間是否顯著縮短。根據前面所說的,對于很多生產系統來講,備份窗口時間有限。如果數據吞吐率不高,即使再高的數據壓縮比,也很難被采用。

· 數據的可靠性。這是指經過重復數據刪除處理后的數據在進行災難恢復時,數據能否被正常恢復,因為去重后的數據已經不是原來的數據了。這一點往往被外行人忽略,但是一個好的數據備份廠商,一定會重視這個問題。試想如果去重后的數據在某些情況下不能被正常恢復,那又何必應用重復數據刪除做數據備份呢?

· 備份過程的安全性。對于企業內部或私有云,基本上默認在數據備份過程中不會出現安全方面的問題,如數據竊取。但是如果將重復數據刪除技術作為一個由第三方提供的服務,那么安全問題就需要被重視。

1.重復數據刪除的分類

上面簡單地介紹了重復數據刪除技術,這里稍微講一下重復數據刪除的主流分類,以便讀者能夠更好地理解重復數據刪除。

1)分類一

重復數據刪除根據應用的位置,可分為源端重復數據刪除和目標端重復數據刪除兩種,其中源端指備份數據的來源;目標端指備份系統。所謂源端重復數據刪除是指在源端判斷數據重復的工作。例如,用戶在上傳某數據的時候,可以操作以下步驟。

(1)使用單向函數(某些哈希算法)生成需要上傳的數據的指紋(Fingerprint);

(2)把指紋發送到備份系統,等待確認;

(3)位于目標端的備份系統,判斷是否存在相似的數據,給源端返回數據是否存在的信息;

(4)源端接收信息后,決定是否上傳數據。

源端重復數據刪除的好處顯而易見,如果數據已經被備份過了,則不需要將數據再傳送給備份系統。當然源端數據去重復,性能未必一定高,在確認數據交換的時候,需要傳送大量的指紋(每塊數據都會保留一個“指紋”,為了保證指紋的唯一性可以使用比較好的哈希算法),這是一筆不小的開銷。

此外,如果源端是不可信的,則可能將引起某些安全問題。試想以下應用場景:假設一個備份系統中存有很多用戶的工資信息,每個用戶都有一個工資單,且工資單的模板都是一樣的,那么某些用戶就可以去探測其他人的工資信息,假設工資單中含有的信息是用戶姓名、工號、工資,如果用戶A知道用戶B的姓名、工號,想要猜測對方的工資,只要在源端生成相關文件,然后上傳給備份系統,一旦發現生成的文件沒有被上傳,即可確定B的工資。雖然這種攻擊是非常耗時的,但是在理論上完全存在這種可能性。

和源端重復數據刪除相對應的是目標端重復數據刪除,在這種情況下,源端只要把數據上傳給位于目標端的備份系統即可,源端甚至感受不到重復數據刪除技術的存在。所有的數據都會通過網絡或其他傳輸機制交給備份系統,備份系統對接收的數據統一地應用重復數據刪除技術。相比源端重復數據刪除,目標端重復數據刪除雖然對傳輸數據的網絡帶寬占據較大,但是也有很多好處:客戶端完全透明,去除了安全方面的隱患,也不用對客戶端做維護工作,如版本升級;去重復數據都在目標端,使得管理集中,可進行全局的去重復,可稱為一個相對獨立的系統。

2)分類二

根據數據在備份系統中進行重復數據刪除的時間發生點,分為離線(Post-process)重復數據刪除和在線(Inline)重復數據刪除兩種。

離線重復數據刪除,是指在用戶數據上傳的過程中,數據去重復并不會發生,直接寫到存儲設備上;當用戶數據上傳完全結束后,再進行相關的數據去重復工作。這樣的方式可以理解成那些有很多胃的食草動物(如牛),先把食物吃到胃中,然后在某個時間點再進行反芻,以完全消化食物。有反芻能力的食草動物一般有多個胃,對應到備份系統中,就是至少需要兩個存儲設備。試想如下的場景:用戶的備份數據是1PB,備份系統需要的存儲至少要大于1PB。其中第一個存儲設備大小為1PB,用于存儲用戶上傳的數據,另外一個存儲設備大小為X(X為應用重復數據刪除后的數據大小,為0~1PB)。這樣的去重復手段,相信讀者一定會看出其中的問題,即為了確保重復數據刪除能正常進行,最差的情況下會有100%的額外存儲資源消耗。

為了解決這個問題,在線重復數據刪除技術應運而生。所謂在線重復數據刪除,就是在用戶數據通過網絡上傳到備份系統的時候,數據去重復就會發生。用戶的數據會被重復數據刪除子系統分成不同的部分,每個部分視為一個塊(Chunk)或切片,每個數據切片會被計算一個相應的指紋,然后通過指紋去查找相關數據切片是否存在,一旦存在,這個數據切片就不會被寫入真實的存儲設備中。但這一過程對CPU和內存的消耗是非常高的。

雖然存儲某個數據需要先查找數據切片是否存在,但是如果能找到這個數據切片,則避免了大量外部存儲寫操作,以及過多的存儲(磁盤I/O)的操作時間,反而提高了備份的速度。另外,多次備份的內容存在很大的相似性,這帶來的好處是非常可觀的,因此,在線重復數據刪除同時“壓榨”CPU、內存、網絡、存儲I/O等模塊,使得整個系統的資源能被更好地利用,與離線重復數據刪除相比是一個不小的進步。

當然重復數據刪除還有很多其他分類,如根據目標端的備份系統可分為單機重復數據刪除或分布式重復數據刪除,不再一一贅述。

2.深入理解重復數據刪除

這里將深入地討論重復數據刪除,以幫助讀者了解重復數據刪除是怎么應用到備份系統中,并使得備份吞吐率、去重復比率、數據的完整和安全性都能得到滿足的。

1)數據切片算法

開始的時候,我們就談到重復數據刪除只是一種數據切片級別的特殊數據壓縮技術。一般來講,數據被切成數據切片有兩種分類:定長(Fixed Size)和變長(Variable Size)。

定長就是把一個接收到的數據流或文件按照相同的大小切片,每個數據切片都有一個獨立的指紋。從實現角度來講,定長文件的切片實現和管理比較簡單,但是數據的去重復比率比較低。這個也是容易理解的,因為每個數據切片在文件中都有固定的偏移。在最壞的情況下,如果一個文件在文件開始處增加或減少一個字符,將導致所有數據切片的指紋發生變化。最差的結果是備份兩個僅差一個字符的文件,導致重復數據刪除率等于零。這顯然是不可接受的。

為此變長技術應運而生,變長不是簡單地根據數據偏移來劃分數據切片的,而是根據“Anchor”(某個標記)來劃分數據切片的。因為尋找的是特殊的標記,而不是數據的偏移,所以能完美地解決定長數據切片中由于數據偏移略有變化而導致的低數據去重復比率。

那么變長技術中的“Anchor”究竟是怎么確定的呢?一般使用基于內容的分片(Content Defined Chunking,CDC)算法使用滑動窗口技術(Sliding Window Algorithm)來確定數據切片的大小。窗口的大小一般是12~48字節,根據經驗值,數據切片大小為8KB時對數據去重復是比較有效的。常用的數據切片算法是利用RabinHash算法計算滑動窗口的指紋進行切片。如果獲得的指紋滿足預先設定的條件,則這個窗口的位置是一個切分點,兩個切分點之間的數據被認為是一個切片。RabinHash算法有很多開源實現,比較早的應用在MITPdos研究組的Pastwatch項目中有相應的源碼下載。

當然RabinHash算法也有局限性,在理想情況下,使用RabinHash算法產生的切片大小(按照數學期望)是比較均勻的,但是實際情況往往不是這樣的。可能會出現以下的問題:①出現很多小切片,這將導致管理數據切片的代價變大(一般使用樹狀索引);②數據切片太大,影響數據去重復的效果。

為了解決這兩個問題,研究人員提出了一些改進的方法。例如,在NEC的一篇文章中,作者提出了雙峰算法,其主要思想是進行二次切片。對于大的數據切片可能繼續采取一些分片操作,對于小的切片可能采取切片合并操作。此外HP實驗室在A Framework for Analyzing and Improving Content-Based Chunking Algorithms中也提供了一個框架來分析一些常用的基于內容的分片算法,并且提出了一個新的基于內容的分片算法——TTTD(Two Thresholds Two Divisors Algorithm)。其中,Two Thresholds是指規定切片的大小只能在上下界限之間。Two Divisors是指使用RabinHash算法來確定分界的時候有兩個值可選:主Divisor和備份Divisor。當使用主Divisor時如果找不到分界點,則備份Divisor的條件不能被滿足。此外在NEC發表的文章Improving Duplicate Elimination in Storage Systems中還提出了一種名為fingerdiff的新切片算法,有興趣的讀者可閱讀原文。

2)高效刪除重復數據

數據切片算法是重復數據刪除技術中比較重要的一部分,但只依賴于數據切片算法是遠遠不夠的。前面我們提到衡量數據去重復有兩個重要指標:數據去重復率和吞吐率。很多研究表明數據切片越小去重復率越高,但是會導致低吞吐率;反之,數據切片越大去重復率越低,但是吞吐率越高。為此要求應用重復數據刪除的系統必須選擇合適的切片大小,以在去重復率和吞吐率之間達到一個動態平衡,數據切片大小對數據去重復率和吞吐率的影響如圖1-4所示。

圖1-4 數據切片大小對數據去重復率和吞吐率的影響

在在線數據去重中,怎樣在數據切片后根據數據切片的指紋,高效地在數據切片管理系統中查詢或建立新的數據切片索引是提高吞吐率的關鍵所在。一般來講,數據是通過網絡傳輸過來的,然后指紋的計算會消耗大量的CPU,指紋的查詢會占用大量的內存和進行過多的磁盤操作。因此,整個在線去重復系統就是高效利用了網絡、CPU、內存和磁盤4個模塊。

例如,Avoiding the Disk Bottleneck in the Data Domain Deduplication File System論文中所描述的DDFS就采用了以下技術來提高數據的吞吐率。

· 摘要向量技術(Summary Vector),對于切片的指紋查詢引入了Bloom Filter技術,使用Bloom Filter的好處在于沒有假負率(False Negative)。只要在Bloom Filter中找不到,直接就能說明這個指紋不存在。

· 基于流的塊排列技術(Streaming Informed Segment Layout,SISL)的前提是如果備份過一次數據流后出現非常相似的數據流,那么對于某個數據流,其應該作為一個整體來考慮,和該數據流相關的切片和指紋應該盡量集中放置在某幾個容器(Container)中。在DDFS中,每個容器大小定長,均存儲了數據切片和相關的指紋。

· 局部性保持技術(Locality Preserved Cache,LPC)把數據切片和指紋與容器保持一個映射關系。這樣的好處在于,如果備份的數據流是有空間局部性的,那么把一個數據指紋加載到內存中時,和這個數據指紋位于同一個容器中的指紋會一起被下載到內存中,后續數據切片的指紋就能直接在內存中找到了,避免了不必要的外部I/O操作。此外內存使用最近最少使用(Least Recently Used,LRU)算法管理容器。

客觀來講,DDFS所使用的策略是非常有效的,這使得整個數據重復刪除的效率非常高,為此在工業界,Data Domain公司的產品從目前來講領先于其他同類產品,占據了很大的市場份額。當然這不是說DDFS的技術無可挑剔了,從學術的角度來講,還有很多優化可做。例如,在2011年的ATC會議上,有一篇名為SiLo : A Similarity-locality Based Near-exact Deduplication Scheme with Low RAM Overhead and High Throughput的文章對切片指紋的查找提出了進一步的優化方案,文章中提到DDFS這樣的系統只是從本地化(Locality)的角度來考慮高效的切片指紋查找的,但是僅僅依靠本地化是不夠的。對于全備份來講,所備份的數據流具有很高的本地化。但是對于那些增量式備份的數據流,本地化則比較差,為此必須考慮另外一個因素,即相似性(Similarity)。相似性所用的策略比較簡單,就是把很多緊密相關的小文件分為一組,并放入一個切片中,或者把一些大文件劃分成更多獨立的小切片來挖掘相似性。同時利用本地化和相似性,作者提出了一個新的系統SiLo,能夠更好地去重,并且在占據內存較小的情況下,達到比較高的吞吐率。

當然除了在軟件上優化指紋的查找,很多研究人員也從硬件方面考慮問題。我們知道,計算指紋(一般使用哈希算法,如SHA1)需要消耗大量的CPU。為此可以引入其他物理器件,如GPU,從而釋放CPU的計算能力。

3)數據可靠性

當人們把過多目光放在重復數據刪除的去重復率和吞吐率方面的時候,我們需要考慮備份數據的可恢復性及其完整性,也就是說,不希望備份數據被破壞。那么到底從哪些方面保證數據的可靠性呢?這里認為,對一個去重復系統而言,當數據從客戶端通過傳輸介質進入數據去重復系統后,必須考慮系統中的每一個模塊。也就是說在設計整個重復數據刪除系統的時候,必須將任何一個模塊在運行過程中存在錯誤的可能考慮進來。

第一個需要考慮的問題是,外部存儲的可靠性。現在備份的數據最終會被放到磁盤(取代了以前的磁帶)。所以一個簡單的問題就是,在備份過程中磁盤設備損壞了該如何處理?為此,磁盤陣列技術被引入。一般在數據去重復系統中常用的應用有RAID0、RAID5或RAID6。當然磁盤陣列技術也有軟件和硬件之分,其中,硬件磁盤陣列部署起來雖然比較容易,但是也不能百分之百保證數據不出錯。磁盤也一樣,寫入磁盤的數據未必一定正確,即使錯誤發生的概率非常低。因此,就需要去重復系統通過軟件的方法去驗證一些數據的完整性。例如,對于一些數據結構,可采用內嵌的校驗和(Checksum)來保證數據的完整性。

第二個需要考慮的問題是,內存的可靠性。眾所周知,服務器上的內存都攜帶ECC(Error Correcting Code)功能。對于重復數據刪除系統而言,如果內存有這樣的機制,就可以讓重復數據刪除系統通過ECC去檢驗這些內存條的錯誤。如果在同一個區域ECC出現錯誤的頻率變高了,超過了某個閾值,似乎就可以斷定這塊內存條在一定時間內有損壞的可能,需要及時替換。再擴展一下,就是對系統中所有的硬件都需要有監控,以防止意外發生,如監控CPU和風扇的溫度等。

第三個需要考慮的問題是,如果在進行去重復的過程中整個系統崩潰了,那么還能保證數據的完整性嗎?這個問題可能比較難解決。對于那些還在CPU或內存中但并沒有被刷入外部存儲的數據,能不能進行相關的跟蹤?發生這樣的事情最完美的結局是:系統能恢復正常,還沒刷入外部存儲的數據(已經經過了指紋處理)能被正常寫入外部存儲。直觀地想,這似乎是不可能的,但是細想一下,似乎還有其他的解決方案。

先把思維發散到數據庫中。我們知道支持OLTP的數據庫對事務的支持有很強的要求,如那些沒被正常提交的事務(Transaction)需要進行回滾。為了滿足這一需求,數據庫引入WAL(Write Ahead Log)機制,即任何寫磁盤操作必須先寫日志。在數據去重復系統中,是不是也可以引入WAL機制呢?答案是,可以,但是純粹使用引入的WAL機制似乎不能滿足數據去重復系統高吞吐率的要求,那么怎么辦呢?為此,數據去重復系統向一些高端的存儲系統學習引入NVRAM,因此日志可以先被寫入NVRAM。于是當系統崩潰的時候,一些數據就可以從NVRAM中恢復出來,這在一定程度上解決了系統崩潰所導致的數據丟失問題。但是NVRAM也不是萬能的,系統在某些情況下依然會處于一個不能完全恢復數據的狀態,當然這樣的概率是比較低的。

從數據脆弱性的角度來講,開發一個好的數據去重復系統還是比較困難的。總的來說,必須把數據可失性的問題從軟件和硬件等方面進行全面考慮,才能盡可能地避免數據在去重復或恢復過程中的丟失問題。

3.重復數據刪除應用

重復數據刪除技術從萌芽到興起時間不長,但是隨著大數據的發展,人們對存儲的需求也呈爆炸式增長。前面我們所講的是當前重復數據刪除技術在數據備份系統中的應用,市場上銷售的重復數據刪除系統基本都是一體化的。所謂一體化系統,是指數據去重系統以容量大小進行銷售,也就是說用戶會購買一個BOX(包含了所有軟件和硬件)。但問題是,隨著數據容量的增長,單個BOX是否還能滿足要求?

就這里而言,答案是否定的。數據去重復系統的可擴展性,現在還處于探索階段,目前可以進一步壓榨多核或CPU的能力,但是總有一天這種方式的優化效果會變得越來越不顯著。為此我們必須將方向轉向分布式系統,或者把數據去重和云聯系起來。例如,昆騰公司的一款虛擬插件產品DXi V1000,開始把重復數據刪除和虛擬化及云相結合。重復數據刪除在數據備份方面的應用,還有很長的路要走。

構建分布式的數據去重復系統,或將其重復數據刪除和云結合,有很多種玩法。對云服務代理商而言,可以結合重復數據刪除技術和一些廉價的云存儲服務,來提供更加可靠的存儲服務,這里使用重復數據刪除技術也是為了降低成本。重復數據刪除的供應廠商,不再單純地將BOX賣給用戶,而是提供更加一體化的服務。當用戶的BOX容量滿了,則需要購買容量更大的BOX來替換。

對于一些小企業來講,持續的BOX替換是一項比較大的IT開銷。因此如果數據去重復廠商提供額外的云服務,允許用戶在BOX容量滿的情況下,把去重復后的數據放到云端,雖然備份的性能會有所下降,但是確實滿足了小型企業的需求。例如,如果用戶買了1TB的去重復系統,附加一個10TB的云數據去重復系統。

重復數據刪除除了在數據備份系統(主要指Secondary Storage)中的應用,在其他方面也有相應的應用,如主存儲(Primary Storage)、文件系統、虛擬化,甚至內存。下面對其進行簡單介紹。

· 主存儲中的數據去重復。在2012年的FAST會議上,NetApp公司發表了一篇名為iDedup:Latency-aware,inline data deduplication for primary storage的文章,希望重復數據刪除在主存儲上的應用能同時在存儲空間節省和I/O延遲之間做一個平衡。

· 文件系統的數據去重復,如ZFS、liveDFS、SDFS、DEDE,其中,ZFS在文件系統管理中支持了數據去重復功能;liveDFS可在虛擬機內進行重復數據刪除;SDFS可在一些文件系統之下進行重復數據刪除,不過它是一個用戶級數據去重復文件系統;DEDE工作在VMware的VMFS層,可以在線對用戶虛擬機磁盤進行重復數據刪除。

· 對于內存中的去重復(數據共享),大家應該不會陌生,一般都是在Page級別進行內存共享。例如,在操作系統中進程之間共享內存,使用的寫時復制(Copy On Write,COW)機制,以及同一個主機中的不同虛擬機之間通過寫時復制機制共享內存。另外還有一些更復雜的基于內存數據去重復機制,這里不再贅述。

4.Linux下開源數據刪除軟件

Linux下的獨立開源存儲方案不太多,目前用得比較多的是OpenDedup。OpenDedup針對Linux的重復數據刪除文件系統被稱為SDFS,主要針對的是那些使用虛擬化環境,且追求低成本、高性能、可擴展的重復數據解決方案的用戶。

OpenDedup OST連接器提供了網絡備份與OpenDedup之間的集成,其支持以下的功能:將數據寫入并備份到OpenDedup卷;從OpenDedup卷讀取并恢復;備份OpenDedup卷的加速器支持。此外OpenDedup的開源文件系統SDFS,可以在本地或云存儲刪除目標。OpenDedup的特定功能如下。

· 對云存儲后端(Storage Backend)進行在線重復數據刪除:SDFS可以將所有數據發送到AWS、Azure、Google或任何S3兼容的后端。

· 性能:對壓縮的數據可以多線程上傳和將數據下載到云端。

· 本地緩存:SDFS可以在本地緩存最近訪問的數據(默認大小是10GB)。

· 安全性:所有數據在發送到云端時都可以使用AES-CBC 256進行加密。

· 流控:上傳和下載速度可能會受到限制。

· 云恢復/復制:所有本地元數據都可以被復制到云端中,并且可以被恢復。

· Glacier支持:支持S3生命周期策略并可以從中檢索數據。

此外,還有另外一些開源網絡備份和數據恢復軟件廠商,如Bacula Systems、Zmanda、Nexenta等。另外重復數據刪除功能,也被集成在大型的分布式存儲系統中,以提供備份的功能。這方面云服務商用得比較廣泛。

1.2.5 開源云計算數據存儲平臺

首先,回顧一下云計算技術的發展歷史及云計算的概念。在傳統模式下,想要使用計算機資源,必須自己購買基礎設施和軟件的許可。同時,企業還需要雇用專業的運維管理人員對其進行維護。隨著企業所需的計算機資源規模越來越大,不僅需要擴充各種硬件基礎設施,還需要擴大維護人員團隊,以保障服務的正常運行。

而對于大部分企業來說,其實計算機基礎設施并不是它們真正需要的,它們只是將基礎設施作為一種支持上層業務的服務手段。在維護費用上,不僅需要花費大量的資金購買硬件、建立企業的數據中心,而且還需要高價聘請專業人員對其進行管理與維護,這無形中給企業增加了額外的成本費用。倘若有一種服務,讓企業無須自己搭建并維護數據中心,只需要出錢就可以直接買到所需要的服務,那么就可以大大降低企業額外的運營成本,并且可以獲得高質量的IT服務。這如同我們常見的公共服務一樣,如水電站,我們每天都需要用到水和電,但并不是家家戶戶及每個企業都要去建立自己的發電廠和水井等設施。我們只需要繳納一定的費用就可以享受這樣的服務。

所以,云計算的目標就是為用戶提供計算機基礎設施服務。在云計算模式下,所有計算機資源都由云計算廠商進行集中管理,用戶只需要按需付費,即可獲得所需要的服務。這對用戶(企業)來說,使用IT資源變得更加簡單,費用成本更低。用戶不必關心底層的基礎設施建設,可以略過一系列復雜的硬件部署、軟件安裝等步驟,直接使用云計算廠商提供的計算、存儲及網絡等資源即可。這對于用戶(企業)來說是將部署計算機資源從購買產品轉換為購買服務。

目前對于云計算的定義有多種說法,現階段廣為接受的是美國國家標準與技術研究院(NIST)的定義:云計算是一種按使用量付費的模式,能夠提供可用的、便捷的、按需的網絡訪問,位于可配置的資源共享池的資源(包括網絡、服務器、存儲、應用軟件、服務)能夠被快速提供,用戶只需要做很少的管理工作,或者與服務提供商進行很少的交互。

隨著云計算的不斷推廣,目前越來越多的公司開始提供云計算服務,出現了一批優秀的云計算服務,如國外的有Amazon的云計算服務AWS、微軟的云計算服務Microsoft Azure和Google的計算服務Google Cloud;國內的有阿里云、騰訊云及金山云等。

“云計算”中的“云”可以簡單地理解為任何可以通過互聯網訪問的服務,那么根據其提供服務的類型,云計算有以下3種落地方式。

· IaaS:通過互聯網提供“基礎的計算資源”,包括處理能力、存儲空間、網絡等,用戶能從中申請到虛擬或物理的硬件設備,包括裸機(Bare Metal)或虛擬機,可在上面安裝操作系統或其他應用程序。典型的代表有Amazon的AWS和阿里云ECS。

· 平臺即服務(Platform As a Service,PaaS):將計算環境、開發環境等平臺作為一種服務通過互聯網提供給用戶,用戶能從中申請到一個安裝了操作系統及各種所需運行庫的物理機或虛擬機,可在上面安裝其他應用程序,但不能修改已經預裝好的操作系統和運行環境。

· 軟件即服務(Software As a Service,SaaS):通過互聯網為用戶提供軟件的一種服務方式。應用軟件安裝在廠商或服務供應商那里,用戶可以通過網絡以租賃而非購買的方式來使用這些軟件。典型的代表有百度云盤、360云盤等。

Iaas、SaaS和PaaS三者的關系如圖1-5所示。

圖1-5 IaaS、SaaS和PaaS三者的關系

底層為Iaas,提供各種基礎硬件平臺,如計算、存儲及網絡。PaaS提供中間層的服務,隱藏了服務器、虛擬機等概念,把一切功能服務化。頂層則為SaaS,提供常見的業務服務。針對云計算的三層結構,出現越來越多的云計算平臺,其與云計算服務進行整合,為用戶提供了更優質的服務。

1.2.6 存儲管理和軟件定義存儲

存儲管理軟件對存儲而言是非常重要的,是存儲運維非常重要的一部分。隨著存儲系統的多樣化,如果依然對不同的存儲使用不同的軟件,則存儲會非常低效,這將增加運維的復雜度。另外不同的存儲軟件不能互通,這會影響存儲的調度。于是急需一個非常高效的、統一的存儲軟件,以管理不同的存儲,并且可以在不同的存儲之間根據用戶的需求進行相應的調度,這促進了軟件定義存儲(Software Defined Storage, SDS)的誕生。軟件定義存儲是用來滿足管理、資源調度或編排(Orchestration)的需求的。

1.軟件定義存儲的發展

最早出現“軟件定義”這個詞的是軟件定義網絡(Software Defined Network, SDN)。軟件定義網絡起源于斯坦福大學的一個研究課題——Clean Slate。2009年,軟件定義網絡的概念被正式提出。軟件定義網絡通過將網絡設備的控制與數據分隔,運用可編程化控制實現了網絡的靈活管理,為網絡平臺及應用提供了良好的平臺。

之后在2012年,VMware于VMworld 2012大會上首次提出了軟件定義數據中心(Software Defined Data Center,SDDC)的概念。軟件定義數據中心抽象、池化和自動化了云計算的基礎架構(計算、存儲、網絡),整個數據中心可以由軟件自動控制(見圖1-6)。其目標是利用虛擬化和云計算技術,通過虛擬化,將數據中心的一切資源,構建成一個由虛擬資源組成的資源池,軟件定義存儲是一種最有效、最經濟且恢復力強的云計算基礎架構方法。外部應用編程接口可以無縫連接到私有云、公有云及混合云平臺。

圖1-6 軟件定義數據中心

隨后,作為軟件定義數據中心中的基礎服務之一軟件定義存儲的概念被提出。軟件定義存儲是一種數據存儲方式,其獨立于底層硬件,與存儲相關的控制工作都在相對于物理存儲硬件的外部軟件中完成。軟件定義存儲通常包括一種虛擬化存儲的形式,這種形式將存儲硬件與管理軟件分開,使軟件定義的存儲軟件也可以為數據刪除、復制等特性提供管理。

那么為什么會出現軟件定義的存儲呢?其原因是當下各種新型技術的不斷進步,以及互聯網行業的快速發展帶來了巨大的存儲需求。互聯網行業的蓬勃發展帶來了大量的數據資源,這給存儲帶來了更大的挑戰。在云計算方面,越來越多的基礎架構即服務大量涌現,其中存儲即服務也需要做到更高效、更快捷的管理。下面從數據中心的3個基礎設施服務(計算、存儲及網絡)的發展來解釋是什么推動了軟件定義存儲的發展。

· 計算:相比之前,CPU的計算能力越來越強,并且隨著CPU多核時代的到來,單個多核CPU往往可以處理更多I/O請求。在虛擬化場景中,這顯得尤為重要。多核CPU在很大程度上提高了處理器的利用率。相應地,在底層存儲上也需要變革。不僅是硬件方面,在軟件方面也需要進一步提升以匹配日益發展的計算速度。

· 存儲:如今,存儲技術在不斷變革,存儲介質從2D NAND到3D NAND,再到如今英特爾推出的3D XPoint;塊設備從最早的SATA硬盤發展到如今的PCIe NVMe SSD,使得存儲硬件產生了質的飛躍;磁盤的延時從毫秒級縮短到了亞毫秒級。同時存儲軟件上也出現了許多變革,為適應最新的硬件產品、提高存儲性能,如英特爾推出了SPDK等Kernel Bypass技術。

· 網絡:網絡技術也在不斷變革,從最早的千兆網卡到如今的萬兆網卡,這使得網絡延時變得越來越小。隨著越來越多的分布式服務的出現,網絡被廣泛用于連接各種存儲設備。同時,一些新技術的大量涌現使得網絡服務變得更加高效。例如,在硬件上,Mellanox推出RDMA網卡,Infiniband推出RDMA的網絡交換機;在軟件上,英特爾推出DPDK來改進當前網絡方面的性能。

隨著上述技術的不斷進步,涌現了大量的高性能存儲服務,其中包括一些日益成熟的分布式存儲系統、存儲虛擬化等技術。同時,存儲資源管理和使用也日趨復雜。云計算和虛擬化環境需要更加智能的存儲管理,從而能夠靈活管理和控制其信息,并且能夠快捷靈活地部署存儲資源。因此,計算、存儲及網絡3個基礎設施服務的發展推動了軟件定義存儲的發展。軟件定義存儲通常包含兩部分:控制平面(Control Plane)和數據平面(Data Plane)。

下面結合圖1-7來介紹軟件定義存儲中常見的組件。

圖1-7 軟件定義存儲的控制平面和數據平面

1)控制平面

控制平面常見的組件有以下幾種。

· VMware SPBM(Storage Policy Base Management),基于存儲策略的管理。

· OpenStack Cinder,用于提供塊存儲服務。

· EMC ViPR,其目標是實現EMC存儲、異構存儲、商用硬件本地存儲資源的存儲虛擬化(包括互操作性)。

2)數據平面

數據平面這一層組成比較復雜,組成部分較多,有如下幾部分。

· 基于商用的硬件(Based on Commodity Hardware),這一類包含兩大類:超融合架構(Hyper Converged Infrastructure,HCI),如VMware VSAN、EMC ScaleIO等;非超融合架構,如DELL Fluid Cache、HP StorVirtual等。

· Traditional SANStorage Area Network Storage Area Network /NSA,傳統的外置磁盤陣列,包括SAN存儲和NAS(Network Attached Storage)存儲。

· Cloud/Object Storage,作為應用的后端存儲提供相關的存儲資源。

2.軟件定義存儲開源項目介紹

如下是幾個當前被廣泛使用的存儲資源管理與軟件定義存儲開源項目。

· OpenSDS:OpenSDS最早由華為提出,旨在為存儲業界提供標準化的軟件定義存儲控制平面,從而為用戶解決存儲過于復雜多樣的問題。由于當前的存儲管理往往過于復雜,后端涉及各種各樣的存儲設備供應商、虛擬化技術等,部署和使用極不方便。OpenSDS開放了統一、標準化的軟件定義存儲控制器架構,最上層用來向用戶提供統一的接口;中間層用來處理基本的調度和管理;最下層接入不同的存儲后端支持,從而管理不同的存儲后端,提供統一標準的結構,給用戶提供一個更加整潔、靈活的使用方式。

· Libvirt Storage Management:Libvirt是由Redhat開發的一套開源的軟件工具,其在host端通過管理存儲池(Pool)和卷(Volumes)來為虛擬機提供存儲資源。Libvirt可以與多種虛擬機進行交互,包括KVM/QEMU、Xen、LXC、Virtual Box、VMware ESX及Hyper-V等。另外Libvirt支持多種后端存儲類型,如本地文件系統、網絡文件系統、iSCSI、LVM等。

· OHSM(Online Hierarchical Storage Manager):OHSM是企業級開源數據存儲管理器。它在高成本和低成本的存儲介質之間自動移動數據。OHSM系統的存在是因為高速存儲設備(如硬盤驅動器)比慢的設備(如光盤和磁帶驅動器)更昂貴(每字節存儲)。雖然理想的情況是所有數據都可以在高速設備上使用,但對于許多用戶來說這是非常昂貴的。相反,OHSM系統將企業的大部分數據存儲在較慢的設備上,然后在需要時將數據復制到更快的磁盤驅動器上,從而實現動態的數據管理。動態的數據管理能夠更加靈活、更加充分地利用后端存儲資源。

1.2.7 開源分布式存儲和大數據解決方案

隨著大數據時代的到來,應用系統發生了很大變化,數據量變得越來越大,之前的存儲和計算系統已經遠遠不能滿足當今用戶的需求。摩爾定律告訴我們:當價格不變時,集成電路上可容納的元器件的數目,每隔18~24個月便會增加一倍,性能也將提升一倍。換言之,每一美元能買到的計算機性能,將每隔18~24個月增加一倍。

當我們將時間固定在某一個點上,即當時間不變時,如果要提高單機的性能,意味著我們要花費更多的錢。所以說單純地提高單機的性能,性價比較低。除此之外,單機的計算和存儲性能存在一定的瓶頸,即當單機的計算和存儲達到一定的峰值后,即使我們花費再多的錢,也無法再提升其性能了。另外,出于可靠性和安全性方面的考慮,當這臺機器出現問題,系統就完全不能用了。

所以分布式存儲就是將多臺獨立的設備通過某種網絡通信連接起來,組成一個大的集群,從而使集群中不同設備的硬盤驅動器、固態硬盤等介質組成一個大規模的存儲資源池。分布式存儲系統一般包括三大組件:元數據服務器(也稱為主控服務器)、客戶端及數據服務器。分布式存儲系統結構如圖1-8所示。

圖1-8 分布式存儲系統結構

元數據服務器是分布式存儲系統的核心,主要在系統中提供以下服務。

· 命名空間管理。命名空間管理主要負責分布式存儲系統中的元數據管理,如對象或文件塊到數據服務器的索引、文件之間的關系等。因為在分布式存儲系統中,會涉及大量的大型存儲對象,它們一般會被分割成小的對象分配到不同的存儲位置,因此命名空間的管理極為重要,這不僅涉及系統中數據一致性的問題,而且還涉及訪問文件的效率。不同的分布式系統采用不同的命名空間管理方法,有些分布式系統采用將元數據全部基于內存的存儲方式,分布式存儲系統采用特殊的文件系統或數據庫等方式來存儲元數據。

· 數據服務器管理。由于分布式存儲系統是由多個設備組成的集群,各個數據服務器的運行情況顯得極其重要。元數據服務器也兼任了數據服務器管理的工作,它需要實時地掌握集群中各個系統的情況。如果發生某些單點故障,則需要及時進行恢復并啟用備份節點。不同的系統采用不同的策略進行數據服務器管理,常見的方式是各個數據服務器節點通過不斷地向元數據服務器發送心跳感應來報告當前節點運行的狀況。

· 主備份容災。分布式存儲系統為了提高數據的可靠性和安全性,通常會進行多組備份。不僅僅是數據需要備份,同時元數據也需要備份。另外在基于內存的元數據管理方式中,還需要啟用日志系統來持久化數據。當單一節點出現問題的時候,元數據服務器會根據當前的系統狀態轉移并啟用備份節點。

數據服務器的重要作用是維護數據存儲及副本,主要分為以下幾種服務。

· 數據的本地存儲。數據服務器會維護數據本地化的持久存儲。對于較小的文件,數據服務器通常會進行數據整合。例如,將多個文件存儲在同一個塊中,從而提高空間的利用率。對于較大的文件,數據服務器通常會將其分割成多個小的文件,從而利用分布式存儲系統的特點,將其存放在不同的節點中。同時,所有文件數據塊都將與元數據做文件索引,從而實現對文件數據的管理。

· 狀態維護。數據服務器除了做數據存儲,通常還會進行狀態維護。它們將自己的狀態信息報告給元數據服務器,通常這些信息會包含當前的磁盤負載、I/O狀態、CPU負載、網絡情況等,從而方便元數據服務器進行任務的調度和文件數據的劃分,同時數據服務器制定負載均衡策略。

· 副本管理。在分布式存儲中,為了保護數據的安全性和可用性,通常會將文件數據做多個備份,根據不同的策略將其存放到不同的位置。當有其他節點出現故障或負載不均勻的情況時,元數據服務器會根據情況復制或遷移副本,從而保證整個系統中數據的安全性和可用性。

客戶端面向用戶,最主要的任務是提供接口給用戶,使用戶能夠訪問數據資源。常見的方式是給用戶提供可移植操作系統接口,以便能夠與虛擬文件系統對接;其次向用戶提供基于用戶態的用戶訪問接口。另外,其他的分布式系統向用戶提供RESTful接口支持,從而使用戶可以通過HTTP的方式訪問文件資源。

以下是常見的開源分布式存儲軟件,其中大部分可以在不同的操作系統上運行,主要部署于Linux操作系統上。

· Hadoop。Hadoop是由Apache基金會所發布的開源分布式計算平臺,起源于Google Lab所開發的MapReduce和Google文件系統。準確來說,Hadoop是一個軟件編程框架模型,利用計算機集群處理大規模的數據集進行分布式存儲和分布式計算。Hadoop由4個模塊組成,即Hadoop Common、HDFS (Hadoop Distributed File System)、Hadoop YARN及Hadoop MapReduce。其中,主要的模塊是HDFS和Hadoop MapReduce。HDFS是一個分布式存儲系統,為海量數據提供存儲服務。而Hadoop MapReduce是一個分布式計算框架,用來為海量數據提供計算服務。目前Hadoop已被廣泛應用到各個大型公司中,據統計,Yahoo使用4000多個節點的Hadoop集群來支持其廣告和搜索業務;Facebook使用1000多個節點的Hadoop集群存儲日志數據,并在該數據之上做數據分析和機器學習。

· HPCC(High Performance Computing Cluster)。HPCC是一款開源的企業級大規模并行計算平臺,主要用于大數據的處理與分析。HPCC提供了獨有的編程語言、平臺及架構,與Hadoop相比,在處理大規模數據時HPCC能夠利用較少的代碼和較少的節點達到更高的效率。

· GlusterFS。GlusterFS是一個開源分布式存儲系統,具有強大的橫向擴展能力,能夠靈活地結合物理、虛擬的云資源實現高可用(High Availability,HA)的企業級性能存儲,借助TCP/IP或InfiniBand RDMA網絡將物理分布的網絡存儲資源聚集在一起,并使用統一的全局命名空間來管理數據。同時, GlusterFS基于可堆砌的用戶空間設計,可以為各種不同的數據負載提供優質的性能。相對于傳統的NAS和SAN,GlusterFS容量可以按比例擴展;廉價且使用簡單,可以完全建立在已有的文件系統之上;擴展和容錯設計比較合理,復雜度低;適應性強,部署方便,對環境依賴低。GlusterFS由于具有高擴展性、高可用性及彈性卷管理等特性而備受歡迎。

·Ceph。Ceph是一款開源分布式存儲系統,起源于SageWeil在加州大學圣克魯茲分校的一項博士研究項目,通過統一的平臺提供對象存儲、塊存儲及文件存儲服務,具有強大的伸縮性,能夠為用戶提供PB乃至EB級的數據存儲空間。Ceph的優點在于,它充分利用了集群中各個節點的存儲能力與計算能力,在存儲數據時會通過哈希算法計算出該節點的存儲位置,從而使集群中負載均衡。同時,Ceph中采用了Crush、哈希環等方法,使它可以避免傳統單點故障的問題,在大規模集群中仍然能保持穩態。目前,一些開源的云計算項目都已經開始支持Ceph。例如,在OpenStack中,Ceph的塊設備存儲可以對接OpenStack的Cinder后端存儲、Glance的鏡像存儲和虛擬機的數據存儲。

· Sheepdog。Sheepdog是一個開源的分布式存儲系統,于2009年由日本NTT實驗室所創建,主要用于為虛擬機提供塊設備服務。Sheepdog采用了完全對稱的結構,沒有類似元數據服務器的中心節點,沒有單點故障,性能可線性擴展。當集群中有新節點加入時,Sheepdog會自動檢測并將新節點加入集群中,數據自動實現負載均衡。目前QEMU/KVM、OpenStack及Libvirt等都很好地集成了對Sheepdog的支持。Sheepdog總體包括集群管理和存儲管理兩大部分,運行后將啟動兩種類型的進程:sheep與dog,其中,sheep進程作為守護進程兼備節點路由及對象存儲功能;dog進程作為管理進程可管理整個集群。在Sheepdog對象存儲系統中,getway負責從QEMU的塊設備驅動上接收I/O請求,并通過哈希算法計算出目標節點,將I/O轉發到相應的節點上。

1.2.8 開源文檔管理系統

文檔管理系統(Document Management System,DMS)主要用來管理文檔、視頻、音頻等內容。信息化系統的發展促進了文檔管理系統的發展。企業信息化系統發展迅速,信息量越來越大,需要管理的文檔文件越來越多,并且各類文檔存儲形式不同,管理十分困難。例如,各類文檔一般以電子文檔的形式存在,存在格式為.doc、.ppt、.pdf、.xls等類型。此外,海量文檔存在管理困難、查找效率低、文檔版本管理混亂、文檔缺乏安全保障等問題,所以,尤其對于企業用戶來說,通過一些優秀的文檔管理系統來管理所有的信息是十分必要的。

最早的文檔管理系統是基于B/S架構的,通過將文檔上傳到服務器來進行集中存儲,優點在于管理方便、安全、查找效率高。用戶只需要通過互聯網就可以連接到文檔管理系統,進而可以隨時隨地對文檔進行訪問。此外,這類B/S文檔管理系統為了滿足用戶復雜的需求,通常會添加很多額外的功能,如在線編輯、文檔共享、權限管理、文檔加密等,讓用戶使用起來更加方便、安全。

文檔管理系統有以下主要功能。

· 文檔管理:提供文檔的集中式存儲,為用戶提供一個功能完備的海量文檔管理平臺;提供目錄結構,方便用戶構建自己的文檔組織形式,進行查找及權限控制;提供搜索功能,其中的各類快捷搜索方式,使用戶能夠更高效地定位所需文檔及內容。

· 安全管理:提供權限管理、存儲加密及IP地址限制等功能。權限管理功能,如文檔的訪問權限,可以限制針對個人、部門的權限;存儲加密即對文檔進行加密以保障文檔的安全,從而保護企業數據的安全與可靠性;IP地址限制用戶在組織架構中設定的登錄IP地址,以保障賬戶安全,也可以限制外來網絡用戶的訪問,保障安全性。

· 協同辦公:在企業用戶中,通常存在多名用戶需要協同辦公的情況。因此,文檔管理系統會提供相關的功能,使用戶協同辦公更加方便。例如,在線共享編輯文檔功能使多名用戶可以共同合作編寫文檔;文檔審閱功能,使得用戶之間可以相互評論、發表意見。

· 格式管理:文檔管理系統管理的數據可以有多個分類,如文檔、視頻、音頻,且每個分類下又存在多種格式。例如,文檔格式有.doc、.ppt、.pdf、.xls等類型,視頻格式有.mp4、.rmvb、.mkv、.avi等類型,音頻格式有.mp3、.ape、.wav等類型。因此文檔管理的格式復雜多樣,文檔管理系統必須支持多種格式的管理功能,從而使用戶無須關心格式的細節,方便使用。

很多廠商提供了企業級文檔管理系統,它們基本上都是閉源且收費的。隨著信息量越來越大,閉源的企業級文檔管理系統存儲存在以下缺點。

· 費用較高:通常各類管理系統是根據用戶的場景提供相應適合的文檔管理系統的。企業用戶的信息量越大,越需要更加高效、復雜的管理系統。這使得用戶必須繳納更多的使用及維護費用,來保障自己所獲得的服務。

· 擴展性差:面向大多數的客戶開發的文檔管理系統,主要有常見的功能。而如果企業用戶需要適用于自身情況的特定功能,則需要向廠商提出需求,定制特殊的功能,也需要繳納額外昂貴的費用。

基于以上兩點,企業級閉源文檔管理系統不是很受歡迎,因此越來越多的開源文檔管理系統出現在用戶的視野中。相對于閉源文檔管理系統,開源文檔管理系統面向用戶是免費的,而且具有很高的可擴展性。另外在各類用戶及開發者的共同努力下,文檔管理系統本身可以結合用戶的需求,將更多優秀的源代碼合并進來,功能將更加完善。

下面介紹幾款開源文檔管理系統。

· DSpace。DSpace是一款專門的數字資源管理系統。該系統開放源代碼且遵循BSD 3-Clause license,可以收集、保存、存儲、索引各種格式、層次結構的數據。DSpace最早是由麻省理工學院圖書館和惠普公司實驗室共同研發的,于2000年正式開始使用。DSpace支持多種文件類型,如圖像、音頻、視頻、文檔等。同時DSpace運用Java搜索引擎Lucene,提供強大的檢索功能,還可以對外提供API訪問,具有很強的擴展能力。

· Epiware。Epiware是一款開源文檔管理系統,主要面向企業文檔管理,使用戶能夠安全地分享文檔、創建計劃及管理任務。同時,Epiware提供了一套完整的文件管理功能,包括文檔的上傳、下載、審核、版本控制及通知等,并且為開發團隊提供了一個安全的信息交流及相互合作的平臺。

· OpenKM。OpenKM是一款基于Web的多角色的開源電子文檔管理系統。它基于Tomcat Java企業級服務器,采用J2EE、Jackrabbit內容管理庫和GWT等技術開發,并提供強大的管理功能。OpenKM提供了多種系統功能模塊,可以用于管理公共文檔、建立用戶自己的知識庫并修訂自己的文檔標準模板等。此外,OpenKM還提供了強大的社區技術支持,方便用戶對文檔進行部署、使用。

1.2.9 網絡功能虛擬化存儲

網絡功能虛擬化(Network Functions Virtualization,NFV)在維基百科的定義是“使用虛擬化技術,將各個類別的網絡節點功能虛擬化為連接在一起的通信服務”。

在2012年的德國軟件定義網絡和OpenFlow世界大會上,ETSI發布的《網絡功能虛擬化——介紹、優點、推動因素、挑戰與行動呼吁》首次引入NFV,NFV將許多網絡設備由目前的專用平臺遷移到通用的X86平臺上來,幫助運營商和數據中心更加敏捷地為客戶創建和部署網絡特性,降低設備投資和網絡費用。

NFV可以利用成熟的虛擬化設備實施網絡技術,并減少新設備的投入。除此之外,不必承擔過多的時間成本,短期內即可實現網絡架構。NFV最重要的一點在于,可以根據用戶的不同習慣,實現快速的網絡搭建和調整,在虛擬化產品上搭建網絡,滿足不同用戶群的需求。

NFV的出現改變了網絡和通信工業,為了加速NFV技術的推進,Linux基金會于2014年9月發布了一個新的項目OPNFV,基于OPNFV,可以創建一個NFV的參考平臺。與其他開源項目相比,OPNFV是一個集成的平臺,致力于將很多其他領域的開源項目,包括OpenStack、KVM等集成在一起,針對NFV環境進行部署與測試,從而促進NFV新產品和服務的引入。

NFV主要包括3個部分:NFVI(網絡功能虛擬化基礎設施)、VNF(虛擬網絡功能)和MANO(NFV管理與編排)。其中NFVI中包含虛擬化層(Hypervisor或者其他容器管理系統,如Docker)和物理資源層(如存儲設備、交換機等),用于管理和連接虛擬資源。無論是公有云還是私有云,都會涉及不同業務的不同用戶,因此網絡需求是多樣化的,網絡業務需要根據用戶的需求動態調整。NFV在云計算場景中的架構如圖1-9所示。

圖1-9 NFV在云計算場景中的架構

NFV將網絡功能整合到行業標準的服務器、交換機和存儲硬件上,并且提供了優化的虛擬化數據平臺,用軟件的方式實現了網絡功能的計算、存儲和網絡資源的虛擬化。NFV可以為用戶提供VNF服務,根據不同用戶的不同需求,動態調整分配給這些VNF的計算和存儲資源,實現VNF功能和性能的按需分配。NFV由于具有靈活性、可擴展性等特點,在云計算場景中備受歡迎。

1.2.10 虛擬機/容器存儲

如今,隨著虛擬化技術不斷發展,越來越多的虛擬化技術被運用到企業中。無論是傳統的虛擬化技術,還是如今新興的容器虛擬化技術,都帶動了整個虛擬化生態圈的發展。虛擬化的優勢在于它可以讓CPU、內存、硬盤等硬件成為可以被動態管理的資源,從而使資源能夠有更高的使用率,并且能簡化運維管理。同時虛擬化技術還能夠節約空間、成本,并且提高系統的穩定性,減少宕機事件的發生。

1.虛擬機存儲

對于傳統虛擬機的存儲來說,最早出現的是完全以軟件模擬的虛擬化存儲技術,后來出現了半虛擬化技術。CPU的發展帶來了對虛擬化技術的支持(如英特爾VT),所以出現了硬件輔助的虛擬化技術。

· 完全虛擬化技術:虛擬機(Guest OS)不知道自己運行在真實的物理硬件上,還是虛擬的硬件上。它所基于的所有硬件,都是由Hypervisor模擬實現的。Guest OS不使用任何真實的硬件,僅使用虛擬的硬件。因此在完全虛擬化技術中,當Guest OS需要使用底層系統資源時,都會通過Hypervisor截獲,然后模擬這些指令的行為,將結果反饋給Guest OS。然而,在這樣完全的虛擬化技術中,其安全性、可靠性及性能方面都存在很大不足。因此,為了解決完全虛擬化技術的缺陷,英特爾在其硬件產品中添加了對虛擬化技術(英特爾VT)的支持。

· 半虛擬化技術:半虛擬化技術建立在全虛擬化基礎之上,需要對Guest OS做一定的修改。半虛擬化技術提供了一些API對特殊指令進行優化。因此不再需要Hypervisor進行指令之間的翻譯,從而減輕了Hypervisor的負擔,提高了性能。相比于完全虛擬化技術,半虛擬化技術在性能上有很大的改善,但是用戶需要事先修改,部署和使用都比較煩瑣,不夠靈活。

· 硬件輔助虛擬化技術:硬件輔助虛擬化技術需要CPU的虛擬化技術的支持,在X86平臺上較為明顯,如英特爾的CPU通過其英特爾VT技術來實現虛擬化支持。對虛擬化,英特爾VT技術主要有3個方面的支持,包括CPU、內存及I/O。通過硬件輔助的虛擬化技術,CPU可以明確地分辨出來自Guest OS的特權指令,并針對Guest OS進行特權操作。相較于軟件模擬的完全虛擬化技術和半虛擬化技術,硬件輔助的虛擬化技術無論是在性能上,還是在使用上,都占有一定優勢。

隨著虛擬化技術的發展,存儲I/O也經歷了從I/O全虛擬化到I/O半虛擬化的發展過程。雖然CPU提供的虛擬化支持,使得虛擬機在I/O上有了進一步的性能提升,但是對于純軟件模擬的完全虛擬化I/O來說,當用戶進行I/O操作的時候,虛擬機需要通過VM-Exit將CPU控制權交給VMM來處理。所以在處理I/O時,需要觸發多次VM-Exit,同時I/O路徑相對較長,這使得性能降低。因此為了減少觸發VM-Exit的次數,出現了半虛擬化I/O技術——virtio(Virtual I/O Device)。在處理I/O時,配合virtio的前后端一起使用,大大降低了VM-Exit的觸發次數。但是在I/O路徑上,還需要經過VMM和Host Kernel。

因此為了進一步縮短I/O路徑,VHost技術出現了。VHost是Host Kernel中的一個模塊,它可以與Guest直接進行通信,數據交換都在Guest和VHost模塊之間進行,可以減少VMM的干涉,從而減少了上下文切換縮短了I/O路徑。目前,由于VHost是Host Kernel中的模塊,I/O需要與Host Kernel相互配合,避免不了從用戶態到內核態的上下文切換。因此英特爾提出,在用戶態中實現VHost,從而使得QEMU與用戶態的VHost實現通信,進一步提高I/O性能。

2.容器存儲

在2016年之后,容器存儲也得到了迅速的發展,如EMC、華為等企業存儲廠商積極擁抱容器生態,并推出相應的Docker Volume-Plugin的實現。其中,EMC打造了開源社區EMC Code,并發布了容器控制生態Polly和Libstorage,致力于向容器生態圈推進其技術。如今,在容器持久化存儲生態系統中,已經逐漸發展成以下4種主要形態。

· Data-volume + Volume-Plugin:在Docker最初設計中,便考慮了持久化存儲的問題,并提供了Data-volume支持,主要用來支持本地卷,不支持外置存儲。隨著存儲需求的逐漸擴大,僅僅提供本地卷的支持便會遇到很多瓶頸,因此在Docker 1.8版本之后便推出了對數據卷插件(Volume Plugin)的支持。隨后,大批存儲廠商開始研發自己的數據卷插件,如EMC推出的REX-Ray、華為推出的Fuxi等。數據卷插件用來提供一些簡單的卷管理接口,讓存儲的管控面對接,而在數據面上并未做任何優化。但數據卷插件并沒有解決大量實際的問題,如并發性等問題仍然沒有很大的改進。

· Container-define Storage:針對Volume-plugin的局限性,為了更好地發揮容器持久化存儲的性能,越來越多的廠商意識到,不僅要結合管控面,還要結合數據面的特性,因此便出現了容器定義存儲。容器定義存儲的特點在于,融合了管控面和數據面,是結合容器的特點定制的,充分發揮了企業存儲的特性。例如,CoreOS就是典型的容器定義存儲。容器定義存儲的缺點在于,存儲本身不是云原生的,仍需要解決容器與存儲兩層之間的調度。

· STaaC(Storage as a Containter):STaaC為容器存儲融合了管控面與數據面,并且解決了存儲云原生應用的問題,存儲自身也是容器化的,比容器定義存儲更具有優勢,典型的STaaC有StorageOS、BlockBridge等。

· Container-aware(容器感知):對于大型應用來說,通常單個主機會掛載大量的容器,使得宿主機的卷變得越來越難管理,同時速度可能也難以保證。Container-aware具備感知容器的能力,可以實現面向容器引擎Pod集群的容器存儲,而不是在容器這一級。這將會大大減少容器存儲的粒度,并實現數據庫的容器感知能力。基于感知容器數據卷實現Container管理、分析、遷移,是容器存儲的最佳形態。

1.2.11 數據保護

隨著大數據和云計算時代的到來,企業用戶的數據量越來越大,數據一旦發生泄露或丟失,對企業用戶來說,是非常大的損失。因此企業將越來越多的數據存儲在云端,云端存儲大多數采用的是分布式架構,并且保存多份副本,能夠在很大程度上提高容錯能力。目前,大多數主流的云計算廠商不僅僅是賣計算和存儲資源的,還將其基礎架構用于幫助用戶提供數據保護的服務。

越來越多的主流云存儲和虛擬化系統,融入了對數據保護的擴展與支持。例如,虛擬化Hypervisor和管理平臺在數據保護方面提供了很高的支持,包括熱備份、增量備份、合成備份、一致性處理、單文件恢復、即時恢復等方面。又如,在虛擬化領域大名鼎鼎的VMware在數據保護方面也提供了多種支持,如具有強大功能的VADP (vStorage APIs for Data Protection)接口,其他備份軟件只要遵循這個接口,就可以實現數據保護的大多數功能。

開源項目也少不了對數據保護的支持。例如,OpenStack的塊存儲管理接口Cinder提供了數據備份的支持,每次增量備份,虛擬機的數據要做切片哈希計算和對比,從而確定新增的數據。越來越多的用戶會將開源的分布式存儲系統作為存儲后端,調用文件系統的快照(Snapshot)來做備份。例如,分布式存儲系統Ceph和GlusterFS都可以通過網關節點來復制快照,從而把數據備份到本地或遠程目標上。

另外一個比較有名的數據保護項目是Karbor,Karbor主要針對OpenStack提供應用數據保護服務,可以使各種數據保護軟件通過標準的API和數據保護框架接入OpenStack,從而為OpenStack提供更好的備份、復制、遷移等數據保護的服務。同時為了完成數據保護任務,完成創建、任務觸發、保護、數據一致性、數據恢復等整個流程,Karbor會為每個任務階段都提供相應的API,將這些接口暴露給用戶,從而提高靈活性、增加保護范圍。Karbor最初由華為與其他數據保護公司主導,致力于解決虛擬機備份難、無標準備份接口的難題。Karbor保護的對象都是關聯的資源,對每種資源的保護都是由Karbor中的插件引擎執行完成的,它會通過加載各種資源所需要的插件,來保護相關資源。

從目前來講,數據保護仍是一個很熱門的話題,隨著云計算行業的不斷推進,數據的保護將變得越來越重要。相信未來會出現更多優秀的技術,來帶動數據保護項目的開拓與發展。

主站蜘蛛池模板: 凤台县| 华安县| 松原市| 杭锦后旗| 福贡县| 恭城| 故城县| 阿城市| 连江县| 双峰县| 垫江县| 沅江市| 苗栗县| 大城县| 翁牛特旗| 大田县| 沈丘县| 施秉县| 仁化县| 横峰县| 酉阳| 富平县| 寻乌县| 广宗县| 丰原市| 潜江市| 资溪县| 万源市| 盱眙县| 娱乐| 东阿县| 宜兰县| 锡林郭勒盟| 辽源市| 三原县| 宁强县| 饶河县| 施秉县| 台中县| 彰化市| 满城县|