🐡
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 CloudFront、Amazon ElastiCache でキャッシュを活用 |
遠距離のS3転送を速くしたい | S3 Transfer Acceleration:CloudFrontのエッジロケーション経由で高速化 |
S3暗号化にKMSを使っている場合の制限 | AWS KMS の制限 に注意(KMSのリクエスト上限あり) |
まとめ
- S3は非常に高性能で自動スケーラブルなストレージ。
- プレフィックスをうまく使って並列化すれば、リクエスト性能を大きく伸ばせる。
- ただし急なアクセス集中には注意が必要(スケーリングに時間がかかるため)。
- 他のAWSサービスと組み合わせることで、さらなる高速化・最適化が可能。
参考
Discussion