Cloudflare je objavio izdanje okvira Pingora 0.4, dizajniranog za razvoj sigurnih mrežnih usluga visokih performansi na Rust jeziku. Proxy napravljen pomoću Pingore koristi se u Cloudflare mreži za isporuku sadržaja umjesto Nginx-a više od dvije godine i obrađuje više od 40 miliona zahtjeva u sekundi. Kod je napisan u Rustu i objavljen pod licencom Apache 2.0.
Ključne karakteristike Pingore:
- Podrška za HTTP/1 i HTTP/2 (HTTP/3 u planovima), kao i mogućnost kreiranja servisa koristeći sopstvene protokole ili UDP/TCP.
- Podrška za višenitnu obradu zahtjeva u asinhronom načinu rada.
- Mogućnost povezivanja rukovatelja povratnim pozivima i filtera koji vam omogućavaju upravljanje različitim fazama obrade zahtjeva, kao i modificiranje, preusmjeravanje, blokiranje i evidentiranje zahtjeva i odgovora.
- Proxying gRPC i WebSocket.
- Povezivi balanseri opterećenja.
- Mogućnost promjene konfiguracije bez ponovnog pokretanja.
- Podrška za ažuriranje koda aplikacije bez prekida veze.
- Sredstva za prebacivanje opterećenja u slučaju kvara (failover).
- Integracija sa različitim sistemima za praćenje i logovanje (Syslog, Prometheus, Sentry, OpenTelemetry).
- Podrška za TLS enkripciju (koristeći OpenSSL, BoringSSL ili Rustls).
- Gotovi Rust paketi za kreiranje HTTP proksija, rad sa mrežnim protokolima, raščlanjivanje HTTP zaglavlja, obračunavanje i ograničavanje saobraćaja, balansiranje opterećenja, rad sa Ketama distribuiranom hash tabelom, održavanje keš memorije u RAM-u i asinhrono procesuiranje vremenskih ograničenja.
Među promjenama u novoj verziji:
- Početna podrška za Rustls kriptografsku biblioteku koja koristi kripto provajdere bazirane na aws-lc-rs i ring biblioteke zasnovane na BoringSSL-u.
- Eksperimentalna podrška za Windows platformu.
- Lažni TLS način rada, koji se može koristiti u situacijama kada nije moguće koristiti pravu TLS implementaciju.
- Dodata je podrška za gRPC-web modul za prevođenje zahtjeva gRPC-web klijenta u zahtjeve za server gRPC.
- Pruža mogućnost rukovanja H2C (HTTP/2 preko golog TCP-a, bez enkripcije) i HTTP/1 vezama na istom mrežnom portu.
- Dodata je mogućnost povezivanja vlastitih implementacija funkcije connect() za promjenu ponašanja prilikom uspostavljanja mrežne veze, na primjer, za postavljanje dodatnih opcija za utičnicu ili simulaciju grešaka tokom testiranja.
- Pruža mogućnost ignorisanja informativnih odgovora prilikom proxyja, kao što su odgovori sa zaglavljem “Očekujte: 100-nastavak”.
- Dodata podrška za raspakivanje gzip komprimiranih odgovora.
- Implementirano računovodstvo pozadinskog stanja za potrebe praćenja.
- Dodata mogućnost vezanja za niz lokalnih portova.
izvor: opennet.ru
