
A Pingora egy új HTTP-proxy, amelyet a cloudflare hozott létre a Rust használatával
Bemutatták a Cloudflare-t nemrég aki vándorol a tartalomszolgáltató hálózatát a proxy használatához "pingora", ami Rozsda nyelven íródott. Az új proxy cserélve NGINX szerveralapú konfiguráció Lua szkriptekkel, és naponta több mint egymilliárd kérést kezel.
Megjegyzendő, hogy a „Pingora” speciális proxyra való áttérés nemcsak új funkciók megvalósítását és a biztonság növelését tette lehetővé a memóriával való biztonságos munka miatt, hanem a teljesítmény és az erőforrás-megtakarítások jelentős növekedéséhez is vezetett.
A Pingora-alapú megoldás nem igényli a Lua használatát, és a Cloudflare terhelés-optimalizált architektúráját használja, 70%-kal kevesebb CPU-erőforrást és 67%-kal kevesebb memóriát fogyaszt, miközben ugyanannyi forgalmat dolgoz fel.
Hosszú ideje, NGINX szkripteken alapuló forgalmi proxy rendszer a felhasználók és a végszerverek között és Lua kielégítette a Cloudflare igényeit, de ahogy a hálózat nőtt és összetettsége nőtt, az univerzális megoldás nem volt elég, mind a teljesítmény, mind a bővíthetőség korlátai és az ügyfelek számára kínált új lehetőségek megvalósítása tekintetében.
Különösen az egyszerű átjárón és a terheléselosztón túli funkcionalitás hozzáadása során voltak nehézségek. Például abban az esetben, ha a szerver nem tudott feldolgozni egy kérést, át kellett irányítani a kérést egy másik szerverre, más HTTP-fejléckészlettel ellátva.
Építészet helyett külön munkafolyamatokra osztott kérésekkel (dolgozók), A Pingora többszálas modellt használ, amely a Cloudflare használati forgatókönyveiben (a különböző oldalakró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 a kiegyensúlyozatlan kérelmek nginx folyamatokhoz kötése vezetett a CPU magok kiegyensúlyozatlan terheléséhez, aminek következtében az erőforrás-igényes kérések és az I/O blokkolások lelassították a többi kérés feldolgozását.
Ezenkívül a kapcsolatkészlet vezérlőfolyamatokhoz való hozzárendelése nem tette lehetővé a más vezérlőfolyamatokból már létrehozott kapcsolatok újrafelhasználását, ami nagyszámú vezérlőfolyamat esetén csökkenti a hatékonyságot.
A Pingora bevezetése lehetővé tette a műveletek számának 160-szoros csökkentését új kapcsolatok kialakítása és 87,1%-ról 99,92%-ra növeli az újrafelhasznált kérelmek arányát. A csökkentett újracsatlakozások é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-illesztőprogramok eltávolításának volt köszönhető.
A Rust nyelvet azért választották, mert nagy teljesítményt tesz lehetővé memóriabiztos eszközök elérhetőségével kombinálva. Megemlítik, hogy a magasan képzett Cloudflare-mérnökök és a kódellenőrzés ellenére a C nyelven írt programok nem tudták elkerülni a memóriaproblémákat okozó hibákat (például a HTML-elemző sérülékenységét).
Ami az új kódot illeti, a Pingorában összeomláselemzési esetekről beszéltünk, amelyekről kiderült, hogy nem az alkalmazás problémái, hanem a Linux kernel hibája és hardverhibák okoztak.
Emellett megjegyezhető, hogy Linus Torvalds megjegyezte a Rust nyelv támogatásának belefoglalását a Linux kernelbe, amelyet a napokban zajló Open-Source Summit Europe konferencián fejeztek ki. A 6.0-s kernel nem tartalmazott javításokat az eszközmeghajtók fejlesztéséhez a Rust nyelven, de Linus szerint a 6.1-es kernelben valószínűleg elfogadják ezeket, így nem fogod kihasználni az integráció előnyeit.
A Rust támogatásának indokaként a pozitív biztonsági hatáson túl Linus megragadja a lehetőséget, hogy növelje az új belépők érdeklődését a kernellel való munka iránt, ami fontos az öregedő veteránok kontextusában.
Végül ha érdekel, hogy többet tudjon meg róla, a részleteket itt ellenőrizheti a következő link.