回覆列表
  • 1 # 你不急我急

    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:http:// / / / ,後續根據各個部分的資訊依次訪問CDN,Cache和後端的Haystack Store儲存節點。Haystack Directory構造URL時可以省略部分從而使得使用者直接請求Haystack Cache而不必經過CDN。Haystack cache收到的請求包含兩個部分:使用者Browser的請求及CDN的請求,Haystack cache只快取使用者Browser傳送的請求且要求請求的Haystack Store儲存節點是可寫的。一般來說,Haystack Store的儲存節點寫一段時間以後達到容量上限變為只讀,因此,可寫節點的圖片為最近增加的圖片,是熱點資料。

      Haystack Directory的主要功能如下:

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

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

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

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

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

  • 中秋節和大豐收的關聯?
  • 邀請好友參加婚禮,結果人沒來禮也沒來,以後要怎麼相處?