Cloudflare ΠΏΠ΅Ρ€Π΅ΡˆΡ‘Π» с NGINX Π½Π° собствСнный ΠΏΡ€ΠΎΠΊcΠΈ 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 Π½Π° собствСнный ΠΏΡ€ΠΎΠΊcΠΈ Pingora, написанный Π½Π° языкС Rust

Pingora:

Cloudflare ΠΏΠ΅Ρ€Π΅ΡˆΡ‘Π» с NGINX Π½Π° собствСнный ΠΏΡ€ΠΎΠΊcΠΈ 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