Cloudflare ka publikuar versionin 0.7 të framework-ut Pingora, i krijuar për zhvillimin e shërbimeve të sigurta të rrjetit me performancë të lartë në gjuhën Rust. Proxy i ndërtuar me Pingora përdoret tashmë prej më shumë se dy vitesh në rrjetin e shpërndarjes së përmbajtjes së Cloudflare në vend të nginx dhe përpunon mbi 40 milionë kërkesa në sekondë. Kodi është shkruar në gjuhën Rust dhe është publikuar nën licencën Apache 2.0.
Karakteristikat kryesore të Pingora:
- Mbështetje për HTTP/1 dhe HTTP/2 (në planet është HTTP/3), si dhe mundësia për të krijuar shërbime që përdorin protokolle të veta ose UDP/TCP.
- Mbështetje për përpunim shumëthjeshtësor të kërkesave në mënyrë asinkrone.
- Mundësia për të bashkangjitur menaxhuese callback dhe filtra, të cilët lejojnë menaxhimin e fazave të ndryshme të përpunimit të kërkesave, si dhe ndryshimin, ridrejtimin, bllokimin dhe regjistrimin e kërkesave dhe përgjigjeve.
- Proksimi i gRPC dhe WebSocket.
- Balancues ngarkese të qartë.
- Mundësia për të ndryshuar konfigurimin pa rinisje.
- Mbështetje për azhurnimin e kodit të aplikacionit pa ndërprerje të lidhjeve.
- Mjetet për kalimin e ngarkesës në rast dështimi (failover).
- Integrimi me sisteme të ndryshme të monitorimit dhe regjistrimit të të dhënave (Syslog, Prometheus, Sentry, OpenTelemetry).
- Mbështetje për enkriptimin TLS (përdoren OpenSSL, BoringSSL ose Rustls).
- Paketa të gatshme Rust për krijimin e proksi HTTP, punën me protokolle rrjeti, përpunimin e kokës HTTP, mbajtjen dhe kufizimin e trafikut, balancimin e ngarkesës, punën me tabelat e hesh dhe mbajtjen e caches në memorie të përkohshme dhe përpunimin asinkron të kohëve të prishura.
Ndër ndryshimet në versionin e ri:
- Në strukturën SslDigest është shtuar fusha «extension», ndërsa për trait-in TlsAccept është implementuar trajtuesi handshake_complete_callback, të cilat lejojnë lidhjen e të dhënave arbitrare specifike për aplikacionin me lidhjen TLS. Si shembull tregohet se si të përdoret kjo mundësi për krijimin e serverë, që lexon informacionin nga certifikata e klientit dhe e kthen atë në përgjigjen HTTP.
- ĂshtĂ« shtuar trait-i ConnectionFilter pĂ«r filtrimin e lidhjeve TCP nĂ« fazĂ«n para dakordimit tĂ« parametrave TLS, gjĂ« qĂ« lejon kursimin e burimeve duke ndĂ«rprerĂ« lidhjet nĂ« njĂ« fazĂ« tĂ« hershme.
- ĂshtĂ« shtuar mbĂ«shtetja pĂ«r rrjedha virtuale tĂ« nivelit tĂ« transportit (Virtual L4 Streams), qĂ« mundĂ«sojnĂ« integrimin e implementimeve tuaja tĂ« protokolleve tĂ« rrjetit nĂ« pingora-proxy.
- ĂshtĂ« implementuar mundĂ«sia e pĂ«rdorimit tĂ« opsioneve verify_cert dhe verify_hostname nĂ« konfigurimet me rustls.
- Për paketat e jashtme crate është lejuar qasja te struktura HttpProxy për të mbishkruar logjikën e proksimit të kërkesave.
- ĂshtĂ« lejuar ndarja e trajtuesve nĂ« sfond pĂ«r nĂ«nkĂ«rkesat nga trajtuesi kryesor i sesionit.
- ĂshtĂ« ofruar mundĂ«sia pĂ«r tĂ« gjurmuar madhĂ«sinĂ« e trupit tĂ« kĂ«rkesave HTTP1 dhe HTTP2, si edhe metrikat e funksionimit tĂ« proxy-sĂ«.
- ĂshtĂ« shtuar mundĂ«sia pĂ«r krijimin e sesioneve tĂ« personalizuara pĂ«r trafikun HTTP tĂ« enkapsuluar.
- Janë vendosur kufizime për përdorimin e versioneve të bibliotekës lru (0.16.3 ose më të reja) për shkak të një cenueshmërie në implementimin e iteratorit IterMut, e cila çon në ndërprerje të papritur të punës për shkak të aktivizimit të kontrollit të huazimit të variablave (borrow checker).
Burimi: opennet.ru
