Cloudflare ŝanĝis de NGINX al sia propra Pingora prokurilo, skribita en Rust

Cloudflare anoncis la transiron de sia enhavo-livera reto por uzi la prokurilon Pingora, skribitan en la Rust-lingvo. La nova prokurilo anstataŭigas la NGINX-servil-bazitan agordon per Lua-skriptoj, kaj procesas pli ol triliono da petoj ĉiutage. Oni rimarkas, ke la transiro al speciala prokurilo permesis ne nur efektivigi novajn funkciojn kaj pliigi sekurecon pro sekura funkciado de memoro, sed ankaŭ kaŭzis signifan kreskon de rendimento kaj ŝparado de rimedoj - la solvo bazita en Pingora ne postulas la uzon. de Lua, kaj tial konsumas 70% malpli da rimedoj CPU kaj 67% malpli da memoro dum prilaborado de la sama kvanto de trafiko.

Dum longa tempo, sistemo por prokura trafiko inter uzantoj kaj finserviloj bazita sur NGINX kaj Lua-skriptoj kontentigis la bezonojn de Cloudflare, sed kiam la reto kreskis kaj ĝia komplekseco pliiĝis, universala solvo montriĝis nesufiĉa, ambaŭ rilate al rendimento kaj pro limigoj en etendebleco kaj efektivigo de novaj ŝancoj por klientoj. Aparte, estis defioj aldoni funkciecon preter simpla enirejo kaj ŝarĝbalancilo. Ekzemple, fariĝis necese, se la servilo malsukcesas prilabori peton, resendi la peton al alia servilo, provizante ĝin per malsama aro de HTTP-kapoj.

Anstataŭ arkitekturo kiu apartigas petojn en apartajn laborprocezojn, Pingora uzas multfadenan modelon, kiu en Cloudflare-uzaj kazoj (alta koncentriĝo de trafiko de malsamaj ejoj kun granda statistika ŝanĝo) montris pli efikan distribuadon de resursoj inter CPU-kernoj. Aparte, la ligado de malekvilibraj petoj de nginx al procezoj rezultigis malekvilibran ŝarĝon sur la CPU-kernoj, rezultigante rimedojn-intensajn petojn kaj blokante I/O malrapidigante la prilaboradon de aliaj petoj. Krome, ligado de la konektogrupo al pritraktilprocezoj ne permesis reuzon de jam establitaj ligoj de aliaj pritraktilprocezoj, kiu reduktas efikecon kiam ekzistas granda nombro da prizorgprocezoj.

NGINX:

Cloudflare ŝanĝis de NGINX al sia propra Pingora prokurilo, skribita en Rust

Pingora:

Cloudflare ŝanĝis de NGINX al sia propra Pingora prokurilo, skribita en Rust

La efektivigo de Pingora ebligis malpliigi la nombron de instalaĵoj de novaj konektoj je 160 fojojn kaj pliigi la parton de reuzitaj demandoj de 87.1% al 99.92%. Krom reduktado de rekonektigoj kaj pli efika uzo de CPU-kernoj, la agado-plibonigo de la nova prokurilo estis ĉefe pro la forigo de malrapidaj Lua-traktiloj uzataj kun nginx.

La Rust-lingvo estis elektita por atingi altan rendimenton kombinitan kun la havebleco de iloj por certigi sekuran operacion kun memoro. Estas menciite, ke malgraŭ la tre kvalifikitaj inĝenieroj de Cloudflare kaj reviziado de la kodo skribita en la C-lingvo, ne eblis eviti erarojn kondukantajn al memorproblemoj (ekzemple, vundebleco en la HTML-analizilo). Koncerne la novan kodon, ĝi parolas pri kazoj de analizado de misfunkciadoj en Pingora, kiuj rezultis esti kaŭzitaj ne de problemoj en la aplikaĵo, sed de eraro en la Linukso-kerno kaj aparataj misfunkciadoj.

Aldone, ni povas noti la komenton de Linus Torvalds, esprimitan ĉe la Open-Source Summit Europe-konferenco okazanta ĉi-tagojn, koncerne la inkludon de subteno por la Rust-lingvo en la Linukso-kerno. Flikiloj por disvolvi aparatojn en la Rust-lingvo ne estis inkluditaj en la 6.0-kerno, sed laŭ Linus, ili plej verŝajne estos akceptitaj en la 6.1-kerno; li ne prokrastos integriĝon. Kiel instigo por aldoni subtenon por Rust, krom la pozitiva efiko al sekureco, Linus ankaŭ citas la ŝancon pliigi intereson pri laboro pri la kerno de novaj partoprenantoj, kio estas grava en la kunteksto de maljuniĝantaj maljunuloj.

fonto: opennet.ru

Aldoni komenton