ΠΠΎΠΌΠΏΠ°Π½ΠΈΡ Cloudflare ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π»Π° Π²ΡΠΏΡΡΠΊ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ° Pingora 0.6, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½ΠΎΠ³ΠΎ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Π·Π°ΡΠΈΡΡΠ½Π½ΡΡ Π²ΡΡΠΎΠΊΠΎΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΠ΅ΡΠ΅Π²ΡΡ ΡΠ΅ΡΠ²ΠΈΡΠΎΠ² Π½Π° ΡΠ·ΡΠΊΠ΅ Rust. ΠΠΎΡΡΡΠΎΠ΅Π½Π½ΡΠΉ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ Pingora ΠΏΡΠΎΠΊΡΠΈ ΡΠΆΠ΅ Π±ΠΎΠ»Π΅Π΅ Π΄Π²ΡΡ Π»Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² ΡΠ΅ΡΠΈ Π΄ΠΎΡΡΠ°Π²ΠΊΠΈ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ° Cloudflare Π²ΠΌΠ΅ΡΡΠΎ nginx ΠΈ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ Π±ΠΎΠ»Π΅Π΅ 40 ΠΌΠ»Π½ Π·Π°ΠΏΡΠΎΡΠΎΠ² Π² ΡΠ΅ΠΊΡΠ½Π΄Ρ. ΠΠΎΠ΄ Π½Π°ΠΏΠΈΡΠ°Π½ Π½Π° ΡΠ·ΡΠΊΠ΅ Rust ΠΈ ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ ΠΏΠΎΠ΄ Π»ΠΈΡΠ΅Π½Π·ΠΈΠ΅ΠΉ Apache 2.0.
ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Pingora:
- ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° HTTP/1 ΠΈ HTTP/2 (Π² ΠΏΠ»Π°Π½Π°Ρ HTTP/3), Π° ΡΠ°ΠΊΠΆΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠ΅ΡΠ²ΠΈΡΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΡ ΡΠ²ΠΎΠΈ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Ρ ΠΈΠ»ΠΈ UDP/TCP.
- ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π·Π°ΠΏΡΠΎΡΠΎΠ² Π² Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅.
- ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΡΠΈΠΊΡΠ΅ΠΏΠ»Π΅Π½ΠΈΡ callback-ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² ΠΈ ΡΠΈΠ»ΡΡΡΠΎΠ², ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΡ ΡΠΏΡΠ°Π²Π»ΡΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌΠΈ ΡΡΠ°Π΄ΠΈΡΠΌΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π·Π°ΠΏΡΠΎΡΠ°, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ, ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»ΡΡΡ, Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡ ΠΈ ΠΆΡΡΠ½Π°Π»ΠΈΡΠΎΠ²Π°ΡΡ Π·Π°ΠΏΡΠΎΡΡ ΠΈ ΠΎΡΠ²Π΅ΡΡ.
- ΠΡΠΎΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ gRPC ΠΈ WebSocket.
- ΠΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌΡΠ΅ Π±Π°Π»Π°Π½ΡΠΈΡΠΎΠ²ΡΠΈΠΊΠΈ Π½Π°Π³ΡΡΠ·ΠΊΠΈ.
- ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π±Π΅Π· ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΠΊΠ°.
- ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΠΊΠΎΠ΄Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π±Π΅Π· ΡΠ°Π·ΡΡΠ²Π° ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΉ.
- Π‘ΡΠ΅Π΄ΡΡΠ²Π° Π΄Π»Ρ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π½Π°Π³ΡΡΠ·ΠΊΠΈ Π² ΡΠ»ΡΡΠ°Π΅ ΡΠ±ΠΎΡ (failover).
- ΠΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌΠΈ ΡΠΈΡΡΠ΅ΠΌΠ°ΠΌΠΈ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³Π° ΠΈ Π²Π΅Π΄Π΅Π½ΠΈΡ Π»ΠΎΠ³ΠΎΠ² (Syslog, Prometheus, Sentry, OpenTelemetry).
- ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° TLS-ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ (ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ OpenSSL, BoringSSL ΠΈΠ»ΠΈ Rustls).
- ΠΠΎΡΠΎΠ²ΡΠ΅ Rust-ΠΏΠ°ΠΊΠ΅ΡΡ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ HTTP-ΠΏΡΠΎΠΊΡΠΈ, ΡΠ°Π±ΠΎΡΡ Ρ ΡΠ΅ΡΠ΅Π²ΡΠΌΠΈ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π°ΠΌΠΈ, ΡΠ°Π·Π±ΠΎΡΠ° Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² HTTP, ΡΡΡΡΠ° ΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΡΡΠ°ΡΠΈΠΊΠ°, Π±Π°Π»Π°Π½ΡΠΈΡΠΎΠ²ΠΊΠΈ Π½Π°Π³ΡΡΠ·ΠΊΠΈ, ΡΠ°Π±ΠΎΡΡ Ρ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΠΎΠΉ Ρ ΡΡ-ΡΠ°Π±Π»ΠΈΡΠ΅ΠΉ Ketama, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠ°Π½ΠΈΡ ΠΊΡΡΠ° Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ ΠΈ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠ°ΠΉΠΌΠ°ΡΡΠΎΠ².
Π‘ΡΠ΅Π΄ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² Π½ΠΎΠ²ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ:
- ΠΠΎ Π²ΡΠ΅ΠΌΡ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΡΠ°Π±ΠΎΡΡ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΎ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ Π² Π»ΠΎΠ³Π΅ ΠΈΠΌΡΠ½ runtime-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² Π΄Π»Ρ ΡΠΏΡΠΎΡΠ΅Π½ΠΈΡ Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΠΊΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌ, Π²ΡΠ·Π²Π°Π½Π½ΡΡ ΠΎΡΡΡΡΡΡΠ²ΠΈΠ΅ΠΌ runtime-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² ΠΈ ΠΏΡΠΈΠ²ΠΎΠ΄ΡΡΠΈΡ ΠΊ Π·Π°Π΄Π΅ΡΠΆΠΊΠ°ΠΌ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΡΠ°Π±ΠΎΡΡ.
- ΠΠΊΠ»ΡΡΠ΅Π½ΠΎ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ ΡΠ°Π· ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠ΅ΡΠ²Π΅ΡΠ°, ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΠΊΠΎΡΠΎΡΡΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠΎΠ»Π΅Π·Π½Π° Π΄Π»Ρ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³Π° ΠΈΠ»ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ ΠΎΡΠΊΠ°Π·ΠΎΡΡΡΠΎΠΉΡΠΈΠ²ΠΎΡΡΠΈ. ΠΡΠΈ ΡΠΌΠ΅Π½Π΅ ΡΠ°Π·Ρ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΡΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ExecutionPhase, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Ρ Π²Π°ΡΠΈΡΡ ΡΠ΅ΡΠ΅Π· API Server::watch_execution_phase.
- Π Π°Π·ΡΠ΅ΡΠ΅Π½ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ Π² ΠΏΠ°ΠΌΡΡΠΈ ΡΠΆΠ°ΡΡΡ ΡΠ»ΠΎΠ²Π°ΡΠ΅ΠΉ.
- Π ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ http-ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΈ http-ΠΏΡΠΎΠΊΡΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ HttpServerOptions ΠΈ H2Options.
- Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π·Π°ΡΠΈΡΠ° ΠΎΡ Π°ΡΠ°ΠΊΠΈ MadeYouReset, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠ΅ΠΉ Π²ΡΠ·Π²Π°ΡΡ ΠΎΡΠΊΠ°Π· Π² ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π½ΠΈΠΈ ΡΠ΅ΡΠ΅Π· ΠΌΠ°Π½ΠΈΠΏΡΠ»ΡΡΠΈΡ ΡΠΏΡΠ°Π²Π»ΡΡΡΠΈΠΌΠΈ ΠΊΠ°Π΄ΡΠ°ΠΌΠΈ HTTP/2.
ΠΡΡΠΎΡΠ½ΠΈΠΊ: opennet.ru
