私はvisualwebsiteoptimizer.com / を所有して運営しています。このアプリは、特定のメトリックを追跡するために私の顧客がWebサイトに挿入するコードスニペットを提供します。コードスニペットは外部JavaScript(サイトコードの上部)であるため、顧客のWebサイトを表示する前に、訪問者のブラウザーがアプリサーバーにアクセスします。アプリサーバーがダウンした場合、ブラウザはタイムアウトする前に接続を確立しようとし続けます(通常60秒)。ご想像のとおり、どのような状況でもアプリサーバーを停止することはできません。これは、Webサイトの訪問者だけでなく、お客様のWebサイトの訪問者のエクスペリエンスにも悪影響を与えるためです。
現在、1つのバックアップサーバーが別のデータセンター(実際には別の大陸)に配置されているDNSフェールオーバーメカニズムを使用しています。つまり、アプリサーバーを3つの別々の場所から監視し、それがダウンしていることが検出されるとすぐに、バックアップサーバーのIPを指すようにAレコードを変更します。これはほとんどのブラウザーで正常に機能します(TTLは2分です)が、IEはDNSを30分間キャッシュします。弊社のvisualwebsiteoptimizer.com/split-testing-blog/maximum-theoretical-downtime-for-a-website-30-minutes/の最近の投稿をご覧ください。
それでは、アプリのデータセンターで大規模な障害が発生した場合に、ほぼ瞬時にフェールオーバーを行うには、どのような設定を使用できますか?私はここwww.tenereillo.com/GSLBPageOfShame.htmを読みました。複数のAレコードを持つことが解決策ですが、(まだ)セッションの同期はできません。私たちが検討しているもう1つの戦略は、2つのAレコードを使用することです。1つはアプリサーバーを指し、2つ目は、別のデータセンターにあるリバースプロキシを指します。この戦略は合理的だと思いますか?
私たちの優先事項を確認するために、私たちは私たち自身のウェブサイトやアプリをダウンさせておく余裕がありますが、ダウンタイムのために顧客のウェブサイトを遅くさせることはできません。したがって、アプリサーバーがダウンした場合、デフォルトのアプリケーション応答で応答するつもりはありません。空白の応答で十分ですが、ブラウザがそのHTTP接続を完了することだけが必要です(他には何も必要ありません)。
参照:有用なこのスレッドを読みましたserverfault.com/questions/69870/multiple-data-centers-and-http-traffic-dns-round-robin-is-the-only-way-to-assure