🐡

S3 のパフォーマンスの最適化

に公開

S3 のリクエスト性能

S3 は 1秒あたり数千のリクエストを簡単に処理できます。また、自動的にスケールするので、リクエストが増えても対応できます。
リクエストの目安(1つのプレフィックスごと)としては、以下の通りです。

リクエスト種別 1秒あたりの目安数
PUT / COPY / POST / DELETE 約 3,500 回以上
GET / HEAD 約 5,500 回以上

※「プレフィックス」とは、オブジェクトのキー名の先頭部分のこと。例: images/2024/ など。

パフォーマンスをさらに上げたいときの方法

パフォーマンスをさらに上げたいときの方法としては、並列化(プレフィックスの分割)という複数のプレフィックスを使うことで、処理を並列にして性能を上げることができます。
例えば、10個のプレフィックスを使うと、GET/HEAD リクエストは最大 55,000 回/秒 まで拡張可能です。
ただし、注意点として、スケーリングには時間がかかります(一瞬では完了しない)。なので、急に大量のリクエストを送ると、一時的に 503 Slow Down エラーになることがある(S3がスケール中)。

大量データ(データレイクなど)への対応

データレイクのようなアプリケーションは、ペタバイト級のデータを扱うことがあります。
また、EC2インスタンスのネットワーク能力を最大限使い、1インスタンスで 最大100Gbps の転送が可能です。
さらに、複数のインスタンスを使えば、秒間でテラバイト級のデータ処理も可能です。

レイテンシー(応答速度)重視のアプリ

ソーシャルメディアのようなアプリでは、応答速度(レイテンシー)が重要です。S3は小さなファイルであれば、約100〜200ミリ秒の一定レイテンシーで応答可能です。

他サービスとの組み合わせによる高速化

下記のような課題や状況下で、S3と他のサービスと組み合わせると、その課題や問題を解決することができます。

課題 対応サービス
レイテンシーを下げたい / 転送速度を上げたい Amazon CloudFrontAmazon ElastiCache でキャッシュを活用
遠距離のS3転送を速くしたい S3 Transfer Acceleration:CloudFrontのエッジロケーション経由で高速化
S3暗号化にKMSを使っている場合の制限 AWS KMS の制限 に注意(KMSのリクエスト上限あり)

まとめ

  • S3は非常に高性能で自動スケーラブルなストレージ。
  • プレフィックスをうまく使って並列化すれば、リクエスト性能を大きく伸ばせる。
  • ただし急なアクセス集中には注意が必要(スケーリングに時間がかかるため)。
  • 他のAWSサービスと組み合わせることで、さらなる高速化・最適化が可能。

参考

https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/optimizing-performance.html

Discussion