ΠΠΎΠΌΠΏΠ°Π½ΠΈΡ Cloudflare ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π° Π²Π΅ΡΡΠΈΡ 0.6 Π½Π° ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ° Pingora, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ Π·Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° Π·Π°ΡΠΈΡΠ΅Π½ΠΈ Π²ΠΈΡΠΎΠΊΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΈ ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈ ΡΡΠ»ΡΠ³ΠΈ Π½Π° Π΅Π·ΠΈΠΊΠ° 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
