Cloudflare je prešel z NGINX na lasten proxy Pingora, napisan v Rustu

Cloudflare je napovedal prehod svojega omrežja za dostavo vsebin na uporabo proxyja Pingora, napisanega v jeziku Rust. Novi proxy nadomešča strežniško konfiguracijo NGINX s skripti Lua in obdela več kot trilijon zahtev na dan. Opozoriti je treba, da je prehod na specializiran proxy omogočil ne le implementacijo novih funkcij in povečanje varnosti zaradi varnega delovanja pomnilnika, temveč je privedel tudi do znatnega povečanja zmogljivosti in prihrankov virov - rešitev, ki temelji na Pingori, ne zahteva uporabe Lua in zato porabi 70 % manj virov CPU in 67 % manj pomnilnika pri obdelavi enake količine prometa.

Sistem za proxy promet med uporabniki in končnimi strežniki, ki je temeljil na skriptah NGINX in Lua, je dolgo časa zadovoljeval potrebe Cloudflare, vendar se je z rastjo omrežja in večanjem njegove kompleksnosti univerzalna rešitev izkazala za nezadostno, tako z vidika uspešnosti ter zaradi omejitev v razširljivosti in implementaciji novih priložnosti za stranke. Zlasti so bili izzivi pri dodajanju funkcionalnosti poleg preprostega prehoda in izravnalnika obremenitve. Na primer, postalo je potrebno, če strežnik ne uspe obdelati zahteve, znova poslati zahtevo drugemu strežniku in mu zagotoviti drugačen nabor glav HTTP.

Namesto arhitekture, ki ločuje zahteve v ločene delovne procese, Pingora uporablja večnitni model, ki je v primerih uporabe Cloudflare (visoka koncentracija prometa z različnih strani z velikim statističnim premikom) pokazal učinkovitejšo porazdelitev virov med CPU jedri. Zlasti nginxova vezava neuravnoteženih zahtev na procese je povzročila neuravnoteženo obremenitev jeder CPE, kar je povzročilo zahteve, ki zahtevajo veliko virov, in blokiranje V/I, ki upočasnjuje obdelavo drugih zahtev. Poleg tega povezovanje področja povezav s procesi obdelovalcev ni dovolilo ponovne uporabe že vzpostavljenih povezav iz drugih procesov obdelovalcev, kar zmanjša učinkovitost, če obstaja veliko število procesov obdelovalcev.

NGINX:

Cloudflare je prešel z NGINX na lasten proxy Pingora, napisan v Rustu

Pingora:

Cloudflare je prešel z NGINX na lasten proxy Pingora, napisan v Rustu

Implementacija Pingore je omogočila zmanjšanje števila namestitev novih priključkov za 160-krat in povečanje deleža ponovno uporabljenih zahtevkov s 87.1 % na 99.92 %. Poleg zmanjšanja ponovnih povezav in učinkovitejše uporabe jeder CPU je izboljšanje zmogljivosti novega proxyja predvsem posledica odstranitve počasnih upravljavcev Lua, ki se uporabljajo z nginx.

Jezik Rust je bil izbran za doseganje visoke zmogljivosti v kombinaciji z razpoložljivostjo orodij za zagotavljanje varnega delovanja s pomnilnikom. Omenjeno je, da se kljub visoko usposobljenim inženirjem Cloudflare in pregledu kode, napisane v jeziku C, ni bilo mogoče izogniti napakam, ki so povzročile težave s pomnilnikom (na primer ranljivost v razčlenjevalniku HTML). Kar zadeva novo kodo, govori o primerih analiziranja napak v Pingori, za katere se je izkazalo, da niso nastale zaradi težav v aplikaciji, temveč zaradi napake v jedru Linuxa in napak strojne opreme.

Poleg tega lahko opozorimo na komentar Linusa Torvaldsa, ki je bil izrečen na konferenci Open-Source Summit Europe, ki poteka te dni, glede vključitve podpore za jezik Rust v jedro Linuxa. Popravki za razvoj gonilnikov naprav v jeziku Rust niso bili vključeni v jedro 6.0, vendar bodo po besedah ​​Linusa najverjetneje sprejeti v jedro 6.1; integracije ne bo odlašal. Kot motivacijo za dodajanje podpore za Rust Linus poleg pozitivnega vpliva na varnost navaja tudi priložnost za povečanje zanimanja za delo na jedru novih udeležencev, kar je pomembno v kontekstu staranja starodobnikov.

Vir: opennet.ru

Dodaj komentar