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

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

Масштаб задачи
Платформа 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 лет
-6
Для их масштабов 100 терабайт это как почесаться. Тодеикрищис походу в разработках раз таким уже хвалятся.

Размещено через приложение ЯПлакалъ
ELEA 1 сен 2026 в 17:20
Ярила  •  На сайте 11 лет
2
То что оптимизировали - я понял. А детали уж лучше бы не писали, а то они настолько "поверхностные", что никаких технических деталей и не раскрывают.
И что тут можно сказать при таком количестве информации - молодцы, надеюсь все показатели правда и все это не обрастет через время найденными багами...
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 лет
1
Цитата (ELEA @ 1 сен 2026 в 17:20)
То что оптимизировали - я понял. А детали уж лучше бы не писали, а то они настолько "поверхностные", что никаких технических деталей и не раскрывают.
И что тут можно сказать при таком количестве информации - молодцы, надеюсь все показатели правда и все это не обрастет через время найденными багами...

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

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

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

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

Чего? upset.gif

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

Это сообщение отредактировал Swenum - 1 сен 2026 в 17:33
ELEA 1 сен 2026 в 17:33
Ярила  •  На сайте 11 лет
4
Цитата (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 лет
2
А теперь вишенка на торте - наш родной Роскомпозор одно время очень активно блочил и замедлял действия с адресом 1.1.1.1, что прекрасно херило все усилия клоуфейровских инженеров по оптимизации. Как там сейчас, не в курсе.

Размещено через приложение ЯПлакалъ
Aberrant 1 сен 2026 в 17:51
На фоксе! Всегда!  •  На сайте 6 лет
1
Цитата (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
На фоксе! Всегда!  •  На сайте 6 лет
2
Цитата (Swenum @ 1 сен 2026 в 17:32)
Цитата (flaitsman @ 1 сен 2026 в 17:21)
Цитата
Но DNS-ответ, попав в кэш, уже никогда не меняется, поэтому запас там не нужен.

Чего? upset.gif

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

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

так что да,
запись в кэше может быть условно вечной.
Trit5 1 сен 2026 в 17:59
Ярила  •  На сайте 13 лет
2
А если отключить на 5 минут на перекур, сколько электричества сэкономят?
Aberrant 1 сен 2026 в 18:35
На фоксе! Всегда!  •  На сайте 6 лет
0
Цитата (Swenum @ 01.09.2026 - 17:25)
Классная инженерная задача и решение!

странно, что этой задачей только что озаботились - оптимизация БД, это задача на уровне проектирования.
то же хранение длинных имён в отдельной таблице применяется повсеместно, по крайней мере это срабатывает в голове сразу после того, как дампы перестают влезать в разумные рамки 🤣

Размещено через приложение ЯПлакалъ
Aberrant 1 сен 2026 в 18:37
На фоксе! Всегда!  •  На сайте 6 лет
5
Цитата (Trit5 @ 01.09.2026 - 17:59)
А если отключить на 5 минут на перекур, сколько электричества сэкономят?

вообще нихера не сэкономят - выключение и включение сервера по энергозатратам на порядок дороже, чем его ровная работа - это как со стартом любого электродвигателя

Размещено через приложение ЯПлакалъ
hime автор 1 сен 2026 в 18:48
Хохмяч  •  На сайте 20 лет
1
Цитата (Aberrant @ 1 сен 2026 в 18:35)
Цитата (Swenum @ 01.09.2026 - 17:25)
Классная инженерная задача и решение!

странно, что этой задачей только что озаботились - оптимизация БД, это задача на уровне проектирования.
то же хранение длинных имён в отдельной таблице применяется повсеместно, по крайней мере это срабатывает в голове сразу после того, как дампы перестают влезать в разумные рамки 🤣

предположу, что так - пока идёт развитие, работаем, ну нахуй что-то менять - а вдруг всё наебнётся. и так пока проекция в будущее по затратам не стала превышать риски (вдруг всё наебнётся). тогда и денежка нашлать на разработку и реализацию плана по оптимизации.
Aberrant 1 сен 2026 в 19:07
На фоксе! Всегда!  •  На сайте 6 лет
0
Цитата (hime @ 01.09.2026 - 18:48)
предположу, что так - пока идёт развитие, работаем, ну нахуй что-то менять - а вдруг всё наебнётся. и так пока проекция в будущее по затратам не стала превышать риски (вдруг всё наебнётся). тогда и денежка нашлать на разработку и реализацию плана по оптимизации.

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

ну и про прибыль - это только догадки,
а скорее всего история с бесплатными DNS супсидируется кем-то в целях контроля информации.
это же очень дорого всё - и вот с чего такая щедрость то?
подозрительно.jpg

Размещено через приложение ЯПлакалъ
AliceInHell 1 сен 2026 в 20:15
Ярила  •  На сайте 9 лет
-1
Хуйня, у нас к 2030 году, 80% автомобилей будут российскими🥳

Размещено через приложение ЯПлакалъ
Понравился пост? Ещё больше интересного в ЯП-Телеграм и ЯП-Max!
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии. Авторизуйтесь, пожалуйста, или зарегистрируйтесь, если не зарегистрированы.
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) Просмотры темы: 3 441
0 Пользователей:
Страницы: 1 2  ОТВЕТИТЬ НОВАЯ ТЕМА

 
 

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



Наверх