«Треба зачекати на поширення, це може тривати до 48 годин». Цю фразу чуєш щоразу, коли зміна DNS не дала очікуваного результату, і в переважній більшості випадків вона описує не те, що відбувається. Вона описує ввічливий спосіб попросити передзвонити завтра.
Поширення DNS — це не хмара, що поволі розповзається світом. Це щось значно простіше й значно передбачуваніше: це закінчення памʼяті.
Що відбувається насправді, коли міняєш запис
Жоден сервер не «отримує» твою зміну. Немає ані оголошення, ані розсилання.
Є ось що: коли хтось питає, де живе твій сайт, його резолвер — провайдерів або той, який він налаштував — питає у твого DNS, отримує відповідь і тримає її в памʼяті стільки, скільки ти вказав. Цей час і є TTL, і задаєш його ти, для кожного запису окремо.
Поки та памʼять не спливе, резолвер відповідає старим значенням. Не тому, що не знає, а тому, що не мав причини перепитати.
Отже тривалість «поширення» для кожного окремого користувача — це щонайбільше той TTL, який стояв до зміни. Не той, який ти виставиш після: після вже пізно, памʼять узяли з попереднім значенням.
Практичний наслідок, у якому вся суть
Якщо TTL був 24 години, той, хто спитав за хвилину до твоєї зміни, бачитиме старе значення майже цілу добу. Якщо він був пʼять хвилин, усі вирівняються за пʼять хвилин.
Саме тому в добре зробленій міграції TTL знижують за добу до неї. Це не витонченість, це єдиний важіль, який у тебе є. Знижувати їх після зміни не дає нічого, і саме ця помилка породжує фразу про 48 годин.
Решта процедури випливає звідси: знизити TTL, дочекатись, поки старе значення спливе всюди, змінити, усі вирівнюються за хвилини, а через кілька днів підняти назад. З тієї самої причини підготовлений переїзд не має вікон недоступності.
Справжній виняток: зміна серверів імен
Є випадок, коли довге очікування реальне, і його треба відрізняти.
Зміна запису всередині твоєї зони — запису сайту, MX, TXT — підпорядковується TTL саме цього запису, і більше нічому.
Зміна серверів імен, тобто перенесення всієї зони до іншого оператора, — інша річ: цей факт живе не у твоїй зоні, а в реєстрі розширення, і має власний TTL, визначений реєстром, зазвичай довший і тобі непідконтрольний.
Тому перехід до нового оператора DNS роблять у два кроки: спершу відбудовують зону деінде ідентичною до поточної, а вже потім міняють сервери імен. Якщо обидві зони однакові, байдуже, яка з них відповідає під час очікування: відповідь та сама, і ніхто нічого не помічає.
Як перевіряти замість того, щоб чекати
Вірити на слово не треба — треба дивитись. Три речі кажуть усе.
Поточний TTL запису, який видно при опитуванні DNS і який каже, скільки лишилось до кінця памʼяті.
Авторитетна відповідь, тобто та, яку дає безпосередньо твій DNS-сервер, оминаючи будь-який кеш. Якщо там уже нове значення, зміну зроблено: лишилось тільки чекати, і ти знаєш точну тривалість.
Відповіді великих публічних резолверів, які перевіряються будь-яким сервісом перевірки DNS. Якщо нове значення зʼявилось там, воно зʼявляється всюди.
Маючи ці три факти, вгадувати вже нічого: ти знаєш, чи змінив правильно, і знаєш, скільки лишилось.
Коли «це поширення» — неправильна відповідь
Варто впізнавати випадки, у яких це пояснення не тримається, бо вони поширені:
- авторитетне значення й досі старе. Це не поширення: зміну не збережено або зроблено в зоні, яка не є активною — так буває, коли сервери імен домену не ті, що в панелі, де ти працюєш;
- сайт повертається з перебоями. Не поширення: це кеш браузера чи операційної системи або два записи, що вказують у різні місця;
- ти бачиш, а клієнти ні, або навпаки. Це локальний кеш: перевіряють з іншої мережі, а не перезавантажують пʼятдесят разів;
- минули тижні. Жоден TTL не триває тижнями. Там помилка конфігурації, і подальше очікування її не виправить.
Коротко
Поширення триває стільки, скільки становив TTL, виставлений до зміни. Це число не є таємницею: його можна прочитати будь-якої миті, і його можна було вирішити напередодні.
Коли хтось каже «зачекай 48 годин», не спитавши, який у тебе був TTL, він дає тобі не діагноз. Він дає тобі відстрочку.