В чем разница между доменным именем и IP-адресом как endpoint?
Что проверяют
Понимаете ли вы, что в конфигурации пайплайна имя хоста и IP ведут себя по-разному при отказах, переездах инфраструктуры и проверке TLS. Следом обычно спрашивают, что станет с вашими подключениями при переключении мастера базы или замене брокера Kafka.
Как отвечать
IP-адрес указывает конкретный сетевой интерфейс, по нему идёт маршрутизация. Доменное имя это ссылка, которую клиент превращает в адрес через DNS. Для дата-инженера важны последствия:
- отказоустойчивость: у управляемых баз endpoint кластера или мастера это DNS-имя, которое при переключении начинает указывать на новый хост. Строка подключения с IP после failover смотрит на реплику или в пустоту;
- TLS: сертификат выписан на имя, клиент сверяет его с полем SAN. Подключение по IP либо не пройдёт проверку, либо заставит её отключить, что хуже;
- виртуальные хосты: за одним IP стоит много сервисов, и балансировщик или S3-совместимое хранилище выбирает нужный по заголовку
Hostили по SNI; - кэширование: у записи есть TTL, но клиенты держат старые адреса дольше. JVM кэширует DNS сама (
networkaddress.cache.ttl), а открытое соединение в пуле живёт до переподключения независимо от DNS; - Kafka: адреса из
bootstrap.serversнужны только для первого запроса метаданных, дальше клиент ходит на адреса изadvertised.listeners. Если там внутренние имена, которые снаружи не резолвятся, подключение ломается даже при верном IP в конфиге.
IP уместен там, где DNS нет или он сам под подозрением: диагностика, изолированный стенд, правила firewall.
Где спотыкаются
Говорят, что IP «быстрее, потому что без DNS». Резолв кэшируется, на фоне запроса к хранилищу его стоимость незаметна, а поддержка жёстко прописанных адресов обходится дорого.
Считают, что смена DNS-записи действует мгновенно. Долгоживущие Spark-задачи и пулы соединений в Airflow ходят на старый адрес, пока не переподключатся.
Называют IP уникальным идентификатором устройства. Частные диапазоны повторяются в каждой сети, за NAT скрываются сотни машин, а у одного сервера бывает несколько адресов.