Кеширующий сервис (резолвер)
Под записью (или ресурсной записью) в DNS понимают логически выделенные пары "ключ-значение", фактически, поля данных. Например, в случае IP-адреса, для имени example.com записью будет называться соответствие example.com - IP-адрес. Записям соответствуют типы, обозначаемые сочетаниями букв. Так, запись с IP-адресом - это A-запись (A - от англ. Address). Ключевая особенность DNS - кеширование записей, то есть, копии полученных от других серверов записей некоторое время сохраняются в памяти "локального" сервера (обычно, это резолвер). Кеширование придаёт DNS устойчивость.
Что означает хранение записи в кеше резолвера? То, что при поступлении повторного запроса о той же записи, резолверу не нужно вновь опрашивать всю иерархию серверов - он может сразу ответить записью из своего кеша. Это экономит ресурсы сразу на двух направлениях: во-первых, резолвер ответит на запрос гораздо быстрее, так как ответ уже готов; во-вторых, так как резолвер не будет опрашивать другие серверы, уменьшится нагрузка и на эти серверы. Кеширование чрезвычайно важно в глобальной DNS. При отсутствии кеширования серверы имён, которые поддерживают сколь-нибудь популярные доменные имена, получали бы в сотни раз больше запросов каждую секунду.
Кеширование подразумевает хранение копии записи на кеширующем сервере (резолвере). Но значения записей периодически изменяются - как долго следует хранить копию? Это определяется специальным параметром - "временем жизни", TTL (от англ. Time To Live - время жизни). TTL приписывается каждой записи в DNS. Этот параметр содержит число секунд, в течение которых следует сохранять запись в кеше. Пусть для A-записи example.com установлено значение TTL в 1200 секунд. Это означает, что рекурсивный резолвер, получив значение A-записи в ответе DNS-сервера, будет в течение 1200 секунд с момента получения ответа использовать результат, находящийся в локальном кеше. То есть, на запросы своих клиентов рекурсивный резолвер будет отправлять ответы из кеша. Если за эти 1200 секунд на исходном сервере значение A-записи изменится, то клиенты рекурсивного резолвера всё равно будут получать старое значение, до тех пор, пока не истечёт срок кеширования. Если же запрос к рекурсивному резолверу поступит уже после того, как истёк интервал TTL, то резолвер вновь выполнит опрос серверов имён и получит новое значение записи. Важно понимать, что, за исключением редких специальных случаев, рекурсивный резолвер не опрашивает автоматически DNS для всех записей из локального кеша, у которых истёк TTL, он это делает только если поступил соответствующий запрос от клиента. Другими словами - первый запрос о какой-то записи будет выполняться заведомо дольше, а второй и последующие - быстрее, так как ответ уже есть в кеше.
Кеширование увеличивает общую надёжность DNS, с точки зрения каждого конкретного пользователя. Так, если серверы имён, поддерживающие доменную зону, на некоторое время стали недоступны, эта недоступность не повлияет на кеширующие серверы (конечно, до тех пор, пока не истечёт TTL).
Типичные значения TTL в современной Сети обычно составляют 900-3600 секунд, но зависят от типа записи - для некоторых устанавливаются интервалы значительно больше, например, 86400 (24 часа). Исходное значение TTL определяет авторитативный сервер имён, однако кеширующие резолверы могут его для себя переопределить (как в большую, так и в меньшую сторону).