Добавить в корзинуПозвонить
Найти в Дзене

Envoy и DNS

Envoy — это высокопроизводительный L4-L7 балансировщик написанный на С++. Envoy похож на nginx и haproxy со своими отличиями, которые иногда сильно нужны и весьма предпочтительны. Envoy ориентирован на микросервисную архитектуру и обладает богатым функционалом. Сегодня мы не будем ковырять все настройки Envoy, а обратим внимание на один момент связанный с DNS, за который разработчикам Envoy хочется презентовать леща. В один прекрасный момент мы заменили часть Nginx серверов на Envoy и заметили, что нагрузка на серверы DNS резко возросла. Ну как заметили, серверам DNS стало плохо, мы включили дебаг и выяснили, что Envoy серверы генерируют большую часть трафика к DNS, больше чем раньше генерировали Nginx серверы. GPT подсказал куда копать, а именно — в документацию. Документация указывает на две опции: Кластеры типа STRICT_DNS и LOGICAL_DNS по умолчанию выполняют разрешение DNS постоянно в фоновом режиме, независимо от того, есть ли трафик к этим кластерам. Это означает, что даже если се
Оглавление
Envoy — это высокопроизводительный L4-L7 балансировщик написанный на С++.

Envoy похож на nginx и haproxy со своими отличиями, которые иногда сильно нужны и весьма предпочтительны. Envoy ориентирован на микросервисную архитектуру и обладает богатым функционалом.

Сегодня мы не будем ковырять все настройки Envoy, а обратим внимание на один момент связанный с DNS, за который разработчикам Envoy хочется презентовать леща.

Проблема взаимодействия Envoy и DNS

В один прекрасный момент мы заменили часть Nginx серверов на Envoy и заметили, что нагрузка на серверы DNS резко возросла. Ну как заметили, серверам DNS стало плохо, мы включили дебаг и выяснили, что Envoy серверы генерируют большую часть трафика к DNS, больше чем раньше генерировали Nginx серверы.

GPT подсказал куда копать, а именно — в документацию. Документация указывает на две опции:

  • respect_dns_ttl — по умолчанию false
  • dns_refresh_rate — по умолчанию 5 секунд

Кластеры типа STRICT_DNS и LOGICAL_DNS по умолчанию выполняют разрешение DNS постоянно в фоновом режиме, независимо от того, есть ли трафик к этим кластерам. Это означает, что даже если сервис используется редко, Envoy все равно будет регулярно создавать DNS-запросы. Значение dns_refresh_rate по умолчанию составляет всего 5 секунд. Такой короткий интервал приводит к очень частым запросам к DNS-серверу.

При этом значения TTL записей DNS по умолчанию игнорируются: respect_dns_ttl. Кто это вообще придумал?!

https://github.com/envoyproxy/envoy/issues/20562

В больших средах на одном экземпляре Envoy может быть настроено большое количество DNS-кластеров. И самих Envoy серверов в инфраструктуре может быть много. Ну, вы понимаете к чему это приводит.

Что делать?

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

Общее количество запросов к DNS серверам снизится. Однако, если инфраструктура большая, то по мере истечения TTL, серверы Envoy могут одновременно генерировать пиковый шквал запросов (Thundering Herd) к серверам DNS. Здесь может помочь параметр dns_jitter, который предназначен для добавления случайной задержки и предотвращения штурмующих волн запросов. И он тоже почему-то по умолчанию отключен.

Источник:

Envoy и DNS | internet-lab.ru

💰 Поддержать проект

Если вам понравилась статья, то ставьте 👍🏻 каналу. Пишите комментарии, задавайте вопросы, подписывайтесь.