Cloudflare перайшоў з NGINX на ўласны проксі Pingora, напісаны на мове Rust

Кампанія Cloudflare паведаміла аб пераводзе сваёй сеткі дастаўкі кантэнту на выкарыстанне проксі Pingora, напісанага на мове Rust. Новы проксі замяніў канфігурацыю на базе сервера NGINX з Lua-скрыптамі, і апрацоўвае больш за трыльён запытаў у дзень. Адзначаецца, што пераход на спецыялізаваны проксі дазволіў не толькі рэалізаваць новыя магчымасці і павялічыць абароненасць за кошт бяспечнай працы з памяццю, але і прывёў да значнага павышэння прадукцыйнасці і эканоміі рэсурсаў - рашэнне на базе Pingora не патрабуе выкарыстання Lua, таму спажывае на 70% менш рэсурсаў CPU і на 67% менш памяці пры апрацоўцы таго ж аб'ёму трафіку.

Доўгі час сістэма для праксіравання трафіку паміж карыстальнікамі і канчатковымі серверамі на базе NGINX і Lua-скпрытаў задавальняла патрэбнасці Cloudflare, але з ростам сеткі і павелічэння яе складанасці ўніверсальнага рашэння аказалася недастаткова, як з пункту гледжання прадукцыйнасці, так і з-за абмежаванняў у пашыральнасці і рэалізацыі новых магчымасцяў для кліентаў. У прыватнасці, узніклі складанасці ў даданні функцыянальнасці, якая выходзіць за рамкі простага шлюза і балансавальніка нагрузкі. Напрыклад, узнікла неабходнасць у выпадку збою апрацоўкі запыту серверам паўторна накіроўваць запыт на іншы сервер, забяспечваючы яго іншым наборам HTTP-загалоўкаў.

Замест архітэктуры з падзелам запытаў па асобных працэсах-апрацоўшчыкам (worker) у Pingora прыменена шматструменная мадэль, якая ў сцэнарах выкарыстання Cloudflare (высокая канцэнтрацыя трафіку з розных сайтаў пры вялікім статыстычным зруху) паказала больш эфектыўнае размеркаванне рэсурсаў паміж ядрамі CPU. У прыватнасці, прывязка незбалансаваных запытаў да працэсаў у nginx прыводзіла да незбалансаванай нагрузкі на ядры CPU, у выніку чаго рэсурсаёмістыя запыты і блакавальны ўвод-вывад запавольвалі апрацоўку іншых запытаў. Акрамя таго, прывязка пула злучэнняў да працэсаў-апрацоўшчыкаў не дазваляла паўторна выкарыстоўваць ужо ўсталяваныя злучэнні іншых працэсаў-апрацоўшчыкаў, што зніжае эфектыўнасць працы пры вялікай колькасці працэсаў-апрацоўшчыкаў.

NGINX:

Cloudflare перайшоў з NGINX на ўласны проксі Pingora, напісаны на мове Rust

Pingora:

Cloudflare перайшоў з NGINX на ўласны проксі Pingora, напісаны на мове Rust

Укараненне Pingora дазволіла ў 160 разоў скараціць колькасць аперацый усталёўкі новых злучэнняў і падвысіць дзель паўторна выкарыстоўваных запытаў з 87.1% да 99.92%. Акрамя скарачэння паўторных злучэнняў і больш эфектыўнага выкарыстання ядраў CPU падвышэнню прадукцыйнасці новага проксі, галоўнай выявай, спрыяла збавенне ад выкарыстоўваных з nginx павольных апрацоўшчыкаў на мове Lua.

Мова Rust выбраны як які дазваляе дабіцца высокай прадукцыйнасці з спалучэнні з наяўнасцю сродкаў для забеспячэння бяспечнай працы з памяццю. Згадваецца, што нягледзячы на ​​высокую кваліфікацыю інжынераў Cloudflare і рэцэнзаванне кода ў напісаных на мове Сі не атрымоўвалася пазбегнуць памылак, якія прыводзяць да праблем з памяццю (напрыклад, уразлівасць у парсеры HTML). Што дакранаецца новага кода, тое расказана аб выпадках разбору збояў у Pingora, якія апынуліся выкліканыя не праблемамі ў прыкладанні, а памылкай у ядры Linux і апаратнымі збоямі.

Дадаткова можна адзначыць, агучаны на якая праходзіць у гэтыя дні канферэнцыі Open-Source Summit Europe каментар Лінуса Торвальдса наконт уключэння падтрымкі мовы Rust у ядро ​​Linux. У ядро ​​6.0 патчы для распрацоўкі драйвераў прылад на мове Rust не ўвайшлі, але па словах Лінуса яны хутчэй за ўсё будуць прыняты ў ядро ​​6.1, цягнуць з інтэграцыяй ён не збіраецца. У якасці матыву для дадання падтрымкі Rust, акрамя дадатнага ўплыву на бяспеку, Лінус заве і магчымасць падвысіць цікавасць да працы над ядром новых удзельнікаў, што актуальна ва ўмовах старэння старажылаў.

Крыніца: opennet.ru

Дадаць каментар