Темы



Cloudflare освободила 100 ТБ оперативной памяти, изменив всего несколько строк в своей системе

Cloudflare удалось высвободить около 100 ТБ оперативной памяти в своей глобальной инфраструктуре благодаря оптимизации алгоритма распределения кешированных данных между серверами. Инженеры компании пересмотрели работу согласованного хеширования в открытом фреймворке Pingora и обнаружили, что значительная часть используемой памяти фактически была избыточной.

Изображение сгенерировано GeminiИзображение сгенерировано Gemini
Источник изображения: Gemini

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

Система преобразует URL в числовой хеш и сопоставляет его с хешами серверов. При этом каждому физическому серверу назначается множество виртуальных точек, случайным образом распределенных по хеш-кольцу. Такая схема позволяет равномерно перераспределять запросы между оставшимися узлами, если один из серверов выходит из строя.

Со временем в инфраструктуре Cloudflare на каждый сервер пришлось около 100 000 таких хешей. Дополнительную сложность создавали разные веса серверов, региональные особенности инфраструктуры и ограничения, из-за которых не каждый узел мог обслуживать любой запрос. В результате таблицы маршрутизации стали занимать огромное количество оперативной памяти.

Инженеры провели статистический анализ и выяснили, что настолько большое количество виртуальных точек практически не влияет на качество балансировки. После отметки примерно в 10 000 хешей дальнейшее увеличение их числа давало лишь минимальный прирост точности распределения нагрузки.

Cloudflare сократила количество виртуальных точек примерно в десять раз, практически не ухудшив балансировку. Затем инженеры дополнительно оптимизировали структуры данных на Rust и уменьшили размер каждой записи таблицы «хеш — сервер» еще на два байта. Для одной записи это почти незаметная экономия, но при миллиардах записей она превращается в десятки терабайт памяти.

В совокупности две оптимизации позволили высвободить около 100 ТБ оперативной памяти. При этом Cloudflare не стала сразу полностью заменять старую реализацию: новую версию алгоритма добавили параллельно с прежней, чтобы при обнаружении проблем можно было быстро вернуться к предыдущему варианту.

Это уже не первый случай, когда Cloudflare удается сэкономить десятки терабайт памяти благодаря относительно небольшим изменениям в программном обеспечении. Ранее компания также высвободила около 100 ТБ ОЗУ, оптимизировав структуру записей DNS-кеша сервиса 1.1.1.1.

©  iXBT