Найти в Дзене
Проект OpenNet

Компания Cloudflare открыла код Pingora, инструментария для создания сетевых сервисов

Компания Cloudflare объявила об открытии исходного кода фреймворка Pingora, предназначенного для разработки на языке Rust защищённых высокопроизводительных сетевых сервисов и программируемых сетевых систем. Фреймворк хорошо протестирован и уже применяется в работе высоконагруженных систем - построенный на его базе прокси более года задействован в сети доставки контента Cloudflare вместо nginx и обрабатывает более 40 млн запросов в секунду. Код написан на языке Rust и опубликован под лицензией Apache 2.0.

Pingora может использоваться для многопоточной обработки запросов в асинхронном режиме, поддерживает HTTP/1 и HTTP/2 (в планах HTTP/3), проксирование gRPC и WebSocket, подключаемые балансировщики нагрузки, изменение конфигурации без перезапуска, обновление кода без разрыва соединений, определение стратегии переключения нагрузки в случае сбоя (failover), интеграцию с различными системами мониторинга и ведения логов (Syslog, Prometheus, Sentry, OpenTelemetry). В Pingora также поддерживается TLS-шифрование, но оно реализовано в виде надстройки над Си-библиотеками OpenSSL и BoringSSL.

Предоставляются готовые Rust-пакеты для создания HTTP-прокси, работы с сетевыми протоколами, разбора заголовков HTTP, учёта и ограничения трафика, балансировки нагрузки, работы с распределённой хэш-таблицей Ketama, поддержания кэша в оперативной памяти и асинхронной обработки таймаутов. Кроме HTTP поддерживается создание сервисов, использующих свои протоколы или UDP/TCP.

Ключевым приоритетом проекта названо обеспечение безопасности - для снижения вероятности совершения ошибок, связанных с работой памятью, для разработки был выбран язык Rust. Большое внимание также уделено эффективности, производительности и расширяемости. Например, при создании прокси-серверов и балансировщиков нагрузки на базе Pingora предусмотрена возможность прикрепления callback-обработчиков и фильтров, позволяющих управлять различными стадиями обработки запроса, а также изменять, перенаправлять, блокировать и журналировать запросы и ответы.

Совместно с организацией ISRG (Internet Security Research Group), которая является учредителем проекта Let's Encrypt и способствует развитию технологий для повышения защищённости интернета, на базе Pingora будет создан обратный прокси River, рассчитанный на применение в критически важных элементах сетевой инфраструктуры. Код River будет написан на Rust и распространяться под лицензией Apache 2.0. Разработка начнётся во втором квартале 2024 года. В настоящее время проект находится на стадии проектирования и определения архитектуры. Проект развивается под руководством Джеймса Маннса (James Munns) из Rust Embedded Working Group.

Основным назначением проекта River является реализация прокси, способного транслировать запросы клиентов к бэкенд-серверам, терминируя входящие TLS-соединения и маршрутизируя, изменяя и фильтруя запросы в соответствии с заданными правилами. Из особенностей River упоминается многопоточная модель обработки запросов, позволяющая добиться более эффективного повторного использования соединений по сравнению с такими прокси, как nginx. Для расширения функциональности прокси и создания фильтров будет поддерживается подключение модулей, скомпилированных в формат WebAssembly (для разработки можно будет использовать любые языки программирования, для которых поддерживается компиляция в WASM). Формат конфигурации планируют сделать по возможности простым и привычным.