как отправлять сетевые запросы на (географически) ближайший сервер

StackOverflow https://stackoverflow.com/questions/1040545

Вопрос

Я программист на Java и не очень знаком с тем, как работают сети (кроме базовых UDP / TCP-соединений)

Допустим, у меня есть серверы, работающие на машинах в США, Азии, Латинской Америке и Европе.Когда пользователь запрашивает услугу, я хочу, чтобы его запрос отправлялся на ближайший к нему сервер.

Возможно ли, чтобы у меня был один адрес:mycompany.com , и каким-то образом перенаправлять запросы на соответствующий сервер?Очевидно, что когда кто-то обращается к cnn.com, он получает фотографии, видео и т.д.с сервера, расположенного рядом с ними.Честно говоря, я не понимаю, как это работает.

Кстати, мои серверы не обслуживают веб-страницы, они обслуживают другие сервисы, такие как данные о фондовом рынке .... на всякий случай, если это актуально.

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

Это было полезно?

Решение

Одним из простых подходов было бы посмотреть на первый байт (класс A) IP-адреса, входящий в UDP-запрос UDP, а затем основанный на том, что вы могли бы предоставить правильный географически IP-адрес.

Другие советы

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

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

Для более подробного ознакомления, ознакомьтесь с этой статьей о CDN (обратите внимание на раздел технологии):

Сеть доставки контента - Википедия

Это те сети, которые большие сайты используют для распространения своего контента по сети (популярным примером является Akamai). Как видите, все может довольно быстро усложниться, если у CDN есть собственные проприетарные протоколы и т. Д.

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

--

Взгляните на http://ultradns.com/. Подобная управляемая служба DNS может быть именно тем, что вам нужно для достижения того, что вы ищете.

Amazon.com , Forbes.com, Oracle, все ими пользуются...

Цитата из http://ultradns.com/solutions/traffic.html:

Решение UltraDNS для управления трафиком предоставляет набор инструментов, позволяющих ИТ-администраторам определять конфигурации балансировки нагрузки для контент-серверов, расположенных в одном или нескольких географических местоположениях.Решение для управления трафиком управляет трафиком, направленным на серверы, путем динамического изменения ответов на DNS-запросы.Балансировка нагрузки выполняется на основе динамических показателей, полученных от хост-серверов на основе постоянного мониторинга.Решение UltraDNS для управления трафиком - это не единое приложение, оно объединяет возможности нескольких существующих систем UltraDNS для контроля трафика, управления сбоями сайта и оптимизации систем веб-контента.

Один из подходов, как упоминал Джефф, заключается в использовании IP-адреса: http: //en.wikipedia. орг / вики / Geolocation_software

По моему опыту, это точно для ближайшего относительно большого города (по крайней мере, в США). Есть несколько открытых баз данных, чтобы помочь в этом (см. Ссылку вики). Затем вы можете создавать теги изображений и ссылки для скачивания и тому подобное на основе этой информации.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top