ΠΡΠ΅Π²ΠΎΠ΄ Π½Π° ΡΡΠ°ΡΠΈΡΡΠ°:
ΠΠ°ΠΌΠ΅ΡΠΈΡ
ΡΠ°Π·ΠΈ ΡΡΠ°ΡΠΈΡ Π·Π° Π΄ΠΎΡΡΠ° ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½Π° ΠΈ ΡΡΠΉ ΠΊΠ°ΡΠΎ Envoy Π½Π°ΠΉ-ΡΠ΅ΡΡΠΎ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΊΠ°ΡΠΎ ΡΠ°ΡΡ ΠΎΡ βistioβ ΠΈΠ»ΠΈ ΠΏΡΠΎΡΡΠΎ ΠΊΠ°ΡΠΎ βΠ²Ρ
ΠΎΠ΄Π΅Π½ ΠΊΠΎΠ½ΡΡΠΎΠ»Π΅Ρβ Π½Π° kubernetes, ΠΏΠΎΠ²Π΅ΡΠ΅ΡΠΎ Ρ
ΠΎΡΠ° Π½ΡΠΌΠ°Ρ ΡΡΡΠΎΡΠΎ ΠΏΡΡΠΊΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Ρ Π½Π΅Π³ΠΎ, ΠΊΠ°ΠΊΡΠΎ Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Ρ ΡΠΈΠΏΠΈΡΠ½ΠΈΡΠ΅ ΠΠ½ΡΡΠ°Π»Π°ΡΠΈΠΈ Π½Π° Nginx ΠΈΠ»ΠΈ Haproxy. ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠΎΠ²Π°, Π°ΠΊΠΎ Π½Π΅ΡΠΎ ΡΠ΅ ΡΡΡΠΏΠΈ, Π±ΠΈ Π±ΠΈΠ»ΠΎ Π΄ΠΎΠ±ΡΠ΅ Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ΡΠ΅ ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠΈ ΠΎΡΠ²ΡΡΡΠ΅. ΠΠΏΠΈΡΠ°Ρ
ΡΠ΅ Π΄Π° ΠΏΡΠ΅Π²Π΅Π΄Π° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉ-Π³ΠΎΠ»ΡΠΌΠ° ΡΠ°ΡΡ ΠΎΡ ΡΠ΅ΠΊΡΡΠ° Π½Π° ΡΡΡΠΊΠΈ Π΅Π·ΠΈΠΊ, Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ ΡΠΏΠ΅ΡΠΈΠ°Π»Π½ΠΈ Π΄ΡΠΌΠΈ; Π·Π° ΡΠ΅Π·ΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΠΌΡΡΠ°Ρ, ΡΠ΅ Π΅ Π±ΠΎΠ»Π΅Π·Π½Π΅Π½ΠΎ Π΄Π° Π³Π»Π΅Π΄Π°Ρ ΡΠΎΠ²Π°, ΠΎΡΡΠ°Π²ΠΈΡ
ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»ΠΈΡΠ΅ Π² ΡΠΊΠΎΠ±ΠΈ. ΠΠΎΠ±ΡΠ΅ Π΄ΠΎΡΠ»ΠΈ Π² ΠΊΠΎΡΠΊΠ°.
Π’Π΅Ρ
Π½ΠΈΡΠ΅ΡΠΊΠ°ΡΠ° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Π½Π° Π½ΠΈΡΠΊΠΎ Π½ΠΈΠ²ΠΎ Π·Π° ΠΊΠΎΠ΄ΠΎΠ²Π°ΡΠ° Π±Π°Π·Π° Π½Π° Envoy Π² ΠΌΠΎΠΌΠ΅Π½ΡΠ° Π΅ Π΄ΠΎΡΡΠ° ΠΎΡΠΊΡΠ΄Π½Π°. ΠΠ° Π΄Π° ΠΏΠΎΠΏΡΠ°Π²Ρ ΡΠΎΠ²Π°, ΠΏΠ»Π°Π½ΠΈΡΠ°ΠΌ Π΄Π° Π½Π°ΠΏΡΠ°Π²Ρ ΠΏΠΎΡΠ΅Π΄ΠΈΡΠ° ΠΎΡ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ Π² Π±Π»ΠΎΠ³ΠΎΠ²Π΅ Π·Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈΡΠ΅ ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΠΈ Π½Π° Envoy. Π’ΡΠΉ ΠΊΠ°ΡΠΎ ΡΠΎΠ²Π° Π΅ ΠΏΡΡΠ²Π°ΡΠ° ΡΡΠ°ΡΠΈΡ, ΠΌΠΎΠ»Ρ, ΠΊΠ°ΠΆΠ΅ΡΠ΅ ΠΌΠΈ ΠΊΠ°ΠΊΠ²ΠΎ ΠΌΠΈΡΠ»ΠΈΡΠ΅ ΠΈ ΠΊΠ°ΠΊΠ²ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π²ΠΈ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΠ²Π° Π² Π±ΡΠ΄Π΅ΡΠΈ ΡΡΠ°ΡΠΈΠΈ.
ΠΠ΄ΠΈΠ½ ΠΎΡ Π½Π°ΠΉ-ΡΠ΅ΡΡΠΎ ΡΡΠ΅ΡΠ°Π½ΠΈΡΠ΅ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈ Π²ΡΠΏΡΠΎΡΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΏΠΎΠ»ΡΡΠ°Π²Π°ΠΌ ΠΎΡΠ½ΠΎΡΠ½ΠΎ Envoy, Π΅ Π΄Π° ΠΏΠΎΠΈΡΠΊΠ°ΠΌ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π½Π° Π½ΠΈΡΠΊΠΎ Π½ΠΈΠ²ΠΎ Π½Π° ΠΌΠΎΠ΄Π΅Π»Π° Π½Π° Π½ΠΈΡΠΊΠΈ, ΠΊΠΎΠΉΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°. Π ΡΠ°Π·ΠΈ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡ ΡΠ΅ ΠΎΠΏΠΈΡΠ° ΠΊΠ°ΠΊ Envoy ΠΊΠ°ΡΡΠΎΠ³ΡΠ°ΡΠΈΡΠ° Π²ΡΡΠ·ΠΊΠΈΡΠ΅ ΠΊΡΠΌ Π½ΠΈΡΠΊΠΈΡΠ΅, ΠΊΠ°ΠΊΡΠΎ ΠΈ ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° Thread Local Storage, ΠΊΠΎΡΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π²ΡΡΡΠ΅ΡΠ½ΠΎ, Π·Π° Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈ ΠΊΠΎΠ΄Π° ΠΏΠΎ-ΠΏΠ°ΡΠ°Π»Π΅Π»Π΅Π½ ΠΈ ΠΏΠΎ-Π²ΠΈΡΠΎΠΊΠΎΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π΅Π½.
ΠΡΠ΅Π³Π»Π΅Π΄ Π½Π° Π½ΠΈΡΠΊΠΈΡΠ΅
Envoy ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΡΠΈ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΡΠΈΠΏΠ° ΠΏΠΎΡΠΎΡΠΈ:
- ΠΡΠ½ΠΎΠ²Π΅Π½: Π’Π°Π·ΠΈ Π½ΠΈΡΠΊΠ° ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠ° ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ΡΠΎ ΠΈ ΠΏΡΠ΅ΠΊΡΠ°ΡΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΠΏΡΠΎΡΠ΅ΡΠ°, ΡΡΠ»Π°ΡΠ° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° API Π½Π° XDS (xDiscovery Service), Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ DNS, ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΠΈΠ·ΠΏΡΠ°Π²Π½ΠΎΡΡΡΠ°, ΠΎΠ±ΡΠΎ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΊΠ»ΡΡΡΠ΅ΡΠ° ΠΈ Π²ΡΠ΅ΠΌΠ΅ΡΠΎ Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅, Π½ΡΠ»ΠΈΡΠ°Π½Π΅ Π½Π° ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ°ΡΠ°, Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠΈΡΠ°Π½Π΅ ΠΈ ΠΎΠ±ΡΠΎ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΡΠΎΡΠ΅ΡΠΈ - ΡΠΈΠ³Π½Π°Π»ΠΈ Π½Π° Linux, Π³ΠΎΡΠ΅Ρ ΡΠ΅ΡΡΠ°ΡΡ ΠΈ Ρ.Π½. ΡΠ΅ ΡΠ»ΡΡΠ²Π° Π² ΡΠ°Π·ΠΈ Π½ΠΈΡΠΊΠ° Π΅ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎ ΠΈ "Π½Π΅Π±Π»ΠΎΠΊΠΈΡΠ°ΡΠΎ". ΠΠ°ΡΠΎ ΡΡΠ»ΠΎ ΠΎΡΠ½ΠΎΠ²Π½Π°ΡΠ° Π½ΠΈΡΠΊΠ° ΠΊΠΎΠΎΡΠ΄ΠΈΠ½ΠΈΡΠ° Π²ΡΠΈΡΠΊΠΈ ΠΏΡΠΎΡΠ΅ΡΠΈ Ρ ΠΊΡΠΈΡΠΈΡΠ½Π° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡ, ΠΊΠΎΠΈΡΠΎ Π½Π΅ ΠΈΠ·ΠΈΡΠΊΠ²Π°Ρ Π³ΠΎΠ»ΡΠΌΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ CPU Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅. Π’ΠΎΠ²Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° ΠΏΠΎΠ²Π΅ΡΠ΅ΡΠΎ ΠΊΠΎΠ½ΡΡΠΎΠ»Π΅Π½ ΠΊΠΎΠ΄ Π΄Π° Π±ΡΠ΄Π΅ Π½Π°ΠΏΠΈΡΠ°Π½ ΡΠ°ΠΊΠ°, ΡΡΠΊΠ°Ρ Π΅ Π΅Π΄Π½ΠΎΠ½ΠΈΡΠΊΠΎΠ².
- ΡΠ°Π±ΠΎΡΠ½ΠΈΠΊ: ΠΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ Envoy ΡΡΠ·Π΄Π°Π²Π° ΡΠ°Π±ΠΎΡΠ½Π° Π½ΠΈΡΠΊΠ° Π·Π° Π²ΡΡΠΊΠ° Ρ
Π°ΡΠ΄ΡΠ΅ΡΠ½Π° Π½ΠΈΡΠΊΠ° Π² ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ°, ΡΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠ° ΡΡΠ΅Π· ΠΎΠΏΡΠΈΡΡΠ°
--concurrency
. ΠΡΡΠΊΠ° ΡΠ°Π±ΠΎΡΠ½Π° Π½ΠΈΡΠΊΠ° ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° βΠ½Π΅Π±Π»ΠΎΠΊΠΈΡΠ°Ρβ ΡΠΈΠΊΡΠ» Π½Π° ΡΡΠ±ΠΈΡΠΈΡ, ΠΊΠΎΠΉΡΠΎ ΠΎΡΠ³ΠΎΠ²Π°ΡΡ Π·Π° ΠΏΡΠΎΡΠ»ΡΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° Π²ΡΠ΅ΠΊΠΈ ΡΠ»ΡΡΠ°ΡΠ΅Π»; ΠΊΡΠΌ ΠΌΠΎΠΌΠ΅Π½ΡΠ° Π½Π° ΠΏΠΈΡΠ°Π½Π΅ (29 ΡΠ»ΠΈ 2017 Π³.) Π½ΡΠΌΠ° ΡΠ°ΡΠ΄ΠΈΠ½Π³ Π½Π° ΡΠ»ΡΡΠ°ΡΠ΅Π»Ρ, ΠΏΡΠΈΠ΅ΠΌΠ°Π½Π΅ Π½Π° Π½ΠΎΠ²ΠΈ Π²ΡΡΠ·ΠΊΠΈ, ΠΈΠ½ΡΡΠ°Π½ΡΠΈΡΠ°Π½Π΅ Π½Π° ΡΠΈΠ»ΡΡΡΠ΅Π½ ΡΡΠ΅ΠΊ Π·Π° Π²ΡΡΠ·ΠΊΠ°ΡΠ° ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° Π²ΡΠΈΡΠΊΠΈ Π²Ρ ΠΎΠ΄Π½ΠΎ/ΠΈΠ·Ρ ΠΎΠ΄Π½ΠΈ (IO) ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΆΠΈΠ²ΠΎΡΠ° Π½Π° Π²ΡΡΠ·ΠΊΠ°ΡΠ°. ΠΡΠ½ΠΎΠ²ΠΎ, ΡΠΎΠ²Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° ΠΏΠΎΠ²Π΅ΡΠ΅ΡΠΎ ΠΊΠΎΠ΄ΠΎΠ²Π΅ Π·Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° Π²ΡΡΠ·ΠΊΠ°ΡΠ° Π΄Π° Π±ΡΠ΄Π°Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈ, ΡΡΠΊΠ°Ρ ΡΠ° Π΅Π΄Π½ΠΎΠ½ΠΈΡΠΊΠΎΠ²ΠΈ. - ΠΡΠΎΠΌΠΈΠ²Π°Π½Π΅ Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ²Π΅: ΠΡΠ΅ΠΊΠΈ ΡΠ°ΠΉΠ», ΠΊΠΎΠΉΡΠΎ Envoy Π·Π°ΠΏΠΈΡΠ²Π°, Π³Π»Π°Π²Π½ΠΎ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ Π·Π° Π΄ΠΎΡΡΡΠΏ, Π² ΠΌΠΎΠΌΠ΅Π½ΡΠ° ΠΈΠΌΠ° Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠ° Π±Π»ΠΎΠΊΠΈΡΠ°ΡΠ° Π½ΠΈΡΠΊΠ°. Π’ΠΎΠ²Π° ΡΠ΅ Π΄ΡΠ»ΠΆΠΈ Π½Π° ΡΠ°ΠΊΡΠ°, ΡΠ΅ Π·Π°ΠΏΠΈΡΡΡ Π²ΡΠ² ΡΠ°ΠΉΠ»ΠΎΠ²Π΅, ΠΊΠ΅ΡΠΈΡΠ°Π½ΠΈ ΠΎΡ ΡΠ°ΠΉΠ»ΠΎΠ²Π°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ°, Π΄ΠΎΡΠΈ ΠΊΠΎΠ³Π°ΡΠΎ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°
O_NONBLOCK
ΠΏΠΎΠ½ΡΠΊΠΎΠ³Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π±Π»ΠΎΠΊΠΈΡΠ° (Π²ΡΠ·Π΄ΠΈΡΠΊΠ°). ΠΠΎΠ³Π°ΡΠΎ ΡΠ°Π±ΠΎΡΠ½ΠΈΡΠ΅ Π½ΠΈΡΠΊΠΈ ΡΡΡΠ±Π²Π° Π΄Π° ΠΏΠΈΡΠ°Ρ Π²ΡΠ² ΡΠ°ΠΉΠ», Π΄Π°Π½Π½ΠΈΡΠ΅ Π²ΡΡΡΠ½ΠΎΡΡ ΡΠ΅ ΠΏΡΠ΅ΠΌΠ΅ΡΡΠ²Π°Ρ Π² Π±ΡΡΠ΅Ρ Π² ΠΏΠ°ΠΌΠ΅ΡΡΠ°, ΠΊΡΠ΄Π΅ΡΠΎ Π² ΠΊΡΠ°ΠΉΠ½Π° ΡΠΌΠ΅ΡΠΊΠ° ΡΠ΅ ΠΈΠ·ΡΠΈΡΡΠ²Π°Ρ ΠΏΡΠ΅Π· Π½ΠΈΡΠΊΠ°ΡΠ° ΡΠ°ΠΉΠ» ΡΠ»ΡΡ. Π’ΠΎΠ²Π° Π΅ Π΅Π΄Π½Π° ΠΎΠ±Π»Π°ΡΡ ΠΎΡ ΠΊΠΎΠ΄, ΠΊΡΠ΄Π΅ΡΠΎ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈ Π²ΡΠΈΡΠΊΠΈ ΡΠ°Π±ΠΎΡΠ½ΠΈ Π½ΠΈΡΠΊΠΈ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±Π»ΠΎΠΊΠΈΡΠ°Ρ Π΅Π΄Π½ΠΎ ΠΈ ΡΡΡΠΎ Π·Π°ΠΊΠ»ΡΡΠ²Π°Π½Π΅, Π΄ΠΎΠΊΠ°ΡΠΎ ΡΠ΅ ΠΎΠΏΠΈΡΠ²Π°Ρ Π΄Π° Π·Π°ΠΏΡΠ»Π½ΡΡ Π±ΡΡΠ΅Ρ Π½Π° ΠΏΠ°ΠΌΠ΅ΡΡΠ°.
ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° Π²ΡΡΠ·ΠΊΠ°ΡΠ°
ΠΠ°ΠΊΡΠΎ Π±Π΅ΡΠ΅ ΠΎΠ±ΡΡΠ΄Π΅Π½ΠΎ Π½Π°ΠΊΡΠ°ΡΠΊΠΎ ΠΏΠΎ-Π³ΠΎΡΠ΅, Π²ΡΠΈΡΠΊΠΈ ΡΠ°Π±ΠΎΡΠ½ΠΈ Π½ΠΈΡΠΊΠΈ ΡΠ»ΡΡΠ°Ρ Π²ΡΠΈΡΠΊΠΈ ΡΠ»ΡΡΠ°ΡΠ΅Π»ΠΈ Π±Π΅Π· Π½ΠΈΠΊΠ°ΠΊΠ²ΠΎ ΡΠ°ΡΠ΄ΠΈΠ½Π³. ΠΠΎ ΡΠΎΠ·ΠΈ Π½Π°ΡΠΈΠ½ ΡΠ΄ΡΠΎΡΠΎ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° Π΅Π»Π΅Π³Π°Π½ΡΠ½ΠΎ ΠΈΠ·ΠΏΡΠ°ΡΠ°Π½Π΅ Π½Π° ΠΏΡΠΈΠ΅ΡΠΈ ΡΠΎΠΊΠ΅ΡΠΈ ΠΊΡΠΌ ΡΠ°Π±ΠΎΡΠ½ΠΈ Π½ΠΈΡΠΊΠΈ. Π‘ΡΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΈΡΠ΅ ΡΠ΄ΡΠ° ΠΊΠ°ΡΠΎ ΡΡΠ»ΠΎ ΡΠ° ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΠΎΠ±ΡΠΈ Π² ΡΠΎΠ²Π°, ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΊΠ°ΡΠΎ ΠΏΠΎΠ²ΠΈΡΠ°Π²Π°Π½Π΅ Π½Π° ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ° Π½Π° Π²Ρ
ΠΎΠ΄/ΠΈΠ·Ρ
ΠΎΠ΄ (IO), Π·Π° Π΄Π° ΡΠ΅ ΠΎΠΏΠΈΡΠ°Ρ Π΄Π° Π·Π°ΠΏΡΠ»Π½ΡΡ Π΄Π°Π΄Π΅Π½Π° Π½ΠΈΡΠΊΠ° Ρ ΡΠ°Π±ΠΎΡΠ°, ΠΏΡΠ΅Π΄ΠΈ Π΄Π° Π·Π°ΠΏΠΎΡΠ½Π°Ρ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π΄ΡΡΠ³ΠΈ Π½ΠΈΡΠΊΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΡΡΠΎ ΡΠ»ΡΡΠ°Ρ Π½Π° ΡΡΡΠΈΡ ΡΠΎΠΊΠ΅Ρ, ΠΈ ΡΡΡΠΎ ΡΠ°ΠΊΠ° Π½Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΠΊΡΡΠ³ΠΎΠ² ΡΠ΅ΠΆΠΈΠΌ Π·Π°ΠΊΠ»ΡΡΠ²Π°Π½Π΅ (Spinlock) Π·Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° Π²ΡΡΠΊΠ° Π·Π°ΡΠ²ΠΊΠ°.
Π‘Π»Π΅Π΄ ΠΊΠ°ΡΠΎ Π²ΡΡΠ·ΠΊΠ°ΡΠ° Π±ΡΠ΄Π΅ ΠΏΡΠΈΠ΅ΡΠ° Π² ΡΠ°Π±ΠΎΡΠ½Π° Π½ΠΈΡΠΊΠ°, ΡΡ Π½ΠΈΠΊΠΎΠ³Π° Π½Π΅ Π½Π°ΠΏΡΡΠΊΠ° ΡΠ°Π·ΠΈ Π½ΠΈΡΠΊΠ°. Π¦ΡΠ»Π°ΡΠ° ΠΏΠΎ-Π½Π°ΡΠ°ΡΡΡΠ½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° Π²ΡΡΠ·ΠΊΠ°ΡΠ° ΡΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π° ΠΈΠ·ΡΡΠ»ΠΎ Π² ΡΠ°Π±ΠΎΡΠ½Π°ΡΠ° Π½ΠΈΡΠΊΠ°, Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ Π²ΡΡΠΊΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΡΠΈ ΠΏΡΠ΅Π½Π°ΡΠΎΡΠ²Π°Π½Π΅.
Π’ΠΎΠ²Π° ΠΈΠΌΠ° Π½ΡΠΊΠΎΠ»ΠΊΠΎ Π²Π°ΠΆΠ½ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΈΡΠΈ:
- ΠΡΠΈΡΠΊΠΈ ΠΏΡΠ»ΠΎΠ²Π΅ Π·Π° Π²ΡΡΠ·ΠΊΠΈ Π² Envoy ΡΠ° ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½ΠΈ Π½Π° ΡΠ°Π±ΠΎΡΠ½Π° Π½ΠΈΡΠΊΠ°. Π’Π°ΠΊΠ° ΡΠ΅, Π²ΡΠΏΡΠ΅ΠΊΠΈ ΡΠ΅ ΠΏΡΠ»ΠΎΠ²Π΅ΡΠ΅ Π·Π° HTTP/2 Π²ΡΡΠ·ΠΊΠΈ ΠΏΡΠ°Π²ΡΡ ΡΠ°ΠΌΠΎ Π΅Π΄Π½Π° Π²ΡΡΠ·ΠΊΠ° ΠΊΡΠΌ Π²ΡΠ΅ΠΊΠΈ Ρ ΠΎΡΡ Π½Π°Π³ΠΎΡΠ΅ ΠΏΠΎ Π²Π΅ΡΠΈΠ³Π°ΡΠ° Π½Π°Π²Π΅Π΄Π½ΡΠΆ, Π°ΠΊΠΎ ΠΈΠΌΠ° ΡΠ΅ΡΠΈΡΠΈ ΡΠ°Π±ΠΎΡΠ½ΠΈ Π½ΠΈΡΠΊΠΈ, ΡΠ΅ ΠΈΠΌΠ° ΡΠ΅ΡΠΈΡΠΈ HTTP/2 Π²ΡΡΠ·ΠΊΠΈ Π½Π° Ρ ΠΎΡΡ Π½Π°Π³ΠΎΡΠ΅ ΠΏΠΎ Π²Π΅ΡΠΈΠ³Π°ΡΠ° Π² ΡΡΠ°Π±ΠΈΠ»Π½ΠΎ ΡΡΡΡΠΎΡΠ½ΠΈΠ΅.
- ΠΡΠΈΡΠΈΠ½Π°ΡΠ° Envoy Π΄Π° ΡΠ°Π±ΠΎΡΠΈ ΠΏΠΎ ΡΠΎΠ·ΠΈ Π½Π°ΡΠΈΠ½ Π΅, ΡΠ΅ ΠΊΠ°ΡΠΎ Π΄ΡΡΠΆΠΈ Π²ΡΠΈΡΠΊΠΎ Π² Π΅Π΄Π½Π° ΡΠ°Π±ΠΎΡΠ½Π° Π½ΠΈΡΠΊΠ°, ΠΏΠΎΡΡΠΈ ΡΠ΅Π»ΠΈΡΡ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ Π½Π°ΠΏΠΈΡΠ°Π½ Π±Π΅Π· Π±Π»ΠΎΠΊΠΈΡΠ°Π½Π΅ ΠΈ ΡΡΠΊΠ°Ρ Π΅ Π΅Π΄Π½ΠΎΠ½ΠΈΡΠΊΠΎΠ². Π’ΠΎΠ·ΠΈ Π΄ΠΈΠ·Π°ΠΉΠ½ ΡΠ»Π΅ΡΠ½ΡΠ²Π° ΠΏΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄ ΠΈ ΡΠ΅ ΠΌΠ°ΡΠ°Π±ΠΈΡΠ° Π½Π΅Π²Π΅ΡΠΎΡΡΠ½ΠΎ Π΄ΠΎΠ±ΡΠ΅ Π΄ΠΎ ΠΏΠΎΡΡΠΈ Π½Π΅ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ Π±ΡΠΎΠΉ ΡΠ°Π±ΠΎΡΠ½ΠΈ Π½ΠΈΡΠΊΠΈ.
- ΠΠ΄ΠΈΠ½ ΠΎΡ ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡΠ΅ ΠΈΠ·Π²ΠΎΠ΄ΠΈ ΠΎΠ±Π°ΡΠ΅ Π΅, ΡΠ΅ ΠΎΡ Π³Π»Π΅Π΄Π½Π° ΡΠΎΡΠΊΠ° Π½Π° ΠΏΡΠ» ΠΏΠ°ΠΌΠ΅Ρ ΠΈ Π΅ΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡ Π½Π° Π²ΡΡΠ·ΠΊΠ°ΡΠ°, Π²ΡΡΡΠ½ΠΎΡΡ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Π²Π°ΠΆΠ½ΠΎ Π΄Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°ΡΠ΅
--concurrency
. ΠΠ°Π»ΠΈΡΠΈΠ΅ΡΠΎ Π½Π° ΠΏΠΎΠ²Π΅ΡΠ΅ ΡΠ°Π±ΠΎΡΠ½ΠΈ Π½ΠΈΡΠΊΠΈ ΠΎΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΠΎ ΡΠ΅ ΠΈΠ·ΡΠ°Π·Ρ ΠΎΠ΄Π²Π° ΠΏΠ°ΠΌΠ΅Ρ, ΡΠ΅ ΡΡΠ·Π΄Π°Π΄Π΅ ΠΏΠΎΠ²Π΅ΡΠ΅ Π½Π΅Π°ΠΊΡΠΈΠ²Π½ΠΈ Π²ΡΡΠ·ΠΊΠΈ ΠΈ ΡΠ΅ Π½Π°ΠΌΠ°Π»ΠΈ ΡΠΊΠΎΡΠΎΡΡΡΠ° Π½Π° Π³ΡΡΠΏΠΈΡΠ°Π½Π΅ Π½Π° Π²ΡΡΠ·ΠΊΠΈ. Π Lyft Π½Π°ΡΠΈΡΠ΅ ΠΏΡΠ°ΡΠ΅Π½ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ Ρ ΠΊΠΎΡ ΡΠ°Π±ΠΎΡΡΡ Ρ ΠΌΠ½ΠΎΠ³ΠΎ Π½ΠΈΡΠΊΠ° Π΅Π΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΡΡ, ΡΠ°ΠΊΠ° ΡΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° ΠΏΡΠΈΠ±Π»ΠΈΠ·ΠΈΡΠ΅Π»Π½ΠΎ ΡΡΠΎΡΠ²Π΅ΡΡΡΠ²Π° Π½Π° ΡΡΠ»ΡΠ³ΠΈΡΠ΅, Π΄ΠΎ ΠΊΠΎΠΈΡΠΎ ΡΠ΅ Π½Π°ΠΌΠΈΡΠ°Ρ. ΠΠ·ΠΏΡΠ»Π½ΡΠ²Π°ΠΌΠ΅ Envoy ΠΊΠ°ΡΠΎ ΠΊΡΠ°ΠΉΠ½ΠΎ ΠΏΡΠΎΠΊΡΠΈ ΡΠ°ΠΌΠΎ ΠΏΡΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»Π½Π° Π΅Π΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΡΡ.
ΠΠ°ΠΊΠ²ΠΎ ΠΎΠ·Π½Π°ΡΠ°Π²Π° Π½Π΅Π±Π»ΠΎΠΊΠΈΡΠ°Π½Π΅?
Π’Π΅ΡΠΌΠΈΠ½ΡΡ "Π½Π΅Π±Π»ΠΎΠΊΠΈΡΠ°Ρ" Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΏΡΡΠΈ Π΄ΠΎΡΠ΅Π³Π°, ΠΊΠΎΠ³Π°ΡΠΎ ΡΠ΅ ΠΎΠ±ΡΡΠΆΠ΄Π° ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡΠ΅ ΠΈ ΡΠ°Π±ΠΎΡΠ½ΠΈΡΠ΅ Π½ΠΈΡΠΊΠΈ. Π¦Π΅Π»ΠΈΡΡ ΠΊΠΎΠ΄ Π΅ Π½Π°ΠΏΠΈΡΠ°Π½ ΠΏΡΠΈ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ, ΡΠ΅ Π½ΠΈΡΠΎ Π½ΠΈΠΊΠΎΠ³Π° Π½Π΅ Π΅ Π±Π»ΠΎΠΊΠΈΡΠ°Π½ΠΎ. Π’ΠΎΠ²Π° ΠΎΠ±Π°ΡΠ΅ Π½Π΅ Π΅ ΡΡΠ²ΡΠ΅ΠΌ Π²ΡΡΠ½ΠΎ (ΠΊΠΎΠ΅ Π½Π΅ Π΅ ΡΡΠ²ΡΠ΅ΠΌ Π²ΡΡΠ½ΠΎ?).
Envoy ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π½ΡΠΊΠΎΠ»ΠΊΠΎ Π΄ΡΠ»Π³ΠΈ Π·Π°ΠΊΠ»ΡΡΠ²Π°Π½ΠΈΡ Π½Π° ΠΏΡΠΎΡΠ΅ΡΠΈ:
- ΠΠ°ΠΊΡΠΎ Π±Π΅ΡΠ΅ ΠΎΠ±ΡΡΠ΄Π΅Π½ΠΎ, ΠΊΠΎΠ³Π°ΡΠΎ Π·Π°ΠΏΠΈΡΠ²Π°ΡΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ Π·Π° Π΄ΠΎΡΡΡΠΏ, Π²ΡΠΈΡΠΊΠΈ ΡΠ°Π±ΠΎΡΠ½ΠΈ Π½ΠΈΡΠΊΠΈ ΠΏΡΠΈΠ΄ΠΎΠ±ΠΈΠ²Π°Ρ Π΅Π΄Π½Π° ΠΈ ΡΡΡΠ° ΠΊΠ»ΡΡΠ°Π»ΠΊΠ°, ΠΏΡΠ΅Π΄ΠΈ Π±ΡΡΠ΅ΡΡΡ Π½Π° ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΈΡ ΡΠ°ΠΉΠ» Π² ΠΏΠ°ΠΌΠ΅ΡΡΠ° Π΄Π° Π±ΡΠ΄Π΅ Π·Π°ΠΏΡΠ»Π½Π΅Π½. ΠΡΠ΅ΠΌΠ΅ΡΠΎ Π·Π° Π·Π°Π΄ΡΡΠΆΠ°Π½Π΅ Π½Π° Π·Π°ΠΊΠ»ΡΡΠ²Π°Π½Π΅ΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠ°Π»ΠΊΠΎ, Π½ΠΎ Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΊΠ»ΡΡΠ²Π°Π½Π΅ΡΠΎ Π΄Π° Π±ΡΠ΄Π΅ ΠΎΡΠΏΠΎΡΠ΅Π½ΠΎ ΠΏΡΠΈ Π²ΠΈΡΠΎΠΊΠ° Π΅Π΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΡΡ ΠΈ Π²ΠΈΡΠΎΠΊΠ° ΠΏΡΠΎΠΏΡΡΠΊΠ°ΡΠ΅Π»Π½Π° ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ.
- Envoy ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ»ΠΎΠΆΠ½Π° ΡΠΈΡΡΠ΅ΠΌΠ° Π·Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΠ° Π»ΠΎΠΊΠ°Π»Π½ΠΈ Π·Π° Π½ΠΈΡΠΊΠ°ΡΠ°. Π’ΠΎΠ²Π° ΡΠ΅ Π΅ ΡΠ΅ΠΌΠ° Π½Π° ΠΎΡΠ΄Π΅Π»Π½Π° ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡ. ΠΡΠ΅ ΠΏΠ°ΠΊ ΡΠ΅ ΡΠΏΠΎΠΌΠ΅Π½Π° Π½Π°ΠΊΡΠ°ΡΠΊΠΎ, ΡΠ΅ ΠΊΠ°ΡΠΎ ΡΠ°ΡΡ ΠΎΡ Π»ΠΎΠΊΠ°Π»Π½Π°ΡΠ° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ°ΡΠ° Π½Π° Π½ΠΈΡΠΊΠ°ΡΠ°, ΠΏΠΎΠ½ΡΠΊΠΎΠ³Π° Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈ Π·Π°ΠΊΠ»ΡΡΠ²Π°Π½Π΅ Π½Π° ΡΠ΅Π½ΡΡΠ°Π»Π΅Π½ βΡ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ Π·Π° ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ°β. Π’ΠΎΠ²Π° Π·Π°ΠΊΠ»ΡΡΠ²Π°Π½Π΅ Π½ΠΈΠΊΠΎΠ³Π° Π½Π΅ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΈΠ·ΠΈΡΠΊΠ²Π°.
- ΠΡΠ½ΠΎΠ²Π½Π°ΡΠ° Π½ΠΈΡΠΊΠ° ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ½ΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½ΠΈΡΠ° Ρ Π²ΡΠΈΡΠΊΠΈ ΡΠ°Π±ΠΎΡΠ½ΠΈ Π½ΠΈΡΠΊΠΈ. Π’ΠΎΠ²Π° ΡΠ΅ ΠΏΡΠ°Π²ΠΈ ΡΡΠ΅Π· βΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°Π½Π΅β ΠΎΡ ΠΎΡΠ½ΠΎΠ²Π½Π°ΡΠ° Π½ΠΈΡΠΊΠ° ΠΊΡΠΌ ΡΠ°Π±ΠΎΡΠ½ΠΈΡΠ΅ Π½ΠΈΡΠΊΠΈ, Π° ΠΏΠΎΠ½ΡΠΊΠΎΠ³Π° ΠΈ ΠΎΡ ΡΠ°Π±ΠΎΡΠ½ΠΈΡΠ΅ Π½ΠΈΡΠΊΠΈ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ ΠΊΡΠΌ ΠΎΡΠ½ΠΎΠ²Π½Π°ΡΠ° Π½ΠΈΡΠΊΠ°. ΠΠ·ΠΏΡΠ°ΡΠ°Π½Π΅ΡΠΎ ΠΈΠ·ΠΈΡΠΊΠ²Π° Π·Π°ΠΊΠ»ΡΡΠ²Π°Π½Π΅, ΡΠ°ΠΊΠ° ΡΠ΅ ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°Π½ΠΎΡΠΎ ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π΄Π° ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ Π² ΠΎΠΏΠ°ΡΠΊΠ° Π·Π° ΠΏΠΎ-ΠΊΡΡΠ½Π° Π΄ΠΎΡΡΠ°Π²ΠΊΠ°. Π’Π΅Π·ΠΈ ΠΊΠ»ΡΡΠ°Π»ΠΊΠΈ Π½ΠΈΠΊΠΎΠ³Π° Π½Π΅ ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π°Ρ ΡΠ΅ΡΠΈΠΎΠ·Π½ΠΎ ΠΎΡΠΏΠΎΡΠ²Π°Π½ΠΈ, Π½ΠΎ Π²ΡΠΏΡΠ΅ΠΊΠΈ ΡΠΎΠ²Π° ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ Π±Π»ΠΎΠΊΠΈΡΠ°Π½ΠΈ.
- ΠΠΎΠ³Π°ΡΠΎ Envoy Π·Π°ΠΏΠΈΡΠ΅ ΠΆΡΡΠ½Π°Π» Π² ΠΏΠΎΡΠΎΠΊΠ° ΠΎΡ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΈ Π³ΡΠ΅ΡΠΊΠΈ (ΡΡΠ°Π½Π΄Π°ΡΡΠ½Π° Π³ΡΠ΅ΡΠΊΠ°), ΡΠΎΠΉ ΠΏΠΎΠ»ΡΡΠ°Π²Π° Π·Π°ΠΊΠ»ΡΡΠ²Π°Π½Π΅ Π½Π° ΡΠ΅Π»ΠΈΡ ΠΏΡΠΎΡΠ΅Ρ. ΠΠ°ΡΠΎ ΡΡΠ»ΠΎ Π»ΠΎΠΊΠ°Π»Π½ΠΎΡΠΎ ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠ°Π½Π΅ Π½Π° Envoy ΡΠ΅ ΡΡΠΈΡΠ° Π·Π° ΡΠΆΠ°ΡΠ½ΠΎ ΠΎΡ Π³Π»Π΅Π΄Π½Π° ΡΠΎΡΠΊΠ° Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ°, ΡΠ°ΠΊΠ° ΡΠ΅ Π½Π΅ Π΅ ΠΎΠ±ΡΡΠ½Π°ΡΠΎ ΠΌΠ½ΠΎΠ³ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΏΠΎΠ΄ΠΎΠ±ΡΡΠ²Π°Π½Π΅ΡΠΎ ΠΌΡ.
- ΠΠΌΠ° Π½ΡΠΊΠΎΠ»ΠΊΠΎ Π΄ΡΡΠ³ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»Π½ΠΈ Π·Π°ΠΊΠ»ΡΡΠ²Π°Π½ΠΈΡ, Π½ΠΎ Π½ΠΈΡΠΎ Π΅Π΄Π½ΠΎ ΠΎΡ ΡΡΡ Π½Π΅ Π΅ ΠΊΡΠΈΡΠΈΡΠ½ΠΎ Π·Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° ΠΈ Π½ΠΈΠΊΠΎΠ³Π° Π½Π΅ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΎΡΠΏΠΎΡΠ²Π°.
ΠΠΎΠΊΠ°Π»Π½ΠΎ ΡΡΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ Π½Π° Π½ΠΈΡΠΊΠΈ
ΠΠΎΡΠ°Π΄ΠΈ Π½Π°ΡΠΈΠ½Π°, ΠΏΠΎ ΠΊΠΎΠΉΡΠΎ Envoy ΡΠ°Π·Π΄Π΅Π»Ρ ΠΎΡΠ³ΠΎΠ²ΠΎΡΠ½ΠΎΡΡΠΈΡΠ΅ Π½Π° Π³Π»Π°Π²Π½Π°ΡΠ° Π½ΠΈΡΠΊΠ° ΠΎΡ ΠΎΡΠ³ΠΎΠ²ΠΎΡΠ½ΠΎΡΡΠΈΡΠ΅ Π½Π° ΡΠ°Π±ΠΎΡΠ½Π°ΡΠ° Π½ΠΈΡΠΊΠ°, ΠΈΠΌΠ° ΠΈΠ·ΠΈΡΠΊΠ²Π°Π½Π΅ ΡΠ»ΠΎΠΆΠ½Π°ΡΠ° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π΄Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠΈ Π½Π° Π³Π»Π°Π²Π½Π°ΡΠ° Π½ΠΈΡΠΊΠ° ΠΈ ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° Π΄Π° ΡΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈ Π½Π° Π²ΡΡΠΊΠ° ΡΠ°Π±ΠΎΡΠ½Π° Π½ΠΈΡΠΊΠ° ΠΏΠΎ ΡΠΈΠ»Π½ΠΎ ΠΏΠ°ΡΠ°Π»Π΅Π»Π΅Π½ Π½Π°ΡΠΈΠ½. Π’ΠΎΠ·ΠΈ ΡΠ°Π·Π΄Π΅Π» ΠΎΠΏΠΈΡΠ²Π° Envoy Thread Local Storage (TLS) Π½Π° Π²ΠΈΡΠΎΠΊΠΎ Π½ΠΈΠ²ΠΎ. Π ΡΠ»Π΅Π΄Π²Π°ΡΠΈΡ ΡΠ°Π·Π΄Π΅Π» ΡΠ΅ ΠΎΠΏΠΈΡΠ° ΠΊΠ°ΠΊ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΊΠ»ΡΡΡΠ΅Ρ.
ΠΠ°ΠΊΡΠΎ Π²Π΅ΡΠ΅ Π±Π΅ΡΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΎ, Π³Π»Π°Π²Π½Π°ΡΠ° Π½ΠΈΡΠΊΠ° ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π° ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΡΡΠ»Π°ΡΠ° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡ Π½Π° ΡΠ°Π²Π½ΠΈΠ½Π°ΡΠ° Π½Π° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈ ΠΊΠΎΠ½ΡΡΠΎΠ» Π² ΠΏΡΠΎΡΠ΅ΡΠ° Envoy. ΠΠΎΠ½ΡΡΠΎΠ»Π½Π°ΡΠ° ΡΠ°Π²Π½ΠΈΠ½Π° ΡΡΠΊ Π΅ ΠΌΠ°Π»ΠΊΠΎ ΠΏΡΠ΅ΡΠΎΠ²Π°ΡΠ΅Π½Π°, Π½ΠΎ ΠΊΠΎΠ³Π°ΡΠΎ Ρ ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΡΠ΅ Π² ΡΠ°ΠΌΠΊΠΈΡΠ΅ Π½Π° ΡΠ°ΠΌΠΈΡ ΠΏΡΠΎΡΠ΅Ρ Envoy ΠΈ Ρ ΡΡΠ°Π²Π½ΠΈΡΠ΅ Ρ ΠΏΡΠ΅Π½Π°ΡΠΎΡΠ²Π°Π½Π΅ΡΠΎ, ΠΊΠΎΠ΅ΡΠΎ ΠΏΡΠ°Π²ΡΡ ΡΠ°Π±ΠΎΡΠ½ΠΈΡΠ΅ Π½ΠΈΡΠΊΠΈ, ΠΈΠΌΠ° ΡΠΌΠΈΡΡΠ». ΠΠ±ΡΠΎΡΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ Π΅, ΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π½Π°ΡΠ° Π½ΠΈΡΠΊΠ° Π²ΡΡΡΠΈ ΠΈΠ·Π²Π΅ΡΡΠ½Π° ΡΠ°Π±ΠΎΡΠ° ΠΈ ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° ΡΡΡΠ±Π²Π° Π΄Π° Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ° Π²ΡΡΠΊΠ° ΡΠ°Π±ΠΎΡΠ½Π° Π½ΠΈΡΠΊΠ° ΡΠΏΠΎΡΠ΅Π΄ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠ° ΠΎΡ ΡΠ°Π·ΠΈ ΡΠ°Π±ΠΎΡΠ°. Π² ΡΠΎΠ·ΠΈ ΡΠ»ΡΡΠ°ΠΉ ΡΠ°Π±ΠΎΡΠ½Π°ΡΠ° Π½ΠΈΡΠΊΠ° Π½Π΅ ΡΡΡΠ±Π²Π° Π΄Π° ΠΏΡΠΈΠ΄ΠΎΠ±ΠΈΠ²Π° Π·Π°ΠΊΠ»ΡΡΠ²Π°Π½Π΅ ΠΏΡΠΈ Π²ΡΠ΅ΠΊΠΈ Π΄ΠΎΡΡΡΠΏ.
Π‘ΠΈΡΡΠ΅ΠΌΠ°ΡΠ° TLS (Π»ΠΎΠΊΠ°Π»Π½ΠΎ ΡΡΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ Π½Π° Π½ΠΈΡΠΊΠΈ) Π½Π° Envoy ΡΠ°Π±ΠΎΡΠΈ ΠΏΠΎ ΡΠ»Π΅Π΄Π½ΠΈΡ Π½Π°ΡΠΈΠ½:
- ΠΠΎΠ΄ΡΡ, ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Π½ Π² ΠΎΡΠ½ΠΎΠ²Π½Π°ΡΠ° Π½ΠΈΡΠΊΠ°, ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»ΠΈ TLS ΡΠ»ΠΎΡ Π·Π° ΡΠ΅Π»ΠΈΡ ΠΏΡΠΎΡΠ΅Ρ. ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠ΅ ΡΠΎΠ²Π° Π΅ Π°Π±ΡΡΡΠ°Ρ ΠΈΡΠ°Π½ΠΎ, Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° ΡΠΎΠ²Π° Π΅ ΠΈΠ½Π΄Π΅ΠΊΡ Π²ΡΠ² Π²Π΅ΠΊΡΠΎΡ, ΠΎΡΠΈΠ³ΡΡΡΠ²Π°Ρ O(1) Π΄ΠΎΡΡΡΠΏ.
- ΠΡΠ½ΠΎΠ²Π½Π°ΡΠ° Π½ΠΈΡΠΊΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»Π½ΠΈ Π΄Π°Π½Π½ΠΈ Π² ΡΠ²ΠΎΡ ΡΠ»ΠΎΡ. ΠΠΎΠ³Π°ΡΠΎ ΡΠΎΠ²Π° ΡΡΠ°Π½Π΅, Π΄Π°Π½Π½ΠΈΡΠ΅ ΡΠ΅ ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°Ρ Π²ΡΠ² Π²ΡΡΠΊΠ° ΡΠ°Π±ΠΎΡΠ½Π° Π½ΠΈΡΠΊΠ° ΠΊΠ°ΡΠΎ Π½ΠΎΡΠΌΠ°Π»Π½ΠΎ ΡΡΠ±ΠΈΡΠΈΠ΅ Π·Π° ΡΠΈΠΊΡΠ» Π½Π° ΡΡΠ±ΠΈΡΠΈΡ.
- Π Π°Π±ΠΎΡΠ½ΠΈΡΠ΅ Π½ΠΈΡΠΊΠΈ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ΡΠ°Ρ ΠΎΡ ΡΠ²ΠΎΡ TLS ΡΠ»ΠΎΡ ΠΈ Π΄Π° ΠΈΠ·Π²Π»ΠΈΡΠ°Ρ Π²ΡΠΈΡΠΊΠΈ Π»ΠΎΠΊΠ°Π»Π½ΠΈ Π·Π° Π½ΠΈΡΠΊΠ°ΡΠ° Π΄Π°Π½Π½ΠΈ, Π½Π°Π»ΠΈΡΠ½ΠΈ ΡΠ°ΠΌ.
ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠ΅ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΠ° ΠΈ Π½Π΅Π²Π΅ΡΠΎΡΡΠ½ΠΎ ΠΌΠΎΡΠ½Π° ΠΏΠ°ΡΠ°Π΄ΠΈΠ³ΠΌΠ°, ΡΡ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½Π° Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡΡΠ° Π·Π° Π±Π»ΠΎΠΊΠΈΡΠ°Π½Π΅ Π½Π° RCU (ΡΠ΅ΡΠ΅Π½Π΅-ΠΊΠΎΠΏΠΈΡΠ°Π½Π΅-Π°ΠΊΡΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡ). ΠΠΎ ΡΡΡΠ΅ΡΡΠ²ΠΎ ΡΠ°Π±ΠΎΡΠ½ΠΈΡΠ΅ Π½ΠΈΡΠΊΠΈ Π½ΠΈΠΊΠΎΠ³Π° Π½Π΅ Π²ΠΈΠΆΠ΄Π°Ρ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π² Π΄Π°Π½Π½ΠΈΡΠ΅ Π² TLS ΡΠ»ΠΎΡΠΎΠ²Π΅ΡΠ΅, Π΄ΠΎΠΊΠ°ΡΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΠ° ΡΠ°Π±ΠΎΡΠΈ. ΠΡΠΎΠΌΡΠ½Π°ΡΠ° Π½Π°ΡΡΡΠΏΠ²Π° ΡΠ°ΠΌΠΎ ΠΏΡΠ΅Π· ΠΏΠ΅ΡΠΈΠΎΠ΄Π° Π½Π° ΠΏΠΎΡΠΈΠ²ΠΊΠ° ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ°Π±ΠΎΡΠ½ΠΈΡΠ΅ ΡΡΠ±ΠΈΡΠΈΡ.
Envoy ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΠΎΠ²Π° ΠΏΠΎ Π΄Π²Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π½Π°ΡΠΈΠ½Π°:
- Π§ΡΠ΅Π· ΡΡΡ ΡΠ°Π½ΡΠ²Π°Π½Π΅ Π½Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π΄Π°Π½Π½ΠΈ Π²ΡΠ² Π²ΡΡΠΊΠ° ΡΠ°Π±ΠΎΡΠ½Π° Π½ΠΈΡΠΊΠ°, Π΄Π°Π½Π½ΠΈΡΠ΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ Π΄ΠΎΡΡΡΠΏΠ½ΠΈ Π±Π΅Π· Π½ΠΈΠΊΠ°ΠΊΠ²ΠΎ Π±Π»ΠΎΠΊΠΈΡΠ°Π½Π΅.
- Π§ΡΠ΅Π· ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Π½Π΅ Π½Π° ΡΠΏΠΎΠ΄Π΅Π»Π΅Π½ ΡΠΊΠ°Π·Π°ΡΠ΅Π» ΠΊΡΠΌ Π³Π»ΠΎΠ±Π°Π»Π½ΠΈ Π΄Π°Π½Π½ΠΈ Π² ΡΠ΅ΠΆΠΈΠΌ ΡΠ°ΠΌΠΎ Π·Π° ΡΠ΅ΡΠ΅Π½Π΅ Π½Π° Π²ΡΡΠΊΠ° ΡΠ°Π±ΠΎΡΠ½Π° Π½ΠΈΡΠΊΠ°. ΠΠΎ ΡΠΎΠ·ΠΈ Π½Π°ΡΠΈΠ½ Π²ΡΡΠΊΠ° ΡΠ°Π±ΠΎΡΠ½Π° Π½ΠΈΡΠΊΠ° ΠΈΠΌΠ° Π±ΡΠΎΠΉ ΡΠ΅ΡΠ΅ΡΠ΅Π½ΡΠ½ΠΈ Π΄Π°Π½Π½ΠΈ, ΠΊΠΎΠΉΡΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ Π½Π°ΠΌΠ°Π»Π΅Π½, Π΄ΠΎΠΊΠ°ΡΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΠ° ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°. Π‘Π°ΠΌΠΎ ΠΊΠΎΠ³Π°ΡΠΎ Π²ΡΠΈΡΠΊΠΈ ΡΠ°Π±ΠΎΡΠ½ΠΈΡΠΈ ΡΠ΅ ΡΡΠΏΠΎΠΊΠΎΡΡ ΠΈ ΠΊΠ°ΡΠ°Ρ Π½ΠΎΠ²ΠΈ ΡΠΏΠΎΠ΄Π΅Π»Π΅Π½ΠΈ Π΄Π°Π½Π½ΠΈ, ΡΡΠ°ΡΠΈΡΠ΅ Π΄Π°Π½Π½ΠΈ ΡΠ΅ Π±ΡΠ΄Π°Ρ ΡΠ½ΠΈΡΠΎΠΆΠ΅Π½ΠΈ. Π’ΠΎΠ²Π° Π΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½ΠΎ Ρ RCU.
ΠΠΈΡΠΊΠΈ Π·Π° Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° ΠΊΠ»ΡΡΡΠ΅Ρ
Π ΡΠΎΠ·ΠΈ ΡΠ°Π·Π΄Π΅Π» ΡΠ΅ ΠΎΠΏΠΈΡΠ° ΠΊΠ°ΠΊ TLS (Π»ΠΎΠΊΠ°Π»Π½ΠΎ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ Π½Π° Π½ΠΈΡΠΊΠΈ) ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΊΠ»ΡΡΡΠ΅Ρ. Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΊΠ»ΡΡΡΠ΅ΡΠΈ Π²ΠΊΠ»ΡΡΠ²Π° xDS API ΠΈ/ΠΈΠ»ΠΈ DNS ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°, ΠΊΠ°ΠΊΡΠΎ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° Π·Π΄ΡΠ°Π²Π΅ΡΠΎ.
Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΊΠ»ΡΡΡΠ΅ΡΠ½ΠΈΡ ΠΏΠΎΡΠΎΠΊ Π²ΠΊΠ»ΡΡΠ²Π° ΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ ΠΈ ΡΡΡΠΏΠΊΠΈ:
- ΠΠ΅Π½ΠΈΠ΄ΠΆΡΡΡΡ Π½Π° ΠΊΠ»ΡΡΡΠ΅ΡΠΈ Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Π² ΡΠ°ΠΌΠΊΠΈΡΠ΅ Π½Π° Envoy, ΠΊΠΎΠΉΡΠΎ ΡΠΏΡΠ°Π²Π»ΡΠ²Π° Π²ΡΠΈΡΠΊΠΈ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΈ ΠΊΠ»ΡΡΡΠ΅ΡΠΈ Π½Π°Π³ΠΎΡΠ΅ ΠΏΠΎ Π²Π΅ΡΠΈΠ³Π°ΡΠ°, API Π½Π° ΡΡΠ»ΡΠ³Π°ΡΠ° Π·Π° ΠΎΡΠΊΡΠΈΠ²Π°Π½Π΅ Π½Π° ΠΊΠ»ΡΡΡΠ΅Ρ (CDS), API Π½Π° ΡΡΠ»ΡΠ³Π°ΡΠ° Π·Π° ΡΠ°ΠΉΠ½ΠΎ ΠΎΡΠΊΡΠΈΠ²Π°Π½Π΅ (SDS) ΠΈ ΡΡΠ»ΡΠ³Π°ΡΠ° Π·Π° ΠΎΡΠΊΡΠΈΠ²Π°Π½Π΅ Π½Π° ΠΊΡΠ°ΠΉΠ½Π° ΡΠΎΡΠΊΠ° (EDS), DNS ΠΈ Π°ΠΊΡΠΈΠ²Π½ΠΈ Π²ΡΠ½ΡΠ½ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ. Π’ΠΎΠΉ Π΅ ΠΎΡΠ³ΠΎΠ²ΠΎΡΠ΅Π½ Π·Π° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° βΠ΅Π²Π΅Π½ΡΡΠ°Π»Π½ΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π΅Π½β ΠΈΠ·Π³Π»Π΅Π΄ Π½Π° Π²ΡΠ΅ΠΊΠΈ Π²ΡΠ·Ρ ΠΎΠ΄ΡΡ ΠΊΠ»ΡΡΡΠ΅Ρ, ΠΊΠΎΠΉΡΠΎ Π²ΠΊΠ»ΡΡΠ²Π° ΠΎΡΠΊΡΠΈΡΠΈ Ρ ΠΎΡΡΠΎΠ²Π΅, ΠΊΠ°ΠΊΡΠΎ ΠΈ Π·Π΄ΡΠ°Π²ΠΎΡΠ»ΠΎΠ²Π½ΠΎ ΡΡΡΡΠΎΡΠ½ΠΈΠ΅.
- ΠΡΠΎΠ²Π΅ΡΠΊΠ°ΡΠ° Π½Π° ΠΈΠ·ΠΏΡΠ°Π²Π½ΠΎΡΡΡΠ° ΠΈΠ·Π²ΡΡΡΠ²Π° Π°ΠΊΡΠΈΠ²Π½Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΠΈΠ·ΠΏΡΠ°Π²Π½ΠΎΡΡΡΠ° ΠΈ Π΄ΠΎΠΊΠ»Π°Π΄Π²Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ Π² ΠΈΠ·ΠΏΡΠ°Π²Π½ΠΎΡΠΎ ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ Π½Π° ΠΌΠ΅Π½ΠΈΠ΄ΠΆΡΡΠ° Π½Π° ΠΊΠ»ΡΡΡΠ΅ΡΠ°.
- CDS (ΡΡΠ»ΡΠ³Π° Π·Π° ΠΎΡΠΊΡΠΈΠ²Π°Π½Π΅ Π½Π° ΠΊΠ»ΡΡΡΠ΅ΡΠΈ) / SDS (ΡΡΠ»ΡΠ³Π° Π·Π° ΡΠ°ΠΉΠ½ΠΎ ΠΎΡΠΊΡΠΈΠ²Π°Π½Π΅) / EDS (ΡΡΠ»ΡΠ³Π° Π·Π° ΠΎΡΠΊΡΠΈΠ²Π°Π½Π΅ Π½Π° ΠΊΡΠ°ΠΉΠ½ΠΈ ΡΠΎΡΠΊΠΈ) / DNS ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π°Ρ, Π·Π° Π΄Π° ΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈ ΡΠ»Π΅Π½ΡΡΠ²ΠΎΡΠΎ Π² ΠΊΠ»ΡΡΡΠ΅Ρ. ΠΡΠΎΠΌΡΠ½Π°ΡΠ° Π½Π° ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ΡΠΎ ΡΠ΅ Π²ΡΡΡΠ° Π½Π° ΠΌΠ΅Π½ΠΈΠ΄ΠΆΡΡΠ° Π½Π° ΠΊΠ»ΡΡΡΠ΅ΡΠ°.
- ΠΡΡΠΊΠ° ΡΠ°Π±ΠΎΡΠ½Π° Π½ΠΈΡΠΊΠ° Π½Π΅ΠΏΡΠ΅ΠΊΡΡΠ½Π°ΡΠΎ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° ΡΠΈΠΊΡΠ» Π½Π° ΡΡΠ±ΠΈΡΠΈΠ΅.
- ΠΠΎΠ³Π°ΡΠΎ ΠΌΠ΅Π½ΠΈΠ΄ΠΆΡΡΡΡ Π½Π° ΠΊΠ»ΡΡΡΠ΅ΡΠ° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈ, ΡΠ΅ ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ΡΠΎ Π½Π° ΠΊΠ»ΡΡΡΠ΅ΡΠ° ΡΠ΅ Π΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΠ»ΠΎ, ΡΠΎΠΉ ΡΡΠ·Π΄Π°Π²Π° Π½ΠΎΠ²Π° ΠΌΠΎΠΌΠ΅Π½ΡΠ½Π° ΡΠ½ΠΈΠΌΠΊΠ° ΡΠ°ΠΌΠΎ Π·Π° ΡΠ΅ΡΠ΅Π½Π΅ Π½Π° ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ΡΠΎ Π½Π° ΠΊΠ»ΡΡΡΠ΅ΡΠ° ΠΈ Ρ ΠΈΠ·ΠΏΡΠ°ΡΠ° Π½Π° Π²ΡΡΠΊΠ° ΡΠ°Π±ΠΎΡΠ½Π° Π½ΠΈΡΠΊΠ°.
- ΠΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΡΠ»Π΅Π΄Π²Π°ΡΠΈΡ ΡΠΈΡ ΠΏΠ΅ΡΠΈΠΎΠ΄ ΡΠ°Π±ΠΎΡΠ½Π°ΡΠ° Π½ΠΈΡΠΊΠ° ΡΠ΅ Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ° ΠΌΠΎΠΌΠ΅Π½ΡΠ½Π°ΡΠ° ΡΠ½ΠΈΠΌΠΊΠ° Π² ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ TLS ΡΠ»ΠΎΡ.
- ΠΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° I/O ΡΡΠ±ΠΈΡΠΈΠ΅, ΠΊΠΎΠ΅ΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈ Ρ ΠΎΡΡΠ° Π·Π° Π±Π°Π»Π°Π½ΡΠΈΡΠ°Π½Π΅ Π½Π° Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅ΡΠΎ, ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡΡ Π·Π° Π±Π°Π»Π°Π½ΡΠΈΡΠ°Π½Π΅ Π½Π° Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅ΡΠΎ ΡΠ΅ ΠΏΠΎΠΈΡΠΊΠ° TLS (Π»ΠΎΠΊΠ°Π»Π½ΠΎ ΡΡΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ Π½Π° Π½ΠΈΡΠΊΠΈ) ΡΠ»ΠΎΡ, Π·Π° Π΄Π° ΠΏΠΎΠ»ΡΡΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° Ρ ΠΎΡΡΠ°. Π’ΠΎΠ²Π° Π½Π΅ ΠΈΠ·ΠΈΡΠΊΠ²Π° ΠΊΠ»ΡΡΠ°Π»ΠΊΠΈ. ΠΠΌΠ°ΠΉΡΠ΅ ΠΏΡΠ΅Π΄Π²ΠΈΠ΄ ΡΡΡΠΎ, ΡΠ΅ TLS ΠΌΠΎΠΆΠ΅ ΡΡΡΠΎ Π΄Π° Π·Π°Π΄Π΅ΠΉΡΡΠ²Π° ΡΡΠ±ΠΈΡΠΈΡ Π·Π° Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅, ΡΠ°ΠΊΠ° ΡΠ΅ Π±Π°Π»Π°Π½ΡΡΠΎΡΠΈΡΠ΅ Π½Π° Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅ΡΠΎ ΠΈ Π΄ΡΡΠ³ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ Π΄Π° ΠΌΠΎΠ³Π°Ρ Π΄Π° ΠΏΡΠ΅ΠΈΠ·ΡΠΈΡΠ»ΡΡ ΠΊΠ΅ΡΠΎΠ²Π΅, ΡΡΡΡΠΊΡΡΡΠΈ ΠΎΡ Π΄Π°Π½Π½ΠΈ ΠΈ Ρ.Π½. Π’ΠΎΠ²Π° Π΅ ΠΈΠ·Π²ΡΠ½ ΠΎΠ±Ρ Π²Π°ΡΠ° Π½Π° ΡΠ°Π·ΠΈ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡ, Π½ΠΎ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π½Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΌΠ΅ΡΡΠ° Π² ΠΊΠΎΠ΄Π°.
ΠΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ Π³ΠΎΡΠ½Π°ΡΠ° ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ°, Envoy ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π° Π²ΡΡΠΊΠ° Π·Π°ΡΠ²ΠΊΠ° Π±Π΅Π· Π½ΠΈΠΊΠ°ΠΊΠ²ΠΎ Π±Π»ΠΎΠΊΠΈΡΠ°Π½Π΅ (ΠΎΡΠ²Π΅Π½ ΠΊΠ°ΠΊΡΠΎ Π΅ ΠΎΠΏΠΈΡΠ°Π½ΠΎ ΠΏΠΎ-Π³ΠΎΡΠ΅). ΠΡΠ²Π΅Π½ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡΠ° Π½Π° ΡΠ°ΠΌΠΈΡ TLS ΠΊΠΎΠ΄, ΠΏΠΎ-Π³ΠΎΠ»ΡΠΌΠ°ΡΠ° ΡΠ°ΡΡ ΠΎΡ ΠΊΠΎΠ΄Π° Π½Π΅ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ°Π·Π±ΠΈΡΠ° ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ½ΠΈΡΠΊΠΎΠ²ΠΎΡΡΡΠ° ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ Π½Π°ΠΏΠΈΡΠ°Π½Π° Π΅Π΄Π½ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎ. Π’ΠΎΠ²Π° ΠΏΡΠ°Π²ΠΈ ΠΏΠΎ-Π³ΠΎΠ»ΡΠΌΠ°ΡΠ° ΡΠ°ΡΡ ΠΎΡ ΠΊΠΎΠ΄Π° ΠΏΠΎ-Π»Π΅ΡΠ΅Π½ Π·Π° ΠΏΠΈΡΠ°Π½Π΅ Π² Π΄ΠΎΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΡΠΌ ΠΏΡΠ΅Π²ΡΠ·Ρ ΠΎΠ΄Π½Π°ΡΠ° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡ.
ΠΡΡΠ³ΠΈ ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ TLS
TLS (Thread local storage) ΠΈ RCU (Read Copy Update) ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΡΠΈΡΠΎΠΊΠΎ Π² Envoy.
ΠΡΠΈΠΌΠ΅ΡΠΈ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅:
- ΠΠ΅Ρ Π°Π½ΠΈΠ·ΡΠΌ Π·Π° ΠΏΡΠΎΠΌΡΠ½Π° Π½Π° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡΡΠ° ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅: Π’Π΅ΠΊΡΡΠΈΡΡ ΡΠΏΠΈΡΡΠΊ Ρ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½Π° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡ ΡΠ΅ ΠΈΠ·ΡΠΈΡΠ»ΡΠ²Π° Π² Π³Π»Π°Π²Π½Π°ΡΠ° Π½ΠΈΡΠΊΠ°. Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° Π½Π° Π²ΡΡΠΊΠ° ΡΠ°Π±ΠΎΡΠ½Π° Π½ΠΈΡΠΊΠ° ΡΠ΅ Π΄Π°Π²Π° ΠΌΠΎΠΌΠ΅Π½ΡΠ½Π° ΡΠ½ΠΈΠΌΠΊΠ° ΡΠ°ΠΌΠΎ Π·Π° ΡΠ΅ΡΠ΅Π½Π΅, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ RCU ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΠ°.
- ΠΠΎΠ΄ΠΌΡΠ½Π° Π½Π° ΠΌΠ°ΡΡΡΡΡΠ½ΠΈ ΡΠ°Π±Π»ΠΈΡΠΈ: ΠΠ° ΡΠ°Π±Π»ΠΈΡΠΈ Ρ ΠΌΠ°ΡΡΡΡΡΠΈ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π΅Π½ΠΈ ΠΎΡ RDS (Route Discovery Service), ΡΠ°Π±Π»ΠΈΡΠΈΡΠ΅ Ρ ΠΌΠ°ΡΡΡΡΡΠΈ ΡΠ΅ ΡΡΠ·Π΄Π°Π²Π°Ρ Π² Π³Π»Π°Π²Π½Π°ΡΠ° Π½ΠΈΡΠΊΠ°. ΠΠΎΠΌΠ΅Π½ΡΠ½Π°ΡΠ° ΡΠ½ΠΈΠΌΠΊΠ° ΡΠ°ΠΌΠΎ Π·Π° ΡΠ΅ΡΠ΅Π½Π΅ Π²ΠΏΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠ΅ ΡΠ΅ Π±ΡΠ΄Π΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π΅Π½Π° Π½Π° Π²ΡΡΠΊΠ° ΡΠ°Π±ΠΎΡΠ½Π° Π½ΠΈΡΠΊΠ° Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° RCU (Read Copy Update) ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΠ°. Π’ΠΎΠ²Π° ΠΏΡΠ°Π²ΠΈ ΠΏΡΠΎΠΌΡΠ½Π°ΡΠ° Π½Π° ΠΌΠ°ΡΡΡΡΡΠ½ΠΈΡΠ΅ ΡΠ°Π±Π»ΠΈΡΠΈ Π°ΡΠΎΠΌΠ°ΡΠ½ΠΎ Π΅ΡΠ΅ΠΊΡΠΈΠ²Π½Π°.
- ΠΠ΅ΡΠΈΡΠ°Π½Π΅ Π½Π° HTTP Π·Π°Π³Π»Π°Π²ΠΊΠΈ: ΠΠ°ΠΊΡΠΎ ΡΠ΅ ΠΎΠΊΠ°Π·Π°, ΠΈΠ·ΡΠΈΡΠ»ΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° HTTP Π·Π°Π³Π»Π°Π²ΠΊΠ°ΡΠ° Π·Π° Π²ΡΡΠΊΠ° Π·Π°ΡΠ²ΠΊΠ° (Π΄ΠΎΠΊΠ°ΡΠΎ ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° ~25K+ RPS Π½Π° ΡΠ΄ΡΠΎ) Π΅ Π΄ΠΎΡΡΠ° ΡΠΊΡΠΏΠΎ. Envoy ΠΈΠ·ΡΠΈΡΠ»ΡΠ²Π° ΡΠ΅Π½ΡΡΠ°Π»Π½ΠΎ Π·Π°Π³Π»Π°Π²ΠΊΠ°ΡΠ° ΠΏΡΠΈΠ±Π»ΠΈΠ·ΠΈΡΠ΅Π»Π½ΠΎ Π½Π° Π²ΡΠ΅ΠΊΠΈ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½ ΡΠ΅ΠΊΡΠ½Π΄Π° ΠΈ Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ Π½Π° Π²ΡΠ΅ΠΊΠΈ ΡΠ°Π±ΠΎΡΠ½ΠΈΠΊ ΡΡΠ΅Π· TLS ΠΈ RCU.
ΠΠΌΠ° ΠΈ Π΄ΡΡΠ³ΠΈ ΡΠ»ΡΡΠ°ΠΈ, Π½ΠΎ ΠΏΡΠ΅Π΄ΠΈΡΠ½ΠΈΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠΈ ΡΡΡΠ±Π²Π° Π΄Π° ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΡΡ Π΄ΠΎΠ±ΡΠΎ ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ Π·Π° ΠΊΠ°ΠΊΠ²ΠΎ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° TLS.
ΠΠ·Π²Π΅ΡΡΠ½ΠΈ ΠΊΠ°ΠΏΠ°Π½ΠΈ Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ°
ΠΠΎΠΊΠ°ΡΠΎ Envoy ΡΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Ρ Π΄ΠΎΡΡΠ° Π΄ΠΎΠ±ΡΠ΅ ΠΊΠ°ΡΠΎ ΡΡΠ»ΠΎ, ΠΈΠΌΠ° Π½ΡΠΊΠΎΠ»ΠΊΠΎ Π·Π°Π±Π΅Π»Π΅ΠΆΠΈΡΠ΅Π»Π½ΠΈ ΠΎΠ±Π»Π°ΡΡΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΈΠ·ΠΈΡΠΊΠ²Π°Ρ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΠΊΠΎΠ³Π°ΡΠΎ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Ρ ΠΌΠ½ΠΎΠ³ΠΎ Π²ΠΈΡΠΎΠΊΠ° Π΅Π΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΡΡ ΠΈ ΠΏΡΠΎΠΏΡΡΠΊΠ°ΡΠ΅Π»Π½Π° ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ:
- ΠΠ°ΠΊΡΠΎ Π΅ ΠΎΠΏΠΈΡΠ°Π½ΠΎ Π² ΡΠ°Π·ΠΈ ΡΡΠ°ΡΠΈΡ, ΠΏΠΎΠ½Π°ΡΡΠΎΡΡΠ΅ΠΌ Π²ΡΠΈΡΠΊΠΈ ΡΠ°Π±ΠΎΡΠ½ΠΈ Π½ΠΈΡΠΊΠΈ ΠΏΡΠΈΠ΄ΠΎΠ±ΠΈΠ²Π°Ρ Π·Π°ΠΊΠ»ΡΡΠ²Π°Π½Π΅ ΠΏΡΠΈ Π·Π°ΠΏΠΈΡ Π² Π±ΡΡΠ΅ΡΠ° Π½Π° ΠΏΠ°ΠΌΠ΅ΡΡΠ° Π½Π° ΠΆΡΡΠ½Π°Π»Π° Π·Π° Π΄ΠΎΡΡΡΠΏ. ΠΡΠΈ Π²ΠΈΡΠΎΠΊΠ° Π΅Π΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΡΡ ΠΈ Π²ΠΈΡΠΎΠΊΠ° ΠΏΡΠΎΠΏΡΡΠΊΠ°ΡΠ΅Π»Π½Π° ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ ΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° Π³ΡΡΠΏΠΈΡΠ°ΡΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΈΡΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ Π·Π° Π΄ΠΎΡΡΡΠΏ Π·Π° Π²ΡΡΠΊΠ° ΡΠ°Π±ΠΎΡΠ½Π° Π½ΠΈΡΠΊΠ° Π·Π° ΡΠΌΠ΅ΡΠΊΠ° Π½Π° Π΄ΠΎΡΡΠ°Π²ΠΊΠ°ΡΠ° ΠΈΠ·Π²ΡΠ½ ΡΠ΅Π΄Π° ΠΏΡΠΈ Π·Π°ΠΏΠΈΡ Π² ΠΊΡΠ°ΠΉΠ½ΠΈΡ ΡΠ°ΠΉΠ». ΠΠ°ΡΠΎ Π°Π»ΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π° ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΡΠ·Π΄Π°Π΄Π΅ΡΠ΅ ΠΎΡΠ΄Π΅Π»Π΅Π½ ΠΆΡΡΠ½Π°Π» Π·Π° Π΄ΠΎΡΡΡΠΏ Π·Π° Π²ΡΡΠΊΠ° ΡΠ°Π±ΠΎΡΠ½Π° Π½ΠΈΡΠΊΠ°.
- ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠ΅ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ°ΡΠ° Π΅ ΡΠΈΠ»Π½ΠΎ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°Π½Π°, ΠΏΡΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π²ΠΈΡΠΎΠΊΠ° Π΅Π΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΡΡ ΠΈ ΠΏΡΠΎΠΏΡΡΠΊΠ°ΡΠ΅Π»Π½Π° ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ Π²Π΅ΡΠΎΡΡΠ½ΠΎ ΡΠ΅ ΠΈΠΌΠ° Π°ΡΠΎΠΌΠ°ΡΠ½ΠΎ ΡΡΡΠ΅Π²Π½ΠΎΠ²Π°Π½ΠΈΠ΅ Π·Π° ΠΎΡΠ΄Π΅Π»Π½ΠΈ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠΈ. Π Π΅ΡΠ΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΡΠΎΠ·ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Π΅ Π±ΡΠΎΡΡΠΈ Π½Π° ΡΠ°Π±ΠΎΡΠ½Π° Π½ΠΈΡΠΊΠ° Ρ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ½ΠΎ Π½ΡΠ»ΠΈΡΠ°Π½Π΅ Π½Π° ΡΠ΅Π½ΡΡΠ°Π»Π½ΠΈΡΠ΅ Π±ΡΠΎΡΡΠΈ. Π’ΠΎΠ²Π° ΡΠ΅ Π±ΡΠ΄Π΅ ΠΎΠ±ΡΡΠ΄Π΅Π½ΠΎ Π² ΡΠ»Π΅Π΄Π²Π°ΡΠ° ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡ.
- Π’Π΅ΠΊΡΡΠ°ΡΠ° Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ° Π½ΡΠΌΠ° Π΄Π° ΡΠ°Π±ΠΎΡΠΈ Π΄ΠΎΠ±ΡΠ΅, Π°ΠΊΠΎ Envoy ΡΠ΅ Π²Π½Π΅Π΄ΡΠΈ Π² ΡΡΠ΅Π½Π°ΡΠΈΠΉ, ΠΏΡΠΈ ΠΊΠΎΠΉΡΠΎ ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠ°Π»ΠΊΠΎ Π²ΡΡΠ·ΠΊΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΈΠ·ΠΈΡΠΊΠ²Π°Ρ Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΈ ΡΠ΅ΡΡΡΡΠΈ Π·Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°. ΠΡΠΌΠ° Π³Π°ΡΠ°Π½ΡΠΈΡ, ΡΠ΅ Π²ΡΡΠ·ΠΊΠΈΡΠ΅ ΡΠ΅ Π±ΡΠ΄Π°Ρ ΡΠ°Π²Π½ΠΎΠΌΠ΅ΡΠ½ΠΎ ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ°Π±ΠΎΡΠ½ΠΈΡΠ΅ Π½ΠΈΡΠΊΠΈ. Π’ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΡΠ΅ΡΠ΅Π½ΠΎ ΡΡΠ΅Π· ΠΏΡΠΈΠ»Π°Π³Π°Π½Π΅ Π½Π° Π±Π°Π»Π°Π½ΡΠΈΡΠ°Π½Π΅ Π½Π° ΡΠ°Π±ΠΎΡΠ½ΠΈ Π²ΡΡΠ·ΠΊΠΈ, ΠΊΠΎΠ΅ΡΠΎ ΡΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ ΠΎΠ±ΠΌΠ΅Π½ Π½Π° Π²ΡΡΠ·ΠΊΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ°Π±ΠΎΡΠ½ΠΈ Π½ΠΈΡΠΊΠΈ.
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
ΠΠΎΠ΄Π΅Π»ΡΡ Π·Π° Π½ΠΈΡΠΊΠΈ Π½Π° Envoy Π΅ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠ°Π½ Π΄Π° ΠΎΡΠΈΠ³ΡΡΡΠ²Π° Π»Π΅ΠΊΠΎΡΠ° Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅ ΠΈ ΠΌΠ°ΡΠΈΠ²Π΅Π½ ΠΏΠ°ΡΠ°Π»Π΅Π»ΠΈΠ·ΡΠΌ Π·Π° ΡΠΌΠ΅ΡΠΊΠ° Π½Π° ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»Π½ΠΎ ΡΠ°Π·ΡΠΎΡΠΈΡΠ΅Π»Π½Π° ΠΏΠ°ΠΌΠ΅Ρ ΠΈ Π²ΡΡΠ·ΠΊΠΈ, Π°ΠΊΠΎ Π½Π΅ Π΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½ ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ. Π’ΠΎΠ·ΠΈ ΠΌΠΎΠ΄Π΅Π» ΠΌΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΡΠ°Π±ΠΎΡΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΠΎΠ±ΡΠ΅ ΠΏΡΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π³ΠΎΠ»ΡΠΌ Π±ΡΠΎΠΉ Π½ΠΈΡΠΊΠΈ ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡ.
ΠΠ°ΠΊΡΠΎ ΡΠΏΠΎΠΌΠ΅Π½Π°Ρ
Π½Π°ΠΊΡΠ°ΡΠΊΠΎ Π² Twitter, Π΄ΠΈΠ·Π°ΠΉΠ½ΡΡ ΠΌΠΎΠΆΠ΅ ΡΡΡΠΎ ΡΠ°ΠΊΠ° Π΄Π° ΡΠ°Π±ΠΎΡΠΈ Π²ΡΡΡ
Ρ ΠΏΡΠ»Π΅Π½ ΠΌΡΠ΅ΠΆΠΎΠ² ΡΡΠ΅ΠΊ Π² ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΊΠΈ ΡΠ΅ΠΆΠΈΠΌ, ΠΊΠ°ΡΠΎ DPDK (Data Plane Development Kit), ΠΊΠΎΠ΅ΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ ΠΊΠΎΠ½Π²Π΅Π½ΡΠΈΠΎΠ½Π°Π»Π½ΠΈ ΡΡΡΠ²ΡΡΠΈ, ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π°ΡΠΈ ΠΌΠΈΠ»ΠΈΠΎΠ½ΠΈ Π·Π°ΡΠ²ΠΊΠΈ Π² ΡΠ΅ΠΊΡΠ½Π΄Π° Ρ ΠΏΡΠ»Π½Π° L7 ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°. Π©Π΅ Π±ΡΠ΄Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ ΠΊΠ°ΠΊΠ²ΠΎ ΡΠ΅ Π±ΡΠ΄Π΅ ΠΈΠ·Π³ΡΠ°Π΄Π΅Π½ΠΎ ΠΏΡΠ΅Π· ΡΠ»Π΅Π΄Π²Π°ΡΠΈΡΠ΅ Π½ΡΠΊΠΎΠ»ΠΊΠΎ Π³ΠΎΠ΄ΠΈΠ½ΠΈ.
ΠΠ΄ΠΈΠ½ ΠΏΠΎΡΠ»Π΅Π΄Π΅Π½ Π±ΡΡΠ· ΠΊΠΎΠΌΠ΅Π½ΡΠ°Ρ: ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΡΠΈ ΡΠ° ΠΌΠ΅ ΠΏΠΈΡΠ°Π»ΠΈ Π·Π°ΡΠΎ ΠΈΠ·Π±ΡΠ°Ρ
ΠΌΠ΅ C++ Π·Π° Envoy. ΠΡΠΈΡΠΈΠ½Π°ΡΠ° ΠΎΡΡΠ°Π²Π°, ΡΠ΅ ΡΠΎΠΉ Π²ΡΠ΅ ΠΎΡΠ΅ Π΅ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½ΠΈΡΡ ΡΠΈΡΠΎΠΊΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ ΠΈΠ½Π΄ΡΡΡΡΠΈΠ°Π»Π΅Π½ Π΅Π·ΠΈΠΊ, Π½Π° ΠΊΠΎΠΉΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΈΠ·Π³ΡΠ°Π΄Π΅Π½Π° Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΠ°ΡΠ°, ΠΎΠΏΠΈΡΠ°Π½Π° Π² ΡΠ°Π·ΠΈ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡ. C++ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΎ Π½Π΅ Π΅ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΡΡ Π·Π° Π²ΡΠΈΡΠΊΠΈ ΠΈΠ»ΠΈ Π΄ΠΎΡΠΈ Π·Π° ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠΈ, Π½ΠΎ Π·Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈ ΡΠ»ΡΡΠ°ΠΈ Π½Π° ΡΠΏΠΎΡΡΠ΅Π±Π° ΡΠΎΠΉ Π²ΡΠ΅ ΠΎΡΠ΅ Π΅ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½ΠΈΡΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π·Π° ΡΠ²ΡΡΡΠ²Π°Π½Π΅ Π½Π° ΡΠ°Π±ΠΎΡΠ°ΡΠ°.
ΠΡΡΠ·ΠΊΠΈ ΠΊΡΠΌ ΠΊΠΎΠ΄
ΠΡΡΠ·ΠΊΠΈ ΠΊΡΠΌ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΈ ΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π½Π° Π·Π°Π³Π»Π°Π²ΠΊΠΈ, ΠΎΠ±ΡΡΠ΄Π΅Π½ΠΈ Π² ΡΠ°Π·ΠΈ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡ:
github.com/lyft/envoy/blob/master/include/envoy/thread_local/thread_local.h github.com/lyft/envoy/blob/master/source/common/thread_local/thread_local_impl.h github.com/lyft/envoy/blob/master/include/envoy/upstream/cluster_manager.h github.com/lyft/envoy/blob/master/source/common/upstream/cluster_manager_impl.h
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: www.habr.com