S3がオフラインになったときにサイトをオンラインに保つための良い戦略は何ですか?


32

S3がオフラインになったときにサイトをオンラインに保つための良い戦略は何ですか?

S3 US East 1がオフラインになった場合、サイト全体がオフラインになるのを防ぐために、アプリを構成/構造化する方法を教えてください。

このような状況で多様化するための最善の戦略は何ですか?


何をしようとしましたか?
030

回答:


26

2015年3月、Amazon AWS 、リージョン間のS3レプリケーションをサポートすると発表しました。S3の特定のリージョンがオフラインになると、別のリージョンのミラーからファイルを提供できます。

ソース:https : //aws.amazon.com/blogs/aws/new-cross-region-replication-for-amazon-s3/

別の地域に切り替えることでインフラストラクチャをオンラインに保つ方法は複雑ですが、S3は比較的小さくシンプルなコンポーネントです。NetflixにはChaos Gorillaでの経験に関するすばらしい記事があります。

これは、遅延の増加など、サービスの低下にも適用されます。依存するサービスが完全にオフラインになっているときだけではありません。Netflixにもこれに関する記事があります:Chaos Engineering Upgraded


何かが機能することを確認する戦略は、それが機能することをテストすることです。バックアップ、コードなども同様です。テストを実行するときに、ステージング環境(ある場合)または開発環境(ある場合)を複製サイトから動作させることをお勧めします。
エフゲニー

Netflixは、バックアップ計画が実際に機能することを確認するために、リージョン全体をオフラインにすることが知られています。
エフゲニー

NetflixがAmazonでダウンしたときを思い出します
。...-wogsland

10

あなたが求めているのは、基本的に、高可用性です。システムの可用性を高めるには、次の3つが必要です。

  1. 単一障害点を排除
  2. エンドポイントから別のエンドポイントに切り替えるメカニズム
  3. 障害を検出する方法

単一障害点を排除

S3の場合、Evgenyが指摘したように、ポイント#1はS3クロスリージョンレプリケーションによってアドレス指定されます。

ただし、複製は瞬時ではないため、アプリケーションの複製を認識させるかどうかを確認する必要があります。停止が発生した場合、ソースバケットに書き込まれたものがまだ宛先バケットに到達していない(複製されていない)可能性があります。アプリケーションがそのようなシナリオをどのように処理するかを考える必要があります。それは、データの種類、データの処理内容、および(潜在的に)エンドユーザーまたは管理者の期待に大きく依存します。

エンドポイントから別のエンドポイントに切り替えるメカニズム

S3の場合、これは、停電の場合に、アプリケーションがバケットAからの読み書きを停止し、代わりにバケットBを使用することを意味します。

私が知る限り、これを達成する方法は今のところあなた次第です。他の一部のAWSサービスは完全に透過的なフェイルオーバーを提供しますが、現時点ではS3でそのようなことを認識していません。

これを実現するにはさまざまな方法があります。1つの例は、適切なバケットにトラフィックをルーティングするプロキシを使用することです。停止中は、プロキシを更新/変更して、停止の影響を受けないバケットにトラフィックをルーティングします。もう1つの例は、アプリケーション構成を動的にし、キーと値のストアに格納することです。アプリケーションが更新されたプロパティのKVストアを十分に頻繁に読み取る場合、読み取り元と書き込み先を切り替えることができます(たとえば、Spring Cloudは "EnvironmentChange"リスナーをサポートしています)。

障害を検出する方法

まあ、それは簡単だと思う。単に書き込みと読み取りのループを設定し、何かが正しくないとすぐに警告します:)

最後に

  • アプリケーションがバケットに書き込んでいる場合、フェイルオーバーの場合に何が起こるかを考える必要があります。すべての書き込みが宛先バケットに行われましたか(そして、わかりますか)?宛先バケットへの書き込みを許可できますか(新しい「プライマリ」にする)。慎重に計画することで、スプリットブレインまたは失われた更新シナリオを回避できます。
  • SLAに応じて、ポイント2と3を自動化または自動化することができます。それには追加の計画、ツール、およびテストが必要ですが、適切に記述されたスクリプトは常に、人間ができるよりも速く、より予測可能な方法で反応します(障害は、人間の介入が危険なものである深夜に発生する迷惑な習慣も持っています)
  • リージョン間レプリケーションでさえ、単一障害点を完全に排除するわけではないことに言及する価値があります。確かに、地域がダウンした場合、あなたは覆われています。しかし、米国全体でAWSが停止した場合はどうなりますか?Azureは昨年、部分的ではありますがグローバルに停止しましたが、2014年にも1回停止しました。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.