Аннотация:
Недавно Cloudflare значительно сократила кэш-память, используемую общедоступным преобразователем DNS 1.1.1.1, освободив примерно 100 ТБ памяти во всей сети. Эта оптимизация не предполагает замены серверного оборудования или удаления модулей памяти, а достигается за счет улучшения программного метода хранения данных DNS.

Эта работа в основном вращается вокруг Большого Ананаса. Big Pineapple — это платформа кэширования Cloudflare, которая поддерживает преобразователь 1.1.1.1, брандмауэр DNS и многие другие службы DNS. Системный инженер Cloudflare Себастьян Нойтебум представил в техническом блоге пять изменений в базе кода Rust, которые уменьшили пространство, занимаемое одной типичной записью кэша DNS, с 953 байтов до 420 байтов.
Оптимизированная скорость работы системы также была улучшена. Cloudflare сообщила, что пропускная способность вставки кэша увеличилась с 625 000 элементов в секунду до 893 000 элементов в секунду, а задержка запросов снизилась с 828 наносекунд до 670 наносекунд. За время развертывания с середины мая по начало июля использование памяти 99-го процентиля на экземпляр снизилось с 9,3 ГБ до 5,3 ГБ.
Cloudflare утверждает, что Big Pineapple постоянно кэширует более 250 миллиардов записей DNS. В таком большом масштабе даже небольшой объем памяти, потраченный впустую на одну запись, составляет значительную сумму. По оценкам компании, на каждый ненужный байт, занятый в записи кэша, весь кластер серверов потребляет более 250 ГБ дополнительной памяти.
Одно из важных изменений касается типов Vec и String в Rust. Эти контейнеры предназначены для динамического расширения, поэтому помимо фактических данных сохраняется дополнительная информация, такая как емкость. Однако запись DNS не требуется расширять после ее ввода в кэш. Затем Cloudflare заменила эти структуры коробочными срезами фиксированного размера, удалив метаданные, которые больше не были полезны. По данным компании, одна только эта настройка сэкономила более 15 ТБ памяти.
Инженеры также изменили способ расположения ответов DNS в памяти. Раньше Big Pineapple сохранял три набора списков записей для каждого ответа; новый дизайн помещает все записи в один и тот же буфер, а затем использует двухбайтовое смещение для определения местоположения каждой записи.
Кэш теперь также больше не сохраняет имена владельцев, если они являются просто дубликатами запрашиваемого доменного имени, а вместо этого перестраивается при возврате ответа. Кроме того, вместо этого система сохраняет данные записи, используя необработанные байты формата строки DNS с префиксом длины, решая проблему нерационального использования пространства в более ранних версиях. Раньше запись IPv4 A, занимавшая всего 4 байта, занимала 144 байта, как и относительно редкая запись NAPTR, самый большой тип записи DNS, кэшируемый Cloudflare. Переключение на формат необработанных данных переменной длины устраняет необходимость в более коротких записях, чтобы зарезервировать то же пространство, что и самые длинные записи.
100 ТБ памяти Cloudflare, освобожденной во всем кластере серверов, примерно эквивалентны объему памяти 130 серверов 13-го поколения. Каждый из этих серверов оснащен 768 ГБ памяти DDR5-6400. Cloudflare рассматривала возможность использования конфигурации памяти объемом 1152 ГБ для этого поколения серверов, но в конечном итоге отказалась от нее после оценки стоимости памяти большей емкости.
Благодаря этому объему памяти Cloudflare планирует увеличить размер кэша DNS. Ожидается, что хранение большего количества записей локально улучшит частоту попаданий в кэш и уменьшит трафик запросов к авторитетным DNS-серверам.
Это не первый раз, когда Cloudflare проводит масштабную оптимизацию эффективности использования памяти. В прошлом году компания также переписала уровень FL2, отвечающий за обработку запросов, в код Rust. В условиях роста цен на серверную память раскрытие потенциала существующей инфраструктуры за счет оптимизации программного обеспечения может оказаться более рентабельным, чем простое добавление оборудования.
Комментарии