Cloudflare siirtyi NGINX:stä omaan Pingora-välityspalvelimeen, joka on kirjoitettu Rustilla

Cloudflare ilmoitti siirtyvänsä sisällönjakeluverkostossaan käyttämään Rust-kielellä kirjoitettua Pingora-välityspalvelinta. Uusi välityspalvelin korvaa NGINX-palvelinpohjaisen kokoonpanon Lua-skripteillä ja käsittelee yli biljoonaa pyyntöä päivässä. On huomattava, että siirtyminen erikoistuneeseen välityspalvelimeen ei vain mahdollistanut uusien ominaisuuksien käyttöönottoa ja turvallisuuden lisäämistä muistin turvallisen toiminnan ansiosta, vaan myös lisäsi merkittävästi suorituskykyä ja resursseja - Pingora-pohjainen ratkaisu ei vaadi käyttöä Lua, ja kuluttaa siksi 70 % vähemmän resursseja CPU:ta ja 67 % vähemmän muistia samalla kun se käsittelee saman määrän liikennettä.

Pitkään NGINX- ja Lua-skripteihin perustuva käyttäjien ja loppupalvelinten välisen välityspalvelinliikenteen järjestelmä täytti Cloudflaren tarpeet, mutta verkon kasvaessa ja sen monimutkaisuuden kasvaessa universaali ratkaisu osoittautui riittämättömäksi sekä Laajennettavuuden ja asiakkaiden uusien mahdollisuuksien toteuttamisen rajoitusten vuoksi. Erityisesti haasteita oli toiminnallisuuden lisäämisessä yksinkertaisen yhdyskäytävän ja kuormantasaajan lisäksi. Esimerkiksi, jos palvelin ei pysty käsittelemään pyyntöä, tuli tarpeelliseksi lähettää pyyntö uudelleen toiselle palvelimelle antamalla sille eri HTTP-otsikot.

Pyynnöt erillisiin työprosesseihin jakavan arkkitehtuurin sijaan Pingora käyttää monisäikeistä mallia, joka Cloudflaren käyttötapauksissa (korkea liikenteen keskittyminen eri sivustoilta suurella tilastollisella siirtymällä) osoitti tehokkaamman resurssien jakautumisen prosessoriytimien välillä. Erityisesti nginxin epätasapainoisten pyyntöjen prosessisidonta johti epätasapainoiseen kuormitukseen suorittimen ytimissä, mikä johti resurssiintensiivisiin pyyntöihin ja I/O:n estoon, mikä hidasti muiden pyyntöjen käsittelyä. Lisäksi yhteyspoolin sitominen käsittelijän prosesseihin ei mahdollistanut jo muodostettujen yhteyksien uudelleenkäyttöä muista käsittelijöistä, mikä heikentää tehokkuutta, kun käsittelijäprosesseja on paljon.

NGINX:

Cloudflare siirtyi NGINX:stä omaan Pingora-välityspalvelimeen, joka on kirjoitettu Rustilla

Pingora:

Cloudflare siirtyi NGINX:stä omaan Pingora-välityspalvelimeen, joka on kirjoitettu Rustilla

Pingoran käyttöönotto mahdollisti uusien yhteyksien asennusten vähentämisen 160-kertaiseksi ja uudelleenkäytettyjen pyyntöjen osuuden nostamisen 87.1 %:sta 99.92 %:iin. Uudelleenyhteyksien vähentämisen ja prosessoriytimien tehokkaamman käytön lisäksi uuden välityspalvelimen suorituskyvyn parannus johtui pääasiassa nginxin kanssa käytettyjen hitaiden Lua-käsittelijöiden poistamisesta.

Rust-kieli valittiin korkean suorituskyvyn saavuttamiseksi yhdistettynä työkalujen saatavuuteen, joka varmistaa turvallisen toiminnan muistin kanssa. Mainitaan, että huolimatta Cloudflaren korkeasti koulutetuista insinööreistä ja C-kielellä kirjoitetun koodin tarkistamisesta, muistiongelmiin johtavia virheitä (esimerkiksi HTML-jäsentimen haavoittuvuutta) ei voitu välttää. Mitä tulee uuteen koodiin, se puhuu tapauksista, joissa Pingorassa analysoitiin epäonnistumisia, jotka eivät ilmeisesti johtuneet sovelluksen ongelmista, vaan Linux-ytimen virheestä ja laitteistovioista.

Lisäksi voimme huomioida Linus Torvaldsin kommentin, joka esitettiin Open-Source Summit Europe -konferenssissa, joka järjestetään näinä päivinä, liittyen Rust-kielen tuen sisällyttämiseen Linux-ytimeen. Korjauksia laiteajurien kehittämiseen Rust-kielellä ei sisällytetty 6.0-ytimeen, mutta Linuksen mukaan ne todennäköisesti hyväksytään 6.1-ytimeen, eikä hän aio viivyttää integraatiota. Motivaationa Rustin tuen lisäämiselle Linus mainitsee turvallisuuden positiivisen vaikutuksen lisäksi myös mahdollisuuden lisätä kiinnostusta työskennellä uusien osallistujien ytimessä, mikä on tärkeää vanhojen ikääntymisen yhteydessä.

Lähde: opennet.ru

Lisää kommentti