ΠΠ΅ΡΠ΅Π²ΠΎΠ΄ ΡΡΠ°ΡΡΠΈ:
ΠΠ°Π½Π½Π°Ρ ΡΡΠ°ΡΡΡΡ ΠΏΠΎΠΊΠ°Π·Π°Π»Π°ΡΡ ΠΌΠ½Π΅ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎΠΉ, Π° ΡΠ°ΠΊ ΠΊΠ°ΠΊ Envoy ΡΠ°ΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ ΡΠ°ΡΡΡ Β«istioΒ» ΠΈΠ»ΠΈ ΠΏΡΠΎΡΡΠΎ ΠΊΠ°ΠΊ Β«ingress controllerΒ» kubernetes, ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ Π»ΡΠ΄Π΅ΠΉ Π½Π΅ ΠΈΠΌΠ΅ΡΡ Ρ Π½ΠΈΠΌ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΆΠ΅ ΠΏΡΡΠΌΠΎΠ³ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΊΠ°ΠΊ Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Ρ ΡΠΈΠΏΠΎΠ²ΡΠΌΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ°ΠΌΠΈ Nginx ΠΈΠ»ΠΈ Haproxy. ΠΠ΄Π½Π°ΠΊΠΎ Π΅ΡΠ»ΠΈ ΡΡΠΎ-ΡΠΎ Π»ΠΎΠΌΠ°Π΅ΡΡΡ, Π±ΡΠ»ΠΎ Π±Ρ Ρ
ΠΎΡΠΎΡΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ ΠΊΠ°ΠΊ ΠΎΠ½ΠΎ ΡΡΡΡΠΎΠ΅Π½Π½ΠΎ ΠΈΠ·Π½ΡΡΡΠΈ. Π― ΠΏΠΎΡΡΠ°ΡΠ°Π»ΡΡ ΠΏΠ΅ΡΠ΅Π²Π΅ΡΡΠΈ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π±ΠΎΠ»ΡΡΠ΅ ΡΠ΅ΠΊΡΡΠ° Π½Π° ΡΡΡΡΠΊΠΈΠΉ Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ ΠΈ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠ΅ ΡΠ»ΠΎΠ²Π°, Π΄Π»Ρ ΡΠ΅Ρ
ΠΊΠΎΠΌΡ Π±ΠΎΠ»ΡΠ½ΠΎ Π½Π° ΡΠ°ΠΊΠΎΠ΅ ΡΠΌΠΎΡΡΠ΅ΡΡ Ρ ΠΎΡΡΠ°Π²ΠΈΠ» ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»Ρ Π² ΡΠΊΠΎΠ±ΠΊΠ°Ρ
. ΠΠΎΠ±ΡΠΎ ΠΏΠΎΠΆΠ°Π»ΠΎΠ²Π°ΡΡ ΠΏΠΎΠ΄ ΠΊΠ°Ρ.
Π’Π΅Ρ
Π½ΠΈΡΠ΅ΡΠΊΠ°Ρ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Π½ΠΈΠ·ΠΊΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ ΠΏΠΎ ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ Π±Π°Π·Π΅ Envoy Π² Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΠΊΡΠ΄Π½Π°Ρ. Π§ΡΠΎΠ±Ρ ΠΈΡΠΏΡΠ°Π²ΠΈΡΡ ΡΡΠΎ, Ρ ΠΏΠ»Π°Π½ΠΈΡΡΡ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ΅ΡΠΈΡ ΡΡΠ°ΡΠ΅ΠΉ Π² Π±Π»ΠΎΠ³Π΅ ΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ
ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΠ°Ρ
Envoy. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΡΡΠΎ ΠΏΠ΅ΡΠ²Π°Ρ ΡΡΠ°ΡΡΡ, ΠΏΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, Π΄Π°ΠΉΡΠ΅ ΠΌΠ½Π΅ Π·Π½Π°ΡΡ, ΡΡΠΎ Π²Ρ Π΄ΡΠΌΠ°Π΅ΡΠ΅ ΠΈ ΡΡΠΎ Π²Π°ΠΌ ΠΌΠΎΠ³Π»ΠΎ Π±ΡΡΡ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ Π² ΡΠ»Π΅Π΄ΡΡΡΠΈΡ
ΡΡΠ°ΡΡΡΡ
.
ΠΠ΄ΠΈΠ½ ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½ΡΡ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈΡ Π²ΠΎΠΏΡΠΎΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Ρ ΠΏΠΎΠ»ΡΡΠ°Ρ ΠΎ Envoy, ΡΡΠΎ Π·Π°ΠΏΡΠΎΡ Π½Π° Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΏΠΎΡΠΎΠΊΠΎΠ² (threading model). Π ΡΡΠΎΠΌ ΠΏΠΎΡΡΠ΅ Ρ ΠΎΠΏΠΈΡΡ ΠΊΠ°ΠΊ Envoy ΡΠΎΠΏΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Ρ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ° ΠΏΠΎΡΠΎΠΊΠΎΠ² (Thread Local Storage), ΠΊΠΎΡΠΎΡΠ°Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π²Π½ΡΡΡΠΈ, ΡΡΠΎΠ±Ρ ΡΠ΄Π΅Π»Π°ΡΡ ΠΊΠΎΠ΄ Π±ΠΎΠ»Π΅Π΅ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΠΌ ΠΈ Π²ΡΡΠΎΠΊΠΎΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΡΠΌ.
ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠΎΠ² (Threading overview)
Envoy ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΡΠΈ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ
ΡΠΈΠΏΠ° ΠΏΠΎΡΠΎΠΊΠΎΠ²:
- ΠΡΠ½ΠΎΠ²Π½ΠΎΠΉ (Main): ΠΡΠΎΡ ΠΏΠΎΡΠΎΠΊ ΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ Π·Π°ΠΏΡΡΠΊΠΎΠΌ ΠΈ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠ°, Π²ΡΠ΅ΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΎΠΉ XDS (xDiscovery Service) API, Π²ΠΊΠ»ΡΡΠ°Ρ DNS, ΠΏΡΠΎΠ²Π΅ΡΠΊΡ ΡΠ°Π±ΠΎΡΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΠΈ (health checking), ΠΎΠ±ΡΠ΅Π΅ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠ΅ΡΠΎΠΌ ΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠΌ ΡΠ°Π±ΠΎΡΡ ΡΠ΅ΡΠ²ΠΈΡΠ° (runtime), ΡΠ±ΡΠΎΡΠΎΠΌ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠΈ, Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠΎΠ±ΡΠ΅Π΅ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠ°ΠΌΠΈ β Linux ΡΠΈΠ³Π½Π°Π»Ρ, Π³ΠΎΡΡΡΠΈΠΉ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΠΊ (hot restart) ΠΈ Ρ. Π΄. ΠΡΠ΅, ΡΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π² ΡΡΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠ΅, ΡΠ²Π»ΡΠ΅ΡΡΡ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠΌ ΠΈ Β«Π½Π΅Π±Π»ΠΎΠΊΠΈΡΡΡΡΠΈΠΌΒ». Π ΡΠ΅Π»ΠΎΠΌ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΏΠΎΡΠΎΠΊ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½ΠΈΡΡΠ΅Ρ Π²ΡΠ΅ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΠΈ, Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΡΠΎΡΡΡ Π½Π΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° Π¦ΠΠ£. ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π±ΠΎΠ»ΡΡΡΡ ΡΠ°ΡΡΡ ΠΊΠΎΠ΄Π° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΠΈΡΠ°ΡΡ ΡΠ°ΠΊ, ΠΊΠ°ΠΊ Π΅ΡΠ»ΠΈ Π±Ρ ΠΎΠ½ Π±ΡΠ» ΠΎΠ΄Π½ΠΎΠΏΠΎΡΠΎΡΠ½ΡΠΌ.
- Π Π°Π±ΠΎΡΠΈΠΉ (Worker): ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Envoy ΡΠΎΠ·Π΄Π°Π΅Ρ ΡΠ°Π±ΠΎΡΠΈΠΉ ΠΏΠΎΡΠΎΠΊ(worker thread) Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π°ΠΏΠΏΠ°ΡΠ°ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ° Π² ΡΠΈΡΡΠ΅ΠΌΠ΅, ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠΎΠ²Π°ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΎΠΏΡΠΈΠΈ
--concurrency
. ΠΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π±ΠΎΡΠΈΠΉ ΠΏΠΎΡΠΎΠΊ Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ Β«Π½Π΅Π±Π»ΠΎΠΊΠΈΡΡΡΡΠΈΠΉΒ» ΡΠΈΠΊΠ» ΡΠΎΠ±ΡΡΠΈΠΉ (event loop), ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Π·Π° ΠΏΡΠΎΡΠ»ΡΡΠΈΠ²Π°Π½ΠΈΠ΅ (listening) ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ»ΡΡΠΈΠ²Π°ΡΠ΅Π»Ρ (listener), Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΡΡΠ°ΡΡΠΈ (29 ΠΈΡΠ»Ρ 2017 Π³.) Π½Π΅Ρ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ (sharding) ΠΏΡΠΎΡΠ»ΡΡΠΈΠ²Π°ΡΠ΅Π»Ρ (listener), ΠΏΡΠΈΠ΅ΠΌ Π½ΠΎΠ²ΡΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΉ, ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ΡΡΠ΅ΠΊΠ° ΡΠΈΠ»ΡΡΡΠΎΠ² Π΄Π»Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ Π²ΡΠ΅Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π²Π²ΠΎΠ΄Π°-Π²ΡΠ²ΠΎΠ΄Π° (IO) Π·Π° Π²ΡΠ΅ΠΌΡ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ. ΠΠΏΡΡΡ ΠΆΠ΅, ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π±ΠΎΠ»ΡΡΡΡ ΡΠ°ΡΡΡ ΠΊΠΎΠ΄Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΉ ΠΏΠΈΡΠ°ΡΡ ΡΠ°ΠΊ, ΠΊΠ°ΠΊ Π΅ΡΠ»ΠΈ Π±Ρ ΠΎΠ½ Π±ΡΠ» ΠΎΠ΄Π½ΠΎΠΏΠΎΡΠΎΡΠ½ΡΠΌ. - Π€Π°ΠΉΠ»ΠΎΠ²ΡΠΉ (File flusher): ΠΠ°ΠΆΠ΄ΡΠΉ ΡΠ°ΠΉΠ», ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΈΡΠ΅Ρ Envoy, Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ ΠΆΡΡΠ½Π°Π»Ρ Π΄ΠΎΡΡΡΠΏΠ° (access logs), Π² Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ ΠΈΠΌΠ΅Π΅Ρ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΠΉ Π±Π»ΠΎΠΊΠΈΡΡΡΡΠΈΠΉ ΠΏΠΎΡΠΎΠΊ. ΠΡΠΎ ΡΠ²ΡΠ·Π°Π½ΠΎ Ρ ΡΠ΅ΠΌ, ΡΡΠΎ Π·Π°ΠΏΠΈΡΡ Π² ΡΠ°ΠΉΠ»Ρ ΠΊΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ Π΄Π°ΠΆΠ΅ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ
O_NONBLOCK
ΠΈΠ½ΠΎΠ³Π΄Π° ΠΌΠΎΠΆΠ΅Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡΡΡ (Π²Π·Π΄ΠΎΡ ). ΠΠΎΠ³Π΄Π° ΡΠ°Π±ΠΎΡΠΈΠΌ ΠΏΠΎΡΠΎΠΊΠ°ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°ΠΏΠΈΡΠ°ΡΡ Π² ΡΠ°ΠΉΠ», Π΄Π°Π½Π½ΡΠ΅ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°ΡΡΡΡ Π² Π±ΡΡΠ΅Ρ Π² ΠΏΠ°ΠΌΡΡΠΈ, Π³Π΄Π΅ ΠΎΠ½ΠΈ Π² ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΌ ΠΈΡΠΎΠ³Π΅ ΡΠ±ΡΠ°ΡΡΠ²Π°ΡΡΡΡ ΡΠ΅ΡΠ΅Π· ΠΏΠΎΡΠΎΠΊ file flush. ΠΡΠΎ ΠΎΠ΄Π½Π° ΠΈΠ· ΠΎΠ±Π»Π°ΡΡΠ΅ΠΉ ΠΊΠΎΠ΄Π°, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈ Π²ΡΠ΅ ΡΠ°Π±ΠΎΡΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ (worker threads) ΠΌΠΎΠ³ΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡ (block) ΠΎΠ΄Π½Ρ ΠΈ ΡΡ ΠΆΠ΅ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ (lock), ΠΏΡΡΠ°ΡΡΡ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡΡ Π±ΡΡΠ΅Ρ ΠΏΠ°ΠΌΡΡΠΈ.
ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΉ (Connection handling)
ΠΠ°ΠΊ ΠΎΠ±ΡΡΠΆΠ΄Π°Π»ΠΎΡΡ Π²ΠΊΡΠ°ΡΡΠ΅ Π²ΡΡΠ΅, Π²ΡΠ΅ ΡΠ°Π±ΠΎΡΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ ΠΏΡΠΎΡΠ»ΡΡΠΈΠ²Π°ΡΡ Π²ΡΠ΅Ρ
ΡΠ»ΡΡΠ°ΡΠ΅Π»Π΅ΠΉ (listeners) Π±Π΅Π· ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΠ΄ΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ Π³ΡΠ°ΠΌΠΎΡΠ½ΠΎΠΉ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ ΠΏΡΠΈΠ½ΡΡΡΡ
ΡΠΎΠΊΠ΅ΡΠΎΠ² Π² ΡΠ°Π±ΠΎΡΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ. Π‘ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΡΠ΄ΡΠ° Π² ΡΠ΅Π»ΠΎΠΌ ΠΎΡΠ΅Π½Ρ Ρ
ΠΎΡΠΎΡΠΈ Π² ΡΡΠΎΠΌ, ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΡΠ°ΠΊΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠ°ΠΊ ΠΏΠΎΠ²ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ° Π²Π²ΠΎΠ΄Π°-Π²ΡΠ²ΠΎΠ΄Π° (IO), ΡΡΠΎΠ±Ρ ΠΏΠΎΠΏΡΡΠ°ΡΡΡΡ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡΡ ΠΏΠΎΡΠΎΠΊ ΡΠ°Π±ΠΎΡΠΎΠΉ, ΠΏΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ Π½Π°ΡΠ°ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠΎΡΠ»ΡΡΠΈΠ²Π°ΡΡ ΡΠΎΡ ΠΆΠ΅ ΡΠΎΠΊΠ΅Ρ, Π° ΡΠ°ΠΊΠΆΠ΅ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ (Spinlock) Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π·Π°ΠΏΡΠΎΡΠ°.
ΠΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΠΏΡΠΈΠ½ΡΡΠΎ Π½Π° ΡΠ°Π±ΠΎΡΠ΅ΠΌ ΠΏΠΎΡΠΎΠΊΠ΅ (worker thread), ΠΎΠ½ΠΎ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΏΠΎΠΊΠΈΠ΄Π°Π΅Ρ ΡΡΠΎΡ ΠΏΠΎΡΠΎΠΊ (thread). ΠΡΡ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ°Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΡΡΡ Π² ΡΠ°Π±ΠΎΡΠ΅ΠΌ ΠΏΠΎΡΠΎΠΊΠ΅ (worker thread), Π²ΠΊΠ»ΡΡΠ°Ρ Π»ΡΠ±ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΡΡΠ»ΠΊΠΈ (forwarding behavior).
ΠΡΠΎ ΠΈΠΌΠ΅Π΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²Π°ΠΆΠ½ΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠΉ:
- ΠΡΠ΅ ΠΏΡΠ»Ρ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΉ Π² Envoy ΠΎΡΠ½ΠΎΡΡΡΡΡ ΠΊ ΡΠ°Π±ΠΎΡΠ΅ΠΌΡ ΠΏΠΎΡΠΎΠΊΡ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Ρ ΠΎΡΡ ΠΏΡΠ»Ρ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΉ HTTP/2 Π΄Π΅Π»Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½ΠΎ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Ρ ΠΊΠ°ΠΆΠ΄ΡΠΌ Π²ΡΡΠ΅ΡΡΠΎΡΡΠΈΠΌ Ρ ΠΎΡΡΠΎΠΌ Π·Π° ΡΠ°Π·, Π΅ΡΠ»ΠΈ Π΅ΡΡΡ ΡΠ΅ΡΡΡΠ΅ ΡΠ°Π±ΠΎΡΠΈΡ ΠΏΠΎΡΠΎΠΊΠ°, Π±ΡΠ΄Π΅Ρ ΡΠ΅ΡΡΡΠ΅ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ HTTP/2 Π½Π° Π²ΡΡΠ΅ΡΡΠΎΡΡΠΈΠΉ Ρ ΠΎΡΡ Π² ΡΡΡΠΎΠΉΡΠΈΠ²ΠΎΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ.
- ΠΡΠΈΡΠΈΠ½Π°, ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΉ Envoy ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ, ΡΠΎΡ ΡΠ°Π½ΡΡ Π²ΡΠ΅ Π² ΠΎΠ΄Π½ΠΎΠΌ ΡΠ°Π±ΠΎΡΠ΅ΠΌ ΠΏΠΎΡΠΎΠΊΠ΅, ΠΏΠΎΡΡΠΈ Π²Π΅ΡΡ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π°ΠΏΠΈΡΠ°Π½ Π±Π΅Π· Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ ΠΈ ΠΊΠ°ΠΊ Π±ΡΠ΄ΡΠΎ ΠΎΠ½ ΠΎΠ΄Π½ΠΎΠΏΠΎΡΠΎΡΠ½ΡΠΉ. ΠΡΠΎΡ Π΄ΠΈΠ·Π°ΠΉΠ½ ΡΠΏΡΠΎΡΠ°Π΅Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΠΊΠΎΠ΄Π° ΠΈ Π½Π΅Π²Π΅ΡΠΎΡΡΠ½ΠΎ Ρ ΠΎΡΠΎΡΠΎ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΏΠΎΡΡΠΈ Π½Π΅ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΡΠΈΡΠ»Π° ΡΠ°Π±ΠΎΡΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ².
- ΠΠ΄Π½Π°ΠΊΠΎ, ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΠΎΡΠ½ΠΎΠ²Π½ΡΡ
Π²ΡΠ²ΠΎΠ΄ΠΎΠ² ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎ, ΡΡΠΎ Ρ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ ΠΏΡΠ»Π° ΠΏΠ°ΠΌΡΡΠΈ ΠΈ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΉ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΠΎΡΠ΅Π½Ρ Π²Π°ΠΆΠ½ΠΎ Π½Π°ΡΡΡΠΎΠΈΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ
--concurrency
. ΠΠ°Π»ΠΈΡΠΈΠ΅ Π±ΠΎΠ»ΡΡΠ΅Π³ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΡΠ°Π±ΠΎΡΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ², ΡΠ΅ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ, ΠΏΡΠΈΠ²Π΅Π΄Π΅Ρ ΠΊ ΠΏΠΎΡΠ΅ΡΠ΅ ΠΏΠ°ΠΌΡΡΠΈ, ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π±ΠΎΠ»ΡΡΠ΅Π³ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° Π±Π΅Π·Π΄Π΅ΠΉΡΡΠ²ΡΡΡΠΈΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΉ ΠΈ ΡΠ½ΠΈΠΆΠ΅Π½ΠΈΡ ΡΠΊΠΎΡΠΎΡΡΠΈ ΠΏΠΎΠΏΠ°Π΄Π°Π½ΠΈΡ Π² ΠΏΡΠ» ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΉ. Π Lyft Π½Π°ΡΠΈ envoy sidecar ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΠΎΡΠ΅Π½Ρ Π½ΠΈΠ·ΠΊΠΈΠΌ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠΎΠΌ, ΡΠ°ΠΊ ΡΡΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΡΠ»ΡΠΆΠ±Π°ΠΌ, ΡΡΠ΄ΠΎΠΌ Ρ ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΠΎΠ½ΠΈ ΡΠΈΠ΄ΡΡ. ΠΡ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌ Envoy Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠΎΠ³ΡΠ°Π½ΠΈΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠΊΡΠΈ-ΡΠ΅ΡΠ²Π΅ΡΠ° (edge) ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΌ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠ΅ (concurrency).
Π§ΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ Π½Π΅ Π±Π»ΠΎΠΊΠΈΡΡΡΡΠΈΠΉ ΡΠ΅ΠΆΠΈΠΌ (What non-blocking means)
Π’Π΅ΡΠΌΠΈΠ½ Β«Π½Π΅Π±Π»ΠΎΠΊΠΈΡΡΡΡΠΈΠΉΒ» Π΄ΠΎ ΡΠΈΡ ΠΏΠΎΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π· ΠΏΡΠΈ ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠΈ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΈ ΡΠ°Π±ΠΎΡΠΈΠΉ ΠΏΠΎΡΠΎΠΊΠΈ. ΠΠ΅ΡΡ ΠΊΠΎΠ΄ Π½Π°ΠΏΠΈΡΠ°Π½ ΠΏΡΠΈ ΡΡΠ»ΠΎΠ²ΠΈΠΈ, ΡΡΠΎ Π½ΠΈΡΡΠΎ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΡΡΡ. ΠΠ΄Π½Π°ΠΊΠΎ, ΡΡΠΎ Π½Π΅ ΡΠΎΠ²ΡΠ΅ΠΌ Π²Π΅ΡΠ½ΠΎ (ΡΡΠΎ Π½Π΅ ΡΠΎΠ²ΡΠ΅ΠΌ Π²Π΅ΡΠ½ΠΎ?).
Envoy ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π΄Π»ΠΈΡΠ΅Π»ΡΠ½ΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ ΠΏΡΠΎΡΠ΅ΡΡΠ°:
- ΠΠ°ΠΊ ΡΠΆΠ΅ Π³ΠΎΠ²ΠΎΡΠΈΠ»ΠΎΡΡ, ΠΏΡΠΈ Π·Π°ΠΏΠΈΡΠΈ ΠΆΡΡΠ½Π°Π»ΠΎΠ² Π΄ΠΎΡΡΡΠΏΠ° Π²ΡΠ΅ ΡΠ°Π±ΠΎΡΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ ΠΏΠ΅ΡΠ΅Π΄ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ Π±ΡΡΠ΅ΡΠ° ΠΆΡΡΠ½Π°Π»Π° Π² ΠΏΠ°ΠΌΡΡΠΈ. ΠΡΠ΅ΠΌΡ ΡΠ΄Π΅ΡΠΆΠ°Π½ΠΈΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΠΎΡΠ΅Π½Ρ Π½ΠΈΠ·ΠΊΠΈΠΌ, Π½ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΡΠΎ ΡΡΠ° Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° Π±ΡΠ΄Π΅Ρ ΠΎΡΠΏΠ°ΡΠΈΠ²Π°ΡΡΡΡ ΠΏΡΠΈ Π²ΡΡΠΎΠΊΠΎΠΌ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠ΅ ΠΈ Π²ΡΡΠΎΠΊΠΎΠΉ ΠΏΡΠΎΠΏΡΡΠΊΠ½ΠΎΠΉ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΠΈ.
- Envoy ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΎΡΠ΅Π½Ρ ΡΠ»ΠΎΠΆΠ½ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ²Π»ΡΠ΅ΡΡΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ Π΄Π»Ρ ΠΏΠΎΡΠΎΠΊΠ°. ΠΡΠΎ Π±ΡΠ΄Π΅Ρ ΡΠ΅ΠΌΠ° ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡΡΠ°. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Ρ ΠΊΡΠ°ΡΠΊΠΎ ΡΠΏΠΎΠΌΡΠ½Ρ, ΡΡΠΎ ΠΊΠ°ΠΊ ΡΠ°ΡΡΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠΈ ΠΏΠΎΡΠΎΠΊΠ° ΠΈΠ½ΠΎΠ³Π΄Π° ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ Π΄Π»Ρ ΡΠ΅Π½ΡΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Β«Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ° ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠΈΒ». ΠΡΠ° Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΊΠΎΠ³Π΄Π°-Π»ΠΈΠ±ΠΎ ΡΡΠ΅Π±ΠΎΠ²Π°ΡΡΡΡ.
- ΠΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΏΠΎΡΠΎΠΊ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ΅ΡΠΊΠΈ Π½ΡΠΆΠ΄Π°Π΅ΡΡΡ Π² ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠΈΠΈ ΡΠΎ Π²ΡΠ΅ΠΌΠΈ ΡΠ°Π±ΠΎΡΠΈΠΌΠΈ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ. ΠΡΠΎ Π΄Π΅Π»Π°Π΅ΡΡΡ ΠΏΡΡΠ΅ΠΌ Β«ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈΒ» ΠΈΠ· ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ° Π² ΡΠ°Π±ΠΎΡΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ, Π° ΠΈΠ½ΠΎΠ³Π΄Π° ΠΈ ΠΈΠ· ΡΠ°Π±ΠΎΡΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΎΠ±ΡΠ°ΡΠ½ΠΎ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΏΠΎΡΠΎΠΊ. ΠΠ»Ρ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ°, ΡΡΠΎΠ±Ρ ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ Π² ΠΎΡΠ΅ΡΠ΅Π΄Ρ Π΄Π»Ρ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ Π΄ΠΎΡΡΠ°Π²ΠΊΠΈ. ΠΡΠΈ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΠΎΠ΄Π²Π΅ΡΠ³Π°ΡΡΡΡ ΡΠ΅ΡΡΠ΅Π·Π½ΠΎΠΌΡ ΡΠΎΠΏΠ΅ΡΠ½ΠΈΡΠ΅ΡΡΠ²Ρ, Π½ΠΎ ΠΎΠ½ΠΈ Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ ΠΌΠΎΠ³ΡΡ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡΡΡ.
- ΠΠΎΠ³Π΄Π° Envoy ΠΏΠΈΡΠ΅Ρ ΠΆΡΡΠ½Π°Π» Π² ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠΉ ΠΏΠΎΡΠΎΠΊ ΠΎΡΠΈΠ±ΠΎΠΊ (standard error), ΠΎΠ½ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ Π²ΡΠ΅Π³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°. Π ΡΠ΅Π»ΠΎΠΌ, Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠ΅ Π²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΆΡΡΠ½Π°Π»Π° Envoy ΡΡΠΈΡΠ°Π΅ΡΡΡ ΡΠΆΠ°ΡΠ½ΡΠΌ Ρ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ, ΠΏΠΎΡΡΠΎΠΌΡ Π΅Π³ΠΎ ΡΠ»ΡΡΡΠ΅Π½ΠΈΡ Π½Π΅ ΡΠ΄Π΅Π»ΡΠ΅ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΡ.
- ΠΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π΄ΡΡΠ³ΠΈΡ ΡΠ»ΡΡΠ°ΠΉΠ½ΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ, Π½ΠΎ Π½ΠΈ ΠΎΠ΄Π½Π° ΠΈΠ· Π½ΠΈΡ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠΉ Π΄Π»Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΈ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΎΡΠΏΠ°ΡΠΈΠ²Π°ΡΡΡΡ.
ΠΠΎΠΊΠ°Π»ΡΠ½ΠΎΠ΅ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ ΠΏΠΎΡΠΎΠΊΠ° (Thread local storage)
ΠΠ·-Π·Π° ΡΠΏΠΎΡΠΎΠ±Π°, ΠΊΠΎΡΠΎΡΡΠΌ Envoy ΠΎΡΠ΄Π΅Π»ΡΠ΅Ρ ΠΎΠ±ΡΠ·Π°Π½Π½ΠΎΡΡΠΈ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ° ΠΎΡ ΠΎΠ±ΡΠ·Π°Π½Π½ΠΎΡΡΠ΅ΠΉ ΡΠ°Π±ΠΎΡΠ΅Π³ΠΎ ΠΏΠΎΡΠΎΠΊΠ°, ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅, ΡΡΠΎ ΡΠ»ΠΎΠΆΠ½Π°Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½Π° Π² Π³Π»Π°Π²Π½ΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠ΅, Π° Π·Π°ΡΠ΅ΠΌ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ ΡΠ°Π±ΠΎΡΠ΅ΠΌΡ ΠΏΠΎΡΠΎΠΊΡ Ρ Π²ΡΡΠΎΠΊΠΎΠΉ ΡΡΠ΅ΠΏΠ΅Π½ΡΡ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠ°. Π ΡΡΠΎΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅ ΠΎΠΏΠΈΡΠ°Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ° Envoy Thread Local Storage (TLS) Π½Π° Π²ΡΡΠΎΠΊΠΎΠΌ ΡΡΠΎΠ²Π½Π΅. Π ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅ Ρ ΠΎΠΏΠΈΡΡ, ΠΊΠ°ΠΊ ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΊΠ»Π°ΡΡΠ΅ΡΠΎΠΌ.
ΠΠ°ΠΊ ΡΠΆΠ΅ Π±ΡΠ»ΠΎ ΠΎΠΏΠΈΡΠ°Π½ΠΎ, ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΏΠΎΡΠΎΠΊ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π²ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ (management) ΠΈ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ ΠΏΠ»ΠΎΡΠΊΠΎΡΡΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ (control plane) Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ Envoy. ΠΠ»ΠΎΡΠΊΠΎΡΡΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π·Π΄Π΅ΡΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠ΅ΡΠ΅Π³ΡΡΠΆΠ΅Π½Π°, Π½ΠΎ Π΅ΡΠ»ΠΈ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ Π΅Π΅ Π² ΡΠ°ΠΌΠΊΠ°Ρ
ΡΠ°ΠΌΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ° Envoy ΠΈ ΡΡΠ°Π²Π½ΠΈΠ²Π°ΡΡ Ρ ΠΏΠ΅ΡΠ΅ΡΡΠ»ΠΊΠΎΠΉ, ΠΊΠΎΡΠΎΡΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΡΠ°Π±ΠΎΡΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ, ΡΡΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΡΠ΅Π»Π΅ΡΠΎΠΎΠ±ΡΠ°Π·Π½ΡΠΌ. ΠΠΎ ΠΎΠ±ΡΠ΅ΠΌΡ ΠΏΡΠ°Π²ΠΈΠ»Ρ ΠΏΡΠΎΡΠ΅ΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ° Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠ°Π±ΠΎΡΡ, Π° Π·Π°ΡΠ΅ΠΌ Π΅ΠΌΡ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π±ΠΎΡΠΈΠΉ ΠΏΠΎΡΠΎΠΊ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠΌ ΡΡΠΎΠΉ ΡΠ°Π±ΠΎΡΡ, ΠΏΡΠΈ ΡΡΠΎΠΌ ΡΠ°Π±ΠΎΡΠ΅ΠΌΡ ΠΏΠΎΡΠΎΠΊΡ Π½Π΅ Π½ΡΠΆΠ½ΠΎ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π΄ΠΎΡΡΡΠΏΠ΅.
Π‘ΠΈΡΡΠ΅ΠΌΠ° TLS (Thread local storage) Envoy ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
- ΠΠΎΠ΄, Π²ΡΠΏΠΎΠ»Π½ΡΡΡΠΈΠΉΡΡ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠ΅, ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ΄Π΅Π»ΠΈΡΡ ΡΠ»ΠΎΡ TLS Π΄Π»Ρ Π²ΡΠ΅Π³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°. Π₯ΠΎΡΡ ΡΡΠΎ Π°Π±ΡΡΡΠ°Π³ΠΈΡΠΎΠ²Π°Π½ΠΎ, Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅ ΡΡΠΎ ΠΈΠ½Π΄Π΅ΠΊΡ Π² Π²Π΅ΠΊΡΠΎΡΠ΅, ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡΠΈΠΉ Π΄ΠΎΡΡΡΠΏ O(1).
- ΠΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΏΠΎΡΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π² ΡΠ²ΠΎΠΉ ΡΠ»ΠΎΡ. ΠΠΎΠ³Π΄Π° ΡΡΠΎ ΡΠ΄Π΅Π»Π°Π½ΠΎ, Π΄Π°Π½Π½ΡΠ΅ ΠΏΡΠ±Π»ΠΈΠΊΡΡΡΡΡ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡΠ°Π±ΠΎΡΠ΅ΠΌ ΠΏΠΎΡΠΎΠΊΠ΅ ΠΊΠ°ΠΊ ΠΎΠ±ΡΡΠ½ΠΎΠ΅ ΡΠΎΠ±ΡΡΠΈΠ΅ ΡΠΈΠΊΠ»Π° ΡΠΎΠ±ΡΡΠΈΠΉ.
- Π Π°Π±ΠΎΡΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ ΠΌΠΎΠ³ΡΡ ΡΠΈΡΠ°ΡΡ ΠΈΠ· ΡΠ²ΠΎΠ΅Π³ΠΎ ΡΠ»ΠΎΡΠ° TLS ΠΈ ΠΈΠ·Π²Π»Π΅ΠΊΠ°ΡΡ Π»ΡΠ±ΡΠ΅ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΠΏΠΎΡΠΎΠΊΠΎΠ², Π΄ΠΎΡΡΡΠΏΠ½ΡΠ΅ ΡΠ°ΠΌ.
Π₯ΠΎΡΡ ΡΡΠΎ ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΠ°Ρ ΠΈ Π½Π΅Π²Π΅ΡΠΎΡΡΠ½ΠΎ ΠΌΠΎΡΠ½Π°Ρ ΠΏΠ°ΡΠ°Π΄ΠΈΠ³ΠΌΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΎΡΠ΅Π½Ρ ΠΏΠΎΡ ΠΎΠΆΠ° Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ RCU(Read-Copy-Update). ΠΠΎ ΡΡΡΠΈ, ΡΠ°Π±ΠΎΡΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π²ΠΈΠ΄ΡΡ ΠΊΠ°ΠΊΠΈΡ -Π»ΠΈΠ±ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π΄Π°Π½Π½ΡΡ Π² ΡΠ»ΠΎΡΠ°Ρ TLS Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠ°Π±ΠΎΡΡ. ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ Π² ΠΏΠ΅ΡΠΈΠΎΠ΄ ΠΏΠΎΠΊΠΎΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ°Π±ΠΎΡΠΈΠΌΠΈ ΡΠΎΠ±ΡΡΠΈΡΠΌΠΈ.
Envoy ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΡΠΎ Π΄Π²ΡΠΌΡ ΡΠ°Π·Π½ΡΠΌΠΈ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌΠΈ:
- Π‘ΠΎΡ ΡΠ°Π½ΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡΠ°Π±ΠΎΡΠ΅ΠΌ ΠΏΠΎΡΠΎΠΊΠ΅, Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΡΠΈΠΌ Π΄Π°Π½Π½ΡΠΌ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ Π±Π΅Π· ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ.
- Π‘ΠΎΡ ΡΠ°Π½ΡΡ ΠΎΠ±ΡΠΈΠΉ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ Β«ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡΒ» Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡΠ°Π±ΠΎΡΠ΅ΠΌ ΠΏΠΎΡΠΎΠΊΠ΅. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π±ΠΎΡΠΈΠΉ ΠΏΠΎΡΠΎΠΊ ΠΈΠΌΠ΅Π΅Ρ ΡΡΠ΅ΡΡΠΈΠΊ ΡΡΡΠ»ΠΎΠΊ Π½Π° Π΄Π°Π½Π½ΡΠ΅, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠΌΠ΅Π½ΡΡΠ΅Π½ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠ°Π±ΠΎΡΡ. Π’ΠΎΠ»ΡΠΊΠΎ ΠΊΠΎΠ³Π΄Π° Π²ΡΠ΅ ΡΠ°Π±ΠΎΡΠ½ΠΈΠΊΠΈ ΡΡΠΏΠΎΠΊΠΎΡΡΡΡ ΠΈ Π·Π°Π³ΡΡΠ·ΡΡ Π½ΠΎΠ²ΡΠ΅ ΠΎΠ±ΡΠΈΠ΅ Π΄Π°Π½Π½ΡΠ΅, ΡΡΠ°ΡΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π±ΡΠ΄ΡΡ ΡΠ½ΠΈΡΡΠΎΠΆΠ΅Π½Ρ. ΠΡΠΎ ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½ΠΎ RCU.
ΠΠΎΡΠΎΠΊ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΠΊΠ»Π°ΡΡΠ΅ΡΠ° (Cluster update threading)
Π ΡΡΠΎΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅ Ρ ΠΎΠΏΠΈΡΡ, ΠΊΠ°ΠΊ TLS (Thread local storage) ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΊΠ»Π°ΡΡΠ΅ΡΠΎΠΌ. Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠ΅ΡΠΎΠΌ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ API xDS ΠΈ / ΠΈΠ»ΠΈ DNS, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ ΡΠ°Π±ΠΎΡΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΠΈ (health checking).
Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ ΠΊΠ»Π°ΡΡΠ΅ΡΠ° Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π² ΡΠ΅Π±Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΠΈ ΡΡΠ°ΠΏΡ:
- ΠΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ ΠΊΠ»Π°ΡΡΠ΅ΡΠ° β ΡΡΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Π²Π½ΡΡΡΠΈ Envoy, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ Π²ΡΠ΅ΠΌΠΈ ΠΈΠ·Π²Π΅ΡΡΠ½ΡΠΌΠΈ Π°ΠΏΡΡΡΠΈΠΌΠ°ΠΌΠΈ (upstream) ΠΊΠ»Π°ΡΡΠ΅ΡΠ°, API-ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠΌ CDS (Cluster Discovery Service), API-ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°ΠΌΠΈ SDS (Secret Discovery Service) ΠΈ EDS (Endpoint Discovery Service), DNS ΠΈ Π°ΠΊΡΠΈΠ²Π½ΡΠΌΠΈ Π²Π½Π΅ΡΠ½ΠΈΠΌΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ°ΠΌΠΈ ΡΠ°Π±ΠΎΡΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΠΈ (health checking). ΠΠ½ ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Π·Π° ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π² Β«ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΌ ΠΈΡΠΎΠ³Π΅ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎΒ» (eventually consistent) ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π°ΠΏΡΡΡΠΈΠΌΠ° (upstream) ΠΊΠ»Π°ΡΡΠ΅ΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½Π½ΡΠ΅ Ρ ΠΎΡΡΡ, Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΡΠ°Π±ΠΎΡΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΠΈ (health status).
- Π‘ΡΠ΅Π΄ΡΡΠ²ΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠ°Π±ΠΎΡΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΠΈ (health checker) Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ Π°ΠΊΡΠΈΠ²Π½ΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ ΡΠ°Π±ΠΎΡΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΠΈ ΠΈ ΡΠΎΠΎΠ±ΡΠ°Π΅Ρ ΠΎΠ± ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΡΠ°Π±ΠΎΡΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΠΈ Π΄ΠΈΡΠΏΠ΅ΡΡΠ΅ΡΡ ΠΊΠ»Π°ΡΡΠ΅ΡΠ°.
- CDS (Cluster Discovery Service) / SDS (Secret Discovery Service) / EDS (Endpoint Discovery Service) / DNS Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ½ΠΎΡΡΠΈ ΠΊ ΠΊΠ»Π°ΡΡΠ΅ΡΡ. ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅ΡΡ ΠΊΠ»Π°ΡΡΠ΅ΡΠ°.
- ΠΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π±ΠΎΡΠΈΠΉ ΠΏΠΎΡΠΎΠΊ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΠΈΠΊΠ» ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΎΠ±ΡΡΠΈΠΉ.
- ΠΠΎΠ³Π΄Π° ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ ΠΊΠ»Π°ΡΡΠ΅ΡΠ° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ, ΡΡΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π΄Π»Ρ ΠΊΠ»Π°ΡΡΠ΅ΡΠ° ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΎΡΡ, ΠΎΠ½ ΡΠΎΠ·Π΄Π°Π΅Ρ Π½ΠΎΠ²ΡΠΉ ΡΠ½ΠΈΠΌΠΎΠΊ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΊΠ»Π°ΡΡΠ΅ΡΠ°, Π΄ΠΎΡΡΡΠΏΠ½ΡΠΉ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ, ΠΈ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ Π΅Π³ΠΎ Π² ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π±ΠΎΡΠΈΠΉ ΠΏΠΎΡΠΎΠΊ.
- Π ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ ΠΏΠ΅ΡΠΈΠΎΠ΄Π° ΠΏΠΎΠΊΠΎΡ ΡΠ°Π±ΠΎΡΠΈΠΉ ΠΏΠΎΡΠΎΠΊ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ ΡΠ½ΠΈΠΌΠΎΠΊ Π² Π²ΡΠ΄Π΅Π»Π΅Π½Π½ΠΎΠΌ ΡΠ»ΠΎΡΠ΅ TLS.
- ΠΠΎ Π²ΡΠ΅ΠΌΡ ΡΠΎΠ±ΡΡΠΈΡ Π²Π²ΠΎΠ΄Π°-Π²ΡΠ²ΠΎΠ΄Π°, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ Ρ ΠΎΡΡ Π΄Π»Ρ Π±Π°Π»Π°Π½ΡΠΈΡΠΎΠ²ΠΊΠΈ Π½Π°Π³ΡΡΠ·ΠΊΠΈ, Π±Π°Π»Π°Π½ΡΠΈΡΠΎΠ²ΡΠΈΠΊ Π½Π°Π³ΡΡΠ·ΠΊΠΈ Π±ΡΠ΄Π΅Ρ Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°ΡΡ ΡΠ»ΠΎΡ TLS (Thread local storage) Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ Ρ ΠΎΡΡΠ΅. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π½Π΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ. ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡΠ°ΠΊΠΆΠ΅, ΡΡΠΎ TLS ΠΌΠΎΠΆΠ΅Ρ ΡΠ°ΠΊΠΆΠ΅ ΠΈΠ½ΠΈΡΠΈΠΈΡΠΎΠ²Π°ΡΡ ΡΠΎΠ±ΡΡΠΈΡ ΠΏΡΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ, ΡΠ°ΠΊ ΡΡΠΎ ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΡ Π±Π°Π»Π°Π½ΡΠΈΡΠΎΠ²ΠΊΠΈ Π½Π°Π³ΡΡΠ·ΠΊΠΈ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΠΌΠΎΠ³ΡΡ ΠΏΠ΅ΡΠ΅ΡΡΠΈΡΡΠ²Π°ΡΡ ΠΊΡΡΠΈ, ΡΡΡΡΠΊΡΡΡΡ Π΄Π°Π½Π½ΡΡ ΠΈ Ρ.Π΄. ΠΡΠΎ Π²ΡΡ ΠΎΠ΄ΠΈΡ Π·Π° ΡΠ°ΠΌΠΊΠΈ ΡΡΠΎΠ³ΠΎ ΠΏΠΎΡΡΠ°, Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΠΌΠ΅ΡΡΠ°Ρ ΠΊΠΎΠ΄Π°.
ΠΡΠΏΠΎΠ»ΡΠ·ΡΡ Π²ΡΡΠ΅ΠΎΠΏΠΈΡΠ°Π½Π½ΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ, Envoy ΠΌΠΎΠΆΠ΅Ρ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ Π·Π°ΠΏΡΠΎΡ Π±Π΅Π· ΠΊΠ°ΠΊΠΈΡ -Π»ΠΈΠ±ΠΎ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ (ΠΊΡΠΎΠΌΠ΅ ΠΎΠΏΠΈΡΠ°Π½Π½ΡΡ ΡΠ°Π½Π΅Π΅). ΠΠΎΠΌΠΈΠΌΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠΈ ΡΠ°ΠΌΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° TLS, Π±ΠΎΠ»ΡΡΠ΅ΠΉ ΡΠ°ΡΡΠΈ ΠΊΠΎΠ΄Π° Π½Π΅ Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ, ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΡ, ΠΈ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π°ΠΏΠΈΡΠ°Π½ Π² ΠΎΠ΄Π½ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅. ΠΡΠΎ ΠΎΠ±Π»Π΅Π³ΡΠ°Π΅Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π±ΠΎΠ»ΡΡΠ΅ΠΉ ΡΠ°ΡΡΠΈ ΠΊΠΎΠ΄Π° Π² Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ ΠΏΡΠ΅Π²ΠΎΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ.
ΠΡΡΠ³ΠΈΠ΅ ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠ΅ TLS (Other subsystems that make use of 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.
ΠΠ·Π²Π΅ΡΡΠ½ΡΠ΅ ΠΏΠΎΠ΄Π²ΠΎΠ΄Π½ΡΠ΅ ΠΊΠ°ΠΌΠ½ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ (Known performance pitfalls)
Π₯ΠΎΡΡ Π² ΡΠ΅Π»ΠΎΠΌ Envoy ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Ρ ΠΎΡΠΎΡΠΎ, Π΅ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΈΠ·Π²Π΅ΡΡΠ½ΡΡ ΠΎΠ±Π»Π°ΡΡΠ΅ΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΠ΅Π±ΡΡΡ Π²Π½ΠΈΠΌΠ°Π½ΠΈΡ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Ρ ΠΎΡΠ΅Π½Ρ Π²ΡΡΠΎΠΊΠΈΠΌ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠΎΠΌ ΠΈ ΠΏΡΠΎΠΏΡΡΠΊΠ½ΠΎΠΉ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΡΡ:
- ΠΠ°ΠΊ ΡΠΆΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΎ Π² ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅, Π² Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ Π²ΡΠ΅ ΡΠ°Π±ΠΎΡΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ ΠΏΠΎΠ»ΡΡΠ°ΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ ΠΏΡΠΈ Π·Π°ΠΏΠΈΡΠΈ Π² Π±ΡΡΠ΅Ρ ΠΏΠ°ΠΌΡΡΠΈ ΠΆΡΡΠ½Π°Π»Π° Π΄ΠΎΡΡΡΠΏΠ°. ΠΡΠΈ Π²ΡΡΠΎΠΊΠΎΠΌ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠ΅ ΠΈ Π²ΡΡΠΎΠΊΠΎΠΉ ΠΏΡΠΎΠΏΡΡΠΊΠ½ΠΎΠΉ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΠΈ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΏΠ°ΠΊΠ΅ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΆΡΡΠ½Π°Π»ΠΎΠ² Π΄ΠΎΡΡΡΠΏΠ° Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ°Π±ΠΎΡΠ΅Π³ΠΎ ΠΏΠΎΡΠΎΠΊΠ° Π·Π° ΡΡΠ΅Ρ Π½Π΅ΡΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½Π½ΠΎΠΉ Π΄ΠΎΡΡΠ°Π²ΠΊΠΈ ΠΏΡΠΈ Π·Π°ΠΏΠΈΡΠΈ Π² ΠΎΠΊΠΎΠ½ΡΠ°ΡΠ΅Π»ΡΠ½ΡΠΉ ΡΠ°ΠΉΠ». ΠΠ°ΠΊ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Ρ, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ ΠΆΡΡΠ½Π°Π» Π΄ΠΎΡΡΡΠΏΠ° Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ°Π±ΠΎΡΠ΅Π³ΠΎ ΠΏΠΎΡΠΎΠΊΠ°.
- Π₯ΠΎΡΡ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ° ΠΎΡΠ΅Π½Ρ ΡΠΈΠ»ΡΠ½ΠΎ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π°, ΠΏΡΠΈ ΠΎΡΠ΅Π½Ρ Π²ΡΡΠΎΠΊΠΎΠΌ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠ΅ ΠΈ ΠΏΡΠΎΠΏΡΡΠΊΠ½ΠΎΠΉ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΠΈ, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, Π±ΡΠ΄Π΅Ρ Π°ΡΠΎΠΌΠ°ΡΠ½Π°Ρ ΠΊΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠΈΡ Π½Π° ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡΠ°Π»ΡΠ½ΠΎΠΉ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ΅. Π Π΅ΡΠ΅Π½ΠΈΠ΅ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ β ΡΡΠ΅ΡΡΠΈΠΊΠΈ Π½Π° ΠΎΠ΄ΠΈΠ½ ΡΠ°Π±ΠΎΡΠΈΠΉ ΠΏΠΎΡΠΎΠΊ Ρ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ΅ΡΠΊΠΈΠΌ ΡΠ±ΡΠΎΡΠΎΠΌ ΡΠ΅Π½ΡΡΠ°Π»ΡΠ½ΡΡ ΡΡΠ΅ΡΡΠΈΠΊΠΎΠ². ΠΡΠΎ Π±ΡΠ΄Π΅Ρ ΠΎΠ±ΡΡΠΆΠ΄Π°ΡΡΡΡ Π² ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΏΠΎΡΡΠ΅.
- Π‘ΡΡΠ΅ΡΡΠ²ΡΡΡΠ°Ρ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ° Π½Π΅ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΠΎΡΠΎΡΠΎ Π΅ΡΠ»ΠΈ Envoy ΡΠ°Π·Π²Π΅ΡΠ½ΡΡ Π² ΡΡΠ΅Π½Π°ΡΠΈΠΈ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΎΡΠ΅Π½Ρ ΠΌΠ°Π»ΠΎ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΉ, ΡΡΠ΅Π±ΡΡΡΠΈΡ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΠ΅ΡΡΡΡΠΎΠ² Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ. ΠΠ΅Ρ Π³Π°ΡΠ°Π½ΡΠΈΠΈ, ΡΡΠΎ ΡΠ²ΡΠ·ΠΈ Π±ΡΠ΄ΡΡ ΡΠ°Π²Π½ΠΎΠΌΠ΅ΡΠ½ΠΎ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ°Π±ΠΎΡΠΈΠΌΠΈ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ. ΠΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ΅ΡΠ΅Π½ΠΎ ΠΏΡΡΠ΅ΠΌ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π±Π°Π»Π°Π½ΡΠΈΡΠΎΠ²ΠΊΠΈ ΡΠ°Π±ΠΎΡΠΈΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΉ, ΠΏΡΠΈ ΠΊΠΎΡΠΎΡΠΎΠΉ Π±ΡΠ΄Π΅Ρ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΎΠ±ΠΌΠ΅Π½Π° ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡΠΌΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ°Π±ΠΎΡΠΈΠΌΠΈ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ.
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ (Conclusion)
ΠΠΎΠ΄Π΅Π»Ρ ΠΏΠΎΡΠΎΠΊΠΎΠ² Envoy ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½Π° Π΄Π»Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΡΡΠΎΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΠΌΠ°ΡΡΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠ° Π·Π° ΡΡΠ΅Ρ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½ΠΎ ΡΠ°ΡΡΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΏΠ°ΠΌΡΡΠΈ ΠΈ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΉ, Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΈ Π½Π΅ Π½Π°ΡΡΡΠΎΠ΅Π½Ρ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ. ΠΡΠ° ΠΌΠΎΠ΄Π΅Π»Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π΅ΠΌΡ ΠΎΡΠ΅Π½Ρ Ρ
ΠΎΡΠΎΡΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΏΡΠΈ ΠΎΡΠ΅Π½Ρ Π²ΡΡΠΎΠΊΠΎΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π΅ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΈ ΠΏΡΠΎΠΏΡΡΠΊΠ½ΠΎΠΉ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΠΈ.
ΠΠ°ΠΊ Ρ ΠΊΡΠ°ΡΠΊΠΎ ΡΠΏΠΎΠΌΡΠ½ΡΠ» Π² Π’Π²ΠΈΡΡΠ΅ΡΠ΅, Π΄ΠΈΠ·Π°ΠΉΠ½ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΏΠΎΠ²Π΅ΡΡ
ΠΏΠΎΠ»Π½ΠΎΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅ΡΠ΅Π²ΠΎΠ³ΠΎ ΡΡΠ΅ΠΊΠ° Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΊΠ°ΠΊ DPDK (Data Plane Development Kit), ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ ΡΠΎΠΌΡ, ΡΡΠΎ ΠΎΠ±ΡΡΠ½ΡΠ΅ ΡΠ΅ΡΠ²Π΅ΡΡ Π±ΡΠ΄ΡΡ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΠΌΠΈΠ»Π»ΠΈΠΎΠ½Ρ Π·Π°ΠΏΡΠΎΡΠΎΠ² Π² ΡΠ΅ΠΊΡΠ½Π΄Ρ ΠΏΡΠΈ ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ΅ L7. ΠΡΠ΄Π΅Ρ ΠΎΡΠ΅Π½Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ, ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΎ Π² Π±Π»ΠΈΠΆΠ°ΠΉΡΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π»Π΅Ρ.
ΠΠ΄ΠΈΠ½ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ Π±ΡΡΡΡΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ: ΠΌΠ΅Π½Ρ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ°Π· ΡΠΏΡΠ°ΡΠΈΠ²Π°Π»ΠΈ, ΠΏΠΎΡΠ΅ΠΌΡ ΠΌΡ Π²ΡΠ±ΡΠ°Π»ΠΈ C ++ Π΄Π»Ρ Envoy. ΠΡΠΈΡΠΈΠ½Π° ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΡΡΠΎ Π²ΡΠ΅ Π΅ΡΠ΅ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ ΡΠΈΡΠΎΠΊΠΎ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½ΡΠΉ ΡΠ·ΡΠΊ ΠΏΡΠΎΠΌΡΡΠ»Π΅Π½Π½ΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΡΡΠΎΠΈΡΡ Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΡ, ΠΎΠΏΠΈΡΠ°Π½Π½ΡΡ Π² ΡΡΠΎΠΌ ΠΏΠΎΡΡΠ΅. C ++ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎ Π½Π΅ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΠΈΡ Π΄Π»Ρ Π²ΡΠ΅Ρ
ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ Π΄Π»Ρ ΠΌΠ½ΠΎΠ³ΠΈΡ
ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ², Π½ΠΎ Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ
ΡΠ»ΡΡΠ°Π΅Π² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΡΠΎ Π²ΡΠ΅ Π΅ΡΠ΅ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠ°Π±ΠΎΡΡ (to get the job done).
Π‘ΡΡΠ»ΠΊΠΈ Π½Π° ΠΊΠΎΠ΄ (Links to code)
Π‘ΡΡΠ»ΠΊΠΈ Π½Π° ΡΠ°ΠΉΠ»Ρ Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°ΠΌΠΈ ΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ², ΠΎΠ±ΡΡΠΆΠ΄Π°Π΅ΠΌΡΠ΅ Π² ΡΡΠΎΠΌ ΠΏΠΎΡΡΠ΅:
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
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com