Проблема 100 терабайт
Компания Cloudflare недавно совершила поразительное «ограбление» памяти, освободив 100 терабайт оперативной емкости в своей глобальной сети. Эта выдающаяся оптимизация эквивалентна добавлению в инфраструктуру всей оперативной памяти 130 современных серверов Gen 13, причем без развертывания ни одного нового аппаратного компонента. Столь масштабное высвобождение ресурсов подчеркивает глубокое влияние эффективности низкоуровневого программного обеспечения.
Платформа Big Pineapple от Cloudflare, обеспечивающая работу таких критически важных сервисов, как 1.1.1.1, Gateway DNS и DNS Firewall, управляет колоссальными объемами данных. В любой момент времени эта система хранит более 250 миллиардов записей DNS-кэша, каждая из которых представляет собой важнейший элемент информации о маршрутизации в интернете, обслуживая миллиарды глобальных запросов ежедневно. Этот огромный масштаб превращает даже незначительные неэффективности в серьезные операционные и финансовые проблемы.
Основная сложность для Cloudflare заключалась в кумулятивном эффекте казалось бы крошечных накладных расходов. При 250 миллиардах DNS-записей один потраченный впустую байт на запись превращается в сотни гигабайт избыточной памяти по всему глобальному парку серверов. Эта микроскопическая неэффективность, масштабированная в такой огромной системе, не только потребляет ценные ресурсы, но и может влиять на производительность и увеличивать операционные расходы, требуя фундаментального пересмотра структур данных.
Пять сокращений, один огромный результат
Cloudflare выполнили пять точных оптимизаций на уровне Rust, каждая из которых стала хирургическим ударом по раздуванию памяти, что в итоге принесло колоссальную выгоду в 100 ТБ. Прежде всего, инженеры заменили Vec<T> и String на Box<[T]> и Box<str> для неизменяемых записей кэша. Это исключило предварительное выделение емкости и ненужные накладные расходы кучи, мгновенно освободив 64 байта на запись и более 15 ТБ в масштабах всей сети.
Второе критическое изменение заключалось в хранении DNS-записей в виде сырых байтов в формате wire-format, а не в виде полностью распарсенных структур Rust. Это упростило обработку, так как система теперь избегает избыточного парсинга и сериализации. Это также значительно улучшило локальность кэша, позволяя упаковывать больше релевантных данных в меньшее количество строк кэша.
Дальнейшая изобретательность в компоновке предотвратила потерю памяти. Cloudflare упаковали большие варианты enum, такие как NAPTR внутри перечисления RecordData, чтобы предотвратить резервирование избыточного заполнения (padding) для более мелких и распространенных типов записей (таких как A и AAAA). Это гарантировало, что выделение памяти более точно соответствует фактическому размеру данных.
Инженеры также объединили три отдельных списка записей ответа DNS (answer, authority, additional) в один единый список. Два компактных 2-байтовых смещения u16 теперь разграничивают секции, заменяя более крупные пары указатель/длина и экономя 28 байт на запись. Эта консолидация значительно уплотнила структуру данных.
Наконец, условное хранение владельца стало пятым сокращением. Cloudflare теперь хранит имя владельца только тогда, когда оно отличается от запрашиваемого домена, в противном случае извлекая его из ключа кэша. В совокупности эти гранулярные оптимизации уменьшили объем памяти на одну запись на 56%, с 953 до 420 байт, изменив ландшафт памяти Cloudflare.
Быстрее за счет уменьшения
Сокращение структур данных часто подразумевает компромисс с производительностью, но оптимизации Cloudflare принесли редкую двойную победу. Пропускная способность вставки в кэш выросла на впечатляющие 43%, увеличившись с 625 000 до 893 000 записей в секунду. Одновременно с этим задержка поиска значительно снизилась, улучшившись на 19% с 828 нс до 670 нс.
Это ускорение — не магия, а прямое следствие плотности памяти. За счет уменьшения объема памяти на одну запись DNS-кэша на 56% (с 953 байт до 420 байт) структуры данных Cloudflare стали более компактными. Меньший объем данных занимает меньше места, что позволяет разместить больше записей кэша в более быстрых кэшах L1, L2 и L3 процессора, улучшая локальность кэша процессора.
Представьте это как заполнение кладовой: упаковка меньшего размера означает, что вы можете разместить больше часто используемых предметов на легкодоступных передних полках. Процессоры тратят меньше времени на получение данных из более медленной оперативной памяти (RAM) и больше времени на их обработку непосредственно из этих высокоскоростных кэшей, что радикально сокращает время ожидания.
Столь глубокое улучшение как потребления ресурсов, так и скорости работы — инженерная редкость, бросающая вызов типичным компромиссам между использованием памяти и временем выполнения. Cloudflare не только освободила 100 терабайт памяти, но и сделала свой DNS-резолвер заметно быстрее. Чтобы углубиться в технические детали, прочитайте отчет самой Cloudflare: Как мы сэкономили 100 терабайт памяти, оптимизировав DNS-кэш 1.1.1.1.
Нравится статья? Получайте такие каждое утро на почту.
одно письмо в день · отписка в два клика · без сторонних трекеров
Эффект домино эффективности
Cloudflare не позволит этим 100 ТБ освобожденной памяти простаивать. Вместо этого компания напрямую реинвестирует этот значительный объем в свою глобальную сеть, в частности, расширяя DNS-кэш для таких сервисов, как 1.1.1.1. Такое стратегическое распределение максимизирует эффект от высвобождения памяти, превращая технический триумф в немедленное операционное обновление.
Увеличение DNS-кэша напрямую означает ощутимые преимущества для миллионов пользователей по всему миру. Повышение коэффициента попаданий в кэш означает более быстрые DNS-ответы, поскольку серверы Cloudflare могут разрешать больше запросов из локальной памяти, а не инициировать вышестоящие поиски. Это напрямую повышает отзывчивость и устойчивость работы в интернете.
Достижение Cloudflare предлагает важный отраслевой урок: глубокая оптимизация систем остается мощным рычагом эффективности. Поскольку спрос со стороны AI-нагрузок повышает стоимость серверной памяти, оптимизация существующей инфраструктуры для высвобождения 100 терабайт памяти без изменения оборудования — это не просто инженерный подвиг, это стратегическая необходимость. Эта кропотливая работа на уровне Rust подчеркивает непреходящую ценность точности в системном программировании.
Часто задаваемые вопросы
Сколько памяти на самом деле сэкономила Cloudflare?
Cloudflare сэкономила около 100 терабайт (ТБ) оперативной памяти во всей своей глобальной сети серверов за счет оптимизации DNS-кэша 1.1.1.1, что эквивалентно объему памяти в 130 ее серверах.
Какой язык программирования использовался для оптимизации?
Оптимизации были реализованы на Rust, который был выбран из-за своей эффективности использования памяти, производительности и низкоуровневого контроля над структурами данных.
Замедлило ли экономию памяти работу DNS-резолвера?
Нет, как ни парадоксально, оптимизации также повысили производительность. Пропускная способность записи в кэш увеличилась на 43%, а задержка поиска сократилась на 19%.
Как была сэкономлена память?
Экономия была достигнута за счет пяти основных изменений в способе хранения DNS-данных, включая устранение неиспользуемой емкости памяти в векторах, объединение списков данных и более эффективное хранение записей в виде необработанных байтов.
Что Cloudflare будет делать с освободившимися 100 ТБ памяти?
Освободившаяся память будет реинвестирована для увеличения размера DNS-кэша. Ожидается, что это повысит коэффициент попаданий в кэш, сократит количество вышестоящих запросов и сделает сервис 1.1.1.1 еще быстрее для пользователей.

