Как балансировщики нагрузки приложений поддерживают высокую доступность без стабильного IP-адреса?

Вопрос или проблема

Балансировщики нагрузки приложений Amazon (ALB) являются стандартным HTTP балансировщиком нагрузки AWS, но у них нет статических IP-адресов. Вместо этого им присваивается сгенерированное доменное имя (например, myservice-12345678.eu-west-1.elb.amazonaws.com.), которое всегда указывает на последние IP-адреса ALB.

Рекомендация состоит в том, чтобы использовать Route53 для указания вашего фактического доменного имени (например, service.example.com) на это сгенерированное доменное имя ALB с помощью записи CNAME (или записи ALIAS для корневых доменов).

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

Настройка с использованием CNAME приводит к тому, что DNS выглядит следующим образом:

$ dig service.example.com
...
;; SECTION ANSWER:
service.example.com. 300 IN CNAME myservice-12345678.eu-west-1.elb.amazonaws.com.
myservice-12345678.eu-west-1.elb.amazonaws.com. 60 IN A 52.121.11.212
myservice-12345678.eu-west-1.elb.amazonaws.com. 60 IN A 18.112.21.121

Но если эти IP-адреса могут изменяться, то мне непонятно, как это стабильно даже с начальным CNAME. Клиенты все равно будут кэшировать второй этап из myservice-12345678.eu-west-1.elb.amazonaws.com -> 52.121.11.212 в течение 60 секунд (или более, если они игнорируют TTL).

Неужели это не означает, что если IP-адрес одного из этих узлов ALB изменится, то клиенты могут иметь разрывы соединения до одной минуты? (Настройка DNS с круговым распределением не обеспечивает надежной защиты от этого)

За исключением случаев, когда Amazon тщательно выполняет поэтапное развертывание новых узлов ALB, оставляя старые узлы активными как минимум на 60 секунд после изменения DNS ALB. Я вполне могу поверить в это, но я искал часы и не могу найти ни намека на то, что это работает таким образом. Я также не могу найти информацию о том, как часто эти IP-адреса могут на самом деле изменяться или что может вызвать изменение.

Кто-нибудь знает, как (или если) Amazon делает ALB надежными таким образом?

Ответ или решение

Amazon Web Services (AWS) предоставляет высокий уровень доступности для своих приложений с помощью балансировщиков нагрузки, таких как Application Load Balancer (ALB). Основная сложность заключается в том, что ALB не имеет статических IP-адресов и получает динамически сгенерированные доменные имена, которые указывают на изменяющиеся IP-адреса. Эта система, однако, позволяет ALB обеспечить высокую доступность и устойчивость, даже несмотря на динамическую природу IP-адресов.

Принцип работы ALB

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

Использование DNS и Route 53

Для обращения к ALB рекомендуется использовать DNS-сервис Amazon Route 53. Пользователи могут создать записку CNAME для указания своего доменного имени (например, service.example.com) на сгенерированное доменное имя ALB (например, myservice-12345678.eu-west-1.elb.amazonaws.com). Это решение позволяет избежать прямой привязки к статическим IP-адресам.

Преимущества использования CNAME заключаются в следующем:

  • Автоматические обновления DNS: При изменении IP-адресов ALB, Route 53 автоматически подстраивается под изменения, что минимизирует необходимость вручную обновлять конфигурацию.
  • Гибкость и масштабируемость: Поскольку ALB автоматически масштабируется и перераспределяет нагрузку среди доступных ресурсов, значения CNAME позволяют динамически адаптироваться к изменениям.

Иммунитет к кэшированию DNS

Одним из основных вопросов является проблема кэширования DNS. При первом запросе к service.example.com результатом будет CNAME к ALB, который затем разрешается в IP-адреса. Если IP-адрес ALB изменится, уже закэшированные значения могут вызвать разрывы соединений.

Механизмы эластичности

Тем не менее, Amazon предпринимает шаги для обеспечения непрерывной доступности:

  1. Механизмы удержания: При развертывании новых узлов, старые узлы остаются активными на некоторое время, что позволяет обеспечить бесшовный переход. Это означает, что в процессе обновления по крайней мере временно работают как новые, так и старые узлы, что минимизирует время простоя.

  2. Настройки Time-To-Live (TTL): ALB устанавливает разумные значения TTL для DNS-записей, которые позволяют уменьшить время, в течение которого клиенты используют устаревшую информацию. При правильной настройке TTL, клиенты будут проводить дополнительные запросы к DNS для получения актуальной информации.

  3. Зона доступности: Использование нескольких зон доступности позволяет ALB перенаправлять трафик на живые узлы, тем самым улучшая распределение нагрузки и снижая вероятность простоев в работе.

Заключение

Amazon Application Load Balancer эффективно поддерживает высокую доступность, полагаясь на динамические IP-адреса и алгоритмы управления DNS. Благодаря использованию Route 53 и CNAME-записей, у системы есть возможность автоматически перенаправлять трафик, минимизируя отрицательное воздействие на пользователя при изменениях в адресации. Несмотря на существующие риски, связанные с кэшированием DNS, механизмы устойчивости ALB и продуманные настройки делают сервис надежным инструментом для обеспечения доступности бизнес-приложений.

Оцените материал
Добавить комментарий

Капча загружается...