Как Cloudflare сэкономила 100 терабайт памяти, оптимизировав DNS-кэш 1.1.1.1

ОТВЕТИТЬ НОВАЯ ТЕМА
hime 1 сен 2026 в 17:14
Хохмяч  •  На сайте 20 лет
Сообщений: 8 449
9
источник

Масштаб задачи
Платформа Big Pineapple, на которой работает публичный DNS-резолвер 1.1.1.1, одновременно хранит свыше 250 миллиардов записей в кэше. При таких объёмах каждый лишний байт на одну запись оборачивается перерасходом в 250 гигабайт по всему парку серверов. Инженеры компании подошли к проблеме системно и внесли пять последовательных изменений в то, как записи размещаются в памяти.

Что получилось
Расход памяти на одну запись сократился с 953 до 420 байт — на 56%. В масштабах всей инфраструктуры это высвободило около 100 терабайт, столько же оперативной памяти несут 130 серверов последнего поколения. Причём за экономию не пришлось платить скоростью: скорость записи в кэш выросла на 43%, а задержка при чтении снизилась на 19%.

Пять оптимизаций
Запас, который никогда не пригодится. Динамический массив в Rust хранит не только сами данные, но и служебное поле с запасом места на будущее расширение. Но DNS-ответ, попав в кэш, уже никогда не меняется, поэтому запас там не нужен. Переход на неизменяемые типы избавил и от лишнего поля, и от зарезервированной впустую памяти.

Один список вместо трёх. DNS-ответ состоит из трёх секций, и раньше каждая хранилась отдельным списком со своим указателем и длиной. Их объединили в один список с двухбайтовыми метками границ — минус 28 байт на запись.

Отказ от повторения имени. Обычно домен в самой записи совпадает с тем, что был запрошен, а запрос и так лежит рядом, в ключе кэша. Теперь имя хранится только там, где действительно отличается — например, за псевдонимом CNAME.

Ужатие типов записей. Перечисление в Rust всегда занимает столько места, сколько нужно самому крупному его варианту. Из-за этого четырёхбайтовый адрес IPv4 занимал те же 144 байта, что и редкий громоздкий тип записи. Крупные варианты вынесли в отдельную область памяти, оставив в основной структуре только указатель.

Хранение в двоичном виде. На последнем шаге разобранные структуры заменили сплошным блоком байтов, где каждая запись предваряется своей длиной. Данные легли в памяти вплотную друг к другу, а при отправке ответа их в большинстве случаев достаточно просто скопировать, не собирая заново.

Результаты
Развёртывание шло с 18 мая по 6 июля 2026 года, и, поскольку каждый релиз приносил одну-две оптимизации, память убывала ступенями. В верхнем процентиле потребление на экземпляр упало с 9,3 до 5,3 гигабайта (−43%), в девяностом — с 6,5 до 3,8 (−42%); больше всех выиграли серверы с самыми полными кэшами.
Код
Память на запись     953 байта -> 420 байт (-56%)
Выделений на запись  1,1 КБ -> 461 байт (-58%)
Скорость вставки     625 000 -> 893 000 записей/с (+43%)
Задержка поиска      828 -> 670 нс (-19%)

Суммарно по всей инфраструктуре высвободилось около 100 терабайт — столько оперативной памяти несут 130 серверов последнего поколения. Освободившееся место в Cloudflare планируют пустить на увеличение самого кэша: чем он больше, тем чаще ответ находится на месте и тем реже приходится обращаться к вышестоящим серверам.

Как Cloudflare сэкономила 100 терабайт памяти, оптимизировав DNS-кэш 1.1.1.1
Все комментарии:
DiMNorilsk 1 сен 2026 в 17:19
Замечательный молодец  •  На сайте 14 лет
1
Для их масштабов 100 терабайт это как почесаться. Тодеикрищис походу в разработках раз таким уже хвалятся.

Размещено через приложение ЯПлакалъ
ELEA 1 сен 2026 в 17:20
Ярила  •  На сайте 11 лет
1
То что оптимизировали - я понял. А детали уж лучше бы не писали, а то они настолько "поверхностные", что никаких технических деталей и не раскрывают.
И что тут можно сказать при таком количестве информации - молодцы, надеюсь все показатели правда и все это не обрастет через время найденными багами...
Thief 1 сен 2026 в 17:20
Ярила  •  На сайте 21 год
0
пффф, у меня ССД на столько же (шутка)
экономные gigi.gif

а самое главное что, сука, цена на память и ссд не упадут из-за этого, вот увидите

Это сообщение отредактировал Thief - 1 сен 2026 в 17:21
flaitsman 1 сен 2026 в 17:21
foreign agent  •  На сайте 17 лет
0
Цитата
Но DNS-ответ, попав в кэш, уже никогда не меняется, поэтому запас там не нужен.

Чего? upset.gif
hime автор 1 сен 2026 в 17:24
Хохмяч  •  На сайте 20 лет
0
Цитата (ELEA @ 1 сен 2026 в 17:20)
То что оптимизировали - я понял. А детали уж лучше бы не писали, а то они настолько "поверхностные", что никаких технических деталей и не раскрывают.
И что тут можно сказать при таком количестве информации - молодцы, надеюсь все показатели правда и все это не обрастет через время найденными багами...

детали по ссылке, в начале. здесь сильно упрощённый текст, чтобы не утонуть в "деталях".
Modigar 1 сен 2026 в 17:24
Ярила  •  На сайте 15 лет
0
Не многие поймут....
Swenum 1 сен 2026 в 17:25
Ярила  •  На сайте 14 лет
0
Классная инженерная задача и решение!
SBrute 1 сен 2026 в 17:25
Ярила  •  На сайте 12 лет
0
Фигня эти 100Тб - 50 флешек на ВБ по 600-700 рублей.
Цены, конечно, на диски пиздец. Сдох ssd на днях - первый, кстати, на моей памяти, - посмотрел, почем они, охуел.
Swenum 1 сен 2026 в 17:31
Ярила  •  На сайте 14 лет
0
Цитата (SBrute @ 1 сен 2026 в 17:25)
Фигня эти 100Тб - 50 флешек на ВБ по 600-700 рублей.
Цены, конечно, на диски пиздец. Сдох ssd на днях - первый, кстати, на моей памяти, - посмотрел, почем они, охуел.

Ага поддельных флешек с реальным обьёмом в 60 мегабайт вместо террабайт? ))
ELEA 1 сен 2026 в 17:31
Ярила  •  На сайте 11 лет
0
Цитата (hime @ 1 сен 2026 в 17:24)
Цитата (ELEA @ 1 сен 2026 в 17:20)
То что оптимизировали - я понял. А детали уж лучше бы не писали, а то они настолько "поверхностные", что никаких технических деталей и не раскрывают.
И что тут можно сказать при таком количестве информации - молодцы, надеюсь все показатели правда и все это не обрастет через время найденными багами...

детали по ссылке, в начале. здесь сильно упрощённый текст, чтобы не утонуть в "деталях".

Капец, ссылки обычно вконце статьи дают)))
Не заметил)
Swenum 1 сен 2026 в 17:32
Ярила  •  На сайте 14 лет
0
Цитата (flaitsman @ 1 сен 2026 в 17:21)
Цитата
Но DNS-ответ, попав в кэш, уже никогда не меняется, поэтому запас там не нужен.

Чего? upset.gif

Видимо, если адрес меняется, то создаётся новая запись в таблице. А существующая по TTL удаляется.

Это сообщение отредактировал Swenum - 1 сен 2026 в 17:33
ELEA 1 сен 2026 в 17:33
Ярила  •  На сайте 11 лет
0
Цитата (SBrute @ 1 сен 2026 в 17:25)
Фигня эти 100Тб - 50 флешек на ВБ по 600-700 рублей.
Цены, конечно, на диски пиздец. Сдох ssd на днях - первый, кстати, на моей памяти, - посмотрел, почем они, охуел.

100Тб оперативы это далеко не про SSD речь....
Понравился пост? Ещё больше интересного в ЯП-Телеграм и ЯП-Max!
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии. Авторизуйтесь, пожалуйста, или зарегистрируйтесь, если не зарегистрированы.
52 Пользователей читают эту тему (1 Гостей и 10 Скрытых Пользователей) Просмотры темы: 679
41 Пользователей: AGL86, РАО, nik61, slidemaster, alexandersal, Pasha7791, Wondergod, Dskz, ELEA, Apollopro, RomanLsX, Осратник, Swenum, Vital1984, ourlive, upsmoked, SerialATA, viking, BattlePorQ, AIeksZandr, plakal37, zzzzeka, kazanoza, goshik, sandvh, 62tve, conung, Mellior, Бармалей343, Drossel, St1x3, unpresent, Pro100roff, Aleksey73, Meg6pam, unclefuckers, Khudzhand, Трилон, Ebok, garixx, ZanudaSPb
ОТВЕТИТЬ НОВАЯ ТЕМА

 
 

Активные темы



Наверх