Балансировка нагрузки на основе близости - PullRequest
6 голосов
/ 28 ноября 2008

Я работаю над проектом, где у нас есть число (на данный момент 5) серверов по всему миру. Клиенты подключаются к одному из этих серверов через централизованного брокера. Мы знаем страну происхождения клиента, но больше ничего. У нас есть полный контроль над серверами, поэтому мы можем получить всю необходимую нам информацию о них. Мы не контролируем клиентов, они должны подключаться через этого брокера в соответствии со стандартом.

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

Первая идея, которая пришла в голову, это пинговать клиента с каждого сервера, но у нас нет ip, только страна.

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

Есть ли у вас идеи, как рассчитать / найти близость между "странами"? У вас есть идеи или идеи, как решить эту проблему другим способом?

Ответы [ 7 ]

7 голосов
/ 28 ноября 2008

Это сложно, больше, чем многие себе представляют, но я чувствую, что есть ПРАВИЛЬНЫЙ ответ.

Конечно, наивное (но крутое) решение - проверка IP клиента, это хорошее начало, но в "реальном мире" Геолокация - это еще не все ...

Вы только что запросили " low latency ", что означает, что вы должны сделать ping между серверами и клиентами и назначить соответственно. Очень хороший пример этой проблемы, которая много раз затрагивала меня лично, - это то, что я работаю в Японии, и сервер говорит, что на Тайване для меня намного ближе к серверу в США. НО , задержка между Японией и США во много раз меньше (лучший отклик), чем с Тайванем, потому что кабели и маршрутизаторы и все, что у вас есть, соединяют Япония-Тайвань не так хорошо, как между Япония-США . Так что, если вы подключили меня к Тайваню, потому что вы полагаете, что мой IP-адрес ближе, вы бы сделали очень большое неудобство . Кроме того, пинг и небольшой тест при запуске проще сделать, чем поддерживать постоянно обновляемую базу данных Geolocation

5 голосов
/ 28 ноября 2008

Я думаю, что вам нужен термин "географическая балансировка нагрузки". У большинства крупных поставщиков балансировки нагрузки есть решение - ваш брокер может использовать их.

Googling географическая балансировка нагрузки дает несколько полезных результатов.

1 голос
/ 02 декабря 2016

Лучшее решение для этого называется BGP anycast ( ссылка на презентацию ). Это краеугольный камень всех современных CDN.

С BGP anycast несколько разных серверов распространяются по всему миру и объявляются в Интернет через BGP с использованием того же IP . Затем Интернет делает чудо - как обычно, сеть маршрутизирует трафик на этот тот же IP по кратчайшему пути, по существу выбирая ближайший сервер (с точки зрения топологии сети) для каждого пользователя.

К сожалению, вы не можете просто объявить что-либо через BGP самостоятельно - это могут делать только крупные сети (обычно центры обработки данных). Но доступны доступные решения, большинство из которых основаны на DNS anycast (т. Е. Преобразование IP-адреса другого веб-сервера в зависимости от местоположения клиента) - это не идеально, но во многих случаях достаточно (примеры: dnsmadeeasy, Маршрут 53, edgedirector и практически каждый дешевый CDN - cloudflare, maxcdn, cloudfront и т. Д.). Существуют также решения, которые делают настоящий BGP anycast, то есть фактически обслуживают HTTP-трафик через anycast (например, cachefly) или позволяют вам это делать (например, hostvirtual - не дешево). Это также может быть интересным чтением.

1 голос
/ 31 декабря 2008

Хорошо, так несколько быстрых мыслей. Я был основателем Digital Envoy - они занимаются географической разведкой IP. Я покинул компанию несколько лет назад, но около 6 лет назад мы создали совместный продукт с Coyote Point Systems , который выполнял именно эту функцию - географическое распределение нагрузки. Конечно, существуют крайние случаи (пример Тайваня / Китая, упомянутый в этой теме), которые могут не работать автоматически, но продукт позволил пользователю определить, куда пойдет трафик страны. Так что, если вы решите, что Тайвань лучше всего обслуживать за пределами США, это будет подтолкнуто таким образом.

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

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

Кстати, полное раскрытие - я не только основатель Digital Envoy, но в настоящее время я работаю в совете директоров Coyote Point.

1 голос
/ 31 декабря 2008

Пинг не сработает. Большинство клиентов будут находиться за шлюзом и / или межсетевым экраном, и ваши пинг-пакеты не пройдут. Genehack сказал это лучше всего. Вам необходима балансировка нагрузки на сервер, и использование только географического подхода может быть не лучшим способом всегда делать это. Лучше бросить деньги на того, кто специализируется на предоставлении SLB-решений.

1 голос
/ 06 декабря 2008

Пинг их и выбор с наименьшей задержкой звучит хорошо, но у меня такое чувство, что оно не масштабируется (что происходит, когда у вас 100 или 1000?) - так что, может быть, другое решение лучше? Есть много поставщиков систем, которые делают именно это; DNS anycast тоже довольно широко используется.

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

Также вам, возможно, понадобится какой-то способ прибавить к ним веса в конечном итоге, когда объемы трафика очень высоки.

Наконец, вы хотели бы каким-то образом пометить некоторые из них как административно отключенные (для обслуживания) - но, возможно, вы можете сделать это, если ваши сломанные просто не рекламируют те, которые в данный момент недоступны.

1 голос
/ 28 ноября 2008

Пол есть, вы хотите географическую балансировку нагрузки - но я добавлю, что ваш лучший выбор, если это вообще возможно, - найти кого-то, кто специализируется на этом, и бросить в них деньги. Это класс проблем, которые намного труднее решить, чем кажется на первый взгляд.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...