ΠΠΎΠΌΠΏΠ°Π½ΠΈΡ Cloudflare ΠΎΠ±ΡΠ²ΠΈ ΠΈΠ·Π»ΠΈΠ·Π°Π½Π΅ΡΠΎ Π½Π° ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ° Pingora 0.4, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ Π·Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° Π·Π°ΡΠΈΡΠ΅Π½ΠΈ Π²ΠΈΡΠΎΠΊΠΎΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΈ ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈ ΡΡΠ»ΡΠ³ΠΈ Π½Π° Π΅Π·ΠΈΠΊΠ° 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, ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Π½Π΅ Π½Π° ΠΊΠ΅Ρ Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½Π°ΡΠ° ΠΏΠ°ΠΌΠ΅Ρ ΠΈ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π°Π½Π΅ Π½Π° ΡΠ°ΠΉΠΌΠ°ΡΡΠΈ.
Π‘ΡΠ΅Π΄ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ Π² Π½ΠΎΠ²Π°ΡΠ° Π²Π΅ΡΡΠΈΡ:
- ΠΠ°ΡΠ°Π»Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΡΠΊΠ°ΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Rustls, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ° ΠΊΡΠΈΠΏΡΠΎΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΠΈ, Π±Π°Π·ΠΈΡΠ°Π½ΠΈ Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈΡΠ΅ aws-lc-rs ΠΈ ring, ΠΊΠΎΠΈΡΠΎ ΡΠ° ΠΈΠ·Π³ΡΠ°Π΄Π΅Π½ΠΈ Π²ΡΡΡ Ρ BoringSSL.
- ΠΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°ΡΠ° Windows.
- Π Π΅ΠΆΠΈΠΌ Π½Π° ΡΠΈΠΊΡΠΈΠ²Π΅Π½ TLS (dummy TLS), ΠΊΠΎΠΉΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΡΠΈΠ»Π°Π³Π° Π² ΡΠΈΡΡΠ°ΡΠΈΠΈ, ΠΊΠΎΠ³Π°ΡΠΎ Π½Π΅ Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΠ΅Π°Π»Π½Π° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Π½Π° TLS.
- ΠΠΎΠ±Π°Π²Π΅Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ΠΌΠΎΠ΄ΡΠ»Π° gRPC-web Π·Π° ΡΡΠ°Π½ΡΡΠΎΡΠΌΠΈΡΠ°Π½Π΅ Π½Π° Π·Π°ΡΠ²ΠΊΠΈ ΠΎΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠΈ gRPC-web Π² Π·Π°ΡΠ²ΠΊΠΈ ΠΊΡΠΌ ΡΡΡΠ²ΡΡ gRPC.
- ΠΡΠ΅Π΄ΠΎΡΡΠ°Π²Π΅Π½Π° Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° H2C (HTTP/2 Π²ΡΡΡ Ρ Π³ΠΎΠ» TCP, Π±Π΅Π· ΠΊΡΠΈΠΏΡΠΈΡΠ°Π½Π΅) ΠΈ HTTP/1 Π½Π° Π΅Π΄ΠΈΠ½ ΠΈ ΡΡΡΠΈ ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈ ΠΏΠΎΡΡ.
- ΠΠΎΠ±Π°Π²Π΅Π½Π° Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΡΠ²ΡΡΠ·Π²Π°Π½Π΅ Π½Π° ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π½Π° ΡΡΠ½ΠΊΡΠΈΡΡΠ° connect() Π·Π° ΠΏΡΠΎΠΌΡΠ½Π° Π½Π° ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΡΠΎ ΠΏΡΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΡΠ²Π°Π½Π΅ Π½Π° ΠΌΡΠ΅ΠΆΠΎΠ²Π° Π²ΡΡΠ·ΠΊΠ°, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π·Π° Π·Π°Π΄Π°Π²Π°Π½Π΅ Π½Π° Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ ΠΎΠΏΡΠΈΠΈ Π·Π° ΡΠΎΠΊΠ΅ΡΠ° ΠΈΠ»ΠΈ ΡΠΈΠΌΡΠ»ΠΈΡΠ°Π½Π΅ Π½Π° Π³ΡΠ΅ΡΠΊΠΈ ΠΏΡΠΈ ΡΠ΅ΡΡΠ²Π°Π½Π΅.
- ΠΡΠ΅Π΄ΠΎΡΡΠ°Π²Π΅Π½Π° Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΠΈΠ³Π½ΠΎΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΎΠ½Π½ΠΈ ΠΎΡΠ³ΠΎΠ²ΠΎΡΠΈ ΠΏΡΠΈ ΠΏΡΠΎΠΊΡΠΈ, ΠΊΠ°ΡΠΎ ΠΎΡΠ³ΠΎΠ²ΠΎΡΠΈ Ρ Π·Π°Π³Π»Π°Π²ΠΈΠ΅ βExpect: 100-continueβ.
- ΠΠΎΠ±Π°Π²Π΅Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° ΡΠ°Π·ΠΎΠΏΠ°ΠΊΠΎΠ²Π°Π½Π΅ Π½Π° ΠΎΡΠ³ΠΎΠ²ΠΎΡΠΈ, ΠΊΠΎΠΌΠΏΡΠ΅ΡΠΈΡΠ°Π½ΠΈ Ρ ΠΌΠ΅ΡΠΎΠ΄Π° gzip.
- Π Π΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½ Π΅ ΠΏΠΎΠ΄ΡΡΠ΅Ρ Π½Π° ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ΡΠΎ Π½Π° Π±Π΅ΠΊΠ΅Π½Π΄Π° Π·Π° ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³.
- ΠΠΎΠ±Π°Π²Π΅Π½Π° Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΠΎΠ±Π²ΡΡΠ·Π²Π°Π½Π΅ Ρ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΠΎΡ Π»ΠΎΠΊΠ°Π»Π½ΠΈ ΠΏΠΎΡΡΠΎΠ²Π΅.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: opennet.ru
