質問

私はプロジェクトに取り組んでいます。世界中(現在5台)のサーバーがあります。 クライアントは、集中ブローカーを介してこれらのサーバーの1つに接続します。 クライアントの発信国は知っていますが、他には何も知りません。サーバーを完全に制御できるため、必要なすべての情報をサーバー上で取得できます。 クライアントを制御するのではなく、標準に従ってこのブローカーを介して接続する必要があります。

ブローカーが待ち時間の短いサーバーを選択することが重要です。そのため、入手したデータでは、近接性のみが利用可能な基準であると考えています。

最初に思いついたのは、各サーバーからクライアントにpingを送信することですが、IPはなく、国だけです。

他のアイデアは、各国のルートノードに各サーバーからpingを送信することです。問題は、各国でルートノードを見つけることです。

「国」間の近接度を計算/検索する方法はありますか? この問題を別の方法で解決する方法についての洞察やアイデアはありますか?

役に立ちましたか?

解決

必要な用語は「地理的負荷分散」だと思います。主要な負荷分散ベンダーのほとんどがここに解決策を持っています-あなたのブローカーはこれらを使用できます。

グーグル地理的負荷分散は便利です探している結果。

他のヒント

これは多くの人が想像する以上にトリッキーですが、正しい答えがあると感じています。

もちろん、素朴な(しかしクールな)ソリューションはクライアントのIPをチェックしています。これは良いスタートですが、「現実の世界」では、 位置情報だけではありません ...

" 低遅延"を要求したため、サーバーとクライアント間で ping を実行し、それに応じて割り当てる必要があります。個人的に何度も私に影響を与えているこの問題の非常に良い例は、私が日本で働いており、台湾のサーバーは私にとってアメリカのサーバーにはるかに近いということです。 しかし、日米間の待ち時間は台湾よりもはるかに少ない(より良い応答)。これは、日本-台湾 日米間のものほど良くありません。したがって、私のIPが近いと思われるために台湾に接続した場合、そこで非常に大きな嫌悪感を私に送信することになります。 pingのほか、起動時の実際の小さなテストは、常に更新されるGeolocationデータベースを保持するよりも簡単です

これに最適なソリューションは、 BGPエニーキャストと呼ばれますプレゼンテーションへのリンク)。これは、現代のすべてのCDNの基礎です。

BGPエニーキャストでは、複数の異なるサーバーが世界中に広がり、同じIP を使用してBGP経由でインターネットにアナウンスされます。その後、インターネットは魔法をかけます-通常通り、ネットは最短パスを介してトラフィックをその同じIP にルーティングし、基本的にすべてのユーザーに対して(ネットワークトポロジの観点から)最も近いサーバーを選択します。

残念ながら、自分でBGPを介して何かを発表することはできません。大規模なネットワーク(通常はデータセンター)のみがそれを行うことができます。しかし、手頃な価格のソリューションが利用でき、そのほとんどは DNS  anycast に基づいています(つまり、クライアントの場所に基づいて異なるWebサーバーIPに解決します)-これは完全ではありませんが、多くの場合に十分です(例: dnsmadeeasy、Route 53、edgedirector、および事実上すべての安価なCDN(cloudflare、maxcdn、cloudfrontなど)。また、真のBGPエニーキャストを行うソリューションもあります。つまり、実際にエニーキャストを介してHTTPトラフィックを提供する(例:cachefly)か、それを実行できるようにします(例:hostvirtual-安価ではありません)。 これも興味深い読み物です。

Paulにはそれがあります。地理的な負荷分散が必要です。しかし、最善の策は、それがオプションである場合、それを専門とする人を見つけて、彼らにお金を投げることです。最初に現れるよりも確実に解決するのが非常に難しいクラスの問題です。

それらをPingし、レイテンシーが最も低いものを選択するのは良いように聞こえますが、スケーリングしないと感じています(100または1000がある場合はどうなりますか?)これを行うシステムを備えたベンダーはたくさんあります。 DNSエニーキャストも非常に広く使用されています。

単にpingを実行した場合は、ポットラッキーではなく、真に低レイテンシーのpingを選択するために、それぞれに対して複数回(理想的には並行して)pingを実行する必要があります。

また、トラフィック量が非常に多い場合に最終的に重みを追加する何らかの方法が必要になるでしょう。

最後に、それらのいくつかを管理上のダウンとして(メンテナンスのために)何らかの方法でマークする必要がありますが、現在利用できないものをアドバタイズせずに壊れたものにすることでこれを行うことができます。

pingは機能しません。ほとんどのクライアントはゲートウェイやファイアウォールの背後にあり、pingパケットは通過しません。 Genehackが一番いいと言った。サーバーの負荷分散が必要であり、地理的なアプローチだけを使用するのが常に最善の方法とは限りません。 SLBソリューションの提供を専門とする人にお金を投げる方が良い。

さて、いくつかの簡単な考え。私は Digital Envoy の創設者でした。彼らは地理的なIPインテリジェンスを行っています。私は数年前に会社を辞めましたが、約6年前に共同製品を構築しました正確にこの機能を実行した Coyote Point Systems で-地理ベースの負荷分散。もちろん、自動的に動作しない可能性のあるエッジケース(このスレッドで言及されている台湾/中国の例)がありますが、この製品により、ユーザーは国のトラフィックの行き先を判断できます。そのため、台湾が米国から最も良く提供されると判断した場合、そのようにプッシュされます。

残念なことに、このソリューションの需要は期待したほど大きくなく、製品は廃止されたと思います。 コヨーテポイントに連絡して、同等のソリューションを提供できるかどうかを確認することをお勧めします。そうでない場合、彼らはあなたがやりたいことをどのように行うかについていくつかのアイデアを持っていると思います。

サービスの必要性に応じて、AmazonのCloudFrontサービスなどを使用することもできます。もちろん、クライアントが静的ファイルではなくアプリに接続する必要がある場合、それは機能しません。

ところで、完全な開示-私はDigital Envoyの創設者だけでなく、現在、コヨーテポイントの役員を務めています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top