Компания Cloudflare ΠΎΡ‚ΠΊΡ€Ρ‹Π»Π° ΠΊΠΎΠ΄ Pingora, инструмСнтария для создания сСтСвых сСрвисов

Компания Cloudflare объявила ΠΎΠ± ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ исходного ΠΊΠΎΠ΄Π° Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ° Pingora, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½ΠΎΠ³ΠΎ для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½Π° языкС Rust Π·Π°Ρ‰ΠΈΡ‰Ρ‘Π½Π½Ρ‹Ρ… Π²Ρ‹ΡΠΎΠΊΠΎΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… сСтСвых сСрвисов ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… сСтСвых систСм. Π€Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ Ρ…ΠΎΡ€ΠΎΡˆΠΎ протСстирован ΠΈ ΡƒΠΆΠ΅ примСняСтся Π² Ρ€Π°Π±ΠΎΡ‚Π΅ высоконагруТСнных систСм — построСнный Π½Π° Π΅Π³ΠΎ Π±Π°Π·Π΅ прокси Π±ΠΎΠ»Π΅Π΅ Π³ΠΎΠ΄Π° задСйствован Π² сСти доставки ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π° Cloudflare вмСсто nginx ΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ 40 ΠΌΠ»Π½ запросов Π² сСкунду. Код написан Π½Π° языкС Rust ΠΈ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠ΅ΠΉ Apache 2.0.

Pingora ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ запросов Π² асинхронном Ρ€Π΅ΠΆΠΈΠΌΠ΅, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ HTTP/1 ΠΈ HTTP/2 (Π² ΠΏΠ»Π°Π½Π°Ρ… HTTP/3), проксированиС gRPC ΠΈ WebSocket, ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹Π΅ балансировщики Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Π±Π΅Π· пСрСзапуска, ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Π±Π΅Π· Ρ€Π°Π·Ρ€Ρ‹Π²Π° соСдинСний, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ стратСгии ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π² случаС сбоя (failover), ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡŽ с Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ систСмами ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° ΠΈ вСдСния Π»ΠΎΠ³ΠΎΠ² (Syslog, Prometheus, Sentry, OpenTelemetry). Π’ Pingora Ρ‚Π°ΠΊΠΆΠ΅ поддСрТиваСтся TLS-ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅, Π½ΠΎ ΠΎΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ Π² Π²ΠΈΠ΄Π΅ надстройки Π½Π°Π΄ Π‘ΠΈ-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ OpenSSL ΠΈ BoringSSL.

ΠŸΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ Π³ΠΎΡ‚ΠΎΠ²Ρ‹Π΅ Rust-ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ для созданиС HTTP-прокси, Ρ€Π°Π±ΠΎΡ‚Ρ‹ с сСтСвыми ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°ΠΌΠΈ, Ρ€Π°Π·Π±ΠΎΡ€Π° Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² HTTP, ΡƒΡ‡Ρ‘Ρ‚Π° ΠΈ ограничСния Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ°, балансировки Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ, Ρ€Π°Π±ΠΎΡ‚Ρ‹ с распрСдСлённой Ρ…ΡΡˆ-Ρ‚Π°Π±Π»ΠΈΡ†Π΅ΠΉ Ketama, поддСрТания кэша Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти ΠΈ асинхронной ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ‚Π°ΠΉΠΌΠ°ΡƒΡ‚ΠΎΠ². ΠšΡ€ΠΎΠΌΠ΅ HTTP поддСрТиваСтся созданиС сСрвисов, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ… свои ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρ‹ ΠΈΠ»ΠΈ UDP/TCP.

ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π½Π°Π·Π²Π°Π½ΠΎ обСспСчСниС бСзопасности — для сниТСния вСроятности ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ошибок, связанных с Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ, для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π±Ρ‹Π» Π²Ρ‹Π±Ρ€Π°Π½ язык Rust. Π‘ΠΎΠ»ΡŒΡˆΠΎΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠ΄Π΅Π»Π΅Π½ΠΎ эффСктивности, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌΠΎΡΡ‚ΠΈ. НапримСр, ΠΏΡ€ΠΈ создании прокси-сСрвСров ΠΈ балансировщиков Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π½Π° Π±Π°Π·Π΅ Pingora прСдусмотрСна Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ прикрСплСния callback-ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΈ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ², ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΡ… ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ стадиями ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ запроса, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ, ΠΏΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ, Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΠΆΡƒΡ€Π½Π°Π»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ запросы ΠΈ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹.

БовмСстно с ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ ISRG (Internet Security Research Group), которая являСтся ΡƒΡ‡Ρ€Π΅Π΄ΠΈΡ‚Π΅Π»Π΅ΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Let’s Encrypt ΠΈ способствуСт Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΡŽ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ для ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ защищённости ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π°, Π½Π° Π±Π°Π·Π΅ Pingora Π±ΡƒΠ΄Π΅Ρ‚ создан ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ прокси River, рассчитанный Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π² критичСски Π²Π°ΠΆΠ½Ρ‹Ρ… элСмСнтах сСтСвой инфраструктуры. Код River Π±ΡƒΠ΄Π΅Ρ‚ написан Π½Π° Rust ΠΈ Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚ΡŒΡΡ ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠ΅ΠΉ Apache 2.0. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° начнётся Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ ΠΊΠ²Π°Ρ€Ρ‚Π°Π»Π΅ 2024 Π³ΠΎΠ΄Π°. Π’ настоящСС врСмя ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ находится Π½Π° стадии проСктирования ΠΈ опрСдСлСния Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ развиваСтся ΠΏΠΎΠ΄ руководством ДТСймса Маннса (James Munns) ΠΈΠ· Rust Embedded Working Group.

ΠžΡΠ½ΠΎΠ²Π½Ρ‹ΠΌ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° River являСтся рСализация прокси, способного Ρ‚Ρ€Π°Π½ΡΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ запросы ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² ΠΊ бэкСнд-сСрвСрам, трСминируя входящиС TLS-соСдинСния ΠΈ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·ΠΈΡ€ΡƒΡ, измСняя ΠΈ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΡƒΡ запросы Π² соотвСтствии с Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌΠΈ. Из особСнностСй River упоминаСтся многопоточная модСль ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ запросов, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ Π±ΠΎΠ»Π΅Π΅ эффСктивного ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ использованиС соСдинСний ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Ρ‚Π°ΠΊΠΈΠΌΠΈ прокси, ΠΊΠ°ΠΊ nginx. Для Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ прокси ΠΈ создания Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ² Π±ΡƒΠ΄Π΅Ρ‚ поддСрТиваСтся ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, скомпилированных Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ WebAssembly (для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹Π΅ языки программирования, для ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… поддСрТиваСтся компиляция Π² WASM). Π€ΠΎΡ€ΠΌΠ°Ρ‚ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΡŽΡ‚ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΠΎ возмоТности простым ΠΈ ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½Ρ‹ΠΌ.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru