A Cloudflare átváltott az NGINX-ről a saját, Rust nyelven írt Pingora proxyjára

A Cloudflare bejelentette tartalomszolgáltató hálózatának átállását a Rust nyelven írt Pingora proxy használatára. Az új proxy az NGINX szerveralapú konfigurációt Lua szkriptekre cseréli, és naponta több mint egy billió kérést dolgoz fel. Megjegyzendő, hogy a speciális proxyra való áttérés nemcsak új funkciók bevezetését és a memória biztonságos működésének köszönhetően a biztonság növelését tette lehetővé, hanem a teljesítmény és az erőforrás-megtakarítás jelentős növekedéséhez is vezetett – a Pingora-alapú megoldás nem igényel használatot. a Lua-ból, és ezért 70%-kal kevesebb CPU-t és 67%-kal kevesebb memóriát fogyaszt, miközben ugyanannyi forgalmat dolgoz fel.

A felhasználók és a végszerverek közötti proxyforgalom NGINX és Lua szkripteken alapuló rendszere sokáig kielégítette a Cloudflare igényeit, de a hálózat növekedésével és összetettségének növekedésével az univerzális megoldás nem bizonyult elegendőnek, mind a teljesítmény, valamint a bővíthetőség és az ügyfelek számára új lehetőségek megvalósításának korlátai miatt. Különösen az egyszerű átjárón és a terheléselosztón túli funkcionalitás hozzáadása jelentett kihívásokat. Például szükségessé vált, ha a szerver nem dolgoz fel egy kérést, a kérést újra el kell küldeni egy másik szervernek, más HTTP fejléckészlettel ellátva.

A kéréseket külön dolgozói folyamatokra szétválasztó architektúra helyett a Pingora egy többszálú modellt használ, amely a Cloudflare használati esetekben (a különböző helyekről érkező forgalom magas koncentrációja nagy statisztikai eltolódással) az erőforrások hatékonyabb elosztását mutatta a CPU magok között. Különösen az, hogy az nginx a kiegyensúlyozatlan kéréseket folyamatokhoz kötötte, a CPU magjainak kiegyensúlyozatlan terhelését eredményezte, ami erőforrás-igényes kérelmeket és az I/O blokkolását eredményezte, ami lelassította a többi kérés feldolgozását. Ezenkívül a kapcsolatkészletnek a kezelői folyamatokhoz való hozzárendelése nem tette lehetővé a más kezelői folyamatokból már létrehozott kapcsolatok újrafelhasználását, ami csökkenti a hatékonyságot, ha nagyszámú kezelői folyamat van.

NGINX:

A Cloudflare átváltott az NGINX-ről a saját, Rust nyelven írt Pingora proxyjára

Pingora:

A Cloudflare átváltott az NGINX-ről a saját, Rust nyelven írt Pingora proxyjára

A Pingora megvalósítása lehetővé tette az új kapcsolatok telepítésének 160-szoros csökkentését, és az újrafelhasznált kérések arányának 87.1%-ról 99.92%-ra történő növelését. Az újracsatlakozások csökkentése és a CPU-magok hatékonyabb felhasználása mellett az új proxy teljesítményjavulása elsősorban az nginx-szel használt lassú Lua-kezelők eltávolításának volt köszönhető.

A Rust nyelvet a nagy teljesítmény elérése érdekében választották, kombinálva a memória biztonságos működését biztosító eszközök rendelkezésre állásával. Megemlítik, hogy a Cloudflare magasan képzett mérnökei és a C nyelven írt kód áttekintése ellenére sem sikerült elkerülni a memóriaproblémákhoz vezető hibákat (például a HTML-elemző sérülékenységét). Ami az új kódot illeti, a Pingora hibáinak elemzési eseteiről beszél, amelyekről kiderült, hogy nem az alkalmazás problémái, hanem a Linux kernel hibája és a hardverhibák okozták.

Emellett megjegyezhetjük Linus Torvalds kommentárját, amely a napokban zajló Open-Source Summit Europe konferencián hangzott el a Rust nyelv támogatásának a Linux kernelbe való beépítéséről. A Rust nyelvű eszközmeghajtók fejlesztésére szolgáló javítások nem kerültek bele a 6.0-s kernelbe, de Linus szerint nagy valószínűséggel a 6.1-es kernelbe is bekerülnek, az integrációt nem fogja késleltetni. A Rust támogatásának motivációjaként a biztonságra gyakorolt ​​pozitív hatáson túl Linus azt a lehetőséget is megemlíti, hogy növelje az érdeklődést az új résztvevők magja iránt, ami fontos az öregedő régi idősek kontextusában.

Forrás: opennet.ru

Hozzászólás