Cloudflare přešel z NGINX na svůj vlastní proxy Pingora, napsaný v Rustu

Cloudflare oznámila přechod své sítě pro doručování obsahu na používání Pingora proxy, napsané v jazyce Rust. Nový proxy nahrazuje serverovou konfiguraci NGINX skripty Lua a zpracovává více než bilion požadavků denně. Je třeba poznamenat, že přechod na specializovaný proxy umožnil nejen implementovat nové funkce a zvýšit bezpečnost díky bezpečnému provozu paměti, ale také vedl k výraznému zvýšení výkonu a úsporám zdrojů - řešení založené na Pingoře nevyžaduje použití Lua, a proto spotřebovává o 70 % méně zdrojů CPU a 67 % méně paměti při zpracování stejného objemu provozu.

Systém pro proxy provoz mezi uživateli a koncovými servery založený na skriptech NGINX a Lua dlouhou dobu uspokojoval potřeby Cloudflare, ale jak síť rostla a její složitost rostla, univerzální řešení se ukázalo jako nedostatečné, a to jak z hlediska výkonu a kvůli omezením v rozšiřitelnosti a implementaci nových příležitostí pro klienty. Problémy byly zejména při přidávání funkcí nad rámec jednoduché brány a nástroje pro vyrovnávání zatížení. Pokud se serveru nepodaří zpracovat požadavek, bylo například nutné znovu odeslat požadavek na jiný server a poskytnout mu jinou sadu HTTP hlaviček.

Namísto architektury, která odděluje požadavky do samostatných pracovních procesů, Pingora používá vícevláknový model, který v případech použití Cloudflare (vysoká koncentrace provozu z různých stránek s velkým statistickým posunem) ukázal efektivnější distribuci zdrojů mezi jádra CPU. Zejména vazba nginx na nevyvážené požadavky na procesy měla za následek nevyvážené zatížení jader CPU, což mělo za následek požadavky náročné na zdroje a blokování I/O zpomalující zpracování dalších požadavků. Kromě toho vazba fondu připojení na procesy obslužné rutiny neumožňovala opětovné použití již vytvořených připojení z jiných procesů obslužných rutin, což snižuje efektivitu při velkém počtu procesů obslužné rutiny.

NGINX:

Cloudflare přešel z NGINX na svůj vlastní proxy Pingora, napsaný v Rustu

Pingora:

Cloudflare přešel z NGINX na svůj vlastní proxy Pingora, napsaný v Rustu

Implementace Pingora umožnila 160krát snížit počet instalací nových připojení a zvýšit podíl znovu použitých požadavků z 87.1 % na 99.92 %. Kromě snížení opětovného připojení a efektivnějšího využití jader CPU bylo zlepšení výkonu nového proxy způsobeno především odstraněním pomalých ovladačů Lua používaných s nginx.

Jazyk Rust byl zvolen pro dosažení vysokého výkonu v kombinaci s dostupností nástrojů pro zajištění bezpečného provozu s pamětí. Uvádí se, že i přes vysoce kvalifikované inženýry Cloudflare a kontrolu kódu napsaného v jazyce C nebylo možné se vyhnout chybám vedoucím k problémům s pamětí (například zranitelnost v HTML parseru). Pokud jde o nový kód, hovoří o případech analýzy selhání v Pingoře, které se ukázaly být způsobeny nikoli problémy v aplikaci, ale chybou v jádře Linuxu a selháním hardwaru.

Kromě toho si můžeme všimnout komentáře Linuse Torvaldse, vyjádřeného na konferenci Open-Source Summit Europe, která se koná v těchto dnech, týkající se zahrnutí podpory jazyka Rust do linuxového jádra. Záplaty pro vývoj ovladačů zařízení v jazyce Rust nebyly zahrnuty v jádře 6.0, ale podle Linuse budou s největší pravděpodobností přijaty do jádra 6.1, integraci nebude zdržovat. Jako motivaci pro přidání podpory pro Rust uvádí Linus kromě pozitivního dopadu na bezpečnost také možnost zvýšit zájem o práci na jádru nových účastníků, což je v kontextu stárnoucích staromilců důležité.

Zdroj: opennet.ru

Přidat komentář