Cloudflare pārgāja no NGINX uz savu Pingora starpniekserveri, kas rakstīts Rust

Cloudflare paziņoja par sava satura piegādes tīkla pāreju, lai izmantotu Pingora starpniekserveri, kas rakstīts Rust valodā. Jaunais starpniekserveris aizstāj NGINX servera konfigurāciju ar Lua skriptiem un apstrādā vairāk nekā triljonu pieprasījumu dienā. Tiek atzīmēts, ka pāreja uz specializētu starpniekserveri ļāva ne tikai ieviest jaunas funkcijas un palielināt drošību, pateicoties drošai atmiņas darbībai, bet arī būtiski palielinājusi veiktspēju un resursu ietaupījumu – uz Pingora balstītais risinājums neprasa lietot Lua, un tāpēc patērē par 70% mazāk resursu CPU un 67% mazāk atmiņas, vienlaikus apstrādājot tādu pašu trafika apjomu.

Ilgu laiku sistēma trafika starpniekserēšanai starp lietotājiem un gala serveriem, kuras pamatā ir NGINX un Lua skripti, apmierināja Cloudflare vajadzības, taču, tīklam augot un tā sarežģītībai pieaugot, universāls risinājums izrādījās nepietiekams gan attiecībā uz paplašināšanas un jaunu iespēju ieviešanas ierobežojumiem klientiem. Jo īpaši bija problēmas, pievienojot funkcionalitāti, kas pārsniedz vienkāršu vārteju un slodzes balansētāju. Piemēram, ja serverim neizdodas apstrādāt pieprasījumu, bija nepieciešams atkārtoti nosūtīt pieprasījumu citam serverim, nodrošinot to ar citu HTTP galveņu kopu.

Arhitektūras vietā, kas sadala pieprasījumus atsevišķos darbinieku procesos, Pingora izmanto vairāku pavedienu modeli, kas Cloudflare lietošanas gadījumos (augsta trafika koncentrācija no dažādām vietnēm ar lielu statistisko nobīdi) parādīja efektīvāku resursu sadali starp CPU kodoliem. Jo īpaši nginx nelīdzsvarotu pieprasījumu saistīšana ar procesiem izraisīja nelīdzsvarotu CPU kodolu slodzi, kā rezultātā resursietilpīgi pieprasījumi un I/O bloķēšana palēnina citu pieprasījumu apstrādi. Turklāt savienojumu pūla saistīšana ar apdarinātāja procesiem neļāva atkārtoti izmantot jau izveidotos savienojumus no citiem apdarinātāja procesiem, kas samazina efektivitāti, ja ir liels apdarinātāja procesu skaits.

NGINX:

Cloudflare pārgāja no NGINX uz savu Pingora starpniekserveri, kas rakstīts Rust

Pingora:

Cloudflare pārgāja no NGINX uz savu Pingora starpniekserveri, kas rakstīts Rust

Pingora ieviešana ļāva 160 reizes samazināt jaunu pieslēgumu instalāciju skaitu un palielināt atkārtoti izmantoto pieprasījumu īpatsvaru no 87.1% līdz 99.92%. Papildus atkārtotu savienojumu samazināšanai un efektīvākai CPU kodolu izmantošanai jaunā starpniekservera veiktspējas uzlabojums galvenokārt bija saistīts ar lēno Lua apdarinātāju noņemšanu, kas tika izmantoti kopā ar nginx.

Rust valoda tika izvēlēta, lai sasniegtu augstu veiktspēju apvienojumā ar rīku pieejamību, lai nodrošinātu drošu darbību ar atmiņu. Tiek minēts, ka, neskatoties uz augsti kvalificētiem Cloudflare inženieriem un C valodā rakstītā koda pārskatīšanu, nebija iespējams izvairīties no kļūdām, kas izraisīja atmiņas problēmas (piemēram, HTML parsētāja ievainojamība). Kas attiecas uz jauno kodu, tas runā par Pingora kļūmju analīzes gadījumiem, ko, kā izrādījās, izraisīja nevis lietojumprogrammas problēmas, bet gan kļūda Linux kodolā un aparatūras kļūmes.

Turklāt mēs varam atzīmēt Linusa Torvalda komentāru, kas izskanēja šajās dienās notiekošajā Open-Source Summit Europe konferencē par Rust valodas atbalsta iekļaušanu Linux kodolā. Ielāpi ierīču draiveru izstrādei Rust valodā netika iekļauti 6.0 kodolā, taču, pēc Linusa domām, tie, visticamāk, tiks pieņemti 6.1 kodolā, viņš negrasās aizkavēt integrāciju. Kā motivāciju Rust atbalsta pievienošanai Linuss papildus pozitīvajai ietekmei uz drošību min arī iespēju palielināt interesi strādāt pie jauno dalībnieku kodola, kas ir svarīgi veco ļaužu novecošanas kontekstā.

Avots: opennet.ru

Pievieno komentāru