DNS и путь запроса — Примеры

Пример 1 — Развёртывание, которое продолжало бить в старую машину

Сервис переезжает на новый адрес, при этом срок жизни записи равен 86400 секунд, а миграция идёт в 09:00. К 11:00 примерно половина запросов всё ещё приходит на старый хост, уже выведенный из эксплуатации. Скажите, почему трафик всё ещё идёт туда, и что команда должна была сделать первым делом.

до 09:00:    api.internal.example.com -> 198.51.100.7   срок 86400
смена 09:00: api.internal.example.com -> 198.51.100.8   срок 86400

резолвер A кэшировал ответ .7 в 08:59 -> держит до 08:59 завтра
резолвер B кэшировал ответ .7 в 07:00 -> держит до 07:00 завтра

Решение

каждый резолвер, узнавший старый ответ, держит его, пока его копия
не истечёт, — до 24 часов спустя. Изменение верное; оно не видно.

перед миграцией:
  1. понизить срок жизни до 60 секунд
  2. подождать дольше прежнего срока
  3. сменить адрес и развернуть новый хост
  4. снова поднять срок, когда трафик переехал

Старый адрес остаётся в каждом кэше на весь срок, который запись объявляла в момент, когда её узнали, поэтому 24-часовой срок открывает 24-часовое окно устаревших ответов; если же понизить значение заранее, поиск после этого обойдётся дёшево. Ловушка в том, чтобы считать смену имени мгновенной: браузер, операционная система, заглушка-резолвер и любая сервисная сетка держат по копии.

Пример 2 — Круговые обходы, которые запрос может и не может убрать

Эндпоинт в далёком регионе отвечает за 480 мс: 40 мс на разрешение из кэша, 150 мс на соединение, 190 мс на рукопожатие безопасности и 100 мс до первого байта. Скажите, какие части исправляет расстояние, а какие может убрать код, и приведите стоимость второго запроса по тому же соединению.

запрос 1: разрешение 40 (кэш) + соединение 150 + рукопожатие 190 + первый байт 100
запрос 2: то же соединение, тот же процесс, соединение всё ещё открыто

Решение

запрос 1 всего: 480 мс
запрос 2 всего: ~100 мс — установка уже оплачена

убираемо: соединение + рукопожатие = 340 мс, за счёт переиспользования соединения
фиксировано: 100 мс до первого байта — один круговой обход через это расстояние

Установка и рукопожатие платятся один раз на соединение, поэтому переиспользованное соединение оставляет второму запросу немногим больше, чем обход «запрос — ответ». Оставшийся обход не может быть быстрее пути, который он пересекает, значит, исправлений всего два: перенести сервер ближе или кэшировать на периферии. Ловушка в оптимизации полезной нагрузки: тело тривиально, и никакое сжатие не задевает стоимость, которую считают круговыми обходами.