Я уверен, что это простое решение, просто я не слишком хорошо знаком с тем, как работает DNS, и связано ли это даже с этой проблемой.
Если я запускаю веб-службу на amazon ec2, распределенную по множеству экземпляров, как я могу сделать так, чтобы одно доменное имя можно было использовать для доступа ко всему пулу серверов, который время от времени будет меняться?
Поскольку экземпляры могут присутствовать одну секунду, но уходить в следующую (и наоборот), мне нужен способ случайного выбора активного члена кластера для маршрутизации. Обновления должны быть мгновенными. Это вообще возможно, с кешированием dns и всем остальным?
Обновления должны быть мгновенными. Это вообще возможно, с кешированием dns и всем остальным?
Нет, с DNS это невозможно. Записи DNS обслуживаются со сроком жизни (TTL), который указывает количество времени, в течение которого кеши могут использовать запись. без проверка с авторитетным DNS-сервером. И по разным причинам время жизни DNS не может быть меньше 10 минут. Круговое управление DNS не решение для балансировки нагрузки, по крайней мере, если вам нужно время безотказной работы. Смотрите fx this старый вопрос Джеффа Этвуда.
Вы жестяная банка использовать Сторонние службы DNS, сочетающие циклический перебор DNS с упреждающим мониторингом серверов и автоматически удаляет мертвые серверы из DNS. Это не очень хорошее решение, но его может быть достаточно для менее важных сайтов, и его тривиально настроить с помощью fx DNSMadeEasy или EdgeDirector.
Стандартный в отрасли способ управления доступностью веб-сервера - это Балансировщик нагрузки уровня 4 или уровня 7 перед веб-серверами.
веб-сервис на amazon ec2, распределенный по множеству экземпляров, как мне сделать так, чтобы одно доменное имя можно было использовать для доступа ко всему пулу серверов
Amazon предлагает для этого сервис plug'n'play, называется Amazon Эластичная балансировка нагрузки. По сути, это управляемый сервис от Amazon, который устанавливает балансировщик нагрузки уровня 7 (HTTP) или уровня 4 (TCP) перед вашими веб-серверами EC2.
Другой распространенный вариант - настроить экземпляр EC2 с балансировщиком нагрузки L7, таким как nginx, HAProxy, Apsis Pound, Apache 2.2, Zeus Load Balancer или чем-то еще (их несколько). Но если вы пойдете по этому пути, вам нужно будет самостоятельно управлять программным обеспечением для балансировки нагрузки ОС + и подумать, как сделать сам экземпляр балансировщика нагрузки EC2 достаточно высокодоступным.
Есть несколько подходов к этому, некоторые из которых вам доступны.
В вашем случае я рекомендую просто иметь несколько записей 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 расширяет это, как только вы заходите на их веб-сайт, перенаправляя вас на версию, которая размещена рядом с вами (и на вашем языке), в зависимости от страны, в которой, по их предположениям, вы находитесь. Но это уровень, который вам часто не нужен.