Cloudflare přešel z NGINX na vlastní proxy Pingora, napsanou v jazyce Rust.

Společnost Cloudflare oznámila přechod své sítě pro doručování obsahu na použití proxy serveru Pingora, napsaného v jazyce Rust. Nová proxy nahradila konfiguraci založenou na serveru NGINX s Lua skripty a zpracovává více než trilion požadavků denně. Je zaznamenáno, že přechod na specializovanou proxy umožnil nejen realizaci nových možností a zvýšení bezpečnosti díky bezpečné manipulaci s pamětí, ale také vedl k výraznému zvýšení výkonu a úspoře zdrojů – řešení založené na Pingora nevyžaduje použití Lua, a proto spotřebovává o 70 % méně CPU a o 67 % méně paměti při zpracování stejného objemu provozu.

Dlouho byla systém pro proxyování provozu mezi uživateli a koncovými servery na bázi NGINX a Lua skriptů vyhovující potřebám Cloudflare, ale s růstem sítě a zvýšením její složitosti se univerzální řešení ukázalo jako nedostatečné, jak z hlediska výkonu, tak z důvodu omezení v rozšiřitelnosti a implementaci nových funkcí pro klienty. Zejména se objevily potíže při přidávání funkcionality, která přesahuje rámec jednoduchého brány a vyvažovače zátěže. Například vznikla potřeba v případě selhání zpracování požadavku serverem přehrávat požadavek na jiný server, dodávajíc mu jinou sadu HTTP hlaviček.

Místo architektury, která rozděluje požadavky do jednotlivých procesů zpracovatelů (worker), používá Pingora vícerozměrný model, který v scénářích použití Cloudflare (vysoká koncentrace provozu z různých stránek s velkým statistickým posunem) prokázal efektivnější rozdělení zdrojů mezi procesory CPU. Zejména vazba nevyvážených požadavků na procesy v nginx vedla k nevyvážené zátěži na jádra CPU, což způsobilo, že náročné požadavky a blokující vstupně/výstupní operace zpomalovaly zpracování dalších požadavků. Kromě toho vazba poolu spojení na procesy zpracovatelů neumožňovala opětovné využívání již navázaných spojení jiných procesů zpracovatelů, což snižuje efektivitu práce při velkém počtu procesů zpracovatelů.

NGINX:

Cloudflare přešel z NGINX na vlastní proxy Pingora, napsanou v jazyce Rust.

Pingora:

Cloudflare přešel z NGINX na vlastní proxy Pingora, napsanou v jazyce Rust.

Implementace Pingora umožnila snížit počet operací při instalaci nových spojení 160krát a zvýšit podíl znovu používaných požadavků z 87,1 % na 99,92 %. Kromě zkrácení opakovaných spojení a efektivnějšího využívání CPU, zvýšení výkonnosti nového proxy přispělo především odstranění pomalých zpracovatelů napsaných v jazyce Lua, které byly využívány s nginx.

Jazyk Rust byl vybrán jako prostředek k dosažení vysokého výkonu ve spojení s nástroji pro bezpečné zacházení s pamětí. Bylo zmíněno, že i přes vysokou kvalifikaci inženýrů Cloudflare a revizi kódu v jazyce C se nepodařilo vyhnout chybám, které vedly k problémům s pamětí (například zranitelnost v HTML parseru). Co se týče nového kódu, byly popsány případy selhání v Pingora, které byly způsobeny nikoli problémy s aplikací, ale chybou v jádru Linuxu a hardwarovými poruchami.

Dále je možné zdůraznit komentář Linuse Torvaldse ohledně zařazení podpory jazyka Rust do jádra Linuxu, který zazněl na právě probíhající konferenci Open-Source Summit Europe. Do jádra 6.0 nebyly zahrnuty patche pro vývoj ovladačů zařízení v jazyce Rust, ale podle Linuse budou pravděpodobně akceptovány do jádra 6.1, protože se nechystá otálet s integrací. Mezi důvody pro přidání podpory Rust, vedle pozitivního vlivu na bezpečnost, Linus uvádí také možnost zvýšit zájem o práci na jádře nových účastníků, což je v aktuální situaci, kdy stárnou dlouholetí členové, relevantní.

Zdroj: opennet.ru

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster