Cloudflare сократила DNS-кеш 1.1.1.1 и высвободила около 100 ТБ памяти
Компания переработала представление записей в памяти: размер одной записи уменьшился с 953 до 420 байт. Одновременно выросла скорость добавления записей, а задержка поиска снизилась.

Cloudflare сообщила, что высвободила около 100 ТБ оперативной памяти в глобальной инфраструктуре DNS-резолвера 1.1.1.1. Для этого компании не пришлось менять конфигурацию серверов: она оптимизировала внутреннее устройство записей DNS-кеша на платформе Big Pineapple.
В каждый момент времени Big Pineapple хранит более 250 млрд записей DNS. При таком масштабе лишний байт в одной записи обходится инфраструктуре более чем в 250 ГБ памяти. После пяти изменений в коде на Rust размер кешированной записи сократился с 953 до 420 байт.
Одной из самых результативных мер стала замена расширяемых контейнеров Rust Vec и String на массивы фиксированного размера. По данным Cloudflare, это изменение само по себе сэкономило свыше 15 ТБ, поскольку после помещения в кеш данным уже не требовались поля для управления ёмкостью контейнеров.
Также компания объединила три списка записей в DNS-ответе в единый буфер с индексами размером два байта. Имена владельцев записей, дублирующие запрошенный домен, перестали хранить отдельно: теперь они восстанавливаются при чтении. Данные записей начали сохранять как байты в сетевом формате с указанием длины. Прежде, как отмечает Cloudflare, четырёхбайтная A-запись занимала те же 144 байта, что и самый крупный из поддерживаемых типов — редко встречающаяся NAPTR-запись.
Изменения затронули не только потребление памяти. Производительность добавления записей выросла с 625 тыс. до 893 тыс. в секунду, а задержка поиска сократилась с 828 до 670 наносекунд. В ходе развёртывания, проходившего с середины мая до начала июля, p99 потребления резидентной памяти на экземпляр снизилось с 9,3 до 5,3 ГБ.
Освобождённую память Cloudflare не планирует использовать для перехода на серверы с меньшим объёмом ОЗУ. Вместо этого её направят на увеличение DNS-кешей, чтобы повысить долю ответов из кеша и сократить число запросов к авторитетным DNS-серверам.