Cloudflare prešiel z NGINX na vlastný proxy server Pingora napísaný v jazyku Rust

Cloudflare oznámil prechod svojej siete na doručovanie obsahu na používanie proxy servera Pingora, napísaného v jazyku Rust. Nový proxy nahrádza konfiguráciu servera NGINX skriptami Lua a spracováva viac ako bilión požiadaviek denne. Je potrebné poznamenať, že prechod na špecializovaný proxy umožnil nielen implementovať nové funkcie a zvýšiť bezpečnosť vďaka bezpečnej prevádzke pamäte, ale viedol aj k výraznému zvýšeniu výkonu a úsporám zdrojov - riešenie založené na Pingore nevyžaduje použitie Lua, a preto spotrebuje o 70 % menej zdrojov CPU a o 67 % menej pamäte pri spracovávaní rovnakého množstva prevádzky.

Systém na proxy prevádzku medzi používateľmi a koncovými servermi založený na skriptoch NGINX a Lua dlho uspokojoval potreby Cloudflare, ale ako sieť rástla a jej komplexnosť sa zvyšovala, univerzálne riešenie sa ukázalo ako nedostatočné, a to z hľadiska výkonnosti a kvôli obmedzeniam v rozšíriteľnosti a implementácii nových príležitostí pre klientov. Problémy boli najmä pri pridávaní funkcií nad rámec jednoduchej brány a nástroja na vyvažovanie záťaže. Napríklad, ak server nedokáže spracovať požiadavku, bolo potrebné znova odoslať požiadavku na iný server a poskytnúť mu inú sadu HTTP hlavičiek.

Namiesto architektúry, ktorá oddeľuje požiadavky do samostatných pracovných procesov, Pingora používa viacvláknový model, ktorý v prípadoch použitia Cloudflare (vysoká koncentrácia návštevnosti z rôznych stránok s veľkým štatistickým posunom) ukázal efektívnejšiu distribúciu zdrojov medzi jadrá CPU. Najmä viazanie nevyvážených požiadaviek na procesy nginxom malo za následok nevyvážené zaťaženie jadier CPU, čo malo za následok požiadavky náročné na zdroje a blokovanie I/O spomaľujúce spracovanie iných požiadaviek. Okrem toho viazanie oblasti pripojení na procesy obsluhy neumožnilo opätovné použitie už vytvorených pripojení z iných procesov obsluhy, čo znižuje efektivitu pri veľkom počte procesov obsluhy.

NGINX:

Cloudflare prešiel z NGINX na vlastný proxy server Pingora napísaný v jazyku Rust

Pingora:

Cloudflare prešiel z NGINX na vlastný proxy server Pingora napísaný v jazyku Rust

Implementácia Pingora umožnila 160-násobne znížiť počet inštalácií nových pripojení a zvýšiť podiel opätovne použitých požiadaviek z 87.1 % na 99.92 %. Okrem zníženia opätovných pripojení a efektívnejšieho využívania jadier CPU bolo zlepšenie výkonu nového proxy spôsobené najmä odstránením pomalých obslužných programov Lua používaných s nginx.

Jazyk Rust bol zvolený na dosiahnutie vysokého výkonu v kombinácii s dostupnosťou nástrojov na zaistenie bezpečnej prevádzky s pamäťou. Spomína sa, že napriek vysoko kvalifikovaným inžinierom Cloudflare a kontrole kódu napísaného v jazyku C nebolo možné vyhnúť sa chybám vedúcim k problémom s pamäťou (napríklad zraniteľnosť v analyzátore HTML). Pokiaľ ide o nový kód, hovorí o prípadoch analýzy porúch v Pingore, ktoré sa ukázali ako spôsobené nie problémami v aplikácii, ale chybou v jadre Linuxu a poruchami hardvéru.

Okrem toho si môžeme všimnúť komentár Linusa Torvaldsa, vyjadrený na konferencii Open-Source Summit Europe, ktorá sa koná v týchto dňoch, týkajúcu sa zahrnutia podpory jazyka Rust do jadra Linuxu. Záplaty pre vývoj ovládačov zariadení v jazyku Rust neboli zahrnuté v jadre 6.0, ale podľa Linusa budú s najväčšou pravdepodobnosťou akceptované v jadre 6.1, integráciu nebude odkladať. Ako motiváciu pre pridanie podpory pre Rust okrem pozitívneho dopadu na bezpečnosť Linus uvádza aj možnosť zvýšiť záujem o prácu na jadre nových účastníkov, čo je dôležité v kontexte starnúcich staromilcov.

Zdroj: opennet.ru

Pridať komentár