1 ноября 2024 года Cloudflare представила четвертый публичный релиз открытого проекта Pingora v0.4.0. Это асинхронный многопоточный фреймворк на Rust, который помогает создавать прокси-сервисы HTTP. Проект используется для создания сервисов, обеспечивающих значительную часть трафика в Cloudflare (вместо применения Nginx). Исходный код Pingora опубликован на GitHub под лицензией Apache 2.0.
Проект Pingora предоставляет библиотеки и API для создания сервисов поверх HTTP/1 и HTTP/2, TLS или просто TCP/UDP. В качестве прокси-сервера он поддерживает сквозное проксирование HTTP/1 и HTTP/2, gRPC и WebSocket. (Поддержка HTTP/3 — в планах). Pingora также включает в себя настраиваемые стратегии балансировки нагрузки и аварийного переключения. Чтобы соответствовать требованиям безопасности, он поддерживает как широко используемые библиотеки OpenSSL, так и BoringSSL, которые соответствуют требованиям FIPS (федеральных стандартов обработки информации США) и пост-квантового шифрования.
Помимо этих функций, Pingora предоставляет фильтры и обратные вызовы, позволяющие пользователям полностью настраивать то, как сервис должен обрабатывать, преобразовывать и пересылать запросы.
В рабочем режиме Pingora обеспечивает плавный перезапуск без простоев для самостоятельного обновления, не теряя ни одного входящего запроса. Syslog, Prometheus, Sentry, OpenTelemetry и другие необходимые инструменты наблюдения легко интегрируются с Pingora.
Возможности Pingora — использование Async Rust, поддержка HTTP 1/2 end to end proxy, TLS over OpenSSL или BoringSSL, gRPC и проксирование веб-сокетов, Graceful reload, настраиваемые стратегии балансировки нагрузки и аварийного переключения, поддержка различных инструментов мониторинга.
Разработчики проекта пояснили, что безопасность является главным приоритетом Pingora. Также проект работает быстро и эффективно, а API-интерфейсы прокси-сервера Pingora легко настраиваются под разные задачи.
В версии Pingora v0.4.0 исправлены ранее обнаруженные ошибки, а также:
добавлена начальная поддержка криптографической библиотеки Rustls, использующей криптопровайдеров на базе библиотек aws-lc-rs и ring, основанных на BoringSSL.
появилась экспериментальная поддержка платформы Windows;
добавлен режим фиктивного TLS (dummy TLS), который можно применять в ситуациях, когда невозможно использовать реальную реализацию TLS;
добавлена поддержка модуля gRPC-web для трансляции запросов клиентов gRPC-web в запросы к серверу gRPC;
предоставлена возможность обработки соединений H2C (HTTP/2 поверх голого TCP, без шифрования) и HTTP/1 на одном сетевом порту;
добавлена возможность подключения собственных реализаций функции connect() для изменения поведения при установке сетевого соединения, например, для выставления дополнительных опций для сокета или симуляции ошибок при тестировании;
предоставлена возможность игнорирования информационных ответов при проксировании, таких как ответы с заголовком "Expect: 100-continue";
добавлена поддержка распаковки ответов, сжатых методом gzip;
реализован учёт состояния бэкенда в целях мониторинга;
добавлена возможность привязки к диапазону локальных портов.
Источник новости: habr.com