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 datplūsmas starpniekservera nodrošināšanai starp lietotājiem un gala lietotājiem serveri Balstoties uz NGINX un Lua skriptiem, Cloudflare esošais risinājums atbilda tā vajadzībām, taču, tīklam augot un tā sarežģītībai palielinoties, universālais risinājums izrādījās nepietiekams gan veiktspējas ziņā, gan mērogojamības ierobežojumu un jaunu klienta funkciju ieviešanas dēļ. Jo īpaši sarežģīti kļuva pievienot funkcionalitāti, kas pārsniedz vienkāršu vārteju un slodzes līdzsvarotāju. Piemēram, radās nepieciešamība pēc rezerves atbildes. serveris atkārtoti nosūtīt pieprasījumu uz citu serveri, nodrošinot tam citu HTTP galvenes 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:

Pingora:

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 tika izvēlēts, pateicoties tā spējai sasniegt augstu veiktspēju, vienlaikus nodrošinot arī atmiņas drošības funkcijas. Tiek atzīmēts, ka, neskatoties uz Cloudflare inženieru augsto kvalifikāciju un plašo koda pārskatīšanas procesu, C kodā nevarēja izvairīties no kļūdām, kas izraisīja atmiņas problēmas (piemēram, HTML parsētāja ievainojamība). Attiecībā uz jauno kodu tiek minēts, ka tika analizētas avārijas programmā Pingora, kuras izrādījās nevis lietojumprogrammas problēmu, bet gan kodola kļūdas rezultāts. Linux un aparatūras kļūmes.
Turklāt ir vērts atzīmēt Linusa Torvalda komentāru, ko viņš izteica pašlaik notiekošajā Open-Source Summit Europe konferencē par Rust valodas atbalsta iekļaušanu kodolā. LinuxIelāpi ierīču draiveru izstrādei Rust vidē nebija iekļauti kodola 6.0 versijā, taču, pēc Linusa teiktā, tie, visticamāk, tiks iekļauti kodola 6.1 versijā, un viņš neplāno atlikt integrāciju. Papildus drošības ieguvumiem Linuss min arī iespēju palielināt interesi par kodola izstrādi jauno dalībnieku vidū, kas ir svarīgi, ņemot vērā novecojošo pamatkomandu.
Avots: opennet.ru
