Facebook公司已經在其近線存儲體系當中徹底棄用RAID與復制機制,轉而采用分布式擦除編碼以隔離其所謂的“暖性BLOB”。
暖性?BLOB?這都是些什么東西?大家別急,馬上為您講解:
BLOB——也就是二進制大對象,包括Facebook用戶的圖片以及視頻等等。
暖性——是指那些必須進行保存,訪問頻率低于熱門數據但卻又高于歸檔或者冷門數據的信息。通常情況下,這些數據已經產生了一周以上。當然,熱門BLOB的訪問頻率仍然較高。
擦除編碼——向一條字節串中添加經過計算的奇偶校驗值(即里德所羅門碼,簡稱RS),這樣由于錯誤刪除或者損壞了完整內容之后、該字符串仍能被恢復為原樣。一般來講,這種機制能夠比RAID更為有效地對數據加以保護、并且無需占用太多存儲空間。
Facebook公司面臨的一大特殊問題在于,其擁有三種主要用戶數據類型外加與之相關的元數據,而且這三種類型都要求擁有龐大的存儲空間作為支撐。Facebook最為主要且訪問頻率最高的數據集是那些生成時間不長,且在用戶時間表中留存時間不足一周的發布信息。這些內容往往會受到該用戶“好友”們的大量訪問。
Facebook利用其Haystack存儲系統處理這些數據,這套方案采用三級復制機制對數據中以保護、確保這部分數據能夠始終接受訪問且具備快速的響應能力,同時盡可能將訪問指向單一磁盤(當元數據計算開始運行之后)。
當這部分數據逐漸陳舊之后,其訪問頻率通常也會有所降低——也就是前面提到的由熱門轉向“暖性”,但我們仍然需要為其提供較快的訪問速度、從而切實滿足調用需求。這就產生了新的問題,數據總量一直處于規模膨脹態勢當中。舉例來說,截至今年一月份,Facebook所保存的照片總數已經超過 4000億張。
根據時間推移,請求的相對頻率也如圖示發生衰減。每一條只對應單獨一類存儲對象,圖中取其絕對值以增加易讀性。另外圓點部分代表著訪問請求頻率降低至下一數量級的轉折位置。
在對每TB數據IO次數進行計算之后,我們可以看到這種暖性型數據的IO密度要遠低于熱門數據,這意味著此類數據已經不再需要利用三級復制機制加以保存,但卻仍然需要具備可以接受的訪問速度,同時擁有必要的保護手段以避免遭受磁盤、主機以及機架故障的影響。
Facebook公司的工程師們已經打造出一款新型存儲系統,也就是f4,專門用于保存這些暖性BLOB。工程師們在一篇論文中解釋道:“f4是一款新型系統,能夠在降低暖性BLOB有效復制因素的同時保持其容錯性以及對較低數據吞需求的支持能力。”
Facebook的工程師們指出:
f4采用里德所羅門編碼機制并將數據塊排布在多臺不同機架之上,從而確保單一數據中心內部的磁盤、主機以及機架故障不會對數據可用性造成影響。它還在廣域層面利用XOR編碼機制以確保數據中心的故障彈性。f4已經在Facebook的生產環境之下運行了超過19個月。f4目前保存的邏輯數據超過65PB,幫助公司節約的存儲空間則超過53PB。
BLOB與聚合文件系統元數據共同被匯聚在以100GB為單位的邏輯分卷當中。這類邏輯分卷由數據文件、索引文件以及日志文件共同構成。其中索引文件其實是一套針對內存內存儲主機查找結構的快照。當所有分卷都被鎖定時,則不允許再創建新的分卷。
這些分卷構成多個cell單元并被保存在數據中心內部,其中每個單元由包含15臺主機的14套機架構成、每臺主機配備30塊4TB磁盤驅動器。每個分卷/字符串/數據塊都擁有一個位于其它不同地理位置的對應分卷/字符串/數據塊。Facebook公司還會在獨立的第三個區域另行保存一套XOR數據內容。這套體系能夠保證任意區域出現故障時,用戶仍能順利訪問所需數據信息。
那么一般性企業用戶是否需要建立這樣一套存儲體系來打理自己的近線數據呢?基本上用不著,畢竟大部分企業用戶根本不需要像Facebook那樣面對如此龐大的數據總量,也不可能遇到同等規模的數據增長速度或者信息不變性。