15

バックグラウンド

私たちのプロジェクトでは、クライアントがアップロードしたファイルのストレージとしてAmazon S3を使用しています。

技術的な理由により、ファイルを一時的な名前で S3 にアップロードし、その内容を処理して、処理後にファイルの名前を変更します

問題

名前を変更するファイルは正常にアップロードされましたが、「名前の変更」操作はエラーで何度も失敗します。404 (key not found)

Amazonのドキュメントでは、この問題について言及しています:

Amazon S3 は、Amazon のデータ センター内の複数のサーバー間でデータを複製することにより、高可用性を実現します。PUT リクエストが成功すると、データは安全に保存されます。ただし、変更に関する情報は Amazon S3 全体にレプリケートする必要があり、これには時間がかかる場合があるため、次のような動作が見られる場合があります。

回避策として一種のポーリングを実装しました。成功するまで「名前の変更」操作を再試行してください。
ポーリングは 20 秒後に停止します。

この回避策はほとんどの場合に機能します。ファイルは数秒以内に複製されます。
しかし、非常にまれですが、20 秒では不十分な場合もありますS3 でのレプリケーションにはさらに時間がかかります。

質問

  • PUT オペレーションが成功してから Amazon S3 でのレプリケーションが完了するまでに観測された最大時間はどれくらいですか?

  • Amazon S3 はレプリケーションを「バイパス」する方法を提供していますか? ('master' を直接クエリしますか?)

4

2 に答える 2

11

更新:この回答では、ほとんどの場合、私が残した古い用語を使用しています。AWS は、「US-Standard」のフレンドリ名を他のリージョンの命名とより一致するように変更しましたが、 IPv4 のリージョン エンドポイントにはまだ珍しい名前が付けられていs3-external-1.amazonaws.comます。

S3 の us-east-1 リージョンには、IPv4/IPv6 の「デュアル スタック」エンドポイントがあり、IPv6 が有効になっている場合、このエンドポイントは以下で説明するs3.dualstack.us-east-1.amazonaws.comように操作上同等に見えます。s3-external-1

この地域のリクエストの地理的ルーティングに関する文書化された参照は、多くのコメントがなく、ほとんど消えているようですが、事例証拠は、次の情報がまだその地域に関連していることを示唆しています.

Q. US Standard リージョンはありませんでしたか?

AWS リージョンの命名規則と一致するように、米国標準リージョンを米国東部 (バージニア北部) リージョンに名前変更しました。

https://aws.amazon.com/s3/faqs/#regions

S3 Transfer Acceleration 機能を使用するバケットは、グローバル スタイルのエンドポイントを使用します。${bucketname}.s3-accelerate.amazonaws.comこのエンドポイントが us-east-1 バケットと結果整合性に関してどのように動作するかはまだ明らかではありませんが、有効になっている場合、他のリージョンがこの機能の影響を受けないことは当然のことです。この機能は、リクエストを同じ S3 エンドポイントにルーティングするが、CloudFront を強化するのと同じシステムである AWS「エッジ ネットワーク」を介してプロキシすることにより、バケットからより離れたユーザーの転送スループットを向上させます。基本的に、これは CloudFront を介した自己構成パスですが、キャッシュは有効になっていません。高速化は、最適化されたネットワーク スタックと、インターネット上のパスの大部分でマネージド AWS ネットワーク上のトラフィックを維持することによってもたらされます。そのため、この機能を有効にしてバケットで使用する場合、この機能は一貫性に影響を与えないはずです... しかし、前述したように、us-east-1 バケットとどのように相互作用するかはまだわかっていません。


US-Standard (us-east-1) リージョンは、S3 の中で最も古く、おそらく最大のリージョンであり、他の新しいリージョンとはいくつか異なるルールでプレイします。

重要かつ関連する違いは、一貫性モデルです。

[米国標準を除くすべてのリージョン] の Amazon S3 バケットは、新しいオブジェクトの PUTS に対する読み取り後の書き込み整合性と、上書きの PUTS および DELETES に対する結果整合性を提供します。米国標準リージョンの Amazon S3 バケットは、結果整合性を提供します。

http://aws.amazon.com/s3/faqs/

これが、米国標準を使用していると想定した理由です。あなたが説明した動作は、その設計上の制約と一致しています。

これが別のリージョンのテスト バケットで発生しないことを確認できるはずですが、同じリージョン内の EC2 から S3 へのデータ転送は無料でレイテンシが非常に低いため、別のリージョンのバケットを使用すると、実用的ではありません。

試してみる価値のある別のオプションがあり、US-Standard の内部動作に関係しています。

米国標準は、実際にはバージニア州とオレゴン州の間で地理的に分散されており、「s3.amazonaws.com」へのリクエストは、DNS を介していずれかの場所に選択的にルーティングされます。このルーティングは大部分がブラック ボックスですが、Amazon は回避策を公開しています。

エンドポイントを「s3.amazonaws.com」から「s3-external-1.amazonaws.com」に変更することで、リクエストがバージニア北部にのみルーティングされるように強制できます ...

http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region

...これは私の憶測ですが、リクエストの地理的ルーティングによって問題が悪化する可能性があり、それらを「s3-external-1」(明確にするために、まだ米国標準です)に強制することで改善される可能性がありますまたは問題を解決します。

更新:上記のアドバイスは公式には憶測を超えていますが、歴史的な参考のために残しておきます。私が上記の記事を書いた約 1 年後、Amazon は実際に、US-Standard が新しいオブジェクトの作成で読み取り後の書き込みの一貫性を提供することを発表しましたが、それはエンドポイントが使用されている場合のみです。s3-external-1彼らはそれが新しい動作であるかのように説明しており、それは事実かもしれません...しかし、それは単にプラットフォームが公式にサポートする動作の変更である可能性もあります. どちらにしても:

[2015-06-19] から、米国標準リージョンは、北バージニア エンドポイント (s3-external-1.amazonaws.com) を使用して Amazon S3 に追加された新しいオブジェクトの書き込み後の読み取り一貫性をサポートするようになりました。この変更により、すべての Amazon S3 リージョンが書き込み後の読み取りの一貫性をサポートするようになりました。読み取り後書き込みの一貫性により、Amazon S3 での作成直後にオブジェクトを取得できます。この変更の前は、米国スタンダード リージョンの Amazon S3 バケットは、新しく作成されたオブジェクトの結果整合性を提供していました。つまり、新しいオブジェクトのアップロード直後は、一部の小さなオブジェクト セットを読み取ることができなかった可能性があります。これらの時折の遅延により、アプリケーションがオブジェクトを作成した直後にオブジェクトを読み取る必要があるデータ処理ワークフローが複雑になる可能性があります。米国標準リージョンでは、この一貫性の変更はバージニア北部のエンドポイント (s3-external-1.amazonaws.com) に適用されることに注意してください。グローバル エンドポイント (s3.amazonaws.com) を使用しているお客様は、米国標準リージョンでこの読み取り後の書き込みの一貫性の利点を活用するために、北バージニア エンドポイント (s3-external-1.amazonaws.com) の使用に切り替える必要があります。 . 【強調追加】

https://forums.aws.amazon.com/ann.jspa?annID=3112

大量のファイル (毎秒数百) をアップロードしている場合は、S3 のシャーディング メカニズムを圧倒している可能性もあります。1 秒あたりのアップロード数が非常に多い場合、キー (「ファイル名」) が字句的に連続していないことが重要です。

Amazon が DNS を処理する方法に応じて、コードで処理できる場合は、バケットをアドレス指定する別の代替バリアントを試すこともできます。

US-Standard のバケットは、 http://mybucket.s3.amazonaws.com/key ... またはhttp://s3.amazonaws.com/mybucket/key ... およびこれら 2 つの内部実装のいずれかでアドレス指定できます。少なくとも理論的には、問題に関連する方法で動作を変更する方法で異なる可能性があります。

于 2014-05-22T23:28:45.877 に答える
4

ご指摘のとおり、現在、S3 から直接の結果整合性の保証または回避策はありません。Netflix からのこの講演で、講演者は 7 時間 (非常にまれな私見) の一貫性の遅延が見られたと述べています。彼らは、S3 の上に整合性レイヤーであるs3mperを作成しました。これはオープン ソースであり、コンテキストに役立つ可能性があります。

それ以外は、@Michael - sqlbot が示唆したように、us-standard は書き込み後の一貫性を提供しておらず、観察された一貫性の遅延はそこで異なる場合があります。

于 2014-05-21T21:52:11.800 に答える