新しい「S3リクエストリクエストパフォーマンスの向上」の発表はどういう意味ですか


12

2018年7月17日に、最大のパフォーマンスを達成するためにすべてのS3オブジェクトキーの最初の文字をランダム化する必要がないことを説明するAWSの公式発表がありました:https : //aws.amazon.com/about-aws/whats-new / 2018/07 / amazon-s3-announces-increased-request-rate-performance /

Amazon S3がリクエストレートパフォーマンスの向上を発表

投稿日:2018年7月17日

Amazon S3はパフォーマンスを向上させ、データを追加するために少なくとも毎秒3,500リクエスト、データを取得するために毎秒5,500リクエストをサポートし、追加料金なしで処理時間を大幅に節約できます。各S3プレフィックスはこれらのリクエストレートをサポートできるため、パフォーマンスを大幅に向上させることが簡単になります。

現在Amazon S3で実行されているアプリケーションは、変更なしでこのパフォーマンスの向上を享受します。S3で新しいアプリケーションを構築するお客様は、このパフォーマンスを達成するためにアプリケーションをカスタマイズする必要はありません。Amazon S3の並列リクエストのサポートにより、アプリケーションをカスタマイズせずに、コンピューティングクラスターの要因によってS3パフォーマンスを拡張できます。パフォーマンスはプレフィックスごとにスケーリングされるため、必要なスループットを達成するために必要な数のプレフィックスを同時に使用できます。プレフィックスの数に制限はありません。

このS3要求レートのパフォーマンスの向上により、オブジェクトプレフィックスをランダム化してパフォーマンスを高速化するための以前のガイダンスが削除されます。つまり、パフォーマンスに影響を与えることなく、S3オブジェクトの命名で論理的またはシーケンシャルな命名パターンを使用できるようになりました。この改善は、すべてのAWSリージョンで利用可能になりました。詳細については、Amazon S3開発者ガイドをご覧ください。

それは素晴らしいことですが、混乱を招くことにもなります。それは言う各S3の接頭辞は、それが簡単なパフォーマンスを大幅に向上させるために作り、これらの要求レートをサポートすることができます

ただし、GET Bucket (List Objects)バケットのコンテンツをリストするとき、プレフィックスとデリミタはAPIの単なる引数であるため、「プレフィックスごと」にオブジェクトの取得パフォーマンスについて話すのはどうしたら理にかなっています。への呼び出しはすべて、GET Bucket (List Objects)必要なプレフィックスとデリミタを選択できるため、プレフィックスは事前定義されたエンティティではありません。

たとえば、バケットに次のオブジェクトがある場合:

a1/b-2
a1/c-3

次に、バケットのコンテンツをリストするたびに区切り文字として「/」または「-」を使用することを選択できます。そのため、プレフィックスを

a1/ 

または

a1/b-
a1/c-

ただし、GET ObjectAPIはキー全体を使用するため、特定のプレフィックスまたは区切り文字の概念はオブジェクトの取得には存在しません。それで、5,500 req / sec on a1/、あるいは5,500 req / sec on a1/b-および5,500 on を期待できa1/c-ますか?

だから誰かが「各s3プレフィックス」のパフォーマンスの特定のレベル(たとえば、データを取得するために毎秒+5,500リクエスト)を提案するとき、アナウンスの意味を説明できますか?


私はこれについて説明をしていると思いますが、何らかの確認を見つけることができるかどうかを探しています。インデックスパーティション分割アルゴリズムに関係していると思われます。これは自動で、トラフィックの負荷に基づいており、ハッシュベースではなく字句ベースです。
マイケル-sqlbot

回答:


9

ここで実際にプレフィックスと呼ばれているのは、バケットインデックスの各パーティションを実際に参照している単純化のようです。インデックスはレキシカルなので、オブジェクトキーの先頭の文字に基づいて分割が行われます。したがって、それはprefixと呼ばれます

S3はインデックスパーティションを自動的かつ透過的に管理するため、ここでの「プレフィックス」の正確な定義は実際には多少不正確です。「バケットのワークロードをサポートするためにS3が決定するものは何でも」です。S3は、ワークロードに応じてインデックスパーティションを分割するため、今日同じ「プレフィックス」を持つ可能性のある2つのオブジェクトは、明日、すべてバックグラウンドで異なるプレフィックスを持つことができます。

現在、a1 / a -...およびa1 / b -...およびa1 / c -...はすべて単一のプレフィックスである場合があります。しかし、バケットに十分なトラフィックを投げると、S3はパーティションを分割することを決定する可能性があります。そのため、明日、a1 / a-とa1 / b-は1つのプレフィックスになり、a1 / c-は独自のプレフィックスになります。(つまり、キー<a1 / c-は1つのパーティションにあり、キー> = a1 / c-は現在別のパーティションにあります)。

いつ、具体的にどのしきい値が分割動作をトリガーするかは文書化されていませんが、オブジェクトの数やサイズではなく、リクエストの数にのみ関連しているようです。以前は、これらのパーティションは毎秒数百のリクエストに制限されていましたが、これは大幅に増加しました。


1
非常に興味深く、信じられます。ただし、プレフィックスは負荷に基づいて動的であるため、「プレフィックスごと」に特定のパフォーマンス測定値を割り当てることは意味がありません。バケットのプレフィックスが動的に変化する場合、信頼できるパフォーマンス測定値はありません。あるいは、S3オブジェクトごとに5,500 req / secを期待できるまで、理論的にはプレフィックスを動的に変更する必要があると推測できますか?
ジョンリース

1
バケットのスケーリングは、ダウンではなくアップ方向にのみ進む傾向があるため、パフォーマンス測定は依然として有用です。パーティションごとに単一のオブジェクトにスケーリングすることの明らかな不合理さは、オブジェクトごとに5k + req / sを支払う場合にAWSがどれだけのお金を稼ぐかを理解すると、ほとんど消えてしまうようです。
マイケル-sqlbot

1
はい、パーティションごとに1つのオブジェクトを使用するのは少し面倒です。:-)しかし、もっと深刻なことは、10000オブジェクトバケットに10個の人気のあるオブジェクトが含まれている場合、S10が最終的にパーティションを再分割し、10個がそれぞれ5k reqs / secを取得するまで期待できることを意味します。いくつかの大きなパーティションで。もっともらしい?
ジョンリース

2
はい、S3がワークロードに適応すると確信しています。CloudFrontはゴブリックに分散されており、オブジェクトを要求したビューアーに最も近いエッジにキャッシュするため、リクエスト側のトラフィックが多い場合の公式のガイダンスは、S3と組み合わせてCloudFrontを使用することです。S3にCloudFrontを追加しても、全体的なコストにほとんど影響を与えないような価格設定です(リクエストがCloudFrontからキャッシュミスを処理するためにS3が帯域幅を請求しないため)。
マイケル-sqlbot

マイケルに感謝します。本当に良い慎重な答えは大歓迎です。
ジョンリース
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.