Společnost Cloudflare zveřejnila vydání rámce Pingora 0.4, navrženého pro vývoj zabezpečených vysoce výkonných síťových služeb v jazyce Rust. Proxy postavená pomocí Pingory je již více než dva roky používána v síti pro doručování obsahu Cloudflare místo nginx a zpracovává více než 40 milionů požadavků za sekundu. Kód je napsán v jazyce Rust a byl vydán pod licencí Apache 2.0.
Hlavní funkce Pingora:
- Podpora HTTP/1 a HTTP/2 (v plánech je HTTP/3), stejně jako možnost vytváření služeb, které používají své vlastní protokoly nebo UDP/TCP.
- Podpora vícetrhu zpracování požadavků v asynchronním režimu.
- Možnost připojení callback-handlerů a filtrů, které umožňují řídit různé fáze zpracování požadavku, stejně jako měnit, přesměrovávat, blokovat a logovat požadavky a odpovědi.
- Proxování gRPC a WebSocket.
- Připojitelné vyvažovače zátěže.
- Možnost změny konfigurace bez restartu.
- Podpora aktualizace kódu aplikace bez přerušení spojení.
- Nástroje pro přepínání zátěže v případě selhání (failover).
- Integrace s různými monitorovacími a logovacími systémy (Syslog, Prometheus, Sentry, OpenTelemetry).
- Podpora šifrování TLS (využívá se OpenSSL, BoringSSL nebo Rustls).
- Hotové Rust balíčky pro vytváření HTTP-proxy, práci se síťovými protokoly, zpracování HTTP hlaviček, sledování a omezení provozu, vyvažování zátěže, práci s distribuovanou hash tabulkou Ketama, udržování cache v operační paměti a asynchronní zpracování časových limitů.
Mezi změnami v nové verzi:
- Počáteční podpora kryptografické knihovny Rustls, která používá kryptoprováděče založené na knihovnách aws-lc-rs a ring, založených na BoringSSL.
- Experimentální podpora platformy Windows.
- Režim falešného TLS (dummy TLS), který lze použít v situacích, kdy není možné použít skutečnou implementaci TLS.
- Byla přidána podpora modulu gRPC-web pro překlad požadavků klientů gRPC-web na požadavky k serveru gRPC.
- Byla poskytnuta možnost zpracování připojení H2C (HTTP/2 přes prostý TCP, bez šifrování) a HTTP/1 na jednom síťovém portu.
- Byla přidána možnost připojení vlastních implementací funkce connect() pro změnu chování při navazování síťového připojení, například pro nastavení dalších možností pro socket nebo simulaci chyb při testování.
- Byla poskytnuta možnost ignorovat informační odpovědi při proxy, jako jsou odpovědi s hlavičkami 'Expect: 100-continue'.
- Byla přidána podpora pro dekompresi odpovědí, které byly komprimovány metodou gzip.
- Bylo implementováno sledování stavu backendu pro monitorování.
- Byla přidána možnost vázání na rozsah lokálních portů.
Zdroj: opennet.ru
