Выпуск Pingora 0.2, фреймворка для создания сетевых сервисов

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

Основные возможности Pingora:

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

Среди изменений в новой версии:

  • Добавлена поддержка установки фильтров для дополнительных заголовков HTTP/2.
  • Добавлена возможность изменения размера буфера входящих пакетов для TCP.
  • Добавлена функция body_bytes_read().
  • Добавлен фильтр cache_not_modified_filter.
  • Добавлена возможность ведения лога TLS-ключей.
  • Добавлена callback-функция purge_response.
Release. Ссылка here.