link

特別推薦facebook 中文網站: http://www.zwzpyg.com/?p=383

2011年5月15日星期日

淺談Facebook圖片存儲系統HayStack概要

淺談Facebook圖片存儲系統HayStack概要
HayStack是Fackbook用於存儲照片的系統,其存儲照片的數量在千億數量級,本文簡要分析HayStack的設計與實現原理。

  圖片存儲的幾個關鍵點:

  1. Metadata信息存儲。由於圖片數量巨大,單機存放不了所有的Metadata信息,假設每個圖片文件的Metadata佔用100字節,260 billion圖片Metadata佔用的空間為260G * 100 = 26000GB。

  2. 減少圖片讀取的IO次數。在普通的Linux文件系統中,讀取一個文件包括三次磁盤IO:讀取目錄元數據到內存,把文件的inode節點裝載到內存,最後讀取實際的文件內容。由於文件數太多,無法將所有目錄及文件的inode信息緩存到內存,因此磁盤IO次數很難達到每個圖片讀取只需要一次磁盤IO的理想狀態​​。

  3. 圖片緩存。圖片寫入以後就不再修改,因此,需要對圖片進行緩存並且將緩存放到離用戶最近的位置,一般會使用CDN技術。

  HayStack的主要目標:

1. High throughput and low latency(高吞吐量、低延時):簡化元數據結構與存儲模式,直接存儲文件在物理卷上的位置,減小lookup時間。

2. Fault-tolerant(容錯性):在不同的機器上維護多個副本

3. Cost-effective(高效):提高存儲空間利用率、提高請求處理效率。

4. Simple(簡單):易於實現和維護,部署週期短。

  HayStack的總體架構:

Haystack的寫請求(圖片上傳)處理流程為:Web Server首先請求Haystack Directory獲取圖片的id和可寫的邏輯捲軸,接著將數據寫入對應的每一個物理捲軸(備份數一般為3)。

Haystack圖片讀取請求大致流程為:用戶訪問一個頁面時,Web Server請求Haystack Directory構造一個URL:後續根據各個部分的信息依次訪問CDN,Cache和後端的Haystack Store存儲節點。 Haystack Directory構造URL時可以省略部分從而使得用戶直接請求Haystack Cache而不必經過CDN。 Haystack cache收到的請求包含兩個部分:用戶Browser的請求及CDN的請求,Haystack cache只緩存用戶Browser發送的請求且要求請求的Haystack Store存儲節點是可寫的。一般來說,Haystack Store的存儲節點寫一段時間以後達到容量上限變為只讀,因此,可寫節點的圖片為最近增加的圖片,是熱點數據。

Haystack 刪除操作比較簡單,只是在Haystack 存儲的指針上設置一個已刪除標誌,已經刪除的指針和索引的空間並不回收。可通過定期的對物理捲進行合併,以回收已刪除的空間。

  Haystack Directory的主要功能如下:

1, 提供邏輯捲軸到物理捲軸的映射,為寫請求分配圖片id;

2, 提供負載均衡,為寫操作選擇邏輯捲軸,讀操作選擇物理捲軸;

3, 屏蔽CDN服務,可以選擇某些圖片請求直接走HayStack Cache;

  4, 標記某些邏輯捲軸為read-only;

HayStack中的圖片順序的存放在物理卷中,獲取圖片在物理卷中的偏移即可讀取圖片,圖片的存儲結構如下所示(每張圖片稱為一個needle)。

其中,key為圖片的唯一標示,alternate key為尺寸的標示,flag為刪除標誌,size為數據大小,data為實際的數據。

淺談Facebook圖片存儲系統HayStack概要

HayStack為每張圖片在內存中維護圖片與其位置的映射表,在圖片被寫入時更新映射關係,每次系統啟動時可通過讀取物理卷並構造映射表,但這樣做很耗時間,但HayStack通過為每張圖片構造index file來簡化了系統啟動時映射表的構建,index file的結構如下所示:(其主要包含key與對應圖片位置的映射關係,系統啟動時,通過讀取index file便能很快的構造映射表。)

淺談Facebook圖片存儲系統HayStack概要

  HayStack的幾點優勢:

1. 採用輕量級的HayStack Directory維護邏輯捲到多個物理卷的映射關係,方便的實現了副本技術,以實現系統容錯。

2. 簡化文件的元數據結構,以追加寫的方式往物理卷中存儲圖片,效率高。同時將圖片key與位置的映射關係全部保留在內存中,通過一次lookup即可獲取圖片的位置。

3. 物理卷中所有的圖片都對應有index文件(固定大小,結構簡單),從而每次系統重啟時,物理卷的映射信息能快速的通過index文件構建。

4. 引入delete flag、compaction、batch upload以及進一步提高存儲的效率。

没有评论:

发表评论