Стендап Сьогодні 📢 Канал в Telegram @stendap_sogodni

🤖🚫 AI-free content. This post is 100% written by a human, as is everything on my blog. Enjoy!

03.05.2023

Чому всі перевірялки DNS такі повільні?

Якщо тобі доводилось додавати домен до якогось SaaS, будь то Heroku, Firebase, Cloudflare, і так далі — то ти, напевно, знаєш, що для підтвердження власності треба додати DNS запис. А потім зазвичай довго чекати, поки SaaS його перевірить. Деколи це займає хвилини, а деколи прямо кажуть приходити завтра.

DNS - протокол, яким ми користуємось постійно, без нього неможливо вийти в Інтернет. Однак коли ти відкриваєш сайт, то чомусь отримуєш адресу миттєво, а не завтра. Чому ж тоді верифікація домену це такий довгий процес?

Винний, як завжди, кеш. Поняття кешу закладене в основу протоколу DNS. Чому так? Бо записи DNS не сидять всі на одному сервері. Як я вже писав, пошук адреси в DNS - процес рекурсивний — рухаючись від центральних вузлів Інтернету до більш детальних серверів, аж допоки не знайде конкретний запис. Робити так щоразу дуже витратно, бо будь-який з серверів на шляху може бути повільним чи навіть недоступним. Тому проміжні та кінцеві результати пошуку DNS кешуються. Коли створюєш запис, вказуєш параметр TTL - Time-To-Live. Він і показує (або принаймні натякає), скільки цей запис можна тримати в кеші.

Це вже дає зрозуміти, чому ми можемо бачити застарілі результати. Особливо якщо сервіс вже встиг перевірити запис до того, як ми його створили, та тепер побачить тільки вже закешовану хибну версію.

Можна спитати — а чому тоді сервіс не ходить щоразу до DNS сервера, що містить запис (це називається SOA - Source of Authority), та не перевіряє без всякого кешу? Це не так просто. По-перше, сам авторитетний DNS-сервер може мінятись, хоча це не так часто трапляється. По-друге, проміжні сервери теж можуть мати кеш.

По-третє, і найгірше, цей кеш може розрізнятись між собою, та тоді перевірка буде стрибати з одного результату на інший. Бо DNS-сервери зазвичай мають декілька копій. Наприклад, кореневих серверів зараз аж 1696. Ясно, що коренева конфігурація (тобто адреси DNS-серверів доменів верхнього рівня) не так часто змінюється. Та сервери провайдерів, такі, як GoDaddy або NameCheap, теж мають багато копій — інакше б вони не були надійними. І звісно, свіжо доданий запис ніяк не може синхронно зʼявитися на всіх копіях.

Мине час, та думка DNS серверів про твій домен зійдеться до однієї. Але поки він свіжий, проблем не минути. Або затримка — через кеш. Або результат, що стрибає.