Cloudflare zverejnilo vydanie rámca Pingora 0.4, určeného na vývoj bezpečných, vysokovýkonných sieťových služieb v jazyku Rust. Proxy vytvorený pomocou Pingora sa používa v sieti na doručovanie obsahu Cloudflare namiesto Nginx už viac ako dva roky a spracováva viac ako 40 miliónov požiadaviek za sekundu. Kód je napísaný v jazyku Rust a publikovaný pod licenciou Apache 2.0.
Kľúčové vlastnosti Pingora:
- Podpora HTTP/1 a HTTP/2 (HTTP/3 v plánoch), ako aj možnosť vytvárať služby pomocou vlastných protokolov alebo UDP/TCP.
- Podpora viacvláknového spracovania požiadaviek v asynchrónnom režime.
- Možnosť pripojiť obslužné programy a filtre spätného volania, ktoré vám umožňujú spravovať rôzne fázy spracovania požiadaviek, ako aj upravovať, presmerovávať, blokovať a zaznamenávať požiadavky a odpovede.
- Proxy gRPC a WebSocket.
- Pripojiteľné vyrovnávače záťaže.
- Schopnosť zmeniť konfiguráciu bez reštartovania.
- Podpora aktualizácie kódu aplikácie bez prerušenia pripojenia.
- Prostriedky na spínanie záťaže v prípade poruchy (failover).
- Integrácia s rôznymi monitorovacími a logovacími systémami (Syslog, Prometheus, Sentry, OpenTelemetry).
- Podpora šifrovania TLS (pomocou OpenSSL, BoringSSL alebo Rustls).
- Hotové Rust balíčky na vytváranie HTTP proxy, prácu so sieťovými protokolmi, parsovanie HTTP hlavičiek, účtovanie a obmedzovanie prevádzky, load balancing, prácu s distribuovanou hash tabuľkou Ketama, udržiavanie cache v RAM a asynchrónne spracovanie timeoutov.
Medzi zmeny v novej verzii:
- Počiatočná podpora pre kryptografickú knižnicu Rustls pomocou poskytovateľov kryptomien založených na aws-lc-rs a kruhových knižníc založených na BoringSSL.
- Podpora experimentálnej platformy Windows.
- Dummy TLS režim, ktorý je možné použiť v situáciách, keď nie je možné použiť skutočnú implementáciu TLS.
- Pridaná podpora pre modul gRPC-web na preklad požiadaviek klienta gRPC-web na požiadavky pre server gRPC.
- Poskytuje možnosť spracovať pripojenia H2C (HTTP/2 cez holý TCP, bez šifrovania) a HTTP/1 na rovnakom sieťovom porte.
- Pridaná možnosť pripojenia vlastných implementácií funkcie connect() na zmenu správania pri vytváraní sieťového pripojenia, napríklad nastavenie ďalších možností pre soket alebo simuláciu chýb počas testovania.
- Poskytuje možnosť ignorovať informačné odpovede pri proxy, ako sú odpovede s hlavičkou "Očakávať: 100 pokračovaní".
- Pridaná podpora pre rozbaľovanie odpovedí komprimovaných gzip.
- Implementované účtovanie stavu backendu na účely monitorovania.
- Pridaná možnosť viazať sa na rad miestnych portov.
Zdroj: opennet.ru
