Firma Cloudflare opublikowała wersję frameworka Pingora 0.6, przeznaczonego do tworzenia bezpiecznych i wydajnych usług sieciowych w języku Rust. Proxy zbudowane przy użyciu Pingora jest już od ponad dwóch lat wykorzystywane w sieci dostarczania treści Cloudflare zamiast nginx i obsługuje ponad 40 mln zapytań na sekundę. Kod został napisany w języku Rust i opublikowany na licencji Apache 2.0.
Główne możliwości Pingora:
- Wsparcie dla HTTP/1 i HTTP/2 (w planach HTTP/3), a także możliwość tworzenia usług korzystających z własnych protokołów lub UDP/TCP.
- Wsparcie dla wielowątkowego przetwarzania zapytań w trybie asynchronicznym.
- Możliwość dołączania callbacków i filtrów umożliwiających zarządzanie różnymi etapami przetwarzania zapytania, a także modyfikowanie, przekierowywanie, blokowanie i logowanie zapytań i odpowiedzi.
- Proxy gRPC i WebSocket.
- Modułowe load balancery.
- Możliwość zmiany konfiguracji bez restartu.
- Wsparcie dla aktualizacji kodu aplikacji bez przerywania połączeń.
- Narzędzia do przełączania obciążenia w przypadku awarii (failover).
- Integracja z różnymi systemami monitorującymi i logującymi (Syslog, Prometheus, Sentry, OpenTelemetry).
- Wsparcie dla szyfrowania TLS (wykorzystuje OpenSSL, BoringSSL lub Rustls).
- Gotowe pakiety Rust do tworzenia proxy HTTP, pracy z protokołami sieciowymi, analizy nagłówków HTTP, zliczania i ograniczania ruchu, balansowania obciążenia, pracy z rozproszoną tablicą haszującą Ketama, utrzymywania pamięci podręcznej w pamięci RAM i asynchronicznego przetwarzania czasów oczekiwania.
Wśród zmian w nowej wersji:
- Podczas zakończenia pracy zapewniono zapis w logu nazw komponentów runtime w celu uproszczenia diagnostyki problemów związanych z brakiem komponentów runtime, co prowadzi do opóźnień w czasie kończenia pracy.
- Dodano śledzenie faz wykonania serwera, informacje te mogą być przydatne do monitorowania lub zapewniania odporności na awarie. Przy zmianie fazy wykonania generowane jest zdarzenie ExecutionPhase, które można przechwycić przez API Server::watch_execution_phase.
- Zezwolono na umieszczanie w pamięci skompresowanych słowników.
- W implementacji serwera http i http-proxy dodano dyrektywy HttpServerOptions oraz H2Options.
- Wprowadzono ochronę przed atakiem MadeYouReset, umożliwiającego wywołanie odmowy usługi poprzez manipulację ramkami kontrolnymi HTTP/2.
Źródło: opennet.ru
