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). Формат конфигурации планируют сделать по возможности простым и привычным.
Источник: http://www.opennet.ru/opennews/art.shtml?num=60722