設計パターンのベストプラクティス: Amazon S3 のパフォーマンスの最適化 - Amazon Simple Storage Service

設計パターンのベストプラクティス: Amazon S3 のパフォーマンスの最適化

Amazon S3 のストレージに対してアップロードおよび取得を行う際に、アプリケーションはリクエストのパフォーマンスとして 1 秒あたり数千のトランザクションを容易に達成できます。Amazon S3 は、高いリクエストレートに自動的にスケールされます。たとえば、アプリケーションでバケット内のプレフィックスごとに 1 秒あたり 3,500 回以上の PUT/COPY/POST/DELETE リクエストまたは 5,500 回以上の GET/HEAD リクエストを達成できます。バケット内のプレフィックスの数に制限はありません。読み取りを並列化することによって読み取りまたは書き込みのパフォーマンスを向上させることができます。たとえば、Amazon S3 バケットに 10 個のプレフィックスを作成して読み取りを並列化すると、読み取りパフォーマンスを 1 秒あたり 55,000 回の読み取りリクエストにスケールできます。同様に、複数のプレフィックスに書き込むことで、書き込みオペレーションをスケールできます。

Amazon S3 上のデータレイクアプリケーションによっては、ペタバイトを超えるデータに対して実行されるクエリで数百万から数十億のオブジェクトをスキャンします。これらのデータレイクアプリケーションは、Amazon EC2 インスタンスのネットワークインターフェイスの使用を最大限に高めて、単一のインスタンスで最大 100 Gb/秒の転送レートを実現しています。その後、これらのアプリケーションは、複数のインスタンスにわたってスループットを集約して 1 秒あたり複数テラバイトを確保します。

ソーシャルメディアメッセージングアプリケーションなどの他のアプリケーションは、レイテンシーの影響を受けやすいアプリケーションです。このようなアプリケーションでは、小さなオブジェクト (大きなオブジェクトの場合は最初のバイトを受け取るまで) のレイテンシーで約 100~200 ミリ秒の一定のレイテンシーを実現できます。

他の AWS のサービスもさまざまなアプリケーションアーキテクチャのパフォーマンスの高速化に役立ちます。例えば、HTTP 接続ごとの転送レートを高めたい場合やレイテンシーをミリ秒単位に抑えたい場合は、Amazon CloudFront または Amazon ElastiCache を Amazon S3 のキャッシュとして使用します。

また、長距離間のクライアントと S3 バケットのデータ転送を高速化する場合は、Amazon S3 Transfer Acceleration を使用した高速かつ安全なファイル転送の設定 を使用します。Transfer Acceleration は、CloudFront の世界中に点在するエッジロケーションを使用して、長距離間のデータ転送を高速化します。Amazon S3 ワークロードで AWS Key Management Service (SSE-KMS) によるサーバー側の暗号化を使用している場合、ユースケースでサポートされるリクエスト率については、AWS Key Management Service デベロッパーガイドの「AWS KMS 制限」を参照してください。

以下のトピックでは、Amazon S3 を使用するアプリケーションのパフォーマンスを最適化するためのベストプラクティスガイドラインと設計パターンについて説明します。このガイドラインは、Amazon S3 のパフォーマンスの最適化に関するこれまでのガイドラインよりも優先されます。例えば、Amazon S3 の以前のパフォーマンスのガイドラインでは、頻繁なデータ取得のパフォーマンスを最適化するために、ハッシュ文字列を使用してプレフィックスの命名をランダム化することを推奨していました。現在は、パフォーマンスを向上させるためにプレフィックスの命名をランダム化する必要はなくなり、プレフィックスに日付順の名前を使用できるようになりました。Amazon S3 のパフォーマンスの最適化に関する最新情報については、「Amazon S3 のパフォーマンスのガイドライン」および「Amazon S3 のパフォーマンスの設計パターン」を参照してください。