Cloudflare se prebacio s NGINX-a na vlastiti Pingora proxy, napisan u Rustu

Cloudflare je najavio prijelaz svoje mreže za isporuku sadržaja na korištenje Pingora proxyja, napisanog u jeziku Rust. Novi proxy zamjenjuje konfiguraciju temeljenu na NGINX poslužitelju Lua skriptama i obrađuje više od trilijun zahtjeva dnevno. Napominje se da je prijelaz na specijalizirani proxy omogućio ne samo implementaciju novih značajki i povećanje sigurnosti zbog sigurnog rada memorije, već je doveo i do značajnog povećanja performansi i uštede resursa - rješenje temeljeno na Pingori ne zahtijeva korištenje Lua, te stoga troši 70% manje resursa CPU i 67% manje memorije dok obrađuje istu količinu prometa.

Dugo vremena je sustav za proxy promet između korisnika i krajnjih poslužitelja temeljen na NGINX i Lua skriptama zadovoljavao potrebe Cloudflarea, no kako je mreža rasla i njena kompleksnost se povećavala, univerzalno rješenje pokazalo se nedostatnim, kako u smislu izvedbe i zbog ograničenja u proširivosti i implementaciji novih mogućnosti za klijente. Konkretno, bilo je izazova u dodavanju funkcionalnosti izvan jednostavnog pristupnika i balansera opterećenja. Na primjer, postalo je potrebno, ako poslužitelj ne uspije obraditi zahtjev, ponovno poslati zahtjev drugom poslužitelju, dajući mu drugačiji skup HTTP zaglavlja.

Umjesto arhitekture koja razdvaja zahtjeve u zasebne radne procese, Pingora koristi multi-threaded model, koji je u slučajevima korištenja Cloudflarea (visoka koncentracija prometa s različitih stranica s velikim statističkim pomakom) pokazao učinkovitiju raspodjelu resursa između CPU jezgri. Konkretno, nginxovo vezanje neuravnoteženih zahtjeva za procese rezultiralo je neuravnoteženim opterećenjem jezgri CPU-a, što je rezultiralo zahtjevima koji zahtijevaju velike resurse i blokiranjem I/O-a usporavajući obradu drugih zahtjeva. Osim toga, vezanje skupa veza na procese rukovatelja nije dopuštalo ponovnu upotrebu već uspostavljenih veza iz drugih procesa rukovatelja, što smanjuje učinkovitost kada postoji veliki broj procesa rukovatelja.

NGINX:

Cloudflare se prebacio s NGINX-a na vlastiti Pingora proxy, napisan u Rustu

Pingora:

Cloudflare se prebacio s NGINX-a na vlastiti 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 zahtjeva sa 87.1% na 99.92%. Uz smanjenje ponovnih povezivanja i učinkovitiju upotrebu CPU jezgri, poboljšanje performansi novog proxyja uglavnom je posljedica uklanjanja sporih Lua rukovatelja koji se koriste s nginxom.

Jezik Rust odabran je za postizanje visokih performansi u kombinaciji s dostupnošću alata koji osiguravaju siguran rad s memorijom. Spominje se da unatoč visokokvalificiranim inženjerima Cloudflarea i pregledu koda napisanog u jeziku C, 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 hardverskim kvarovima.

Dodatno, možemo primijetiti komentar Linusa Torvaldsa, izrečen na konferenciji Open-Source Summit Europe koja se održava ovih dana, a tiče se uključivanja podrške za Rust jezik u Linux kernelu. Zakrpe za razvoj upravljačkih programa uređaja na jeziku Rust nisu uključene u jezgru 6.0, ali prema Linusu, najvjerojatnije će biti prihvaćene u jezgri 6.1; on neće odgoditi integraciju. Kao motivaciju za dodavanje podrške za Rust, osim pozitivnog utjecaja na sigurnost, Linus navodi i mogućnost povećanja interesa za rad na jezgri novih sudionika, što je važno u kontekstu starenja oldtajmera.

Izvor: opennet.ru

Dodajte komentar