web-dev-qa-db-ja.com

HTTPトラフィックを最も近いサーバーに分散するにはどうすればよいですか?

これは2つの部分からなる質問の一種です。トロントにDigitalOceanDropletがあり、ランプスタックが付いています(もちろんWebサイトもあります)。その液滴のスナップショットを作成し、おそらくサンフランシスコとアムステルダムにクローンをデプロイしたいと思います。

  1. 場所に基づいて最小の遅延でサーバーへのルーティングを実行するにはどうすればよいですか?

  2. これらのサイトをリアルタイムで複製するにはどうすればよいですか。たとえば、Webサイトを編集すると、変更はすべてのサーバーに反映されますか?

ありがとう

3
Kipplex-Chase

AWS Route 53レイテンシーベースのルーティング を使用できます。 AWS以外のソースでR53を使用できると確信しています。

あるいは、CloudFlareには トラフィックマネージャー があり、これは「ジオステアリング」を実行できます。まだベータ版である可能性があり、無料プランか有料プランかはわかりません。

更新2番目の質問に気づきました。私はあなたの目的が主にページの読み込み時間であり、サービスの可用性の二次的な懸念があると仮定します。さらに、ウェブサイトがWordpressであると仮定します。これは、カスタム作成よりもストックソフトウェアで以下に提案することを行うのが難しいためです。

2つのサイトが同時にトラフィックを処理するようにしたい場合は、同期して、ある種のマルチマスターデータベースレプリケーションを検討する必要があります。これはそれほど単純ではありませんが、それを行うためのテクニックがあります。 Digital Oceanには チュートリアルはこちら があります。 RSyncまたはBitTorrentsyncはファイルレプリケーションを処理します。

唯一の目標が高速な応答時間である場合は、CDNを備えた単一のサーバーを使用して、静的リソースがローカルで提供されるようにすることもできます。CloudFlareはそのために適しています。ページに対する1つのリクエストの待ち時間は、おそらくそれほど重要ではなく、約100ミリ秒余分に、他のリソースが最も近いノードから提供されます。

障害が発生した場合の冗長性が唯一の目標である場合でも、データベースのマスター/リードレプリカタイプのシナリオを検討できます。すべてのトラフィックを1つのサーバーにルーティングし、データベースとファイルを2番目のサイトにライブで複製します。メインサイトがダウンした場合は、2番目のサイトにフェイルオーバーします。これが発生した場合は、メインサイトがオンラインに戻ったときに何をすべきか、どのように同期を取り戻すかを検討する必要があります。この場合でも、同期を保つためにマルチマスターが最も簡単な場合があります。

残念ながら、あなたがやろうとしていることは完全に些細なことではなく、ユースケースに応じて中程度から非常に複雑になる可能性があります。より良いソリューションを提供するには、お客様の目標を理解する必要があります。

4
Tim

ティムはあなたの最初の質問に良い解決策を与えました。

2番目の問題では、(残念ながら)いいえ、これは「キャッシュの無効化」の問題に属します。サーバーソリューションがあります:

  • 1つのサーバーを使用し、CDNサービス(Cloudflare/CloudFront)を使用してコンテンツをキャッシュします。 TTLを設定して、キャッシュの無効化(つまり、「結果整合性」モデル)を処理するか、または
  • 1台のサーバーを使用してCDNサービスを使用し、コンテンツを更新したらパージリクエストを送信します。
  • 3台のサーバーを維持する場合は、自分でパージするためのAPIを開発する必要があります。
2
Gea-Suan Lin