A Cloudflare közzétette a Pingora 0.4 keretrendszer kiadását, amelyet biztonságos, nagy teljesítményű hálózati szolgáltatások fejlesztésére terveztek Rust nyelven. A Pingora használatával épített proxyt több mint két éve használják a Cloudflare tartalomszolgáltató hálózatban az Nginx helyett, és másodpercenként több mint 40 millió kérést dolgoz fel. A kód Rust nyelven íródott, és az Apache 2.0 licenc alatt van közzétéve.
A Pingora főbb jellemzői:
- A HTTP/1 és a HTTP/2 támogatása (HTTP/3 a tervekben), valamint szolgáltatás létrehozásának lehetősége saját protokollok vagy UDP/TCP használatával.
- A kérések többszálú feldolgozásának támogatása aszinkron módban.
- Visszahíváskezelők és szűrők csatolásának lehetősége, amelyek lehetővé teszik a kérésfeldolgozás különböző szakaszainak kezelését, valamint a kérések és válaszok módosítását, átirányítását, blokkolását és naplózását.
- A gRPC és a WebSocket proxyja.
- Csatlakoztatható terheléselosztók.
- Lehetőség a konfiguráció megváltoztatására újraindítás nélkül.
- Támogatás az alkalmazáskód frissítéséhez a kapcsolatok megszakítása nélkül.
- A terhelés átkapcsolásának eszköze meghibásodás esetén (feladatátvétel).
- Integráció különféle megfigyelő és naplózó rendszerekkel (Syslog, Prometheus, Sentry, OpenTelemetry).
- TLS-titkosítás támogatása (OpenSSL, BoringSSL vagy Rustls használatával).
- Kész Rust csomagok HTTP-proxy létrehozásához, hálózati protokollokkal való munkához, HTTP-fejlécek elemzéséhez, forgalom elszámolásához és korlátozásához, terheléselosztáshoz, Ketama elosztott hash-táblázattal való munkához, gyorsítótár karbantartásához a RAM-ban és az időtúllépések aszinkron feldolgozásához.
Az új verzió változásai között szerepel:
- A Rustls kriptográfiai könyvtár kezdeti támogatása az aws-lc-rs alapú titkosítási szolgáltatókkal és a BoringSSL alapú gyűrűs könyvtárakkal.
- Kísérleti támogatás a Windows platformhoz.
- Dummy TLS mód, amely olyan helyzetekben használható, amikor nem lehetséges valódi TLS implementációt használni.
- Hozzáadva a gRPC-web modul támogatása a gRPC-web klienskéréseknek a következő kérésekké való lefordításához: szerver gRPC.
- Lehetővé teszi a H2C (HTTP/2 csupasz TCP-n keresztül, titkosítás nélkül) és a HTTP/1 kapcsolatok kezelését ugyanazon a hálózati porton.
- Hozzáadtuk a connect() függvény saját implementációinak csatlakoztatásának lehetőségét, hogy megváltoztassuk a viselkedést a hálózati kapcsolat létesítésekor, például további opciók beállításához a sockethez vagy a tesztelés során fellépő hibák szimulálásához.
- Lehetővé teszi az információs válaszok figyelmen kívül hagyását proxyhasználatkor, például az „Expect: 100-continue” fejlécet tartalmazó válaszokat.
- Támogatás hozzáadva a gzip-tömörített válaszok kicsomagolásához.
- A háttérállapot felügyeleti célú könyvelése megvalósított.
- Hozzáadták a helyi portokhoz való kötődés lehetőségét.
Forrás: opennet.ru
