ΠΡΠ΅Π²ΠΎΠ΄ Π½Π° ΡΡΠ°ΡΠΈΡΠ°ΡΠ°:
ΠΠ²ΠΎΡ Π½Π°ΠΏΠΈΡ ΠΌΠΈ Π±Π΅ΡΠ΅ Π΄ΠΎΡΡΠ° ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ΅Π½, ΠΈ Π±ΠΈΠ΄Π΅ΡΡΠΈ Envoy Π½Π°ΡΡΠ΅ΡΡΠΎ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ ΠΊΠ°ΠΊΠΎ Π΄Π΅Π» ΠΎΠ΄ βistioβ ΠΈΠ»ΠΈ Π΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΎ ΠΊΠ°ΠΊΠΎ βΠΊΠΎΠ½ΡΡΠΎΠ»ΠΎΡ Π½Π° Π²Π»Π΅Π·β Π½Π° kubernetes, ΠΏΠΎΠ²Π΅ΡΠ΅ΡΠΎ Π»ΡΡΠ΅ ΡΠ° Π½Π΅ΠΌΠ°Π°Ρ ΠΈΡΡΠ°ΡΠ° Π΄ΠΈΡΠ΅ΠΊΡΠ½Π° ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΡΠ° ΡΠΎ Π½Π΅Π³ΠΎ ΠΊΠ°ΠΊΠΎ, Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠΎ ΡΠΈΠΏΠΈΡΠ½ΠΈΡΠ΅ ΠΠ½ΡΡΠ°Π»Π°ΡΠΈΠΈ Nginx ΠΈΠ»ΠΈ Haproxy. ΠΠ΅ΡΡΡΠΎΠ°, Π°ΠΊΠΎ Π½Π΅ΡΡΠΎ ΡΠ΅ ΡΠΊΡΡΠΈ, Π±ΠΈ Π±ΠΈΠ»ΠΎ Π΄ΠΎΠ±ΡΠΎ Π΄Π° ΡΠ΅ ΡΠ°Π·Π±Π΅ΡΠ΅ ΠΊΠ°ΠΊΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠ° ΠΎΠ΄Π²Π½Π°ΡΡΠ΅. Π‘Π΅ ΠΎΠ±ΠΈΠ΄ΠΎΠ² Π΄Π° ΠΏΡΠ΅Π²Π΅Π΄Π°ΠΌ ΡΡΠΎ Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΎΠ΄ ΡΠ΅ΠΊΡΡΠΎΡ Π½Π° ΡΡΡΠΊΠΈ, Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ ΠΈ ΠΏΠΎΡΠ΅Π±Π½ΠΈ Π·Π±ΠΎΡΠΎΠ²ΠΈ Π·Π° ΠΎΠ½ΠΈΠ΅ Π½Π° ΠΊΠΎΠΈ ΠΈΠΌ Π΅ Π±ΠΎΠ»Π½ΠΎ Π΄Π° Π³ΠΎ ΠΏΠΎΠ³Π»Π΅Π΄Π½Π°Ρ ΠΎΠ²Π°, Π³ΠΈ ΠΎΡΡΠ°Π²ΠΈΠ² ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»ΠΈΡΠ΅ Π²ΠΎ Π·Π°Π³ΡΠ°Π΄ΠΈ. ΠΠΎΠ±ΡΠ΅Π΄ΠΎΡΠ΄ΠΎΠ²ΡΠ΅ Π²ΠΎ ΠΌΠ°ΡΠΊΠ°.
Π’Π΅Ρ
Π½ΠΈΡΠΊΠ°ΡΠ° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ° Π½Π° Π½ΠΈΡΠΊΠΎ Π½ΠΈΠ²ΠΎ Π·Π° Π±Π°Π·Π°ΡΠ° Π½Π° ΠΊΠΎΠ΄ΠΎΠ²ΠΈ Envoy ΠΌΠΎΠΌΠ΅Π½ΡΠ°Π»Π½ΠΎ Π΅ ΠΏΡΠΈΠ»ΠΈΡΠ½ΠΎ ΡΠ΅ΡΠΊΠ°. ΠΠ° Π΄Π° Π³ΠΎ ΠΏΠΎΠΏΡΠ°Π²Π°ΠΌ ΠΎΠ²Π°, ΠΏΠ»Π°Π½ΠΈΡΠ°ΠΌ Π΄Π° Π½Π°ΠΏΡΠ°Π²Π°ΠΌ ΡΠ΅ΡΠΈΡΠ° Π±Π»ΠΎΠ³ ΠΏΠΎΡΡΠΎΠ²ΠΈ Π·Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈΡΠ΅ ΠΏΠΎΡΡΠΈΡΡΠ΅ΠΌΠΈ Π½Π° Envoy. ΠΠΈΠ΄Π΅ΡΡΠΈ ΠΎΠ²Π° Π΅ ΠΏΡΠ²Π° ΡΡΠ°ΡΠΈΡΠ°, Π²Π΅ ΠΌΠΎΠ»Π°ΠΌ Π΄ΠΎΠ·Π²ΠΎΠ»Π΅ΡΠ΅ ΠΌΠΈ Π΄Π° Π·Π½Π°ΠΌ ΡΡΠΎ ΠΌΠΈΡΠ»ΠΈΡΠ΅ ΠΈ ΡΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π²Π΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠΈΡΠ° Π²ΠΎ ΠΈΠ΄Π½ΠΈΡΠ΅ ΡΡΠ°ΡΠΈΠΈ.
ΠΠ΄Π½ΠΎ ΠΎΠ΄ Π½Π°ΡΡΠ΅ΡΡΠΈΡΠ΅ ΡΠ΅Ρ Π½ΠΈΡΠΊΠΈ ΠΏΡΠ°ΡΠ°ΡΠ° ΡΡΠΎ Π³ΠΈ Π΄ΠΎΠ±ΠΈΠ²Π°ΠΌ Π·Π° Envoy Π΅ Π±Π°ΡΠ°ΡΠ΅ΡΠΎ Π·Π° ΠΎΠΏΠΈΡ Π½Π° Π½ΠΈΡΠΊΠΎ Π½ΠΈΠ²ΠΎ Π½Π° ΠΌΠΎΠ΄Π΅Π»ΠΎΡ Π½Π° Π½ΠΈΡΠΊΠΈ ΡΡΠΎ Π³ΠΎ ΠΊΠΎΡΠΈΡΡΠΈ. ΠΠΎ ΠΎΠ²ΠΎΡ ΠΏΠΎΡΡ, ΡΠ΅ ΠΎΠΏΠΈΡΠ°ΠΌ ΠΊΠ°ΠΊΠΎ Envoy Π³ΠΈ ΠΌΠ°ΠΏΠΈΡΠ° Π²ΡΡΠΊΠΈΡΠ΅ ΡΠΎ Π½ΠΈΡΠΊΠΈΡΠ΅, ΠΊΠ°ΠΊΠΎ ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΎΡ Π·Π° Π»ΠΎΠΊΠ°Π»Π½ΠΎ ΡΠΊΠ»Π°Π΄ΠΈΡΠ°ΡΠ΅ Π½Π° Π½ΠΈΡΠΊΠΈ ΡΡΠΎ Π³ΠΎ ΠΊΠΎΡΠΈΡΡΠΈ Π²Π½Π°ΡΡΠ΅ΡΠ½ΠΎ Π·Π° Π΄Π° Π³ΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈ ΠΊΠΎΠ΄ΠΎΡ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΏΠ°ΡΠ°Π»Π΅Π»Π΅Π½ ΠΈ ΡΠΎ Π²ΠΈΡΠΎΠΊΠΈ ΠΏΠ΅ΡΡΠΎΡΠΌΠ°Π½ΡΠΈ.
ΠΡΠ΅Π³Π»Π΅Π΄ Π½Π° Π½ΠΈΡΠΊΠΈ
Envoy ΠΊΠΎΡΠΈΡΡΠΈ ΡΡΠΈ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΡΠΈΠΏΠΎΠ²ΠΈ Π½Π° ΡΡΡΡΠΈ:
- ΠΠ»Π°Π²Π½Π°: ΠΠ²Π°Π° Π½ΠΈΡΠΊΠ° Π³ΠΎ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠ° ΡΡΠ°ΡΡΡΠ²Π°ΡΠ΅ΡΠΎ ΠΈ Π·Π°Π²ΡΡΡΠ²Π°ΡΠ΅ΡΠΎ Π½Π° ΠΏΡΠΎΡΠ΅ΡΠΎΡ, ΡΠ΅Π»Π°ΡΠ° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° API-ΡΠΎ Π½Π° XDS (xDiscovery Service), Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ ΠΈ DNS, ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° Π·Π΄ΡΠ°Π²ΡΠ΅ΡΠΎ, ΠΎΠΏΡΡΠΎ ΡΠΏΡΠ°Π²ΡΠ²Π°ΡΠ΅ ΡΠΎ ΠΊΠ»Π°ΡΡΠ΅ΡΠΈ ΠΈ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΡΡΠ°Π΅ΡΠ΅, ΡΠ΅ΡΠ΅ΡΠΈΡΠ°ΡΠ΅ Π½Π° ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ°, Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠΈΡΠ°ΡΠ΅ ΠΈ Π³Π΅Π½Π΅ΡΠ°Π»Π½ΠΎ ΡΠΏΡΠ°Π²ΡΠ²Π°ΡΠ΅ ΡΠΎ ΠΏΡΠΎΡΠ΅ΡΠΈΡΠ΅ - ΠΆΠ΅ΡΠΊΠΎ ΡΠ΅ΡΡΠ°ΡΡΠΈΡΠ°ΡΠ΅ Π½Π° Linux, ΠΈΡΠ½ ΡΠ΅ ΡΠ»ΡΡΡΠ²Π° Π²ΠΎ ΠΎΠ²Π°Π° Π½ΠΈΡΠΊΠ° Π΅ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π° ΠΈ βΠ½Π΅Π±Π»ΠΎΠΊΠΈΡΠ°ΡΠΊΠ°β. ΠΠΏΡΡΠΎ Π·Π΅ΠΌΠ΅Π½ΠΎ, Π³Π»Π°Π²Π½Π°ΡΠ° Π½ΠΈΡΠΊΠ° Π³ΠΈ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½ΠΈΡΠ° ΡΠΈΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΠΈ Π½Π° ΠΊΡΠΈΡΠΈΡΠ½Π° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡ Π·Π° ΠΊΠΎΠΈ Π½Π΅ Π΅ ΠΏΠΎΡΡΠ΅Π±Π½Π° Π³ΠΎΠ»Π΅ΠΌΠ° ΠΊΠΎΠ»ΠΈΡΠΈΠ½Π° Π½Π° ΠΏΡΠΎΡΠ΅ΡΠΎΡΠΎΡ Π·Π° ΠΈΠ·Π²ΡΡΡΠ²Π°ΡΠ΅. ΠΠ²Π° ΠΈΠΌ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡΠ²Π° Π½Π° ΠΏΠΎΠ²Π΅ΡΠ΅ΡΠΎ ΠΊΠΎΠ½ΡΡΠΎΠ»Π½ΠΈ ΠΊΠΎΠ΄ΠΎΠ²ΠΈ Π΄Π° ΡΠ΅ Π½Π°ΠΏΠΈΡΠ°Ρ ΠΊΠ°ΠΊΠΎ Π΄Π° Π΅ ΡΠΎ Π΅Π΄Π½Π° Π½ΠΈΡΠΊΠ°.
- Π Π°Π±ΠΎΡΠ½ΠΈΠΊ: Π‘ΡΠ°Π½Π΄Π°ΡΠ΄Π½ΠΎ, Envoy ΡΠΎΠ·Π΄Π°Π²Π° ΡΠ°Π±ΠΎΡΠ½ΠΈΡΠΊΠ° Π½ΠΈΡΠΊΠ° Π·Π° ΡΠ΅ΠΊΠΎΡΠ° Ρ
Π°ΡΠ΄Π²Π΅ΡΡΠΊΠ° Π½ΠΈΡΠΊΠ° Π²ΠΎ ΡΠΈΡΡΠ΅ΠΌΠΎΡ, ΡΠΎΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠ° ΡΠΎ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ Π½Π° ΠΎΠΏΡΠΈΡΠ°ΡΠ°
--concurrency
. Π‘Π΅ΠΊΠΎΡΠ° ΡΠ°Π±ΠΎΡΠ½ΠΈΡΠΊΠ° Π½ΠΈΡΠΊΠ° Π²ΠΎΠ΄ΠΈ βΠ½Π΅Π±Π»ΠΎΠΊΠΈΡΠ°ΡΠΊΠ°β ΡΠ°ΠΌΠΊΠ° Π½Π° Π½Π°ΡΡΠ°Π½ΠΈ, ΠΊΠΎΡΠ° Π΅ ΠΎΠ΄Π³ΠΎΠ²ΠΎΡΠ½Π° Π·Π° ΡΠ»ΡΡΠ°ΡΠ΅ Π½Π° ΡΠ΅ΠΊΠΎΡ ΡΠ»ΡΡΠ°ΡΠ΅Π» Π²ΠΎ ΠΌΠΎΠΌΠ΅Π½ΡΠΎΡ Π½Π° ΠΏΠΈΡΡΠ²Π°ΡΠ΅ (29 ΡΡΠ»ΠΈ 2017 Π³ΠΎΠ΄ΠΈΠ½Π°) Π½Π΅ΠΌΠ° ΠΏΠΎΠ΄Π΅Π»Π±Π° Π½Π° ΡΠ»ΡΡΠ°ΡΠ΅Π»ΠΎΡ, ΠΏΡΠΈΡΠ°ΡΠ°ΡΠ΅ Π½ΠΎΠ²ΠΈ Π²ΡΡΠΊΠΈ, ΠΈΠ½ΡΡΠ°Π½ΡΠΈΡΠ°ΡΠ΅ Π½Π° ΡΡΠ΅ΠΊ ΡΠΈΠ»ΡΠ΅Ρ Π·Π°; ΠΏΠΎΠ²ΡΠ·ΡΠ²Π°ΡΠ΅ΡΠΎ ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° Π½Π° ΡΠΈΡΠ΅ Π²Π»Π΅Π·Π½ΠΎ/ΠΈΠ·Π»Π΅Π·Π½ΠΈ (IO) ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π·Π° Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΡΡΠ°Π΅ΡΠ΅ΡΠΎ Π½Π° Π²ΡΡΠΊΠ°ΡΠ°. ΠΠΎΠ²ΡΠΎΡΠ½ΠΎ, ΠΎΠ²Π° ΠΈΠΌ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡΠ²Π° Π½Π° ΠΏΠΎΠ²Π΅ΡΠ΅ΡΠΎ ΠΊΠΎΠ΄ΠΎΠ²ΠΈ Π·Π° ΡΠ°ΠΊΡΠ²Π°ΡΠ΅ ΡΠΎ ΠΊΠΎΠ½Π΅ΠΊΡΠΈΠΈ Π΄Π° Π±ΠΈΠ΄Π°Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈ ΠΊΠ°ΠΊΠΎ Π΄Π° ΡΠ΅ ΡΠΎ Π΅Π΄Π½Π° Π½ΠΈΡΠΊΠ°. - ΠΡΠΎΡΠΈΡΡΡΠ²Π°Ρ Π½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ: Π‘Π΅ΠΊΠΎΡΠ° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° ΡΡΠΎ ΡΠ° ΠΏΠΈΡΡΠ²Π° Envoy, Π³Π»Π°Π²Π½ΠΎ Π»ΠΎΠ³ΠΎΠ²ΠΈ Π·Π° ΠΏΡΠΈΡΡΠ°ΠΏ, ΠΌΠΎΠΌΠ΅Π½ΡΠ°Π»Π½ΠΎ ΠΈΠΌΠ° Π½Π΅Π·Π°Π²ΠΈΡΠ½Π° Π½ΠΈΡΠΊΠ° Π·Π° Π±Π»ΠΎΠΊΠΈΡΠ°ΡΠ΅. ΠΠ²Π° ΡΠ΅ Π΄ΠΎΠ»ΠΆΠΈ Π½Π° ΡΠ°ΠΊΡΠΎΡ Π΄Π΅ΠΊΠ° ΠΏΠΈΡΡΠ²Π°ΡΠ΅ΡΠΎ Π½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ ΠΊΠ΅ΡΠΈΡΠ°Π½ΠΈ ΠΎΠ΄ Π΄Π°ΡΠΎΡΠ΅ΡΠ½ΠΈΠΎΡ ΡΠΈΡΡΠ΅ΠΌ Π΄ΡΡΠΈ ΠΈ ΠΊΠΎΠ³Π° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ
O_NONBLOCK
ΠΏΠΎΠ½Π΅ΠΊΠΎΠ³Π°Ρ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π±Π»ΠΎΠΊΠΈΡΠ° (Π²ΠΎΠ·Π΄ΠΈΡΠΊΠ°). ΠΠΎΠ³Π° ΡΠ°Π±ΠΎΡΠ½ΠΈΡΠ΅ Π½ΠΈΡΠΊΠΈ ΡΡΠ΅Π±Π° Π΄Π° Π·Π°ΠΏΠΈΡΡΠ²Π°Π°Ρ Π²ΠΎ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°, ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈΡΠ΅ Π²ΡΡΡΠ½ΠΎΡΡ ΡΠ΅ ΠΏΡΠ΅ΠΌΠ΅ΡΡΡΠ²Π°Π°Ρ Π²ΠΎ Π±Π°ΡΠ΅Ρ Π²ΠΎ ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ°ΡΠ° ΠΊΠ°Π΄Π΅ ΡΡΠΎ Π½Π° ΠΊΡΠ°ΡΠΎΡ ΡΠ΅ ΠΌΠΈΡΠ°Ρ Π½ΠΈΠ· Π½ΠΈΠ·Π°ΡΠ° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° ΡΠ°ΠΌΠ½Π°. ΠΠ²Π° Π΅ Π΅Π΄Π½Π° ΠΎΠ±Π»Π°ΡΡ ΠΎΠ΄ ΠΊΠΎΠ΄ΠΎΡ ΠΊΠ°Π΄Π΅ ΡΠ΅Ρ Π½ΠΈΡΠΊΠΈ ΡΠΈΡΠ΅ ΡΠ°Π±ΠΎΡΠ½ΠΈ Π½ΠΈΡΠΊΠΈ ΠΌΠΎΠΆΠ°Ρ Π΄Π° Π³ΠΎ Π±Π»ΠΎΠΊΠΈΡΠ°Π°Ρ ΠΈΡΡΠΎΡΠΎ Π·Π°ΠΊΠ»ΡΡΡΠ²Π°ΡΠ΅ Π΄ΠΎΠ΄Π΅ΠΊΠ° ΡΠ΅ ΠΎΠ±ΠΈΠ΄ΡΠ²Π°Π°Ρ Π΄Π° ΠΏΠΎΠΏΠΎΠ»Π½Π°Ρ ΠΌΠ΅ΠΌΠΎΡΠΈΡΠΊΠΈ Π±Π°ΡΠ΅Ρ.
Π Π°ΠΊΡΠ²Π°ΡΠ΅ ΡΠΎ ΠΏΠΎΠ²ΡΠ·ΡΠ²Π°ΡΠ΅
ΠΠ°ΠΊΠΎ ΡΡΠΎ Π±Π΅ΡΠ΅ Π΄ΠΈΡΠΊΡΡΠΈΡΠ°Π½ΠΎ Π½Π°ΠΊΡΠ°ΡΠΊΠΎ ΠΏΠΎΠ³ΠΎΡΠ΅, ΡΠΈΡΠ΅ ΡΠ°Π±ΠΎΡΠ½ΠΈ Π½ΠΈΡΠΊΠΈ Π³ΠΈ ΡΠ»ΡΡΠ°Π°Ρ ΡΠΈΡΠ΅ ΡΠ»ΡΡΠ°ΡΠ΅Π»ΠΈ Π±Π΅Π· Π½ΠΈΠΊΠ°ΠΊΠ²ΠΎ ΡΡΠΎΡΠ΅ΡΠ΅. Π’Π°ΠΊΠ°, ΠΊΠ΅ΡΠ½Π΅Π»ΠΎΡ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ Π·Π° Π±Π»Π°Π³ΠΎΠ΄Π°ΡΠ½ΠΎ ΠΈΡΠΏΡΠ°ΡΠ°ΡΠ΅ ΠΏΡΠΈΡΠ°ΡΠ΅Π½ΠΈ ΡΠΎΠΊΠ΅ΡΠΈ Π΄ΠΎ ΡΠ°Π±ΠΎΡΠ½ΠΈΡΠ΅ Π½ΠΈΡΠΊΠΈ. Π‘ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½ΠΈΡΠ΅ ΠΊΠ΅ΡΠ½Π΅Π»ΠΈ Π³Π΅Π½Π΅ΡΠ°Π»Π½ΠΎ ΡΠ΅ ΠΌΠ½ΠΎΠ³Ρ Π΄ΠΎΠ±ΡΠΈ Π²ΠΎ ΠΎΠ²Π°, ΡΠΈΠ΅ ΠΊΠΎΡΠΈΡΡΠ°Ρ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΊΠ°ΠΊΠΎ ΡΡΠΎ Π΅ Π·Π°ΡΠ°ΠΊΠ½ΡΠ²Π°ΡΠ΅ΡΠΎ Π½Π° ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠΎΡ Π½Π° Π²Π»Π΅Π·/ΠΈΠ·Π»Π΅Π· (IO) Π·Π° Π΄Π° ΡΠ΅ ΠΎΠ±ΠΈΠ΄Π°Ρ Π΄Π° ΡΠ° ΠΏΠΎΠΏΠΎΠ»Π½Π°Ρ Π½ΠΈΡΠΊΠ°ΡΠ° ΡΠΎ ΡΠ°Π±ΠΎΡΠ° ΠΏΡΠ΅Π΄ Π΄Π° ΠΏΠΎΡΠ½Π°Ρ Π΄Π° ΠΊΠΎΡΠΈΡΡΠ°Ρ Π΄ΡΡΠ³ΠΈ Π½ΠΈΡΠΊΠΈ ΠΊΠΎΠΈ ΠΈΡΡΠΎ ΡΠ°ΠΊΠ° ΡΠ»ΡΡΠ°Π°Ρ Π½Π° ΠΈΡΡΠΈΠΎΡ ΠΏΡΠΈΠΊΠ»ΡΡΠΎΠΊ, Π° ΠΈΡΡΠΎ ΡΠ°ΠΊΠ° Π½Π΅ ΠΊΠΎΡΠΈΡΡΠ°Ρ ΠΊΡΡΠ³-ΡΠΎΠ±ΠΈΠ½ Π·Π°ΠΊΠ»ΡΡΡΠ²Π°ΡΠ΅ (Spinlock) Π·Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΡΠ΅ΠΊΠΎΠ΅ Π±Π°ΡΠ°ΡΠ΅.
ΠΡΠΊΠ°ΠΊΠΎ ΡΠ΅ ΡΠ΅ ΠΏΡΠΈΡΠ°ΡΠΈ Π²ΡΡΠΊΠ°ΡΠ° Π½Π° ΡΠ°Π±ΠΎΡΠ½ΠΈΡΠΊΠ° Π½ΠΈΡΠΊΠ°, ΡΠ°Π° Π½ΠΈΠΊΠΎΠ³Π°Ρ Π½Π΅ ΡΠ° Π½Π°ΠΏΡΡΡΠ° ΡΠ°Π° Π½ΠΈΡΠΊΠ°. Π¦Π΅Π»Π°ΡΠ° ΠΏΠΎΠ½Π°ΡΠ°ΠΌΠΎΡΠ½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° Π²ΡΡΠΊΠ°ΡΠ° ΡΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠ²Π° ΡΠ΅Π»ΠΎΡΠ½ΠΎ Π²ΠΎ ΡΠ°Π±ΠΎΡΠ½ΠΈΠΎΡ ΠΊΠΎΠ½Π΅Ρ, Π²ΠΊΠ»ΡΡΡΠ²Π°ΡΡΠΈ Π³ΠΎ ΡΠ΅ΠΊΠΎΠ΅ ΠΎΠ΄Π½Π΅ΡΡΠ²Π°ΡΠ΅ Π·Π° ΠΏΡΠ΅ΠΏΡΠ°ΡΠ°ΡΠ΅.
ΠΠ²Π° ΠΈΠΌΠ° Π½Π΅ΠΊΠΎΠ»ΠΊΡ Π²Π°ΠΆΠ½ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΈΡΠΈ:
- Π‘ΠΈΡΠ΅ Π±Π°Π·Π΅Π½ΠΈ Π·Π° ΠΏΠΎΠ²ΡΠ·ΡΠ²Π°ΡΠ΅ Π²ΠΎ Envoy ΡΠ΅ Π΄ΠΎΠ΄Π΅Π»Π΅Π½ΠΈ Π½Π° ΡΠ°Π±ΠΎΡΠ½ΠΈΡΠΊΠ° Π½ΠΈΡΠΊΠ°. ΠΠ½Π°ΡΠΈ, ΠΈΠ°ΠΊΠΎ Π±Π°Π·Π΅Π½ΠΈΡΠ΅ Π·Π° ΠΏΠΎΠ²ΡΠ·ΡΠ²Π°ΡΠ΅ HTTP/2 ΠΏΡΠ°Π²Π°Ρ ΡΠ°ΠΌΠΎ Π΅Π΄Π½Π° Π²ΡΡΠΊΠ° ΡΠΎ ΡΠ΅ΠΊΠΎΡ Π½Π°Π³ΠΎΡΠ΅Π½ Ρ ΠΎΡΡ Π²ΠΎ ΠΈΡΡΠΎ Π²ΡΠ΅ΠΌΠ΅, Π°ΠΊΠΎ ΠΈΠΌΠ° ΡΠ΅ΡΠΈΡΠΈ ΡΠ°Π±ΠΎΡΠ½ΠΈ Π½ΠΈΡΠΊΠΈ, ΡΠ΅ ΠΈΠΌΠ° ΡΠ΅ΡΠΈΡΠΈ HTTP/2 ΠΊΠΎΠ½Π΅ΠΊΡΠΈΠΈ ΠΏΠΎ upstream Π΄ΠΎΠΌΠ°ΡΠΈΠ½ Π²ΠΎ ΡΡΠ°Π±ΠΈΠ»Π½Π° ΡΠΎΡΡΠΎΡΠ±Π°.
- ΠΡΠΈΡΠΈΠ½Π°ΡΠ° Π·ΠΎΡΡΠΎ Envoy ΡΠ°Π±ΠΎΡΠΈ Π½Π° ΠΎΠ²ΠΎΡ Π½Π°ΡΠΈΠ½ Π΅ ΡΠΎΠ° ΡΡΠΎ ΡΠΎ Π·Π°Π΄ΡΠΆΡΠ²Π°ΡΠ΅ Π½Π° ΡΓ¨ Π½Π° Π΅Π΄Π½Π° ΡΠ°Π±ΠΎΡΠ½ΠΈΡΠΊΠ° Π½ΠΈΡΠΊΠ°, ΡΠ΅ΡΠΈΡΠΈ ΡΠ΅Π»ΠΈΠΎΡ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π½Π°ΠΏΠΈΡΠ΅ Π±Π΅Π· Π±Π»ΠΎΠΊΠΈΡΠ°ΡΠ΅ ΠΈ ΠΊΠ°ΠΊΠΎ Π΄Π° Π΅ ΡΠΎ Π΅Π΄Π½Π° Π½ΠΈΡΠΊΠ°. ΠΠ²ΠΎΡ Π΄ΠΈΠ·Π°ΡΠ½ Π³ΠΎ ΠΎΠ»Π΅ΡΠ½ΡΠ²Π° ΠΏΠΈΡΡΠ²Π°ΡΠ΅ΡΠΎ ΠΌΠ½ΠΎΠ³Ρ ΠΊΠΎΠ΄ΠΎΠ²ΠΈ ΠΈ Π½Π΅Π²Π΅ΡΠΎΡΠ°ΡΠ½ΠΎ Π΄ΠΎΠ±ΡΠΎ ΡΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΡΠ²Π° Π½Π° ΡΠ΅ΡΠΈΡΠΈ Π½Π΅ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ Π±ΡΠΎΡ ΡΠ°Π±ΠΎΡΠ½ΠΈ Π½ΠΈΡΠΊΠΈ.
- Π‘Π΅ΠΏΠ°ΠΊ, Π΅Π΄Π΅Π½ ΠΎΠ΄ Π³Π»Π°Π²Π½ΠΈΡΠ΅ ΡΠ΅ΠΊΠΎΡΠΈ Π΅ Π΄Π΅ΠΊΠ° ΠΎΠ΄ Π³Π»Π΅Π΄Π½Π° ΡΠΎΡΠΊΠ° Π½Π° ΠΌΠ΅ΠΌΠΎΡΠΈΡΠΊΠΈ Π±Π°Π·Π΅Π½ ΠΈ Π΅ΡΠΈΠΊΠ°ΡΠ½ΠΎΡΡ Π½Π° ΠΏΠΎΠ²ΡΠ·ΡΠ²Π°ΡΠ΅ΡΠΎ, Π²ΡΡΡΠ½ΠΎΡΡ Π΅ ΠΌΠ½ΠΎΠ³Ρ Π²Π°ΠΆΠ½ΠΎ Π΄Π° ΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°
--concurrency
. ΠΠΊΠΎ ΠΈΠΌΠ°ΡΠ΅ ΠΏΠΎΠ²Π΅ΡΠ΅ ΡΠ°Π±ΠΎΡΠ½ΠΈ Π½ΠΈΡΠΊΠΈ ΠΎΡΠΊΠΎΠ»ΠΊΡ ΡΡΠΎ Π΅ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎ, ΡΠ΅ ΡΠ° ΠΏΠΎΡΡΠΎΡΠΈΡΠ΅ ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ°ΡΠ°, ΡΠ΅ ΡΠΎΠ·Π΄Π°Π΄Π΅ ΠΏΠΎΠ²Π΅ΡΠ΅ Π²ΡΡΠΊΠΈ Π²ΠΎ ΠΌΠΈΡΡΠ²Π°ΡΠ΅ ΠΈ ΡΠ΅ ΡΠ° Π½Π°ΠΌΠ°Π»ΠΈ ΡΡΠ°ΠΏΠΊΠ°ΡΠ° Π½Π° Π·Π΄ΡΡΠΆΡΠ²Π°ΡΠ΅ Π½Π° ΠΊΠΎΠ½Π΅ΠΊΡΠΈΠΈΡΠ΅. ΠΠΎ Lyft, ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠΈΡΠ΅ Π½Π° Π½Π°ΡΠΈΡΠ΅ ΠΏΡΠ°ΡΠ΅Π½ΠΈΡΠΊΠΈ ΡΡΡΠ°Π½ΠΈΡΠ½ΠΈ ΠΊΠΎΠ»Π° ΡΠ°Π±ΠΎΡΠ°Ρ ΡΠΎ ΠΌΠ½ΠΎΠ³Ρ ΠΌΠ°Π»Π° ΠΏΠ°ΡΠ°Π»Π΅Π»Π½ΠΎΡΡ, ΡΠ°ΠΊΠ° ΡΡΠΎ ΠΏΠ΅ΡΡΠΎΡΠΌΠ°Π½ΡΠΈΡΠ΅ Π³ΡΡΠ±ΠΎ ΡΠ΅ ΡΠΎΠ²ΠΏΠ°ΡΠ°Π°Ρ ΡΠΎ ΡΡΠ»ΡΠ³ΠΈΡΠ΅ Π΄ΠΎ ΠΊΠΎΠΈ ΡΠ΅Π΄Π°Ρ. ΠΠΈΠ΅ ΡΠ°Π±ΠΎΡΠΈΠΌΠ΅ Π½Π° Envoy ΠΊΠ°ΠΊΠΎ ΠΏΡΠΎΠΊΡΠΈ Π½Π° ΡΠ°Π±ΠΎΡ ΡΠ°ΠΌΠΎ ΠΏΡΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»Π½Π° ΠΈΡΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½ΠΎΡΡ.
Π¨ΡΠΎ Π·Π½Π°ΡΠΈ Π½Π΅Π±Π»ΠΎΠΊΠΈΡΠ°ΡΠ΅?
Π’Π΅ΡΠΌΠΈΠ½ΠΎΡ βΠ½Π΅-Π±Π»ΠΎΠΊΠΈΡΠ°ΡΠ΅β Π΅ ΠΊΠΎΡΠΈΡΡΠ΅Π½ Π½Π΅ΠΊΠΎΠ»ΠΊΡ ΠΏΠ°ΡΠΈ Π΄ΠΎΡΠ΅Π³Π° ΠΊΠΎΠ³Π° ΡΠ΅ Π΄ΠΈΡΠΊΡΡΠΈΡΠ°ΡΠ΅ Π·Π° ΡΠΎΠ° ΠΊΠ°ΠΊΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠ°Π°Ρ Π³Π»Π°Π²Π½ΠΈΡΠ΅ ΠΈ ΡΠ°Π±ΠΎΡΠ½ΠΈΡΠ΅ Π½ΠΈΡΠΊΠΈ. Π¦Π΅Π»ΠΈΠΎΡ ΠΊΠΎΠ΄ Π΅ Π½Π°ΠΏΠΈΡΠ°Π½ ΠΏΠΎΠ΄ ΠΏΡΠ΅ΡΠΏΠΎΡΡΠ°Π²ΠΊΠ° Π΄Π΅ΠΊΠ° Π½ΠΈΡΡΠΎ Π½ΠΈΠΊΠΎΠ³Π°Ρ Π½Π΅ Π΅ Π±Π»ΠΎΠΊΠΈΡΠ°Π½ΠΎ. Π‘Π΅ΠΏΠ°ΠΊ, ΠΎΠ²Π° Π½Π΅ Π΅ ΡΠ΅Π»ΠΎΡΠ½ΠΎ ΡΠΎΡΠ½ΠΎ (ΡΡΠΎ Π½Π΅ Π΅ ΡΠ΅Π»ΠΎΡΠ½ΠΎ ΡΠΎΡΠ½ΠΎ?).
Envoy ΠΊΠΎΡΠΈΡΡΠΈ Π½Π΅ΠΊΠΎΠ»ΠΊΡ Π΄ΠΎΠ»Π³ΠΈ ΠΏΡΠΎΡΠ΅ΡΠ½ΠΈ Π±ΡΠ°Π²ΠΈ:
- ΠΠ°ΠΊΠΎ ΡΡΠΎ Π±Π΅ΡΠ΅ Π΄ΠΈΡΠΊΡΡΠΈΡΠ°Π½ΠΎ, ΠΊΠΎΠ³Π° ΡΠ΅ ΠΏΠΈΡΡΠ²Π°Π°Ρ Π΄Π½Π΅Π²Π½ΠΈΡΠΈ Π·Π° ΠΏΡΠΈΡΡΠ°ΠΏ, ΡΠΈΡΠ΅ ΡΠ°Π±ΠΎΡΠ½ΠΈ Π½ΠΈΡΠΊΠΈ Π³ΠΎ Π΄ΠΎΠ±ΠΈΠ²Π°Π°Ρ ΠΈΡΡΠΎΡΠΎ Π·Π°ΠΊΠ»ΡΡΡΠ²Π°ΡΠ΅ ΠΏΡΠ΅Π΄ Π΄Π° ΡΠ΅ ΠΏΠΎΠΏΠΎΠ»Π½ΠΈ Π±Π°ΡΠ΅ΡΠΎΡ Π·Π° Π΄Π½Π΅Π²Π½ΠΈΡΠΈ Π²ΠΎ ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ°ΡΠ°. ΠΡΠ΅ΠΌΠ΅ΡΠΎ Π½Π° Π΄ΡΠΆΠ΅ΡΠ΅ Π½Π° Π±ΡΠ°Π²Π°ΡΠ° ΡΡΠ΅Π±Π° Π΄Π° Π±ΠΈΠ΄Π΅ ΠΌΠ½ΠΎΠ³Ρ Π½ΠΈΡΠΊΠΎ, Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π΅ Π±ΡΠ°Π²Π°ΡΠ° Π΄Π° ΡΠ΅ ΠΎΡΠΏΠΎΡΡΠ²Π° ΠΏΡΠΈ Π²ΠΈΡΠΎΠΊΠ° ΠΈΡΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½ΠΎΡΡ ΠΈ Π²ΠΈΡΠΎΠΊΠ° ΠΏΡΠΎΠΏΡΡΠ½ΠΎΡΡ.
- Envoy ΠΊΠΎΡΠΈΡΡΠΈ ΠΌΠ½ΠΎΠ³Ρ ΡΠ»ΠΎΠΆΠ΅Π½ ΡΠΈΡΡΠ΅ΠΌ Π·Π° Π΄Π° ΡΠ΅ ΡΠΏΡΠ°Π²ΠΈ ΡΠΎ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ°ΡΠ° ΡΡΠΎ Π΅ Π»ΠΎΠΊΠ°Π»Π½Π° Π½Π° Π½ΠΈΡΠΊΠ°ΡΠ°. ΠΠ²Π° ΡΠ΅ Π±ΠΈΠ΄Π΅ ΡΠ΅ΠΌΠ° Π½Π° ΠΏΠΎΡΠ΅Π±Π΅Π½ ΠΏΠΎΡΡ. Π‘Π΅ΠΏΠ°ΠΊ, Π½Π°ΠΊΡΠ°ΡΠΊΠΎ ΡΠ΅ ΡΠΏΠΎΠΌΠ½Π°ΠΌ Π΄Π΅ΠΊΠ° ΠΊΠ°ΠΊΠΎ Π΄Π΅Π» ΠΎΠ΄ Π»ΠΎΠΊΠ°Π»Π½ΠΎΡΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠ²Π°ΡΠ΅ Π½Π° ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ°ΡΠ° Π½Π° Π½ΠΈΡΠΊΠΈΡΠ΅, ΠΏΠΎΠ½Π΅ΠΊΠΎΠ³Π°Ρ Π΅ Π½Π΅ΠΎΠΏΡ ΠΎΠ΄Π½ΠΎ Π΄Π° ΡΠ΅ ΡΡΠ΅ΠΊΠ½Π΅ Π±ΡΠ°Π²Π° Π½Π° ΡΠ΅Π½ΡΡΠ°Π»Π½Π° βΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ°β. ΠΠ²Π° Π·Π°ΠΊΠ»ΡΡΡΠ²Π°ΡΠ΅ Π½ΠΈΠΊΠΎΠ³Π°Ρ Π½Π΅ ΡΡΠ΅Π±Π° Π΄Π° ΡΠ΅ Π±Π°ΡΠ°.
- ΠΠ»Π°Π²Π½Π°ΡΠ° Π½ΠΈΡΠΊΠ° ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ½ΠΎ ΡΡΠ΅Π±Π° Π΄Π° ΡΠ΅ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½ΠΈΡΠ° ΡΠΎ ΡΠΈΡΠ΅ ΡΠ°Π±ΠΎΡΠ½ΠΈΡΠΊΠΈ Π½ΠΈΡΠΊΠΈ. ΠΠ²Π° ΡΠ΅ ΠΏΡΠ°Π²ΠΈ ΡΠΎ βΠΎΠ±ΡΠ°Π²ΡΠ²Π°ΡΠ΅β ΠΎΠ΄ Π³Π»Π°Π²Π½Π°ΡΠ° Π½ΠΈΡΠΊΠ° Π΄ΠΎ ΡΠ°Π±ΠΎΡΠ½ΠΈΡΠΊΠΈΡΠ΅ Π½ΠΈΡΠΊΠΈ, Π° ΠΏΠΎΠ½Π΅ΠΊΠΎΠ³Π°Ρ ΠΈ ΠΎΠ΄ ΡΠ°Π±ΠΎΡΠ½ΠΈΡΠ΅ Π½ΠΈΡΠΊΠΈ Π½Π°Π·Π°Π΄ Π΄ΠΎ Π³Π»Π°Π²Π½Π°ΡΠ° Π½ΠΈΡΠΊΠ°. ΠΡΠΏΡΠ°ΡΠ°ΡΠ΅ΡΠΎ Π±Π°ΡΠ° Π·Π°ΠΊΠ»ΡΡΡΠ²Π°ΡΠ΅ Π·Π° Π΄Π° ΠΌΠΎΠΆΠ΅ ΠΎΠ±ΡΠ°Π²Π΅Π½Π°ΡΠ° ΠΏΠΎΡΠ°ΠΊΠ° Π΄Π° ΡΠ΅ ΡΠ΅ΠΊΠ° Π½Π° ΡΠ΅Π΄ Π·Π° ΠΏΠΎΠ΄ΠΎΡΠ½Π΅ΠΆΠ½Π° ΠΈΡΠΏΠΎΡΠ°ΠΊΠ°. ΠΠ²ΠΈΠ΅ Π±ΡΠ°Π²ΠΈ Π½ΠΈΠΊΠΎΠ³Π°Ρ Π½Π΅ ΡΡΠ΅Π±Π° ΡΠ΅ΡΠΈΠΎΠ·Π½ΠΎ Π΄Π° ΡΠ΅ ΠΎΡΠΏΠΎΡΡΠ²Π°Π°Ρ, Π½ΠΎ ΡΠ΅ΠΏΠ°ΠΊ ΡΠ΅Ρ Π½ΠΈΡΠΊΠΈ ΠΌΠΎΠΆΠ°Ρ Π΄Π° Π±ΠΈΠ΄Π°Ρ Π±Π»ΠΎΠΊΠΈΡΠ°Π½ΠΈ.
- ΠΠΎΠ³Π° Envoy ΠΏΠΈΡΡΠ²Π° Π΄Π½Π΅Π²Π½ΠΈΠΊ Π½Π° ΠΏΡΠΎΡΠΎΠΊΠΎΡ Π½Π° ΡΠΈΡΡΠ΅ΠΌΡΠΊΠΈ Π³ΡΠ΅ΡΠΊΠΈ (ΡΡΠ°Π½Π΄Π°ΡΠ΄Π½Π° Π³ΡΠ΅ΡΠΊΠ°), ΡΠΎΡ Π΄ΠΎΠ±ΠΈΠ²Π° Π·Π°ΠΊΠ»ΡΡΡΠ²Π°ΡΠ΅ Π½Π° ΡΠ΅Π»ΠΈΠΎΡ ΠΏΡΠΎΡΠ΅Ρ. ΠΠΏΡΡΠΎ Π·Π΅ΠΌΠ΅Π½ΠΎ, Π»ΠΎΠΊΠ°Π»Π½Π°ΡΠ° ΡΠ΅ΡΠ° Π½Π° Envoy ΡΠ΅ ΡΠΌΠ΅ΡΠ° Π·Π° ΡΠΆΠ°ΡΠ½Π° ΠΎΠ΄ Π³Π»Π΅Π΄Π½Π° ΡΠΎΡΠΊΠ° Π½Π° ΠΈΠ·Π²Π΅Π΄Π±Π°ΡΠ°, ΡΠ°ΠΊΠ° ΡΡΠΎ Π½Π΅ ΡΠ΅ ΠΏΠΎΡΠ²Π΅ΡΠΈ ΠΌΠ½ΠΎΠ³Ρ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π½Π΅ΡΠ·ΠΈΠ½ΠΎΡΠΎ ΠΏΠΎΠ΄ΠΎΠ±ΡΡΠ²Π°ΡΠ΅.
- ΠΠΎΡΡΠΎΡΠ°Ρ Π½Π΅ΠΊΠΎΠ»ΠΊΡ Π΄ΡΡΠ³ΠΈ ΡΠ»ΡΡΠ°ΡΠ½ΠΈ Π±ΡΠ°Π²ΠΈ, Π½ΠΎ Π½ΠΈΡΡ Π΅Π΄Π½Π° ΠΎΠ΄ Π½ΠΈΠ² Π½Π΅ Π΅ ΠΊΡΠΈΡΠΈΡΠ½Π° Π·Π° ΠΏΠ΅ΡΡΠΎΡΠΌΠ°Π½ΡΠΈΡΠ΅ ΠΈ Π½ΠΈΠΊΠΎΠ³Π°Ρ Π½Π΅ ΡΡΠ΅Π±Π° Π΄Π° ΡΠ΅ ΠΎΡΠΏΠΎΡΡΠ²Π°.
ΠΠΎΠΊΠ°Π»Π½ΠΎ ΡΠΊΠ»Π°Π΄ΠΈΡΠ°ΡΠ΅ Π½Π° Π½ΠΈΡΠΊΠΈ
ΠΠΎΡΠ°Π΄ΠΈ Π½Π°ΡΠΈΠ½ΠΎΡ Π½Π° ΠΊΠΎΡ Envoy Π³ΠΈ ΠΎΠ΄Π²ΠΎΡΡΠ²Π° ΠΎΠ΄Π³ΠΎΠ²ΠΎΡΠ½ΠΎΡΡΠΈΡΠ΅ Π½Π° Π³Π»Π°Π²Π½Π°ΡΠ° Π½ΠΈΡΠΊΠ° ΠΎΠ΄ ΠΎΠ΄Π³ΠΎΠ²ΠΎΡΠ½ΠΎΡΡΠΈΡΠ΅ Π½Π° ΡΠ°Π±ΠΎΡΠ½ΠΈΠΎΡ ΠΊΠΎΠ½Π΅Ρ, ΠΏΠΎΡΡΠΎΠΈ ΡΡΠ»ΠΎΠ² Π΄Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·Π²ΡΡΠΈ ΡΠ»ΠΎΠΆΠ΅Π½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° Π³Π»Π°Π²Π½Π°ΡΠ° Π½ΠΈΡΠΊΠ° ΠΈ ΠΏΠΎΡΠΎΠ° Π΄Π° ΡΠ΅ ΠΎΠ±Π΅Π·Π±Π΅Π΄ΠΈ Π½Π° ΡΠ΅ΠΊΠΎΡΠ° ΡΠ°Π±ΠΎΡΠ½ΠΈΡΠΊΠ° Π½ΠΈΡΠΊΠ° Π½Π° ΠΌΠ½ΠΎΠ³Ρ ΠΈΡΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½ Π½Π°ΡΠΈΠ½. ΠΠ²ΠΎΡ Π΄Π΅Π» Π³ΠΎ ΠΎΠΏΠΈΡΡΠ²Π° Π»ΠΎΠΊΠ°Π»Π½ΠΎΡΠΎ ΡΠΊΠ»Π°Π΄ΠΈΡΠ°ΡΠ΅ Π½Π° Envoy Thread (TLS) Π½Π° Π²ΠΈΡΠΎΠΊΠΎ Π½ΠΈΠ²ΠΎ. ΠΠΎ ΡΠ»Π΅Π΄Π½ΠΈΠΎΡ Π΄Π΅Π» ΡΠ΅ ΠΎΠΏΠΈΡΠ°ΠΌ ΠΊΠ°ΠΊΠΎ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ Π·Π° ΡΠΏΡΠ°Π²ΡΠ²Π°ΡΠ΅ ΡΠΎ ΠΊΠ»Π°ΡΡΠ΅Ρ.
ΠΠ°ΠΊΠΎ ΡΡΠΎ Π²Π΅ΡΠ΅ Π±Π΅ΡΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΎ, Π³Π»Π°Π²Π½Π°ΡΠ° Π½ΠΈΡΠΊΠ° ΡΠ΅ ΡΠΏΡΠ°Π²ΡΠ²Π° ΠΏΡΠ°ΠΊΡΠΈΡΠ½ΠΎ ΡΠΎ ΡΠΈΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡΠΈ Π½Π° ΡΠΏΡΠ°Π²ΡΠ²Π°ΡΠΊΠ°ΡΠ° ΠΈ ΠΊΠΎΠ½ΡΡΠΎΠ»Π½Π°ΡΠ° ΡΠ°ΠΌΠ½ΠΈΠ½Π° Π²ΠΎ ΠΏΡΠΎΡΠ΅ΡΠΎΡ Π½Π° ΠΡΠ°ΡΠ΅Π½ΠΈΠΊ. ΠΠΎΠ½ΡΡΠΎΠ»Π½Π°ΡΠ° ΡΠ°ΠΌΠ½ΠΈΠ½Π° ΠΎΠ²Π΄Π΅ Π΅ ΠΌΠ°Π»ΠΊΡ ΠΏΡΠ΅ΠΎΠΏΡΠΎΠ²Π°ΡΠ΅Π½Π°, Π½ΠΎ ΠΊΠΎΠ³Π° ΡΠ΅ Π³ΠΎ ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΡΠ΅ Π²ΠΎ ΡΠ°ΠΌΠΈΠΎΡ ΠΏΡΠΎΡΠ΅Ρ Π½Π° ΠΠ½Π²ΠΎΡ ΠΈ ΡΠ΅ Π³ΠΎ ΡΠΏΠΎΡΠ΅Π΄ΠΈΡΠ΅ ΡΠΎ ΠΏΡΠ΅ΠΏΡΠ°ΡΠ°ΡΠ΅ΡΠΎ ΡΡΠΎ Π³ΠΎ ΠΏΡΠ°Π²Π°Ρ ΡΠ°Π±ΠΎΡΠ½ΠΈΡΠ΅ Π½ΠΈΡΠΊΠΈ, ΠΈΠΌΠ° ΡΠΌΠΈΡΠ»Π°. ΠΠΏΡΡΠΎΡΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ Π΅ Π΄Π΅ΠΊΠ° ΠΏΡΠΎΡΠ΅ΡΠΎΡ Π½Π° Π³Π»Π°Π²Π½Π°ΡΠ° Π½ΠΈΡΠΊΠ° ΠΏΡΠ°Π²ΠΈ ΠΎΠ΄ΡΠ΅Π΄Π΅Π½Π° ΡΠ°Π±ΠΎΡΠ°, Π° ΠΏΠΎΡΠΎΠ° ΡΡΠ΅Π±Π° Π΄Π° ΡΠ° Π°ΠΆΡΡΠΈΡΠ° ΡΠ΅ΠΊΠΎΡΠ° ΡΠ°Π±ΠΎΡΠ½ΠΈΡΠΊΠ° Π½ΠΈΡΠΊΠ° ΡΠΏΠΎΡΠ΅Π΄ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΎΡ ΠΎΠ΄ ΡΠ°Π° ΡΠ°Π±ΠΎΡΠ°. Π²ΠΎ ΠΎΠ²ΠΎΡ ΡΠ»ΡΡΠ°Ρ, ΡΠ°Π±ΠΎΡΠ½ΠΈΡΠΊΠ°ΡΠ° Π½ΠΈΡΠΊΠ° Π½Π΅ ΡΡΠ΅Π±Π° Π΄Π° ΡΡΠ΅ΠΊΠ½Π΅ Π·Π°ΠΊΠ»ΡΡΡΠ²Π°ΡΠ΅ Π½Π° ΡΠ΅ΠΊΠΎΡ ΠΏΡΠΈΡΡΠ°ΠΏ.
Π‘ΠΈΡΡΠ΅ΠΌΠΎΡ TLS (Thread local storage) Π½Π° Envoy ΡΠ°Π±ΠΎΡΠΈ Π½Π° ΡΠ»Π΅Π΄Π½ΠΈΠΎΠ² Π½Π°ΡΠΈΠ½:
- ΠΠΎΠ΄ΠΎΡ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠΈ Π½Π° Π³Π»Π°Π²Π½Π°ΡΠ° Π½ΠΈΡΠΊΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΎΠ΄Π²ΠΎΠΈ ΡΠ»ΠΎΡ Π·Π° TLS Π·Π° ΡΠ΅Π»ΠΈΠΎΡ ΠΏΡΠΎΡΠ΅Ρ. ΠΠ°ΠΊΠΎ ΠΎΠ²Π° Π΅ Π°ΠΏΡΡΡΠ°Ρ ΠΈΡΠ°Π½ΠΎ, Π²ΠΎ ΠΏΡΠ°ΠΊΡΠ° ΡΠΎΠ° Π΅ ΠΈΠ½Π΄Π΅ΠΊΡ Π²ΠΎ Π²Π΅ΠΊΡΠΎΡ, ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡΠ²Π°ΡΡΠΈ O(1) ΠΏΡΠΈΡΡΠ°ΠΏ.
- ΠΠ»Π°Π²Π½Π°ΡΠ° Π½ΠΈΡΠΊΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»Π½ΠΈ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ Π²ΠΎ ΡΠ²ΠΎΡΠΎΡ ΡΠ»ΠΎΡ. ΠΠΎΠ³Π° ΠΎΠ²Π° Π΅ Π½Π°ΠΏΡΠ°Π²Π΅Π½ΠΎ, ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈΡΠ΅ ΡΠ΅ ΠΎΠ±ΡΠ°Π²ΡΠ²Π°Π°Ρ Π²ΠΎ ΡΠ΅ΠΊΠΎΡΠ° ΡΠ°Π±ΠΎΡΠ½ΠΈΡΠΊΠ° Π½ΠΈΡΠΊΠ° ΠΊΠ°ΠΊΠΎ Π½ΠΎΡΠΌΠ°Π»Π΅Π½ Π½Π°ΡΡΠ°Π½ Π½Π° ΡΠΈΠΊΠ»ΡΡΠΎΡ Π½Π° Π½Π°ΡΡΠ°Π½ΠΈ.
- Π Π°Π±ΠΎΡΠ½ΠΈΡΠΊΠΈΡΠ΅ Π½ΠΈΡΠΊΠΈ ΠΌΠΎΠΆΠ°Ρ Π΄Π° ΡΠΈΡΠ°Π°Ρ ΠΎΠ΄ Π½ΠΈΠ²Π½ΠΈΠΎΡ ΡΠ»ΠΎΡ Π·Π° TLS ΠΈ Π΄Π° Π³ΠΈ ΠΏΡΠ΅Π·Π΅ΠΌΠ°Ρ ΡΠΈΡΠ΅ Π»ΠΎΠΊΠ°Π»Π½ΠΈ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ΡΡΠΎ ΡΠ΅ Π΄ΠΎΡΡΠ°ΠΏΠ½ΠΈ ΡΠ°ΠΌΡ.
ΠΠ°ΠΊΠΎ Π΅ ΠΌΠ½ΠΎΠ³Ρ Π΅Π΄Π½ΠΎΡΡΠ°Π²Π½Π° ΠΈ Π½Π΅Π²Π΅ΡΠΎΡΠ°ΡΠ½ΠΎ ΠΌΠΎΡΠ½Π° ΠΏΠ°ΡΠ°Π΄ΠΈΠ³ΠΌΠ°, ΡΠ°Π° Π΅ ΠΌΠ½ΠΎΠ³Ρ ΡΠ»ΠΈΡΠ½Π° Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΎΡ Π½Π° Π±Π»ΠΎΠΊΠΈΡΠ°ΡΠ΅ RCU (Read-Copy-Update). ΠΠΎ ΡΡΡΡΠΈΠ½Π°, ΡΠ°Π±ΠΎΡΠ½ΠΈΡΠ΅ Π½ΠΈΡΠΊΠΈ Π½ΠΈΠΊΠΎΠ³Π°Ρ Π½Π΅ Π³Π»Π΅Π΄Π°Π°Ρ Π½ΠΈΠΊΠ°ΠΊΠ²ΠΈ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ Π²ΠΎ ΡΠ»ΠΎΡΠΎΠ²ΠΈ TLS Π΄ΠΎΠ΄Π΅ΠΊΠ° ΡΠ°Π±ΠΎΡΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΠ°. ΠΡΠΎΠΌΠ΅Π½Π°ΡΠ° ΡΠ΅ ΡΠ»ΡΡΡΠ²Π° ΡΠ°ΠΌΠΎ Π²ΠΎ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΎΡ Π½Π° ΠΎΠ΄ΠΌΠΎΡ ΠΏΠΎΠΌΠ΅ΡΡ ΡΠ°Π±ΠΎΡΠ½ΠΈΡΠ΅ Π½Π°ΡΡΠ°Π½ΠΈ.
ΠΡΠ΅ΡΡΡΠ°Π²Π½ΠΈΠΊΠΎΡ Π³ΠΎ ΠΊΠΎΡΠΈΡΡΠΈ ΠΎΠ²Π° Π½Π° Π΄Π²Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π½Π°ΡΠΈΠ½ΠΈ:
- Π‘ΠΎ ΡΠΊΠ»Π°Π΄ΠΈΡΠ°ΡΠ΅ Π½Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ Π½Π° ΡΠ΅ΠΊΠΎΡΠ° ΡΠ°Π±ΠΎΡΠ½ΠΈΡΠΊΠ° Π½ΠΈΡΠΊΠ°, Π΄ΠΎ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈΡΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΡΠΈΡΡΠ°ΠΏΠΈ Π±Π΅Π· Π½ΠΈΠΊΠ°ΠΊΠ²ΠΎ Π±Π»ΠΎΠΊΠΈΡΠ°ΡΠ΅.
- Π‘ΠΎ ΠΎΠ΄ΡΠΆΡΠ²Π°ΡΠ΅ Π½Π° ΡΠΏΠΎΠ΄Π΅Π»Π΅Π½ ΠΏΠΎΠΊΠ°ΠΆΡΠ²Π°Ρ ΠΊΠΎΠ½ Π³Π»ΠΎΠ±Π°Π»Π½ΠΈΡΠ΅ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ Π²ΠΎ ΡΠ΅ΠΆΠΈΠΌ ΡΠ°ΠΌΠΎ Π·Π° ΡΠΈΡΠ°ΡΠ΅ Π½Π° ΡΠ΅ΠΊΠΎΡΠ° ΡΠ°Π±ΠΎΡΠ½ΠΈΡΠΊΠ° Π½ΠΈΡΠΊΠ°. Π’Π°ΠΊΠ°, ΡΠ΅ΠΊΠΎΡΠ° ΡΠ°Π±ΠΎΡΠ½ΠΈΡΠΊΠ° Π½ΠΈΡΠΊΠ° ΠΈΠΌΠ° Π±ΡΠΎΡ Π½Π° ΡΠ΅ΡΠ΅ΡΠ΅Π½ΡΠΈ Π·Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ΡΡΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π½Π°ΠΌΠ°Π»ΠΈ Π΄ΠΎΠ΄Π΅ΠΊΠ° ΡΠ°Π±ΠΎΡΠ°ΡΠ° ΡΠ°Π±ΠΎΡΠΈ. Π‘Π°ΠΌΠΎ ΠΊΠΎΠ³Π° ΡΠΈΡΠ΅ ΡΠ°Π±ΠΎΡΠ½ΠΈΡΠΈ ΡΠ΅ ΡΠ΅ ΡΠΌΠΈΡΠ°Ρ ΠΈ ΡΠ΅ ΠΏΡΠΈΠΊΠ°ΡΠ°Ρ Π½ΠΎΠ²ΠΈ ΡΠΏΠΎΠ΄Π΅Π»Π΅Π½ΠΈ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ, ΡΡΠ°ΡΠΈΡΠ΅ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ΡΠ΅ Π±ΠΈΠ΄Π°Ρ ΡΠ½ΠΈΡΡΠ΅Π½ΠΈ. ΠΠ²Π° Π΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½ΠΎ ΡΠΎ RCU.
ΠΠΈΠ²ΠΎ Π·Π° Π°ΠΆΡΡΠΈΡΠ°ΡΠ΅ Π½Π° ΠΊΠ»Π°ΡΡΠ΅ΡΠΎΡ
ΠΠΎ ΠΎΠ²ΠΎΡ Π΄Π΅Π», ΡΠ΅ ΠΎΠΏΠΈΡΠ°ΠΌ ΠΊΠ°ΠΊΠΎ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ TLS (Π»ΠΎΠΊΠ°Π»Π½ΠΎ ΡΠΊΠ»Π°Π΄ΠΈΡΠ°ΡΠ΅ Π½Π° Π½ΠΈΡΠΊΠΈ) Π·Π° ΡΠΏΡΠ°Π²ΡΠ²Π°ΡΠ΅ ΡΠΎ ΠΊΠ»Π°ΡΡΠ΅Ρ. Π£ΠΏΡΠ°Π²ΡΠ²Π°ΡΠ΅ΡΠΎ ΡΠΎ ΠΊΠ»Π°ΡΡΠ΅ΡΠΎΡ Π²ΠΊΠ»ΡΡΡΠ²Π° xDS API ΠΈ/ΠΈΠ»ΠΈ DNS ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°, ΠΊΠ°ΠΊΠΎ ΠΈ Π·Π΄ΡΠ°Π²ΡΡΠ²Π΅Π½Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ°.
Π£ΠΏΡΠ°Π²ΡΠ²Π°ΡΠ΅ΡΠΎ ΡΠΎ ΠΏΡΠΎΡΠΎΠΊΠΎΡ Π½Π° ΠΊΠ»Π°ΡΡΠ΅ΡΠΎΡ Π³ΠΈ Π²ΠΊΠ»ΡΡΡΠ²Π° ΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ ΠΈ ΡΠ΅ΠΊΠΎΡΠΈ:
- Π£ΠΏΡΠ°Π²ΡΠ²Π°ΡΠΎΡ ΡΠΎ ΠΊΠ»Π°ΡΡΠ΅ΡΠΈ Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° Π²ΠΎ ΡΠ°ΠΌΠΊΠΈΡΠ΅ Π½Π° Envoy ΡΡΠΎ ΡΠΏΡΠ°Π²ΡΠ²Π° ΡΠΎ ΡΠΈΡΠ΅ ΠΏΠΎΠ·Π½Π°ΡΠΈ ΠΊΠ»Π°ΡΡΠ΅ΡΠΈ Π½Π°Π³ΠΎΡΠ΅, API-ΡΠΎ Π½Π° ΡΡΠ»ΡΠ³Π°ΡΠ° Π·Π° ΠΎΡΠΊΡΠΈΠ²Π°ΡΠ΅ ΠΊΠ»Π°ΡΡΠ΅ΡΠΈ (CDS), API-ΡΠΎ Π½Π° ΡΡΠ»ΡΠ³Π°ΡΠ° Π·Π° ΡΠ°ΡΠ½ΠΎ ΠΎΡΠΊΡΠΈΠ²Π°ΡΠ΅ (SDS) ΠΈ ΡΡΠ»ΡΠ³Π°ΡΠ° Π·Π° ΠΎΡΠΊΡΠΈΠ²Π°ΡΠ΅ ΠΊΡΠ°ΡΠ½Π° ΡΠΎΡΠΊΠ° (EDS), DNS ΠΈ Π°ΠΊΡΠΈΠ²Π½ΠΈΡΠ΅ Π½Π°Π΄Π²ΠΎΡΠ΅ΡΠ½ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π½Π° Π·Π΄ΡΠ°Π²ΡΠ΅ΡΠΎ. Π’ΠΎΡ Π΅ ΠΎΠ΄Π³ΠΎΠ²ΠΎΡΠ΅Π½ Π·Π° ΡΠΎΠ·Π΄Π°Π²Π°ΡΠ΅ βΠ΅Π²Π΅Π½ΡΡΠ°Π»Π½ΠΎ ΠΊΠΎΠ½Π·ΠΈΡΡΠ΅Π½ΡΠ΅Π½β ΠΏΡΠΈΠΊΠ°Π· Π½Π° ΡΠ΅ΠΊΠΎΠ΅ Π³ΠΎΡΠ½ΠΎ ΠΊΠ»Π°ΡΡΠ΅Ρ, ΠΊΠΎΠ΅ Π³ΠΈ Π²ΠΊΠ»ΡΡΡΠ²Π° ΠΎΡΠΊΡΠΈΠ΅Π½ΠΈΡΠ΅ Π΄ΠΎΠΌΠ°ΡΠΈΠ½ΠΈ, ΠΊΠ°ΠΊΠΎ ΠΈ Π·Π΄ΡΠ°Π²ΡΡΠ²Π΅Π½Π°ΡΠ° ΡΠΎΡΡΠΎΡΠ±Π°.
- ΠΠ΄ΡΠ°Π²ΡΡΠ²Π΅Π½ΠΈΠΎΡ ΠΏΡΠΎΠ²Π΅ΡΡΠ²Π°Ρ Π²ΡΡΠΈ Π°ΠΊΡΠΈΠ²Π½Π° Π·Π΄ΡΠ°Π²ΡΡΠ²Π΅Π½Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΠΈ Π³ΠΈ ΠΈΠ·Π²Π΅ΡΡΡΠ²Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ Π½Π° Π·Π΄ΡΠ°Π²ΡΡΠ²Π΅Π½Π°ΡΠ° ΡΠΎΡΡΠΎΡΠ±Π° Π΄ΠΎ ΠΌΠ΅Π½Π°ΡΠ΅ΡΠΎΡ Π½Π° ΠΊΠ»Π°ΡΡΠ΅ΡΠΎΡ.
- CDS (Cluster Discovery Service) / SDS (Secret Discovery Service) / EDS (Endpoint Discovery Service) / DNS ΡΠ΅ Π²ΡΡΠ°Ρ Π·Π° Π΄Π° ΡΠ΅ ΠΎΠ΄ΡΠ΅Π΄ΠΈ ΡΠ»Π΅Π½ΡΡΠ²ΠΎΡΠΎ Π²ΠΎ ΠΊΠ»Π°ΡΡΠ΅ΡΠΎΡ. ΠΡΠΎΠΌΠ΅Π½Π°ΡΠ° Π½Π° ΡΠΎΡΡΠΎΡΠ±Π°ΡΠ° ΡΠ΅ Π²ΡΠ°ΡΠ° Π½Π° ΠΌΠ΅Π½Π°ΡΠ΅ΡΠΎΡ Π½Π° ΠΊΠ»Π°ΡΡΠ΅ΡΠΎΡ.
- Π‘Π΅ΠΊΠΎΡΠ° ΡΠ°Π±ΠΎΡΠ½ΠΈΡΠΊΠ° Π½ΠΈΡΠΊΠ° ΠΊΠΎΠ½ΡΠΈΠ½ΡΠΈΡΠ°Π½ΠΎ ΠΈΠ·Π²ΡΡΡΠ²Π° ΡΠΈΠΊΠ»ΡΡ Π½Π° Π½Π°ΡΡΠ°Π½ΠΈ.
- ΠΠΎΠ³Π° ΠΌΠ΅Π½Π°ΡΠ΅ΡΠΎΡ Π½Π° ΠΊΠ»Π°ΡΡΠ΅ΡΠΎΡ ΡΠ΅ ΡΡΠ²ΡΠ΄ΠΈ Π΄Π΅ΠΊΠ° ΡΠΎΡΡΠΎΡΠ±Π°ΡΠ° Π½Π° ΠΊΠ»Π°ΡΡΠ΅ΡΠΎΡ Π΅ ΠΏΡΠΎΠΌΠ΅Π½Π΅ΡΠ°, ΡΠΎΡ ΡΠΎΠ·Π΄Π°Π²Π° Π½ΠΎΠ²Π° ΡΠ»ΠΈΠΊΠ° ΡΠ°ΠΌΠΎ Π·Π° ΡΠΈΡΠ°ΡΠ΅ Π½Π° ΡΠΎΡΡΠΎΡΠ±Π°ΡΠ° Π½Π° ΠΊΠ»Π°ΡΡΠ΅ΡΠΎΡ ΠΈ ΡΠ° ΠΈΡΠΏΡΠ°ΡΠ° Π΄ΠΎ ΡΠ΅ΠΊΠΎΡΠ° ΡΠ°Π±ΠΎΡΠ½ΠΈΡΠΊΠ° Π½ΠΈΡΠΊΠ°.
- ΠΠΎ ΡΠ΅ΠΊΠΎΡ Π½Π° ΡΠ»Π΅Π΄Π½ΠΈΠΎΡ ΡΠΈΠ²ΠΎΠΊ ΠΏΠ΅ΡΠΈΠΎΠ΄, ΡΠ°Π±ΠΎΡΠ½ΠΈΡΠΊΠ°ΡΠ° Π½ΠΈΡΠΊΠ° ΡΠ΅ ΡΠ° Π°ΠΆΡΡΠΈΡΠ° ΡΠ½ΠΈΠΌΠΊΠ°ΡΠ° Π²ΠΎ Π΄ΠΎΠ΄Π΅Π»Π΅Π½ΠΈΠΎΡ ΡΠ»ΠΎΡ Π·Π° TLS.
- ΠΠ° Π²ΡΠ΅ΠΌΠ΅ Π½Π° I/O Π½Π°ΡΡΠ°Π½ ΡΡΠΎ ΡΡΠ΅Π±Π° Π΄Π° Π³ΠΎ ΠΎΠ΄ΡΠ΅Π΄ΠΈ Π±Π°Π»Π°Π½ΡΠΎΡ Π½Π° Π΄ΠΎΠΌΠ°ΡΠΈΠ½ΠΎΡ Π·Π° Π²ΡΠΈΡΡΠ²Π°ΡΠ΅, Π±Π°Π»Π°Π½ΡΠ΅ΡΠΎΡ Π½Π° ΠΎΠΏΡΠΎΠ²Π°ΡΡΠ²Π°ΡΠ΅ ΡΠ΅ ΠΏΠΎΠ±Π°ΡΠ° ΡΠ»ΠΎΡ TLS (Thread local storage) Π·Π° Π΄Π° Π΄ΠΎΠ±ΠΈΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π·Π° Π΄ΠΎΠΌΠ°ΡΠΈΠ½ΠΎΡ. ΠΠ²Π° Π½Π΅ Π±Π°ΡΠ° Π±ΡΠ°Π²ΠΈ. ΠΠ°Π±Π΅Π»Π΅ΠΆΠ΅ΡΠ΅ ΠΈΡΡΠΎ ΡΠ°ΠΊΠ° Π΄Π΅ΠΊΠ° TLS ΠΈΡΡΠΎ ΡΠ°ΠΊΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° Π°ΠΊΡΠΈΠ²ΠΈΡΠ° Π½Π°ΡΡΠ°Π½ΠΈ Π·Π° Π°ΠΆΡΡΠΈΡΠ°ΡΠ΅, ΡΠ°ΠΊΠ° ΡΡΠΎ Π±Π°Π»Π°Π½ΡΠΈΡΠ°ΡΠΈΡΠ΅ Π½Π° ΠΎΠΏΡΠΎΠ²Π°ΡΡΠ²Π°ΡΠ΅ ΠΈ Π΄ΡΡΠ³ΠΈΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ ΠΌΠΎΠΆΠ°Ρ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ Π΄Π° ΠΏΡΠ΅ΡΠΌΠ΅ΡΡΠ²Π°Π°Ρ ΠΊΠ΅ΡΠΎΠ²ΠΈ, ΡΡΡΡΠΊΡΡΡΠΈ Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ΠΈΡΠ½. ΠΠ²Π° Π΅ Π½Π°Π΄Π²ΠΎΡ ΠΎΠ΄ ΠΎΠΏΡΠ΅Π³ΠΎΡ Π½Π° ΠΎΠ²ΠΎΡ ΠΏΠΎΡΡ, Π½ΠΎ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ Π½Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΌΠ΅ΡΡΠ° Π²ΠΎ ΠΊΠΎΠ΄ΠΎΡ.
ΠΠΎΡΠΈΡΡΠ΅ΡΡΠΈ ΡΠ° Π³ΠΎΡΠ΅Π½Π°Π²Π΅Π΄Π΅Π½Π°ΡΠ° ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ°, Envoy ΠΌΠΎΠΆΠ΅ Π΄Π° Π³ΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΈ ΡΠ΅ΠΊΠΎΠ΅ Π±Π°ΡΠ°ΡΠ΅ Π±Π΅Π· Π½ΠΈΠΊΠ°ΠΊΠ²ΠΎ Π±Π»ΠΎΠΊΠΈΡΠ°ΡΠ΅ (ΠΎΡΠ²Π΅Π½ ΠΊΠ°ΠΊΠΎ ΡΡΠΎ Π΅ ΠΎΠΏΠΈΡΠ°Π½ΠΎ ΠΏΡΠ΅ΡΡ ΠΎΠ΄Π½ΠΎ). ΠΠ°ΡΡΡΠ°Π½Π° ΠΎΠ΄ ΡΠ»ΠΎΠΆΠ΅Π½ΠΎΡΡΠ° Π½Π° ΡΠ°ΠΌΠΈΠΎΡ TLS ΠΊΠΎΠ΄, ΠΏΠΎΠ³ΠΎΠ»Π΅ΠΌΠΈΠΎΡ Π΄Π΅Π» ΠΎΠ΄ ΠΊΠΎΠ΄ΠΎΡ Π½Π΅ ΡΡΠ΅Π±Π° Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ ΠΊΠ°ΠΊΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠ° ΠΌΡΠ»ΡΠΈΠ½ΠΈΡΠΊΠ°ΡΠ° ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π½Π°ΠΏΠΈΡΠ΅ ΡΠΎ Π΅Π΄Π½Π° Π½ΠΈΡΠΊΠ°. ΠΠ²Π° Π³ΠΎ ΠΎΠ»Π΅ΡΠ½ΡΠ²Π° ΠΏΠΈΡΡΠ²Π°ΡΠ΅ΡΠΎ Π½Π° ΠΏΠΎΠ³ΠΎΠ»Π΅ΠΌΠΈΠΎΡ Π΄Π΅Π» ΠΎΠ΄ ΠΊΠΎΠ΄ΠΎΡ, ΠΏΠΎΠΊΡΠ°Ρ ΡΡΠΏΠ΅ΡΠΈΠΎΡΠ½ΠΈΡΠ΅ ΠΏΠ΅ΡΡΠΎΡΠΌΠ°Π½ΡΠΈ.
ΠΡΡΠ³ΠΈ ΠΏΠΎΡΡΠΈΡΡΠ΅ΠΌΠΈ ΡΡΠΎ ΠΊΠΎΡΠΈΡΡΠ°Ρ TLS
TLS (Thread local storage) ΠΈ RCU (Read Copy Update) ΡΠ΅ ΡΠΈΡΠΎΠΊΠΎ ΠΊΠΎΡΠΈΡΡΠ΅Π½ΠΈ Π²ΠΎ Envoy.
ΠΡΠΈΠΌΠ΅ΡΠΈ Π·Π° ΡΠΏΠΎΡΡΠ΅Π±Π°:
- ΠΠ΅Ρ Π°Π½ΠΈΠ·Π°ΠΌ Π·Π° ΠΏΡΠΎΠΌΠ΅Π½Π° Π½Π° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡΠ° Π·Π° Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΈΠ·Π²ΡΡΡΠ²Π°ΡΠ΅ΡΠΎ: Π’Π΅ΠΊΠΎΠ²Π½Π°ΡΠ° Π»ΠΈΡΡΠ° Π½Π° ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½Π° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡ ΡΠ΅ ΠΏΡΠ΅ΡΠΌΠ΅ΡΡΠ²Π° Π²ΠΎ Π³Π»Π°Π²Π½Π°ΡΠ° Π½ΠΈΡΠΊΠ°. Π‘Π΅ΠΊΠΎΡΠ° ΡΠ°Π±ΠΎΡΠ½ΠΈΡΠΊΠ° Π½ΠΈΡΠΊΠ° ΠΏΠΎΡΠΎΠ° Π΄ΠΎΠ±ΠΈΠ²Π° ΡΠ»ΠΈΠΊΠ° ΡΠ°ΠΌΠΎ Π·Π° ΡΠΈΡΠ°ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ RCU ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΠ°.
- ΠΠ°ΠΌΠ΅Π½Π° Π½Π° ΡΠ°Π±Π΅Π»ΠΈΡΠ΅ Π½Π° ΠΌΠ°ΡΡΡΡΡΠ°ΡΠ°: ΠΠ° ΡΠ°Π±Π΅Π»ΠΈΡΠ΅ Π·Π° ΠΌΠ°ΡΡΡΡΡΠΈ ΠΎΠ±Π΅Π·Π±Π΅Π΄Π΅Π½ΠΈ ΠΎΠ΄ RDS (Π£ΡΠ»ΡΠ³Π° Π·Π° ΠΎΡΠΊΡΠΈΠ²Π°ΡΠ΅ ΠΌΠ°ΡΡΡΡΡΠΈ), ΡΠ°Π±Π΅Π»ΠΈΡΠ΅ Π·Π° ΠΌΠ°ΡΡΡΡΡΠΈ ΡΠ΅ ΠΊΡΠ΅ΠΈΡΠ°Π°Ρ Π½Π° Π³Π»Π°Π²Π½Π°ΡΠ° Π½ΠΈΡΠΊΠ°. Π‘Π½ΠΈΠΌΠΊΠ°ΡΠ° ΡΠ°ΠΌΠΎ Π·Π° ΡΠΈΡΠ°ΡΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎ ΡΠ΅ Π±ΠΈΠ΄Π΅ ΠΎΠ±Π΅Π·Π±Π΅Π΄Π΅Π½Π° Π·Π° ΡΠ΅ΠΊΠΎΡΠ° ΡΠ°Π±ΠΎΡΠ½ΠΈΡΠΊΠ° Π½ΠΈΡΠΊΠ° ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ RCU (Read Copy Update) ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΠ°. ΠΠ²Π° Π³ΠΎ ΠΏΡΠ°Π²ΠΈ ΠΌΠ΅Π½ΡΠ²Π°ΡΠ΅ΡΠΎ Π½Π° ΡΠ°Π±Π΅Π»ΠΈΡΠ΅ Π½Π° ΡΡΡΠΈ Π°ΡΠΎΠΌΡΠΊΠΈ Π΅ΡΠΈΠΊΠ°ΡΠ½ΠΈ.
- ΠΠ΅ΡΠΈΡΠ°ΡΠ΅ Π½Π° Π·Π°Π³Π»Π°Π²ΠΈΠ΅ΡΠΎ Π½Π° HTTP: ΠΠ°ΠΊΠΎ ΡΡΠΎ ΡΠ΅ ΠΈΡΠΏΠΎΡΡΠ°Π²ΡΠ²Π°, ΠΏΡΠ΅ΡΠΌΠ΅ΡΡΠ²Π°ΡΠ΅ΡΠΎ Π½Π° Π·Π°Π³Π»Π°Π²ΠΈΠ΅ΡΠΎ Π½Π° HTTP Π·Π° ΡΠ΅ΠΊΠΎΠ΅ Π±Π°ΡΠ°ΡΠ΅ (Π΄ΠΎΠ΄Π΅ΠΊΠ° ΡΠ°Π±ΠΎΡΠΈ ~25K+ RPS ΠΏΠΎ ΡΠ°Π΄ΡΠΎ) Π΅ ΠΏΡΠΈΠ»ΠΈΡΠ½ΠΎ ΡΠΊΠ°ΠΏΠΎ. Envoy ΡΠ΅Π½ΡΡΠ°Π»Π½ΠΎ Π³ΠΎ ΠΏΡΠ΅ΡΠΌΠ΅ΡΡΠ²Π° Π·Π°Π³Π»Π°Π²ΠΈΠ΅ΡΠΎ ΠΏΡΠΈΠ±Π»ΠΈΠΆΠ½ΠΎ Π½Π° ΡΠ΅ΠΊΠΎΠΈ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π° ΡΠ΅ΠΊΡΠ½Π΄Π° ΠΈ Π³ΠΎ ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡΠ²Π° Π½Π° ΡΠ΅ΠΊΠΎΡ ΡΠ°Π±ΠΎΡΠ½ΠΈΠΊ ΠΏΡΠ΅ΠΊΡ TLS ΠΈ RCU.
ΠΠΌΠ° ΠΈ Π΄ΡΡΠ³ΠΈ ΡΠ»ΡΡΠ°ΠΈ, Π½ΠΎ ΠΏΡΠ΅ΡΡ ΠΎΠ΄Π½ΠΈΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠΈ ΡΡΠ΅Π±Π° Π΄Π° Π΄Π°Π΄Π°Ρ Π΄ΠΎΠ±ΡΠΎ ΡΠ°Π·Π±ΠΈΡΠ°ΡΠ΅ Π·Π° ΡΡΠΎ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ TLS.
ΠΠΎΠ·Π½Π°ΡΠΈ ΡΡΠ°ΠΏΠΈΡΠΈ Π½Π° ΠΏΠ΅ΡΡΠΎΡΠΌΠ°Π½ΡΠΈΡΠ΅
ΠΠΎΠ΄Π΅ΠΊΠ° Envoy ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠ° Π΄ΠΎΡΡΠ° Π΄ΠΎΠ±ΡΠΎ Π²ΠΎ ΡΠ΅Π»ΠΈΠ½Π°, ΠΈΠΌΠ° Π½Π΅ΠΊΠΎΠ»ΠΊΡ Π·Π½Π°ΡΠ°ΡΠ½ΠΈ ΠΎΠ±Π»Π°ΡΡΠΈ ΠΊΠΎΠΈ Π±Π°ΡΠ°Π°Ρ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΊΠΎΠ³Π° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ ΡΠΎ ΠΌΠ½ΠΎΠ³Ρ Π²ΠΈΡΠΎΠΊΠ° ΠΈΡΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½ΠΎΡΡ ΠΈ ΠΏΡΠΎΠΏΡΡΠ½ΠΎΡΡ:
- ΠΠ°ΠΊΠΎ ΡΡΠΎ Π΅ ΠΎΠΏΠΈΡΠ°Π½ΠΎ Π²ΠΎ ΠΎΠ²ΠΎΡ Π½Π°ΠΏΠΈΡ, ΠΌΠΎΠΌΠ΅Π½ΡΠ°Π»Π½ΠΎ ΡΠΈΡΠ΅ ΡΠ°Π±ΠΎΡΠ½ΠΈ Π½ΠΈΡΠΊΠΈ Π΄ΠΎΠ±ΠΈΠ²Π°Π°Ρ Π·Π°ΠΊΠ»ΡΡΡΠ²Π°ΡΠ΅ ΠΊΠΎΠ³Π° ΠΏΠΈΡΡΠ²Π°Π°Ρ Π²ΠΎ ΠΌΠ΅ΠΌΠΎΡΠΈΡΠΊΠΈΠΎΡ Π±Π°ΡΠ΅Ρ Π·Π° Π΄Π½Π΅Π²Π½ΠΈΠΊ Π·Π° ΠΏΡΠΈΡΡΠ°ΠΏ. ΠΡΠΈ Π²ΠΈΡΠΎΠΊΠ° ΠΊΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠ½ΠΎΡΡ ΠΈ Π²ΠΈΡΠΎΠΊΠ° ΠΏΡΠΎΠΏΡΡΠ½ΠΎΡΡ, ΡΠ΅ ΡΡΠ΅Π±Π° Π΄Π° Π³ΠΈ Π³ΡΡΠΏΠΈΡΠ°ΡΠ΅ Π΄Π½Π΅Π²Π½ΠΈΡΠΈΡΠ΅ Π·Π° ΠΏΡΠΈΡΡΠ°ΠΏ Π·Π° ΡΠ΅ΠΊΠΎΡΠ° ΡΠ°Π±ΠΎΡΠ½ΠΈΡΠΊΠ° Π½ΠΈΡΠΊΠ° Π½Π° ΡΠΌΠ΅ΡΠΊΠ° Π½Π° Π½Π΅Π½Π°ΡΠ°ΡΠ°Π½Π° ΠΈΡΠΏΠΎΡΠ°ΠΊΠ° ΠΏΡΠΈ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΠ΅ Π²ΠΎ ΠΊΠΎΠ½Π΅ΡΠ½Π°ΡΠ° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°. ΠΠ»ΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΠΎ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΊΡΠ΅ΠΈΡΠ°ΡΠ΅ ΠΏΠΎΡΠ΅Π±Π΅Π½ Π΄Π½Π΅Π²Π½ΠΈΠΊ Π·Π° ΠΏΡΠΈΡΡΠ°ΠΏ Π·Π° ΡΠ΅ΠΊΠΎΡΠ° ΡΠ°Π±ΠΎΡΠ½ΠΈΡΠΊΠ° Π½ΠΈΡΠΊΠ°.
- ΠΠ°ΠΊΠΎ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠΈΡΠ΅ ΡΠ΅ Π²ΠΈΡΠΎΠΊΠΎ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°Π½ΠΈ, ΠΏΡΠΈ ΠΌΠ½ΠΎΠ³Ρ Π²ΠΈΡΠΎΠΊΠ° ΠΈΡΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½ΠΎΡΡ ΠΈ ΠΏΡΠΎΠΏΡΡΠ½Π°ΡΠ° ΠΌΠΎΡ, Π½Π°ΡΠ²Π΅ΡΠΎΡΠ°ΡΠ½ΠΎ, ΡΠ΅ ΠΈΠΌΠ° Π°ΡΠΎΠΌΡΠΊΠ° ΡΠ°ΡΠΏΡΠ°Π²Π° Π·Π° ΠΏΠΎΠ΅Π΄ΠΈΠ½Π΅ΡΠ½ΠΈ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠΈ. Π Π΅ΡΠ΅Π½ΠΈΠ΅ΡΠΎ Π·Π° ΠΎΠ²ΠΎΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Π΅ Π±ΡΠΎΡΠ°ΡΠΈ ΠΏΠΎ ΡΠ°Π±ΠΎΡΠ½ΠΈΡΠΊΠ° Π½ΠΈΡΠΊΠ° ΡΠΎ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ½ΠΎ ΡΠ΅ΡΠ΅ΡΠΈΡΠ°ΡΠ΅ Π½Π° ΡΠ΅Π½ΡΡΠ°Π»Π½ΠΈΡΠ΅ Π±ΡΠΎΡΠ°ΡΠΈ. ΠΠ° ΠΎΠ²Π° ΡΠ΅ ΡΠ΅ Π΄ΠΈΡΠΊΡΡΠΈΡΠ° Π²ΠΎ Π½Π°ΡΠ΅Π΄Π½ΠΈΠΎΡ ΠΏΠΎΡΡ.
- Π‘Π΅Π³Π°ΡΠ½Π°ΡΠ° Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ° Π½Π΅ΠΌΠ° Π΄Π° ΡΠ°Π±ΠΎΡΠΈ Π΄ΠΎΠ±ΡΠΎ Π°ΠΊΠΎ Envoy ΡΠ΅ ΡΠ°ΡΠΏΠΎΡΠ΅Π΄ΠΈ Π²ΠΎ ΡΡΠ΅Π½Π°ΡΠΈΠΎ ΠΊΠ°Π΄Π΅ ΡΡΠΎ ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³Ρ ΠΌΠ°Π»ΠΊΡ Π²ΡΡΠΊΠΈ ΠΊΠΎΠΈ Π±Π°ΡΠ°Π°Ρ Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΈ ΡΠ΅ΡΡΡΡΠΈ Π·Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°. ΠΠ΅ ΠΏΠΎΡΡΠΎΠΈ Π³Π°ΡΠ°Π½ΡΠΈΡΠ° Π΄Π΅ΠΊΠ° Π²ΡΡΠΊΠΈΡΠ΅ ΡΠ΅ Π±ΠΈΠ΄Π°Ρ ΡΠ°ΠΌΠ½ΠΎΠΌΠ΅ΡΠ½ΠΎ ΡΠ°ΡΠΏΠΎΡΠ΅Π΄Π΅Π½ΠΈ ΠΌΠ΅ΡΡ ΡΠ°Π±ΠΎΡΠ½ΠΈΡΠ΅ Π½ΠΈΡΠΊΠΈ. ΠΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΡΠ΅ΡΠΈ ΡΠΎ ΡΠΏΡΠΎΠ²Π΅Π΄ΡΠ²Π°ΡΠ΅ Π½Π° Π±Π°Π»Π°Π½ΡΠΈΡΠ°ΡΠ΅ Π½Π° ΡΠ°Π±ΠΎΡΠ½ΠΈΡΠ΅ Π²ΡΡΠΊΠΈ, ΡΡΠΎ ΡΠ΅ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠΈ ΡΠ°Π·ΠΌΠ΅Π½Π° Π½Π° Π²ΡΡΠΊΠΈ ΠΏΠΎΠΌΠ΅ΡΡ ΡΠ°Π±ΠΎΡΠ½ΠΈΡΠ΅ Π½ΠΈΡΠΊΠΈ.
ΠΠ°ΠΊΠ»ΡΡΠΎΠΊ
ΠΠΎΠ΄Π΅Π»ΠΎΡ Π½Π° Π½ΠΈΡΠΊΠΈ Π½Π° Envoy Π΅ Π΄ΠΈΠ·Π°ΡΠ½ΠΈΡΠ°Π½ Π΄Π° ΠΎΠ±Π΅Π·Π±Π΅Π΄ΠΈ Π»Π΅ΡΠ½ΠΎΡΠΈΡΠ° Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°ΡΠ΅ ΠΈ ΠΌΠ°ΡΠΎΠ²Π΅Π½ ΠΏΠ°ΡΠ°Π»Π΅Π»ΠΈΠ·Π°ΠΌ Π½Π° ΡΠΌΠ΅ΡΠΊΠ° Π½Π° ΠΏΠΎΡΠ΅Π½ΡΠΈΡΠ°Π»Π½ΠΎ Π½Π΅ΠΏΠΎΡΡΠ΅Π±Π½Π°ΡΠ° ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ° ΠΈ Π²ΡΡΠΊΠΈ, Π΄ΠΎΠΊΠΎΠ»ΠΊΡ Π½Π΅ ΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½ΠΈ. ΠΠ²ΠΎΡ ΠΌΠΎΠ΄Π΅Π» ΠΌΡ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡΠ²Π° Π΄Π° ΡΠ°Π±ΠΎΡΠΈ ΠΌΠ½ΠΎΠ³Ρ Π΄ΠΎΠ±ΡΠΎ ΠΏΡΠΈ ΠΌΠ½ΠΎΠ³Ρ Π²ΠΈΡΠΎΠΊ Π±ΡΠΎΡ Π½Π° Π½ΠΈΡΠΊΠΈ ΠΈ ΠΏΡΠΎΠΏΡΡΠ½Π°ΡΠ° ΠΌΠΎΡ.
ΠΠ°ΠΊΠΎ ΡΡΠΎ Π½Π°ΠΊΡΠ°ΡΠΊΠΎ ΡΠΏΠΎΠΌΠ½Π°Π² Π½Π° Π’Π²ΠΈΡΠ΅Ρ, Π΄ΠΈΠ·Π°ΡΠ½ΠΎΡ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ°Π±ΠΎΡΠΈ ΠΈ Π½Π° ΠΌΡΠ΅ΠΆΠ΅Π½ ΡΡΠ΅ΠΊ ΡΠΎ ΡΠ΅Π»ΠΎΡΠ΅Π½ ΠΊΠΎΡΠΈΡΠ½ΠΈΡΠΊΠΈ ΡΠ΅ΠΆΠΈΠΌ, ΠΊΠ°ΠΊΠΎ ΡΡΠΎ Π΅ DPDK (ΠΠΎΠΌΠΏΠ»Π΅Ρ Π·Π° ΡΠ°Π·Π²ΠΎΡ Π½Π° ΡΠ°ΠΌΠ½ΠΈΠ½Π° Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ), ΡΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅Π·ΡΠ»ΡΠΈΡΠ° ΡΠΎ ΠΊΠΎΠ½Π²Π΅Π½ΡΠΈΠΎΠ½Π°Π»Π½ΠΈ ΡΠ΅ΡΠ²Π΅ΡΠΈ ΠΊΠΎΠΈ ΡΠ°ΠΊΡΠ²Π°Π°Ρ ΡΠΎ ΠΌΠΈΠ»ΠΈΠΎΠ½ΠΈ Π±Π°ΡΠ°ΡΠ° Π²ΠΎ ΡΠ΅ΠΊΡΠ½Π΄Π° ΡΠΎ ΡΠ΅Π»ΠΎΡΠ½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° 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