Podjetje Cloudflare je objavilo izdajo ogrodja Pingora 0.7, ki je namenjeno razvoju zaščitenih visokozmogljivih mrežnih storitev v jeziku Rust. Proxy, zgrajen s Pingoro, se že več kot dve leti uporablja v omrežju za dostavo vsebin Cloudflare namesto nginx in obdeluje več kot 40 milijonov zahtevkov na sekundo. Koda je napisana v jeziku Rust in objavljena pod licenco Apache 2.0.
Glavne značilnosti Pingora:
- Podpora za HTTP/1 in HTTP/2 (v načrtu je HTTP/3), pa tudi možnost ustvarjanja storitev, ki uporabljajo svoje protokole ali UDP/TCP.
- Podpora za obdelavo zahtevkov v večnitnem asinhronem načinu.
- Možnost pripenjanja obdelovalcev callback in filtrov, ki omogočajo upravljanje različnih faz obdelave zahtevka, pa tudi spreminjanje, preusmerjanje, blokiranje in evidentiranje zahtevkov in odgovorov.
- Proxiranje gRPC in WebSocket.
- Priklopni uravnavači obremenitve.
- Možnost spreminjanja konfiguracije brez ponovnega zagona.
- Podpora za posodobitev kode aplikacije brez prekinitev povezav.
- Orodja za preklapljanje obremenitve v primeru okvare (failover).
- Integracija z različnimi sistemi za spremljanje in evidentiranje (Syslog, Prometheus, Sentry, OpenTelemetry).
- Podpora za TLS-šifriranje (uporablja se OpenSSL, BoringSSL ali Rustls).
- Kontejnerji Rust za ustvarjanje HTTP-proxy, delo z omrežnimi protokoli, razčlenjevanje HTTP-headerjev, spremljanje in omejevanje prometa, uravnoteženje obremenitve, delo s porazdeljeno hash-tabelo Ketama, vzdrževanje predpomnilnika v pomnilniku in asinhrono obdelavo časovnih iztekanj.
Među promenama u novoj verziji:
- V strukturo SslDigest je dodano polje 'extension', za tip TlsAccept pa je implementirana obdelovalna funkcija handshake_complete_callback, ki omogoča pripenjanje poljubnih podatkov specifičnih za aplikacijo k TLS-povezavi. Kot primer je prikazano, kako uporabiti to možnost za ustvarjanje strežnika, ki bere informacije iz certifikata stranke in jih vrača v HTTP-odgovoru.
- Dodana je bila vrsta ConnectionFilter za filtriranje TCP-povezav v fazi pred dogovorom o TLS-parametrih, kar omogoča varčevanje z viri s prekinjanjem povezav v zgodnji fazi.
- Dodana podpora za virtualne tokove transportne ravni (Virtual L4 Streams), ki omogočajo integracijo lastnih implementacij omrežnih protokolov v pingora-proxy.
- Ustvarjena je bila možnost uporabe možnosti verify_cert in verify_hostname v konfiguracijah z rustls.
- Za zunanje crate-paket imate dostop do strukture HttpProxy za prepisovanje logike posredovanja zahtevkov.
- Določeno je omogočeno izločanje ozadnjih obdelovalcev podzahtjev iz glavnega obdelovalca seje.
- Omogočeno je sledenje velikosti telesa zahtevkov HTTP1 in HTTP2 ter metrike delovanja posrednika.
- Dodana je možnost ustvarjanja lastnih sej za enkapsuliran HTTP promet.
- Določena so omejitve za uporabo različic knjižnice lru (0.16.3 ali novejše) zaradi ranljivosti v implementaciji iteratorja IterMut, ki lahko povzroči zrušitev sistema zaradi aktivacije preverjanja zaimkov (borrow checker).
Izvor: opennet.ru
