Cloudflare NGINXetik bere Pingora proxyra aldatu zen, Rust-en idatzia

Cloudflare-k bere edukia bidaltzeko sarearen trantsizioa iragarri zuen Pingora proxya erabiltzeko, Rust hizkuntzan idatzia. Proxy berriak NGINX zerbitzarian oinarritutako konfigurazioa Lua scriptekin ordezkatzen du eta egunean bilioi bat eskaera baino gehiago prozesatzen ditu. Kontuan izan behar da proxy espezializatu baterako trantsizioak funtzio berriak ezartzea eta memoriaren funtzionamendu segurua dela eta segurtasuna areagotzeaz gain, errendimenduaren eta baliabideen aurreztea nabarmen handitzea ekarri zuela - Pingoran oinarritutako irtenbideak ez du erabilerarik behar. Luaren, eta, beraz, % 70 baliabide gutxiago CPU eta % 67 memoria gutxiago kontsumitzen ditu trafiko kopuru bera prozesatzen duen bitartean.

Denbora luzez, NGINX eta Lua script-etan oinarritutako erabiltzaileen eta amaierako zerbitzarien arteko trafikoa proxy egiteko sistema batek Cloudflareren beharrak asetzen zituen, baina sarea hazi eta bere konplexutasuna handitu ahala, irtenbide unibertsala nahikoa ez zen, bai aldetik. errendimendua eta hedagarritasunaren eta bezeroentzako aukera berrien ezarpenaren mugak direla eta. Bereziki, atebide soil batetik eta karga-orekatzaile batetik haratago funtzionalitateak gehitzeko erronkak zeuden. Esaterako, beharrezkoa izan zen, zerbitzariak eskaera bat prozesatzen huts egiten badu, eskaera berriro bidaltzea beste zerbitzari batera, HTTP goiburu multzo ezberdin bat emanez.

Eskaerak langile-prozesu bereizietan bereizten dituen arkitektura baten ordez, Pingorak hari anitzeko eredu bat erabiltzen du, eta Cloudflare-ren erabilera kasuetan (estatistika-aldaketa handia duten gune ezberdinetako trafiko-kontzentrazio handia) PUZaren nukleoen artean baliabideen banaketa eraginkorragoa erakutsi zuen. Bereziki, nginx-ek desorekaturiko eskaerak prozesuekin lotzeak PUZaren nukleoetan karga desorekatua eragin zuen, baliabide askoko eskaerak eta I/O blokeatuz beste eskaera batzuen prozesamendua motelduz. Gainera, konexio-biltegia kudeatzaile-prozesuetara lotzeak ez zuen baimendu lehendik ezarritako konexioak berrerabili beste kudeatzaile-prozesu batzuetatik, eta horrek eraginkortasuna murrizten du kudeatzaile-prozesu ugari daudenean.

NGINX:

Cloudflare NGINXetik bere Pingora proxyra aldatu zen, Rust-en idatzia

Pingora:

Cloudflare NGINXetik bere Pingora proxyra aldatu zen, Rust-en idatzia

Pingora ezartzeak konexio berrien instalazioen kopurua 160 aldiz murriztea eta berrerabilitako kontsulten kuota %87.1etik %99.92ra igotzea ahalbidetu zuen. Birkonexioak murrizteaz eta CPU nukleoen erabilera eraginkorragoa izateaz gain, proxy berriaren errendimenduaren hobekuntza nginx-ekin erabilitako Lua kudeatzaile motelak kentzeagatik izan zen batez ere.

Rust lengoaia errendimendu handia lortzeko aukeratu zen, memoriarekin funtzionamendu segurua bermatzeko tresnen erabilgarritasunarekin konbinatuta. Aipatzen da Cloudflare-ko ingeniari oso kualifikatuak eta C lengoaian idatzitako kodea berrikusi arren, ezin izan zela memoria-arazoak sor ditzaketen erroreak saihestu (adibidez, HTML analizatzailean ahultasun bat). Kode berriari dagokionez, Pingorako akatsak aztertzeko kasuei buruz hitz egiten du, aplikazioan ez diren arazoek eraginda, Linux kernelaren akatsen eta hardwarearen hutsegiteen ondorioz baizik.

Gainera, egun hauetan egiten ari den Open-Source Summit Europe konferentzian adierazitako Linus Torvaldsen iruzkinak nabarmendu ditzakegu, Rust hizkuntzaren laguntza Linux nukleoan sartzeari buruz. Rust hizkuntzan gailu kontrolatzaileak garatzeko adabakiak ez ziren 6.0 nukleoan sartu, baina Linusen arabera, ziurrenik 6.1 nukleoan onartuko dira; ez du integrazioa atzeratuko. Rust-en laguntza gehitzeko motibazio gisa, segurtasunean eragin positiboaz gain, parte hartzaile berrien muina lantzeko interesa areagotzeko aukera ere aipatzen du Linusek, eta hori garrantzitsua da zaharren zaharren testuinguruan.

Iturria: opennet.ru

Gehitu iruzkin berria