Кампанія Cloudflare паведаміла аб пераводзе сваёй сеткі дастаўкі кантэнту на выкарыстанне проксі Pingora, напісанага на мове Rust. Новы проксі замяніў канфігурацыю на базе сервера NGINX з Lua-скрыптамі, і апрацоўвае больш за трыльён запытаў у дзень. Адзначаецца, што пераход на спецыялізаваны проксі дазволіў не толькі рэалізаваць новыя магчымасці і павялічыць абароненасць за кошт бяспечнай працы з памяццю, але і прывёў да значнага павышэння прадукцыйнасці і эканоміі рэсурсаў - рашэнне на базе Pingora не патрабуе выкарыстання Lua, таму спажывае на 70% менш рэсурсаў CPU і на 67% менш памяці пры апрацоўцы таго ж аб'ёму трафіку.
Доўгі час сістэма для праксіравання трафіку паміж карыстальнікамі і канчатковымі серверамі на базе NGINX і Lua-скпрытаў задавальняла патрэбнасці Cloudflare, але з ростам сеткі і павелічэння яе складанасці ўніверсальнага рашэння аказалася недастаткова, як з пункту гледжання прадукцыйнасці, так і з-за абмежаванняў у пашыральнасці і рэалізацыі новых магчымасцяў для кліентаў. У прыватнасці, узніклі складанасці ў даданні функцыянальнасці, якая выходзіць за рамкі простага шлюза і балансавальніка нагрузкі. Напрыклад, узнікла неабходнасць у выпадку збою апрацоўкі запыту серверам паўторна накіроўваць запыт на іншы сервер, забяспечваючы яго іншым наборам HTTP-загалоўкаў.
Замест архітэктуры з падзелам запытаў па асобных працэсах-апрацоўшчыкам (worker) у Pingora прыменена шматструменная мадэль, якая ў сцэнарах выкарыстання Cloudflare (высокая канцэнтрацыя трафіку з розных сайтаў пры вялікім статыстычным зруху) паказала больш эфектыўнае размеркаванне рэсурсаў паміж ядрамі CPU. У прыватнасці, прывязка незбалансаваных запытаў да працэсаў у nginx прыводзіла да незбалансаванай нагрузкі на ядры CPU, у выніку чаго рэсурсаёмістыя запыты і блакавальны ўвод-вывад запавольвалі апрацоўку іншых запытаў. Акрамя таго, прывязка пула злучэнняў да працэсаў-апрацоўшчыкаў не дазваляла паўторна выкарыстоўваць ужо ўсталяваныя злучэнні іншых працэсаў-апрацоўшчыкаў, што зніжае эфектыўнасць працы пры вялікай колькасці працэсаў-апрацоўшчыкаў.
NGINX:
Pingora:
Укараненне 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