Cloudflare освободила 100 ТБ оперативной памяти простой оптимизацией кода

Cloudflare освободила около 100 ТБ оперативной памяти на своей глобальной серверной инфраструктуре, не заменив ни одной планки ОЗУ и не перенастроив физическое оборудование. Инженеры компании просто переработали структуру DNS-кэша платформы Big Pineapple, которая лежит в основе публичного DNS-сервиса 1.1.1.1.

Изображение сгенерировано GeminiИзображение сгенерировано Gemini
Источник изображения: Gemini

После пяти изменений в коде на Rust размер одной кэшированной DNS-записи удалось сократить с 953 до 420 байт — примерно на 56%. На масштабе Cloudflare это дает огромную экономию: в Big Pineapple одновременно хранится более 250 млрд DNS-записей. Поэтому даже один лишний байт на каждую запись обходится инфраструктуре более чем в 250 ГБ оперативной памяти.

Более 15 ТБ удалось высвободить после замены динамических контейнеров Rust Vec и String на структуры фиксированного размера. После попадания данных в кэш увеличивать их емкость уже не требовалось, поэтому дополнительная память фактически расходовалась впустую.

Инженеры также объединили три списка DNS-записей в единый буфер с двухбайтовыми смещениями, отказались от хранения повторяющихся доменных имен. Сами данные теперь хранятся в компактном сетевом формате с указанием длины. Раньше, например, небольшая четырехбайтовая DNS-запись типа A могла занимать в памяти те же 144 байта, что и значительно более крупные записи.

 Оптимизация не только освободила память, но и ускорила работу сервиса. Скорость добавления записей в кэш выросла на 43%. Задержка поиска снизилась с 828 до 670 наносекунд.

В сумме принятых мер Cloudflare получила около 100 ТБ свободной оперативной памяти — примерно столько же, сколько установлено в 130 серверах поколения Gen 13 с 768 ГБ DDR5–6400 в каждом. На фоне высоких цен на серверную память такая оптимизация особенно полезна.

При этом Cloudflare не собирается убирать освободившуюся память из серверов. Компания планирует использовать ее для увеличения DNS-кэшей. Благодаря этому больше запросов можно будет обслуживать непосредственно из кэша, реже обращаясь к авторитетным DNS-серверам. Это одновременно снизит сетевую нагрузку и ускорит обработку DNS-запросов.

©  iXBT