Нахождение ближайшего сервера на основе IP пользователя? - PullRequest
2 голосов
/ 18 сентября 2011

Пользователи будут загружать файлы на мои серверы.В Perl, как я могу определить, какой сервер будет наиболее подходящим, учитывая список ips сервера и ip пользователей?Я посмотрел на MaxMind, но он только скажет мне местоположение ips.Как мне найти ближайший?

Ответы [ 4 ]

3 голосов
/ 18 сентября 2011

возможно я что-то упускаю, но

Если вы знаете расположение IP-адресов (серверов и пользователя через MaxMind), просто рассчитайте расстояние между ip каждого сервера и ip пользователя и выберите наименьший ...

РЕДАКТИРОВАТЬ - согласно комментарию:

Физическое расстояние мало что говорит о производительности ... OTOH для измерения / сравнения производительности вам нужно будет отправить тестовые пакеты между пользователем и серверами, а затем сравнить / решить ...

РЕДАКТИРОВАТЬ 2 - согласно комментарию:

ЕСЛИ у вас только один сервер на континент, тогда вычисление довольно просто ... проверьте IP-адрес континента и соответственно выберите сервер, так как обычно довольно безопасно предполагать, что серверы на континенте, отличные от пользователя, выступать хуже ...

1 голос
/ 18 сентября 2011

Вам нужен самый близкий сервер или самый быстрый сервер в любой момент?

Если вам нужно найти сервер с наилучшей производительностью, вы можете отправить тестовый пакет и получить время ответа для каждого, чтобы это выяснить.

Если вам нужно найти ближайший, вы можете посчитать количество прыжков между пунктами назначения, чтобы выбрать ближайший.

PS: Я не очень хорошо знаком с Perl, чтобы дать вам команду для этого на конкретном Perl.

0 голосов
/ 18 сентября 2011

Если вы ищете реальное географическое местоположение, то его невозможно точно определить по IP-адресу, хотя с помощью эвристики можно довольно далеко использовать DNS или сторонние сервисы, такие как MaxMind.

Но если вы находитесь за кратчайшим сетевым расстоянием, которое является некоторым показателем ожидаемого времени отклика, то вы можете проверить поле TTL заголовка пакета: более низкий TTL означает, что пакет прошел дальше.Он не является надежным, поскольку разные производители ОС используют разные TTL по умолчанию, но это вариант.

0 голосов
/ 18 сентября 2011

Если они собираются сделать это более одного раза, вы можете зарегистрировать все загружаемые IP-адреса (или блоки класса C), затем запустить одноразовую трассировку / пинг с каждого сервера и сохранить ее для использования в следующий раз.они загружают.

...