Проблема масштабирования кэширования
Cloudflare использует собственный open-source фреймворк Pingora для маршрутизации URL-запросов к серверам кэширования. Ключевая задача — маппинг произвольного URL на конкретный сервер с использованием алгоритма Ketama. В условиях высокой отказоустойчивости, когда бэкенд-серверы постоянно появляются и исчезают, стандартный подход требует хранения огромных таблиц хэшей в оперативной памяти.
Проблема «наивного» хэширования заключается в неравномерной нагрузке: если один сервер отключается, трафик перенаправляется на соседние узлы в хэш-пространстве, перегружая их, в то время как другие остаются недогруженными. Решение — увеличение количества хэшей на сервер и их случайное распределение. Однако на масштабах Cloudflare это приводило к хранению до 100 000 хэшей на машину, что вызывало критический рост потребления RAM.
Математическая оптимизация и экономия
Инженеры применили статистический анализ и пришли к выводу, что 100 000 хэшей — это перебор. Снижение количества записей до 10 000 (на 90%) сохранило практически ту же точность распределения нагрузки, так как ошибка распределения практически не снижается при увеличении порядка значений выше 10 000. Дополнительно команда оптимизировала структуры данных в Rust, сэкономив 2 байта на каждую запись. Учитывая миллиарды записей, это дало значительный суммарный эффект.
Результаты внедрения
Итоговая экономия составила около 100 ТБ оперативной памяти по всей инфраструктуре. Для обеспечения безопасности оптимизация была внедрена как отдельный путь кода (v2), позволяющий мгновенно откатиться к старой версии в случае сбоев, не нарушая работу сервиса.
| Параметр | До оптимизации | После оптимизации | Эффект |
|---|---|---|---|
| Количество хэшей на узел | 100 000 | 10 000 | Снижение на 90% |
| Размер записи (Rust) | Стандартный | Оптимизированный (-2 байта) | Экономия на миллиардах записей |
| Общая экономия RAM | — | — | ~100 ТБ |
Почему это важно
Эта оптимизация демонстрирует, как тонкая настройка алгоритмов на уровне данных может давать колоссальный экономический и инфраструктурный эффект. Сокращение потребления памяти снижает затраты на оборудование и охлаждение дата-центров, а также повышает общую эффективность работы CDN-сети Cloudflare, обслуживающей значительную часть мирового интернет-трафика.
Источник: Tom's Hardware ↗
