Издаване на Pingora 0.7, фреймворк за създаване на мрежови услуги

Компания Cloudflare обяви издаването на фреймворка Pingora 0.7, предназначен за разработка на защитени високо производителни мрежови услуги на езика 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 или Rustls).
  • Готови Rust пакети за създаване на HTTP прокси, работа с мрежови протоколи, анализ на HTTP заглавия, управление и лимитиране на трафика, баланс на натоварване, работа с разпределена хеш таблица Ketama, поддържане на кеш в оперативната памет и асинхронно обработка на таймаутите.

Сред измененията в новата версия:

  • В структурата SslDigest е добавено поле «extension», а за типа TlsAccept е реализиран обработчик handshake_complete_callback, позволяващ прикрепянето на произволни данни, специфични за приложението, към TLS-съединението. Като пример е показано как да се използва тази възможност за създаване сървър, което чете информация от сертификата на клиента и я връща в HTTP-отговора.
  • Добавен е типаж ConnectionFilter за филтриране на TCP-съединения на етапа преди съгласуването на параметрите TLS, което спестява ресурси, сблъсквайки съединенията на ранен етап.
  • Добавена е поддръжка за виртуални потоци на транспортно ниво (Virtual L4 Streams), позволяващи интегрирането на собствени реализации на мрежови протоколи в pingora-proxy.
  • Реализирана е възможност за използване на опции verify_cert и verify_hostname в конфигурации с rustls.
  • За външните crate-пакети е разрешен достъп до структурата HttpProxy, за да се преопредели логиката на проксито на заявките.
  • Разрешено е отделянето на фонови обработчици на подзаявки от основния обработчик на сесия.
  • Предоставена е възможност за проследяване на размера на тялото на заявки HTTP1 и HTTP2, както и метрики на работата на проксито.
  • Добавена е функция за създаване на собствени сесии за инкапсулиран HTTP трафик.
  • Наложени са ограничения за използването на версии на библиотеката lru (0.16.3 или по-нови) поради уязвимост в реализирането на итератора IterMut, водеща до аварийно прекратяване заради въвеждането на проверка за заемане на променливи (borrow checker).

Източник: opennet.ru

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster