„Cloudflare“ perėjo iš NGINX į savo „Pingora“ tarpinį serverį, parašytą „Rust“.

„Cloudflare“ paskelbė apie savo turinio pristatymo tinklo perėjimą prie „Pingora“ tarpinio serverio, parašyto „Rust“ kalba. Naujasis tarpinis serveris pakeičia NGINX serverio konfigūraciją Lua scenarijais ir apdoroja daugiau nei trilijoną užklausų per dieną. Pažymima, kad perėjimas prie specializuoto tarpinio serverio leido ne tik įdiegti naujas funkcijas ir padidinti saugumą dėl saugaus atminties veikimo, bet ir žymiai padidinti našumą bei sutaupyti resursų – Pingora pagrįstas sprendimas nereikalauja naudoti Lua, todėl sunaudoja 70 % mažiau procesoriaus išteklių ir 67 % mažiau atminties, tuo pačiu apdorojant tiek pat srauto.

Ilgą laiką NGINX ir Lua scenarijų pagrindu sukurta tarpinio serverio srauto tarp vartotojų ir galutinių serverių sistema tenkino Cloudflare poreikius, tačiau augant tinklui ir didėjant jo sudėtingumui universalaus sprendimo nepakako tiek našumą ir dėl išplėtimo apribojimų bei naujų galimybių klientams diegimo. Visų pirma, iškilo iššūkių pridedant funkcionalumą, ne tik paprastą šliuzą ir apkrovos balansavimo priemonę. Pavyzdžiui, jei serveriui nepavyksta apdoroti užklausos, reikėjo pakartotinai išsiųsti užklausą kitam serveriui, suteikiant jam kitą HTTP antraščių rinkinį.

Vietoj architektūros, kuri atskiria užklausas į atskirus darbuotojų procesus, Pingora naudoja kelių gijų modelį, kuris Cloudflare naudojimo atvejais (didelė srauto koncentracija iš skirtingų svetainių su dideliu statistiniu poslinkiu) parodė efektyvesnį išteklių paskirstymą tarp procesoriaus branduolių. Visų pirma, „nginx“ nesubalansuotų užklausų susiejimas su procesais lėmė nesubalansuotą procesoriaus branduolių apkrovą, todėl buvo reikalaujama daug išteklių, o įvesties / išvesties blokavimas sulėtino kitų užklausų apdorojimą. Be to, prijungus jungčių telkinį prie tvarkyklės procesų, nebuvo galima pakartotinai naudoti jau sukurtų ryšių iš kitų tvarkyklės procesų, o tai sumažina efektyvumą, kai yra daug tvarkyklės procesų.

NGINX:

„Cloudflare“ perėjo iš NGINX į savo „Pingora“ tarpinį serverį, parašytą „Rust“.

Pingora:

„Cloudflare“ perėjo iš NGINX į savo „Pingora“ tarpinį serverį, parašytą „Rust“.

„Pingora“ įdiegimas leido 160 kartų sumažinti naujų jungčių įrengimų skaičių ir padidinti pakartotinai naudojamų užklausų dalį nuo 87.1% iki 99.92%. Naujojo tarpinio serverio našumas buvo ne tik sumažintas, bet ir veiksmingesnis procesoriaus branduolių naudojimas, bet ir dėl to, kad buvo pašalintos lėtos Lua tvarkyklės, naudojamos su nginx.

Rust kalba buvo pasirinkta siekiant aukšto našumo ir įrankių, užtikrinančių saugų veikimą su atmintimi, prieinamumą. Minima, kad nepaisant aukštos kvalifikacijos Cloudflare inžinierių ir peržiūrint C kalba parašytą kodą, nepavyko išvengti klaidų, sukeliančių atminties problemas (pavyzdžiui, HTML analizatoriaus pažeidžiamumo). Kalbant apie naują kodą, jame kalbama apie „Pingora“ gedimų analizės atvejus, kuriuos, kaip paaiškėjo, sukėlė ne programos problemos, o „Linux“ branduolio ir aparatinės įrangos gedimai.

Be to, galime atkreipti dėmesį į Linuso Torvaldso komentarą, išsakytą šiomis dienomis vykstančioje Open-Source Summit Europe konferencijoje, dėl Rust kalbos palaikymo įtraukimo į Linux branduolį. Pataisymai, skirti kurti įrenginių tvarkykles Rust kalba, nebuvo įtraukti į 6.0 branduolį, tačiau, pasak Linuso, jie greičiausiai bus priimti į 6.1 branduolį; jis neketina atidėlioti integracijos. Kaip motyvaciją pridėti Rust paramą, be teigiamo poveikio saugumui, Linus taip pat nurodo galimybę padidinti susidomėjimą dirbti su naujų dalyvių branduoliu, o tai svarbu senstančių senbuvių kontekste.

Šaltinis: opennet.ru

Добавить комментарий