Cloudflare je prešao sa NGINX-a na svoj Pingora proxy, napisan u Rustu

Cloudflare je najavio prelazak svoje mreže za isporuku sadržaja na korištenje Pingora proxyja, napisanog na jeziku Rust. Novi proxy zamenjuje konfiguraciju zasnovanu na NGINX serveru sa Lua skriptama i obrađuje više od triliona zahteva dnevno. Napominje se da je prelazak na specijalizirani proxy omogućio ne samo implementaciju novih funkcija i povećanje sigurnosti zbog sigurnog rada memorije, već je doveo i do značajnog povećanja performansi i uštede resursa - rješenje zasnovano na Pingori ne zahtijeva upotrebu Lua, i stoga troši 70% manje resursa CPU-a i 67% manje memorije dok obrađuje istu količinu saobraćaja.

Dugo vremena je sistem za proxy saobraćaj između korisnika i krajnjih servera baziran na NGINX i Lua skriptama zadovoljavao potrebe Cloudflare-a, ali kako je mreža rasla i njena složenost rasla, pokazalo se da univerzalno rješenje nije dovoljno, kako u pogledu performanse i zbog ograničenja u proširivosti i implementaciji novih mogućnosti za klijente. Konkretno, bilo je izazova u dodavanju funkcionalnosti izvan jednostavnog gateway-a i balansera opterećenja. Na primjer, postalo je neophodno, ako server ne uspije obraditi zahtjev, ponovo poslati zahtjev drugom serveru, dajući mu drugačiji skup HTTP zaglavlja.

Umjesto arhitekture koja razdvaja zahtjeve u zasebne radne procese, Pingora koristi model s više niti, koji je u slučajevima korištenja Cloudflarea (visoka koncentracija prometa sa različitih lokacija s velikim statističkim pomakom) pokazao efikasniju distribuciju resursa između CPU jezgara. Konkretno, nginx-ovo vezivanje neuravnoteženih zahtjeva za procese rezultiralo je neuravnoteženim opterećenjem na jezgri CPU-a, što je rezultiralo zahtjevima koji zahtijevaju puno resursa i blokiranjem I/O-a koji usporava obradu drugih zahtjeva. Osim toga, vezivanje spremišta veza za procese rukovatelja nije omogućilo ponovno korištenje već uspostavljenih veza iz drugih procesa rukovanja, što smanjuje efikasnost kada postoji veliki broj procesa rukovanja.

NGINX:

Cloudflare je prešao sa NGINX-a na svoj Pingora proxy, napisan u Rustu

Pingora:

Cloudflare je prešao sa NGINX-a na svoj Pingora proxy, napisan u Rustu

Implementacija Pingore omogućila je smanjenje broja instalacija novih priključaka za 160 puta i povećanje udjela ponovno korištenih upita sa 87.1% na 99.92%. Pored smanjenja ponovnih povezivanja i efikasnijeg korišćenja CPU jezgara, poboljšanje performansi novog proxy servera je uglavnom posledica uklanjanja sporih Lua rukovalaca koji se koriste sa nginxom.

Rust jezik je odabran kako bi se postigle visoke performanse u kombinaciji s dostupnošću alata koji osiguravaju siguran rad s memorijom. Spominje se da uprkos visokokvalifikovanim inženjerima Cloudflare-a i pregledu koda napisanog u C jeziku, nije bilo moguće izbjeći greške koje su dovele do problema s memorijom (na primjer, ranjivost u HTML parseru). Što se tiče novog koda, on govori o slučajevima analize kvarova u Pingori, za koje se pokazalo da nisu uzrokovani problemima u aplikaciji, već greškom u Linux kernelu i kvarovima hardvera.

Osim toga, možemo primijetiti komentar Linusa Torvaldsa, izrečen na Open-Source Summit Europe konferenciji koja se održava ovih dana, u vezi sa uključivanjem podrške za Rust jezik u Linux kernel. Zakrpe za razvoj drajvera uređaja na Rust jeziku nisu bile uključene u kernel 6.0, ali prema Linusovim riječima, one će najvjerovatnije biti prihvaćene u 6.1 kernel; on neće odlagati integraciju. Kao motivaciju za dodavanje podrške Rustu, pored pozitivnog uticaja na bezbednost, Linus navodi i mogućnost povećanja interesovanja za rad na jezgru novih učesnika, što je važno u kontekstu ostarelih oldtajmera.

izvor: opennet.ru

Dodajte komentar