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

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

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

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

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

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

Снижение числа виртуальных точек на серверах с 100 000 до 10 000 позволило сократить объем таблиц маршрутизации без потери точности балансировки нагрузки.

Оптимизация на уровне структур данных в коде на Rust обеспечила дополнительную экономию памяти за счет сокращения размера записей на два байта.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *