Я уверен, что это простое решение, просто я не слишком хорошо знаком с тем, как работает DNS, и связано ли это вообще с этой проблемой.
Если я запускаю веб-сервис на Amazon EC2, распределенный по многим экземплярам, как мне сделать так, чтобы одно доменное имя можно было использовать для доступа ко всему пулу серверов, который будет время от времени меняться?
Поскольку экземпляры могут присутствовать в одну секунду, но исчезнуть в следующую (и наоборот), мне нужен способ случайного выбора активного члена кластера для маршрутизации. Обновления должны быть мгновенными. Возможно ли это вообще, с кэшированием DNS и всем остальным?
решение1
Для этого есть несколько подходов, некоторые из которых вам по силам.
В вашем случае я рекомендую просто иметь несколько записей DNS с относительно коротким TTL. Распределение не оптимально, и клиенты могут не выбрать узел с наименьшей задержкой. Однако это чрезвычайно просто: все, что вам нужно сделать, это иметь возможность добавлять записи DNS. Это широко используемый и проверенный метод.
Если вам нужно удалить сервер из пула, просто удалите его записи DNS, и большинство клиентов перестанут его использовать после истечения TTL. То же самое касается новых серверов: добавьте их, и после истечения TTL клиенты начнут их использовать.
Например, Google использует это как часть своих методов балансировки:
$ dig A google.com
;; QUESTION SECTION:
;google.com. IN A
;; ANSWER SECTION:
google.com. 297 IN A 74.125.77.99
google.com. 297 IN A 74.125.77.104
google.com. 297 IN A 74.125.77.147
Google расширяет эту возможность, перенаправляя вас на версию, размещенную поблизости от вашего сайта (и на вашем языке), в зависимости от предполагаемой страны вашего нахождения. Но зачастую этот уровень вам не нужен.
решение2
Обновления должны быть мгновенными. Возможно ли это вообще, с кэшированием DNS и всем остальным?
Нет, с DNS это невозможно.Записи DNS обслуживаются с указанием времени жизни (TTL), которое определяет количество времени, в течение которого кэши могут использовать запись.безперепроверка с авторитетным DNS-сервером. И по разным причинам DNS TTL не может быть меньше 10 минут. DNS round robing — этонетрешение для балансировки нагрузки, по крайней мере, если вам нужна бесперебойность работы сервиса. Смотрите fx thisстарый вопрос Джеффа Этвуда.
ТыможетиспользоватьСторонние DNS-сервисы, которые сочетают DNS Round Robin с проактивным мониторингомсерверов и автоматически удалять мертвые серверы из DNS. Это не очень хорошее решение, но оно может быть достаточно хорошим для менее важных сайтов, и его легко настроить с помощью fx DNSMadeEasy или EdgeDirector.
Стандартный в отрасли способ управления доступностью веб-сервера — этоБалансировщик нагрузки уровня 4 или уровня 7перед веб-серверами.
веб-сервис на amazon ec2, распределенный по многим экземплярам, как сделать так, чтобы одно доменное имя можно было использовать для доступа ко всему пулу серверов?
Amazon предлагает услугу plug-n-play для этого,называется АмазонЭластичная балансировка нагрузки. По сути, это управляемая услуга от Amazon, которая устанавливает балансировщик нагрузки уровня 7 (HTTP) или уровня 4 (TCP) перед вашими веб-серверами EC2.
Другой распространенный вариант — настроить экземпляр EC2 с балансировщиком нагрузки L7, таким как nginx, HAProxy, Apsis Pound, Apache 2.2, Zeus Load Balancer или что-то еще (их несколько). Но если вы пойдете по этому пути, вам придется управлять ОС + ПО балансировки нагрузки самостоятельно и подумать, как сделать сам экземпляр балансировщика нагрузки EC2 достаточно высокодоступным.