Проблема у меня следующая: у меня есть распределенное приложение (3 географически распределенных узла), которое по запросу возвращает большие наборы данных. Чтобы уменьшить сетевой трафик, мне нужно направить запрос клиента в ближайший экземпляр распределенного приложения. Я думал о нескольких вариантах, но по каждому из них у меня есть вопросы, на которые я был бы признателен за ваши мнения:
Вариант 1: использовать DNS для преобразования в несколько IP-адресов. Например: - Если я делаю звонок с машины в Великобритании на server.copmany.com - DNS для преобразования его в IP-адрес системы в Великобритании. - Если я делаю звонок с машины в США на server.copmany.com - DNS для преобразования его в IP-адрес системы в США.
Вопрос: Возможно ли настроить DNS для чего-то подобного?
Вариант 2: использовать балансировщик нагрузки, который может преобразовать IP-адрес в ближайший сервер.
Вопрос: Хотя я думаю, что это возможно, я не могу позволить себе, чтобы ответ возвращался через балансировщик нагрузки, а напрямую в вызывающую систему.
Вариант 3: Сталкивались ли вы с какими-либо другими решениями подобного рода проблем?
Спасибо, Майк.
решение1
Я бы выбрал вариант №1.
Не знаю, какой DNS-сервер вы используете, но это можно сделать с помощью BIND с поддержкой GeoIP и несколькими представлениями для разных пользователей из разных стран. Погуглив "BIND GeoIP", вы найдете кучу руководств по настройке.
В противном случае существуют сторонние сервисы (ключевые слова: «управляемый DNS, геолокация»), которые предлагают эту услугу.
решение2
Если это просто HTTP, вы можете предоставить 301-код соответствующему сайту вместо необходимости использовать гео-DNS, что, вероятно, проще.
Единственное, что, вероятно, не будет работать должным образом, — это anycast, который, хотя и выглядит хорошо, не может (без значительной помощи) обрабатывать случаи, когда клиент переключается между узлами.
решение3
Через DNS
Я точно знаю, что Bind поддерживает представления, потому что я использовал их раньше. Другие серверы тоже могут. С представлением вы обслуживаете любую информацию о зоне, которая вам нравится, основываясь на запрашиваемом IP-адресе -http://www.zytrax.com/books/dns/ch7/view.html
Использовать циклический DNS для разрешения одного из трех IPS. Это не будет иметь значения, откуда пришел запрос, однако
Я нашел это в гугле (http://www.dnsmadeeasy.com/services/global-traffic-director/) - Может быть, вам это покажется интересным