少於 1 分鐘閱讀

Blob Storage

有時候你會需要儲存大型的二進制物件,像是影片、圖片、機器學習模型等等,這些資料不適合給 DB 來做儲存跟管理,既沒效率也昂貴,當前主流做法是使用 Amazon S3 或 Google Cloud Storage 這類專門的服務,如果是本地部署的話可以考慮 MinIO

Blob 儲存服務很簡單,就是讓你上傳數據,然後會回傳給你一個 URL,你之後可以透過 URL 來下載資料,通常會結合 CDN,你就可以上傳檔案然後透過 CDN 快取到各地讓別人快速讀取。

一般來說這類 Blob 儲存服務是次要的,你還是會需要一個主要的 DB 來處理資料,而 Blob 回傳的 URL 還可以儲存在 DB 中,讓我們可以查詢跟索引資料,混合兩者的好處。

這邊是幾個常見的作法:

  • 設計 AutoML -> 將模型、數據集儲存在 blob 儲存中,將 meta-data(數據集大小、模型大小、類型等等)儲存在資料庫中。
  • 設計 Youtube -> 將影片儲存在 blob 儲存中,將 meta-data(影片長度、類型、上傳者等等)儲存在資料庫中。

blob

這類服務的特點是:

  1. Durability:透過 replication、erasure coding(抹除碼將一個訊息由n個區塊變成一個訊息超過n個區塊,原本的訊息可以由新的訊息的區塊子集合所重建。) 等技術來確保你的資料會安全的保留

  2. Scalability:像 S3 這類儲存方案可以視為無限擴展,當然不是真的無限,但你理論上用不完,而在面試時你也可以直接不考慮 blob 服務的可擴展性

  3. Cost:blob 服務便宜很多,例如:S3 前 50TB 的每月每 GB 收費 $0.023,在 DynamoDB 中收費是前 10TB 每月每 GB $1.25 元,試想我們都儲存 50TB 的資料,在 S3 中我們一個月要付出 $50000 * 0.023 = 1150$,而 DynamoDB 要 $50000 * 1.25 = 62500$,這還不包含 DynamoDB 在 10TB 後的費率調整,相當驚人

  4. Security:Blob 服務提供像是傳輸中加密、靜態檔案加密,還有訪問控制

  5. 直接從客戶端下載或上傳:Blob 允許直接從客戶端上傳和下載 blob,這些檔案就不用先經過我們的服務才傳輸出去,省去一道工序,這部分需要了解預先簽署(presigned)URL 跟如何授予他們臨時訪問權限

  6. Chunking:在傳輸大型檔案時,通常使用 chunking 將文件切分成一個個小區塊(chunks),這讓我們可以失敗恢復上傳、並行上傳,可以參考 S3 的 multipart upload API 來得知更多細節

常見的有 Amazon S3 或 Google Cloud Storage,作者推薦 S3,因為最多人使用。