Kompania Cloudflare publikoi versionin e frameworkut Pingora 0.7, i cili është krijuar për të zhvilluar shërbime rrjeti të sigurta dhe me performancë të lartë në gjuhën Rust. Duke u ndërtuar me Pingora, proxy ka qenë i përdorur për më shumë se dy vjet në rrjetin e shpërndarjes së përmbajtjes Cloudflare si zëvendësim për 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.
Veçoritë Kryesore të Pingora:
- Mbështetje për HTTP/1 dhe HTTP/2 (me plane për HTTP/3), si dhe mundësia për të krijuar shërbime që përdorin protokole të veta ose UDP/TCP.
- Mbështetje për përpunimin në shumë thread-e në mënyrë asinkrone.
- Mundësia për të bashkangjitur callback-handler dhe filtra, të cilat lejojnë menaxhimin e fazave të ndryshme të përpunimit të kërkesës, si dhe ndryshimin, ridrejtimin, bllokimin dhe regjistrimin e kërkesave dhe përgjigjeve.
- Proksimi gRPC dhe WebSocket.
- Balancues ngarkese të lidhur.
- Mundësia e ndryshimit të konfigurimit pa rifilluar.
- Mbështetje për përditësimin e kodit të aplikacionit pa ndërprerë lidhjet.
- Mjetet për kalimin e ngarkesës në rast dështimi (failover).
- Integrimi me sisteme të ndryshme monitorimi dhe regjistrimi (Syslog, Prometheus, Sentry, OpenTelemetry).
- Mbështetje për enkriptimin TLS (përdoret OpenSSL, BoringSSL ose Rustls).
- Paketat përgatitore në Rust për krijimin e proxy HTTP, punën me protokollet rrjet, analizimin e kokave HTTP, monitorimin dhe kufizimin e trafikut, balansimin e ngarkesës, punën me tabelën e heshëjave të shpërndara Ketama, ruajtjen e cache-së në memorien e operativës dhe trajtimin asinkron të skadimeve.
Ndër ndryshimet në versionin e ri:
- Struktura SslDigest ka shtuar fushën "extension", dhe për tipin TlsAccept është realizuar një trajtues handshake_complete_callback, i cili lejon të ngjitemi të dhëna të rastësishme, specifike për aplikacionin, në lidhjen TLS. Si shembull është treguar se si të përdoret kjo mundësi për krijimin server, e cila lexon informacionin nga certifikata e klientit dhe e kthen atë në përgjigjen HTTP.
- Ka shtuar tipin ConnectionFilter për filtrimin e lidhjeve TCP në fazën para negociatave të parametrave TLS, duke lejuar kursimin e burimeve dhe duke hedhur lidhjet në një fazë të hershme.
- Ka shtuar mbështetje për rrjedhat virtuale të nivelit transport (Virtual L4 Streams), duke lejuar integrimin e realizimeve të veta të protokolleve të rrjetit në pingora-proxy.
- Nuk është realizuar 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 në strukturën HttpProxy për të tejkaluar logjikën e prokureve të kërkesave.
- ĂshtĂ« lejuar ndarja e trajtuesve tĂ« prapavijĂ«s pĂ«r nĂ«n-kĂ«rkesat nga trajtuesi kryesor i seancĂ«s.
- ĂshtĂ« ofruar mundĂ«sia pĂ«r ndjekjen e madhĂ«sisĂ« sĂ« trupit tĂ« kĂ«rkesave HTTP1 dhe HTTP2, si dhe metrike tĂ« funksionimit tĂ« proxy.
- Ka shtuar mundësinë e krijimit të seancave të veta për trafikun HTTP të inkapsuluar.
- 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ë vulnerabiliteti në realizimin e iteratores IterMut, i cili çon në ndalimin e papritur për shkak të kontrollit të huazimit të variablave (borrow checker).
Burimi: opennet.ru
