2011-09-17 11 views
2

ユーザーはサーバーにファイルをアップロードします。 perlでは、どのサーバがサーバipsとユーザipのリストを与えられれば最も適しているかを検出できますか?私はMaxMindを見ましたが、それはipsの位置だけを教えてくれるでしょう。一番近いものをどのように見つけますか?ユーザIPに基づいて最も近いサーバを見つけるか?

答えて

3

多分私はあなたが(サーバーやMaxMindを介してユーザの)IPの場所を知っている場合は、単にユーザーのIPに対して、すべてのサーバーのIPの間の距離を計算し、最小のいずれかを選択し

しかし、何かが欠けています。その後、ユーザーとサーバーの間でテストパケットを送信する必要があります物理的な距離は、性能についてあまり言いません

...性能を比較/測定するための大藤と:コメントごとに - ..

EDIT比較/決定...

EDIT 2 - コメントあたり:

大陸に1台のサーバーしかない場合、計算は簡単です...ユーザーIPの大陸を確認して、それに合わせてサーバーを選択してください。ユーザーとは異なる大陸のサーバーが悪化します...

+0

どのように距離を計算しますか? –

+2

座標間のユークリッド距離などの単純なものを使用できます。あるいは、適切に行うことができ、座標のデータに基づいて距離を計算することができます。 wgs​​84 - http://www.movable-type.co.uk/scripts/latlong-vincenty.html – Flexo

+5

私は物理的な距離は全くのネットワーク接続の素晴らしい推定されて賭けていないだろう。負荷(ホスト*と*リンク)のような他の要因は、かなり頻繁に重要である可能性があります。 – Flexo

1

いつでも最も近いサーバーまたは最も速いサーバーが必要ですか。

最高のパフォーマンスを発揮するサーバーを探す必要がある場合は、テストパケットを送信し、それぞれの応答時間を取得して、これを調べることができます。

最も近いものを見つける必要がある場合は、各宛先間のホップ数を数えて、最も近いものを選ぶことができます。

PS:私にはperlに詳しいことが分かりました。

0

アップロードするIP(またはクラスCブロック)をすべてログに記録してから、各サーバーから一度だけのtraceroute/pingを実行し、次の彼らがアップロードする時間。

0

実際の地理的位置であれば、IPアドレスから確実に判断することはできませんが、DNSやMaxMindなどのサードパーティサービスを使用してヒューリスティックにすることは可能です。

予想される応答時間の指標である最短ネットワーク距離を超えている場合は、パケットヘッダーのTTLフィールドを確認できます.TTLが低いということは、パケットが遠くに移動したことを意味します。さまざまなOSベンダーが異なるデフォルトのTTLを使用しているので絶対的なことではありませんが、オプションです。

関連する問題