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

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

Масштаб задачи
Платформа 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 лет
-4
Для их масштабов 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 лет
1
Не многие поймут....
Swenum 1 сен 2026 в 17:25
Ярила  •  На сайте 14 лет
4
Классная инженерная задача и решение!
SBrute 1 сен 2026 в 17:25
Ярила  •  На сайте 12 лет
-9
Фигня эти 100Тб - 50 флешек на ВБ по 600-700 рублей.
Цены, конечно, на диски пиздец. Сдох ssd на днях - первый, кстати, на моей памяти, - посмотрел, почем они, охуел.
Swenum 1 сен 2026 в 17:31
Ярила  •  На сайте 14 лет
2
Цитата (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 лет
1
Цитата (flaitsman @ 1 сен 2026 в 17:21)
Цитата
Но DNS-ответ, попав в кэш, уже никогда не меняется, поэтому запас там не нужен.

Чего? upset.gif

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

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

100Тб оперативы это далеко не про SSD речь....
matkuzmy 1 сен 2026 в 17:38
Хохмач  •  На сайте 4 года
0
Очень круто, представляю работу, которую они проделали!!!
Просто молодцы.
Atheist123 1 сен 2026 в 17:44
Жыдай  •  На сайте 17 лет
0
таак.
оперативка подешевеет?
n0clip 1 сен 2026 в 17:48
Ярила  •  На сайте 14 лет
0
Цитата (ELEA @ 1 сен 2026 в 17:33)
Цитата (SBrute @ 1 сен 2026 в 17:25)
Фигня эти 100Тб - 50 флешек на ВБ по 600-700 рублей.
Цены, конечно, на диски пиздец. Сдох ssd на днях - первый, кстати, на моей памяти, - посмотрел, почем они, охуел.

100Тб оперативы это далеко не про SSD речь....

Да он вообще про микро сд говорит или про юсб.
podarok66 1 сен 2026 в 17:50
Introvert  •  На сайте 9 лет
1
А теперь вишенка на торте - наш родной Роскомпозор одно время очень активно блочил и замедлял действия с адресом 1.1.1.1, что прекрасно херило все усилия клоуфейровских инженеров по оптимизации. Как там сейчас, не в курсе.

Размещено через приложение ЯПлакалъ
Aberrant 1 сен 2026 в 17:51
На фоксе! Всегда!  •  На сайте 5 лет
0
Цитата (flaitsman @ 1 сен 2026 в 17:21)
Цитата
Но DNS-ответ, попав в кэш, уже никогда не меняется, поэтому запас там не нужен.

Чего? upset.gif

имеется ввиду, что ответ от вышестоящего сервера не меняется до времени его обновления, установленного по расписанию.
т.е. если один раз спросили у 1.1.1.1 о каком-то имени, которого он не знал,
то во второй раз 1.1.1.1 не будет делать такой же запрос на сервер где изначально хранилась А-запись, а возьмёт тот же ответ из своего кэша и отдаст клиенту.

*сам держу на домашнем сервере DNS-проксю с жирным долгоиграющим кэшем (PDNSD) и это здорово ускоряет работу в сети,
ибо мои запросы (к известным моей проксе именам) никогда не стоят в очереди к DNS провайдера (которые вообще днище!) и не летят в дальние дали к 1.1.1.1 и подобным публичным DNS-проксям

ну, а из плюшек ещё и автоматическая смена вышестоящих DNS, которые опрашиваются моей проксёй и большая стойкость в тех случаях когда провайдер вдруг решить мне соврать и подменить DNS-ответ
Aberrant 1 сен 2026 в 17:57
На фоксе! Всегда!  •  На сайте 5 лет
0
Цитата (Swenum @ 1 сен 2026 в 17:32)
Цитата (flaitsman @ 1 сен 2026 в 17:21)
Цитата
Но DNS-ответ, попав в кэш, уже никогда не меняется, поэтому запас там не нужен.

Чего? upset.gif

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

на самом деле в таких сервисах обновление известных адресов делается по регламентному расписанию инкрементально,
т.е. выбираются только изменившиеся данные,
а не вся БД DNS-сервера,
так что это намного дешевле по времени и трафику
и получать эти обновления можно хоть раз в час (на некоторых DNS это происходит даже чаще)

так что да,
запись в кэше может быть условно вечной.
Trit5 1 сен 2026 в 17:59
Ярила  •  На сайте 13 лет
0
А если отключить на 5 минут на перекур, сколько электричества сэкономят?
Понравился пост? Ещё больше интересного в ЯП-Телеграм и ЯП-Max!
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии. Авторизуйтесь, пожалуйста, или зарегистрируйтесь, если не зарегистрированы.
24 Пользователей читают эту тему (1 Гостей и 4 Скрытых Пользователей) Просмотры темы: 679
19 Пользователей: апукусит, djvinny, lexshadow, White00Trash, alexmasz, l1lVolkl1l, sw73, AONMASTER, stebotron, PodzaBorman, 40degrees, sn1ckers, goblin1372, pestik, Валдерам, dockamper, pavlo225, Мишкасшишкой, Kuvaldolet
ОТВЕТИТЬ НОВАЯ ТЕМА

 
 

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



Наверх