S3 Express One Zone のパフォーマンスガイドラインと設計パターン - Amazon Simple Storage Service

S3 Express One Zone のパフォーマンスガイドラインと設計パターン

Amazon S3 Express One Zone からオブジェクトをアップロードしたり取得したりするアプリケーションを構築する場合は、パフォーマンスを最適化するためのベストプラクティスガイドラインに従ってください。S3 Express One Zone ストレージクラスを使用するには、S3 ディレクトリバケットを作成する必要があります。S3 Express One Zone ストレージ クラスは、S3 汎用バケットでの使用はサポートされていません。

その他すべての Amazon S3 ストレージクラスと S3 汎用バケットのパフォーマンスガイドラインについては、「設計パターンのベストプラクティス: Amazon S3 のパフォーマンスの最適化」を参照してください。

S3 Express One Zone ストレージクラスとディレクトリバケットを使用する際にアプリケーションで最高のパフォーマンスを実現するには、次のガイドラインと設計パターンをお勧めします。

S3 Express One Zone ストレージと AWS コンピューティングリソースを同じロケーションに配置する

各ディレクトリのバケットは、バケットの作成時に選択した単一のアベイラビリティーゾーンに保存されます。まず、コンピュートワークロードまたはリソースにローカルなアベイラビリティーゾーンに新しいディレクトリバケットを作成します。これにより、レイテンシーが非常に低い読み取りと書き込みの利用を直ちに開始できます。ディレクトリバケットは、コンピューティングとストレージの間のレイテンシーを低減するために AWS リージョン 内のアベイラビリティーゾーンを選択できる最初の S3 バケットです。

複数のアベイラビリティーゾーンにわたってディレクトリバケットにアクセスすると、レイテンシーが増加します。パフォーマンスを最適化するには、可能な場合は、同じアベイラビリティーゾーンにある Amazon Elastic Container Service、Amazon Elastic Kubernetes Service、Amazon Elastic Compute Cloud のインスタンスからディレクトリバケットにアクセスすることをお勧めします。

ディレクトリバケット

各ディレクトリバケットは、1 秒あたり数十万のトランザクション (TPS) をサポートできます。汎用バケットとは異なり、ディレクトリバケットはキーをプレフィックスではなくディレクトリに階層的に整理します。プレフィックスは、オブジェクトキー名の先頭にある文字列です。プレフィックスは、ディレクトリと同様の方法でデータを整理する方法と考えることができます。ただし、プレフィックスはディレクトリではありません。

プレフィックスは、汎用バケット内のフラットな名前空間にデータを編成します。汎用バケット内のプレフィックスの数には制限はありません。各プレフィックスは 1 秒あたり少なくとも 3,500 PUT/POST/DELETE または 5,500 GET/HEAD リクエストを処理できます。複数のプレフィックス間でリクエストを並列処理してパフォーマンスをスケールすることもできます。読み取りオペレーションと書き込みオペレーションの両方の場合、このスケーリングは瞬時にではなく段階的に行われます。汎用バケットが新しいより高いリクエスト率に合わせてスケールされる間、HTTP ステータスコード 503 (Service Unavailable) エラーが発生する場合があります。

階層型名前空間では、オブジェクトキーの区切り文字が重要です。ただし、サポートされている唯一の区切り文字はスラッシュ (/) です。ディレクトリは区切り文字の境界で定義されます。例えば、dir1/dir2/file1.txt オブジェクトキーを使用すると、ディレクトリ dir1/ と dir2/ が自動的に作成され、file1.txt オブジェクトが dir1/dir2/file1.txt パス内の /dir2 ディレクトリに追加されます。

オブジェクトがディレクトリバケットにアップロードされる際に作成されるディレクトリには、プレフィックスごとの TPS 制限はなく、HTTP 503 (Service Unavailable) エラーの可能性を低減するために自動的に事前にスケールされます。この自動スケーリングにより、アプリケーションは必要に応じてディレクトリ内およびディレクトリ間の読み取り/書き込みリクエストを並列処理できます。

ディレクトリバケットの水平方向のスケーリング、リクエストの並列処理

ディレクトリバケットに複数のリクエストを同時に発行し、リクエストを別々の接続に分散してアクセス可能な帯域幅を最大化することで、最高のパフォーマンスを実現できます。S3 Express One Zone には、バケットへの接続数に制限はありません。同じディレクトリへの同時書き込みが多数発生した場合、個々のディレクトリのパフォーマンスを水平方向かつ自動的にスケールできます。

オブジェクトキーが最初に作成され、そのキー名にディレクトリが含まれると、そのオブジェクトのためにディレクトリが自動的に作成されます。同じディレクトリにそれ以降にオブジェクトをアップロードする場合、ディレクトリを作成する必要がないため、既存のディレクトリにオブジェクトをアップロードする際のレイテンシーが軽減されます。

ディレクトリバケット内のオブジェクトの保存では、浅いディレクトリ構造と深いディレクトリ構造の両方がサポートされています。ただし、ディレクトリバケットは自動的に水平方向にスケールされ、同じディレクトリまたは並行処理するディレクトリの兄弟への同時アップロードのレイテンシーは低下します。

セッションベースの認証を使用する

S3 Express One Zone とディレクトリバケットは、ディレクトリバケットへのリクエストを認証して承認するための新しいセッションベースの認証メカニズムをサポートしています。セッションベースの認証では、AWS SDK は自動的に CreateSession API オペレーションを使用して、ディレクトリバケットへのデータリクエストの低レイテンシー認証に使用できる一時セッショントークンを作成します。

AWS SDK は CreateSession API オペレーションを使用して一時的な認証情報をリクエストし、5 分ごとにユーザーに代わって自動的にトークンを作成して更新します。S3 Express One Zone ストレージクラスのパフォーマンス上の利点を活用するには、AWS SDK を使用して CreateSession API リクエストを開始および管理することをお勧めします。このセッションベースのモデルの詳細については、「CreateSession authorization」を参照してください。

S3 の追加のチェックサムのベストプラクティス

S3 Express One Zone では、アップロードまたはダウンロード中にデータを検証するために使用されるチェックサムアルゴリズムを選択するオプションが提供されます。CRC32、CRC32C、SHA-1、SHA-256 などのセキュアハッシュアルゴリズム (SHA) や巡回冗長検査 (CRC) データ整合性チェックアルゴリズムのいずれかを選択できます。MD5 ベースのチェックサムは S3 Express One Zone ストレージクラスではサポートされていません。

CRC32 は、S3 Express One Zone との間でデータを送信する際に AWS SDK が使用するデフォルトのチェックサムです。S3 Express One Zone ストレージクラスで最高のパフォーマンスを実現するには、CRC32 と CRC32C を使用することをお勧めします。

最新バージョンの AWS SDK と一般的なランタイムライブラリを使用する

一部の AWS SDK では、S3 クライアントのパフォーマンスをさらに向上させる AWS Common Runtime (CRT) ライブラリも提供しています。このような SDK には AWS SDK for Java 2.x、AWS SDK for C++、AWS SDK for Python (Boto3) があります。CRT ベースの S3 クライアントは、S3 Express One Zone との間でオブジェクトを転送します。マルチパートアップロード API オペレーションのバイト範囲フェッチを自動的に使用して水平方向のスケーリング接続を自動化することにより、パフォーマンスと信頼性が向上しています。

S3 Express One Zone ストレージクラスで最高レベルのパフォーマンスを実現するには、CRT ライブラリを含む最新バージョンの AWS SDK を使用するか、AWS Command Line Interface (AWS CLI) を使用することをお勧めします。

パフォーマンスのトラブルシューティング

レイテンシーの影響を受けやすいアプリケーションのリクエストを再試行する

S3 Express One Zone は、追加の調整を必要とせずに一貫したレベルのパフォーマンスを実現できるように設計されています。ただし、タイムアウト値とリトライを積極的に設定すると、レイテンシーとパフォーマンスを一定に維持できます。AWS SDK には、特定のアプリケーションの許容値に調整できる設定可能なタイムアウト値と再試行値があります。

AWS Common Runtime (CRT) ライブラリと Amazon EC2 インスタンスタイプの組み合わせ

多数の読み取りおよび書き込みオペレーションを実行するアプリケーションは、そうでないアプリケーションに比べて、より多くのメモリやコンピューティング容量を必要とする可能性があります。コンピューティングを多用するワークロードのために Amazon EC2 インスタンスを起動する際は、アプリケーションが必要とする量のリソースを持つインスタンスタイプを選択します。S3 Express One Zone の高パフォーマンスストレージは、システムメモリ容量が大きく、高パフォーマンスストレージを活用できるより強力な CPU や GPU を備えた、より大規模で新しいインスタンスタイプと組み合わせるのが理想的です。また、CRT が有効になっている AWS SDK の最新バージョンを使用することをお勧めします。これにより、読み取りリクエストと書き込みリクエストの並列処理をより高速化できます。

AWS SDK では HTTP REST API の代わりにセッションベースの認証を使用します。

Amazon S3 では、AWS SDK と同じベストプラクティスに従うことで、HTTP REST API リクエストを使用する際のパフォーマンスを最適化することもできます。ただし、S3 Express One Zone で使用されているセッションベースの承認および認証メカニズムの場合、管理には AWS SDK CreateSession とそのマネージドセッショントークンを使用することを強くお勧めします。AWS SDK は CreateSession API オペレーションを使用して、ユーザーに代わってトークンの作成と更新を自動的に行います。CreateSession を使用すると、各リクエストを承認するための AWS Identity and Access Management (IAM) へのリクエストごとの往復のレイテンシーを回避できます。