Cloudflare skeakele fan NGINX nei syn eigen Pingora-proxy skreaun yn Rust

Cloudflare kundige de oergong oan fan har netwurk foar levering fan ynhâld om de Pingora-proxy te brûken, skreaun yn 'e Rust-taal. De nije proxy ferfangt de NGINX-tsjinner-basearre konfiguraasje mei Lua-skripts, en ferwurket mear dan in triljoen oanfragen per dei. It wurdt opmurken dat de oergong nei in spesjalisearre proxy tastien net allinnich te ymplemintearjen nije funksjes en fergrutsjen feiligens fanwege feilige wurking fan ûnthâld, mar ek late ta in signifikante tanimming fan prestaasjes en boarne besparring - de Pingora-basearre oplossing net nedich it gebrûk fan Lua, en verbruikt dêrom 70% minder boarnen CPU en 67% minder ûnthâld wylst ferwurkjen itselde bedrach fan ferkear.

Lange tiid foldie in systeem foar proxyferkearing tusken brûkers en einservers basearre op NGINX- en Lua-skripts oan de behoeften fan Cloudflare, mar doe't it netwurk groeide en de kompleksiteit tanommen, die in universele oplossing net genôch, sawol yn termen fan prestaasjes en troch beheiningen yn útwreidzjen en ymplemintaasje fan nije kânsen foar kliïnten. Benammen wiene d'r útdagings by it tafoegjen fan funksjonaliteit bûten in ienfâldige poarte en loadbalancer. Bygelyks, as de tsjinner net slagget om in fersyk te ferwurkjen, waard it bygelyks nedich om it fersyk op 'e nij nei in oare server te stjoeren, it foarsjen fan in oare set HTTP-headers.

Ynstee fan in arsjitektuer dy't fersiken skiedt yn aparte arbeidersprosessen, brûkt Pingora in multi-threaded model, dat yn Cloudflare gebrûk gefallen (hege konsintraasje fan ferkear fan ferskate siden mei in grutte statistyske ferskowing) toande in effisjinter ferdieling fan boarnen tusken CPU kearnen. Benammen nginx's bining fan unbalansearre oanfragen oan prosessen resultearre yn ûnbalansearre lading op 'e CPU-kearnen, wat resultearre yn boarne-yntinsive oanfragen en blokkearjende I / O dy't de ferwurking fan oare oanfragen fertrage. Dêrneist bining de ferbining pool oan handlerprosessen net tastean werbrûk fan al fêststelde ferbinings út oare handler prosessen, dat ferleget effisjinsje as der in grut oantal handler prosessen.

NGINX:

Cloudflare skeakele fan NGINX nei syn eigen Pingora-proxy skreaun yn Rust

Pingora:

Cloudflare skeakele fan NGINX nei syn eigen Pingora-proxy skreaun yn Rust

De ymplemintaasje fan Pingora makke it mooglik om it oantal ynstallaasjes fan nije ferbiningen mei 160 kear te ferminderjen en it oandiel fan opnij brûkte oanfragen te ferheegjen fan 87.1% nei 99.92%. Njonken it ferminderjen fan opnij ferbiningen en effisjinter gebrûk fan CPU-kearnen, wie de prestaasjesferbettering fan 'e nije proxy benammen te tankjen oan it fuortheljen fan trage Lua-hannelers brûkt mei nginx.

De Rust-taal waard keazen om hege prestaasjes te berikken kombineare mei de beskikberens fan ark om feilige operaasje te garandearjen mei ûnthâld. It wurdt neamd dat nettsjinsteande de heech kwalifisearre yngenieurs fan Cloudflare en it besjen fan de koade skreaun yn 'e C-taal, it wie net mooglik om flaters te foarkommen dy't liede ta ûnthâldproblemen (bygelyks in kwetsberens yn' e HTML-parser). Wat de nije koade oanbelanget, sprekt it oer gefallen fan analysearjen fan mislearrings yn Pingora, dy't bliken te wêzen feroarsake net troch problemen yn 'e applikaasje, mar troch in flater yn' e Linux-kernel en hardware-mislearrings.

Derneist kinne wy ​​​​it kommentaar fan Linus Torvalds opmerke, útsprutsen op 'e Open-Source Summit Europe-konferinsje dy't dizze dagen plakfynt, oangeande it opnimmen fan stipe foar de Rust-taal yn' e Linux-kernel. Patches foar it ûntwikkeljen fan apparaatbestjoerders yn 'e Rust-taal wiene net opnommen yn' e 6.0-kernel, mar neffens Linus sille se nei alle gedachten wurde akseptearre yn 'e 6.1-kernel; hy sil de yntegraasje net fertrage. As motivaasje foar it tafoegjen fan stipe foar Rust, njonken de positive ynfloed op feiligens, neamt Linus ek de kâns om ynteresse te fergrutsjen foar it wurkjen oan 'e kearn fan nije dielnimmers, wat wichtich is yn' e kontekst fan âldere oldtimers.

Boarne: opennet.ru

Add a comment