S3 bucket 效能的 Best practices 避免 HTTP 500、503

2018-07-07 AWS

昨天在公司內部的 AWS 讀書會看 A Cloud Guru 時有提到 S3 bucket 的效能跟設計,基本上 AWS 會替 S3 自動 scale,一般狀況下不需要擔心 S3 效能上的問題,但是如果你的使用量極大,並且到達以下情況的時候就要注意:

  • 混合型的 request (GET, PUT, DELETE, or GET bucket),且每秒超過 100 次 request。
  • Only GET 每秒超過 300 次的 request。

 

符合以上兩項,你可能會開始收到 HTTP 500 / 503 的錯誤 …

 

AWS 其實有提供 S3 的使用方法「How do I improve the performance of my S3 bucket?」並且 Clifflu 也有在課程中提到 S3 Object Storage 的 Object 分為 index、metadata、data 區塊,

 

而 S3 會用 prefix + hash 的方式來決定要放在哪個 index 分區:

Without the 4 character hash prefix, S3 may distribute all of this load to 1 or 2 index partitions since the name of each object begins with examplebucket/2013-26-05-15-00-0 and all objects in the index are stored in alpha-numeric order. The 4 character hash prefix ensures that the load is spread across multiple index partitions.

 

所以如果 prefix 都相同,就有可能都放在同一個 virtual bucket,若是大量存取時,這個 virtual bucket 就會無法負荷而出現 HTTP 500 / 503 的錯誤。

 

要避免這樣的情況發生,就是把 prefix 切開,讓每個 object 都放在不同的 virtual bucket (prefix + hash 出來的值不同,則 index 分區也不同) 來達到分散存取。

examplebucket/232a-2013-26-05-15-00-00/cust1234234/photo1.jpg
examplebucket/7b54-2013-26-05-15-00-00/cust3857422/photo2.jpg
examplebucket/921c-2013-26-05-15-00-00/cust1248473/photo2.jpg
examplebucket/ba65-2013-26-05-15-00-00/cust8474937/photo2.jpg
examplebucket/8761-2013-26-05-15-00-00/cust1248473/photo3.jpg
examplebucket/2e4f-2013-26-05-15-00-01/cust1248473/photo4.jpg
examplebucket/9810-2013-26-05-15-00-01/cust1248473/photo5.jpg
examplebucket/7e34-2013-26-05-15-00-01/cust1248473/photo6.jpg
examplebucket/c34a-2013-26-05-15-00-01/cust1248473/photo7.jpg

 

如上述範例,S3 會取前 4 個字原來做 hash,利用簡單的 prefix 區別來解決 S3 效能上的問題

 

然後這篇文章最後更新日期是 2017-09-25,應該還有效 …

 

給 Mr. 沙先生一點建議

彙整

分類

展開全部 | 收合全部

License

訂閱 Mr. 沙先生 的文章

輸入你的 email 用於訂閱