ΠΡΠ΅Π²ΠΎΠ΄ Π½Π° ΡΡΠ°ΡΠΈΡΡΠ°:
Π’Π°Π·ΠΈ ΡΡΠ°ΡΠΈΡ ΠΌΠΈ ΡΠ΅ ΡΡΠΎΡΠΈ Π΄ΠΎΡΡΠ°ΡΡΡΠ½ΠΎ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½Π°, Π° ΡΡΠΉ ΠΊΠ°ΡΠΎ Envoy Π½Π°ΠΉ-ΡΠ΅ΡΡΠΎ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΊΠ°ΡΠΎ ΡΠ°ΡΡ ΠΎΡ Β«istioΒ» ΠΈΠ»ΠΈ ΠΏΡΠΎΡΡΠΎ ΠΊΠ°ΡΠΎ Β«ingress controllerΒ» Π² Kubernetes, ΠΏΠΎΠ²Π΅ΡΠ΅ΡΠΎ Ρ
ΠΎΡΠ° Π½ΡΠΌΠ° Π΄Π° ΠΈΠΌΠ°Ρ ΡΡΡΠΎΡΠΎ Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Ρ Π½Π΅Π³ΠΎ, ΠΊΠ°ΠΊΡΠΎ Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Ρ ΡΠΈΠΏΠΈΡΠ½ΠΈ ΠΈΠ½ΡΡΠ°Π»Π°ΡΠΈΠΈ Π½Π° Nginx ΠΈΠ»ΠΈ Haproxy. ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠΎΠ²Π°,Π°ΠΊΠΎ Π½Π΅ΡΠΎ ΡΠ΅ Π½Π°Π»ΠΎΠΆΠΈ, Π±ΠΈ Π±ΠΈΠ»ΠΎ Π΄ΠΎΠ±ΡΠ΅ Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ΠΌ ΠΊΠ°ΠΊ Π΅ ΡΡΡΡΠΎΠ΅Π½ΠΎ ΠΎΡΠ²ΡΡΡΠ΅. ΠΠΏΠΈΡΠ°Ρ
ΡΠ΅ Π΄Π° ΠΏΡΠ΅Π²Π΅Π΄Π° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉ-ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ΅ΠΊΡΡ Π½Π° Π±ΡΠ»Π³Π°ΡΡΠΊΠΈ, Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ ΠΈ ΡΠΏΠ΅ΡΠΈΠ°Π»Π½ΠΈ ΡΠ΅ΡΠΌΠΈΠ½ΠΈ; Π·Π° ΡΠ΅Π·ΠΈ, ΠΊΠΎΠΈΡΠΎ Π½Π΅ ΠΆΠ΅Π»Π°ΡΡ Π΄Π° Π²ΠΈΠΆΠ΄Π°Ρ ΡΠΎΠ²Π°, ΠΎΡΡΠ°Π²ΠΈΡ
ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»ΠΈΡΠ΅ Π² ΡΠΊΠΎΠ±ΠΊΠΈ. ΠΠΎΠ±ΡΠ΅ Π΄ΠΎΡΠ»ΠΈ ΠΏΠΎΠ΄ ΠΊΠ°Ρ.
Π’Π΅Ρ
Π½ΠΈΡΠ΅ΡΠΊΠ°ΡΠ° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Π½Π° Π½ΠΈΡΠΊΠΎ Π½ΠΈΠ²ΠΎ ΠΎΡΠ½ΠΎΡΠ½ΠΎ ΠΊΠΎΠ΄Π° Π½Π° Envoy Π² ΠΌΠΎΠΌΠ΅Π½ΡΠ° Π΅ Π΄ΠΎΡΡΠ° ΠΎΡΠΊΡΠ΄Π½Π°. ΠΠ° Π΄Π° ΠΊΠΎΡΠΈΠ³ΠΈΡΠ°ΠΌ ΡΠΎΠ²Π°, ΠΏΠ»Π°Π½ΠΈΡΠ°ΠΌ Π΄Π° Π½Π°ΠΏΡΠ°Π²Ρ ΡΠ΅ΡΠΈΡ ΡΡΠ°ΡΠΈΠΈ Π² Π±Π»ΠΎΠ³Π° Π·Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΠΈ Π½Π° Envoy. Π’ΡΠΉ ΠΊΠ°ΡΠΎ ΡΠΎΠ²Π° Π΅ ΠΏΡΡΠ²Π°ΡΠ° ΡΡΠ°ΡΠΈΡ, ΠΌΠΎΠ»Ρ, ΠΎΡΡΠ°Π²Π΅ΡΠ΅ ΠΌΠΈ Π²Π°ΡΠ΅ΡΠΎ ΠΌΠ½Π΅Π½ΠΈΠ΅ ΠΈ ΠΊΠ°ΠΊΠ²ΠΎ Π±ΠΈ Π²ΠΈ Π±ΠΈΠ»ΠΎ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ Π² ΡΠ»Π΅Π΄Π²Π°ΡΠΈΡΠ΅ ΡΡΠ°ΡΠΈΠΈ.
ΠΠ΄ΠΈΠ½ ΠΎΡ Π½Π°ΠΉ-ΡΠ΅ΡΡΠΎ Π·Π°Π΄Π°Π²Π°Π½ΠΈΡΠ΅ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈ Π²ΡΠΏΡΠΎΡΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΏΠΎΠ»ΡΡΠ°Π²Π°ΠΌ Π·Π° Envoy, Π΅ ΠΈΡΠΊΠ°Π½Π΅ΡΠΎ Π·Π° Π½ΠΈΡΠΊΠΎ Π½ΠΈΠ²ΠΎ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π°ΡΠ° ΠΌΠΎΠ΄Π΅Π» Π½Π° Π½ΠΈΡΠΊΠΈ (threading model). Π ΡΠΎΠ·ΠΈ ΠΏΠΎΡΡ ΡΠ΅ ΠΎΠΏΠΈΡΠ° ΠΊΠ°ΠΊ Envoy ΡΠ²ΡΡΠ·Π²Π° ΡΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡΡΠ° Ρ Π½ΠΈΡΠΊΠΈΡΠ΅ ΠΈ ΡΠ΅ Π΄Π°ΠΌ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° Π·Π° Π»ΠΎΠΊΠ°Π»Π½ΠΎ ΡΡΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ Π½Π° Π½ΠΈΡΠΊΠΈ (Thread Local Storage), ΠΊΠΎΡΡΠΎ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°, Π·Π° Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈ ΠΊΠΎΠ΄Π° ΠΏΠΎ-ΠΏΠ°ΡΠ°Π»Π΅Π»Π΅Π½ ΠΈ Π²ΠΈΡΠΎΠΊΠΎΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π΅Π½.
ΠΠ±Ρ ΠΏΡΠ΅Π³Π»Π΅Π΄ Π½Π° Π½ΠΈΡΠΊΠΈΡΠ΅ (Threading overview)
![[ΠΠ΅ΡΠ΅Π²ΠΎΠ΄] ΠΠΎΠ΄Π΅Π» Π½Π° Π½ΠΈΡΠΊΠΈΡΠ΅ Π½Π° Envoy (Envoy threading model)](/wp-content/uploads/2019/04/c5028463db1eb5b07ccb1a3af1f64a03.jpeg)
Envoy ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΡΠΈ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΡΠΈΠΏΠ° Π½ΠΈΡΠΊΠΈ:
- ΠΡΠ½ΠΎΠ²Π΅Π½ (Main): Π’Π°Π·ΠΈ Π½ΠΈΡΠΊΠ° ΡΠΏΡΠ°Π²Π»ΡΠ²Π° ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ΡΠΎ ΠΈ ΡΠΏΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΏΡΠΎΡΠ΅ΡΠ°, ΡΡΠ»Π°ΡΠ° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° API XDS (xDiscovery Service), Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ DNS, ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° Π·Π΄ΡΠ°Π²ΠΎΡΠ»ΠΎΠ²Π½ΠΎΡΠΎ ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ (health checking), ΠΎΠ±ΡΠΎ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΊΠ»ΡΡΡΠ΅ΡΠ° ΠΈ ΠΏΡΠΎΡΠ΅ΡΠ° Π½Π° ΡΠ°Π±ΠΎΡΠ° Π½Π° ΡΡΠ»ΡΠ³Π°ΡΠ° (runtime), Π½ΡΠ»ΠΈΡΠ°Π½Π΅ Π½Π° ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ°ΡΠ°, Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠΈΡΠ°Π½Π΅ ΠΈ ΠΎΠ±ΡΠΎ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΡΠΎΡΠ΅ΡΠΈΡΠ΅ β Linux ΡΠΈΠ³Π½Π°Π»ΠΈ, Π³ΠΎΡΠ΅ΡΠΎ ΡΠ΅ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ (hot restart) ΠΈ Ρ.Π½. ΠΡΠΈΡΠΊΠΎ, ΠΊΠΎΠ΅ΡΠΎ ΡΠ΅ ΡΠ»ΡΡΠ²Π° Π² ΡΠ°Π·ΠΈ Π½ΠΈΡΠΊΠ°, Π΅ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎ ΠΈ βΠ½Π΅Π±Π»ΠΎΠΊΠΈΡΡΡΡΠ΅Π΅β. ΠΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΠΎΡΠ½ΠΎΠ²Π½Π°ΡΠ° Π½ΠΈΡΠΊΠ° ΠΊΠΎΠΎΡΠ΄ΠΈΠ½ΠΈΡΠ° Π²ΡΠΈΡΠΊΠΈ ΠΊΡΠΈΡΠΈΡΠ½ΠΈ ΠΏΡΠΎΡΠ΅ΡΠΈ Π½Π° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡΡΠ°, Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΊΠΎΠΈΡΠΎ Π½Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π³ΠΎΠ»ΡΠΌΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ CPU. Π’ΠΎΠ²Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π³ΠΎΠ»ΡΠΌΠ° ΡΠ°ΡΡ ΠΎΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΡΠΊΠΈΡ ΠΊΠΎΠ΄ Π΄Π° Π±ΡΠ΄Π΅ Π½Π°ΠΏΠΈΡΠ°Π½ ΡΠ°ΠΊΠ°, ΡΡΠΊΠ°Ρ Π΅ Π΅Π΄Π½ΠΎΠΏΠΎΡΠΎΡΠ΅Π½.
- Π Π°Π±ΠΎΡΠ΅Π½ (Worker): ΠΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ Envoy ΡΡΠ·Π΄Π°Π²Π° ΡΠ°Π±ΠΎΡΠ½Π° Π½ΠΈΡΠΊΠ° (worker thread) Π·Π° Π²ΡΠ΅ΠΊΠΈ ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΈ ΠΏΠΎΡΠΎΠΊ Π² ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ°, ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠ°Π½ΠΎ ΡΡΠ΅Π· ΠΎΠΏΡΠΈΡΡΠ°
--concurrency. ΠΡΠ΅ ΡΠ°Π±ΠΎΡΠ½ΠΈ ΠΏΠΎΡΠΎΡΠΈ ΡΡΠ°ΡΡΠΈΡΠ°Ρ "Π½Π΅Π±Π»ΠΎΠΊΠΈΡΠ°ΡΠ°" ΡΠΈΠΊΡΠ» ΠΎΡ ΡΡΠ±ΠΈΡΠΈΡ (event loop), ΠΊΠΎΠΉΡΠΎ ΠΎΡΠ³ΠΎΠ²Π°ΡΡ Π·Π° ΠΏΡΠΎΡΠ»ΡΡΠ²Π°Π½Π΅ΡΠΎ (listening) Π½Π° Π²ΡΠ΅ΠΊΠΈ ΡΠ»ΡΡΠ°ΡΠ΅Π» (listener). ΠΡΠΌ ΠΌΠΎΠΌΠ΅Π½ΡΠ° Π½Π° Π½Π°ΠΏΠΈΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΡΡΠ°ΡΠΈΡΡΠ° (29 ΡΠ»ΠΈ 2017 Π³.) Π½ΡΠΌΠ° ΡΠ΅Π³ΠΌΠ΅Π½ΡΠΈΡΠ°Π½Π΅ (sharding) Π½Π° ΡΠ»ΡΡΠ°ΡΠ΅Π»Ρ (listener), ΠΏΡΠΈΠ΅ΠΌΠ°Π½Π΅ Π½Π° Π½ΠΎΠ²ΠΈ Π²ΡΡΠ·ΠΊΠΈ, ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° ΠΈΠ½ΡΡΠ°Π½ΡΠΈΡ Π½Π° ΡΡΠ΅ΠΊΠ° ΠΎΡ ΡΠΈΠ»ΡΡΠΈ Π·Π° ΡΠ²ΡΡΠ·Π²Π°Π½Π΅ ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° Π²ΡΠΈΡΠΊΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΏΠΎ Π²Ρ ΠΎΠ΄-ΠΈΠ·Ρ ΠΎΠ΄ (IO) ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° Π²ΡΡΠ·ΠΊΠ°ΡΠ°. ΠΡΠ½ΠΎΠ²ΠΎ, ΡΠΎΠ²Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π³ΠΎΠ»ΡΠΌΠ° ΡΠ°ΡΡ ΠΎΡ ΠΊΠΎΠ΄Π° Π·Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° Π²ΡΡΠ·ΠΊΠΈΡΠ΅ Π΄Π° Π±ΡΠ΄Π΅ Π½Π°ΠΏΠΈΡΠ°Π½, ΡΡΠΊΠ°Ρ Π΅ Π΅Π΄Π½ΠΎΠΏΠΎΡΠΎΡΠ΅Π½. - Π€Π°ΠΉΠ»ΠΎΠ² (File flusher): ΠΡΠ΅ΠΊΠΈ ΡΠ°ΠΉΠ», ΠΊΠΎΠΉΡΠΎ Π·Π°ΠΏΠΈΡΠ²Π° Envoy, ΠΎΡΠ½ΠΎΠ²Π½ΠΎ Π΄Π½Π΅Π²Π½ΠΈΡΠΈ Π·Π° Π΄ΠΎΡΡΡΠΏ (access logs), Π² ΠΌΠΎΠΌΠ΅Π½ΡΠ° ΠΈΠΌΠ° Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌ Π±Π»ΠΎΠΊΠΈΡΠ°Ρ ΠΏΠΎΡΠΎΠΊ. Π’ΠΎΠ²Π° ΡΠ΅ Π΄ΡΠ»ΠΆΠΈ Π½Π° ΡΠ°ΠΊΡΠ°, ΡΠ΅ Π·Π°ΠΏΠΈΡΠ²Π°Π½Π΅ΡΠΎ Π² ΡΠ°ΠΉΠ»ΠΎΠ²Π΅, ΠΊΠ΅ΡΠΈΡΠ°Π½ΠΈ ΠΎΡ ΡΠ°ΠΉΠ»ΠΎΠ²Π°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ°, Π΄ΠΎΡΠΈ ΠΏΡΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π°
O_NONBLOCKΠΏΠΎΠ½ΡΠΊΠΎΠ³Π° ΠΌΠΎΠΆΠ΅ Π΄Π° Π±Π»ΠΎΠΊΠΈΡΠ° (ΡΡΡ sigh). ΠΠΎΠ³Π°ΡΠΎ ΡΠ°Π±ΠΎΡΠ½ΠΈΡΠ΅ ΠΏΠΎΡΠΎΡΠΈ ΡΡΡΠ±Π²Π° Π΄Π° Π·Π°ΠΏΠΈΡΠ°Ρ Π²ΡΠ² ΡΠ°ΠΉΠ», Π΄Π°Π½Π½ΠΈΡΠ΅ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΡΡ Π² Π±ΡΡΠ΅Ρ Π² ΠΏΠ°ΠΌΠ΅ΡΡΠ°, ΠΊΡΠ΄Π΅ΡΠΎ Π² ΠΊΡΠ°ΠΉΠ½Π° ΡΠΌΠ΅ΡΠΊΠ° ΡΠ΅ ΠΈΠ·Ρ Π²ΡΡΠ»ΡΡ ΡΡΠ΅Π· ΠΏΠΎΡΠΎΠΊΠ° 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) ΡΠ°ΠΌΠΎ ΠΏΡΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»Π½Π° ΠΏΠ°ΡΠ°Π»Π΅Π»ΠΈΠ·Π°ΡΠΈΡ.
ΠΠ°ΠΊΠ²ΠΎ ΠΎΠ·Π½Π°ΡΠ°Π²Π° Π½Π΅Π±Π»ΠΎΠΊΠΈΡΠ°ΡΠΈΡΡ ΡΠ΅ΠΆΠΈΠΌ
Π’Π΅ΡΠΌΠΈΠ½ΡΡ βΠ½Π΅Π±Π»ΠΎΠΊΠΈΡΠ°Ρβ Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡΠ°ΡΠ½ΠΎ ΠΏΡΠΈ ΠΎΠ±ΡΡΠΆΠ΄Π°Π½Π΅ Π½Π° Π½Π°ΡΠΈΠ½Π°, ΠΏΠΎ ΠΊΠΎΠΉΡΠΎ ΡΠ°Π±ΠΎΡΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡΡ ΠΈ ΡΠ°Π±ΠΎΡΠ½ΠΈΡΠ΅ ΠΏΠΎΡΠΎΡΠΈ. Π¦Π΅Π»ΠΈΡΡ ΠΊΠΎΠ΄ Π΅ Π½Π°ΠΏΠΈΡΠ°Π½ ΠΏΡΠΈ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ, ΡΠ΅ Π½ΠΈΡΠΎ Π½ΠΈΠΊΠΎΠ³Π° Π½Π΅ Π±Π»ΠΎΠΊΠΈΡΠ°. ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠΎΠ²Π°, ΡΠΎΠ²Π° Π½Π΅ Π΅ ΡΡΠ²ΡΠ΅ΠΌ Π²ΡΡΠ½ΠΎ.
Envoy ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π½ΡΠΊΠΎΠ»ΠΊΠΎ Π΄ΡΠ»Π³ΠΈ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ Π½Π° ΠΏΡΠΎΡΠ΅ΡΠ°:
- ΠΠ°ΠΊΡΠΎ Π²Π΅ΡΠ΅ Π±Π΅ ΡΠΏΠΎΠΌΠ΅Π½Π°ΡΠΎ, ΠΏΡΠΈ Π·Π°ΠΏΠΈΡΠ²Π°Π½Π΅ Π½Π° Π΄ΠΎΡΡΡΠΏΠ½ΠΈ ΠΆΡΡΠ½Π°Π»ΠΈ Π²ΡΠΈΡΠΊΠΈ ΡΠ°Π±ΠΎΡΠ½ΠΈ ΠΏΠΎΡΠΎΡΠΈ ΠΏΠΎΠ»ΡΡΠ°Π²Π°Ρ Π΅Π΄Π½Π° ΠΈ ΡΡΡΠ° Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° ΠΏΡΠ΅Π΄ΠΈ Π·Π°ΠΏΡΠ»Π²Π°Π½Π΅ΡΠΎ Π½Π° Π±ΡΡΠ΅ΡΠ° Π½Π° ΠΆΡΡΠ½Π°Π»Π° Π² ΠΏΠ°ΠΌΠ΅ΡΡΠ°. ΠΡΠ΅ΠΌΠ΅ΡΠΎ Π·Π° Π·Π°Π΄ΡΡΠΆΠ°Π½Π΅ Π½Π° Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ°ΡΠ° ΡΡΡΠ±Π²Π° Π΄Π° Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Π½ΠΈΡΠΊΠΎ, Π½ΠΎ Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°Π·ΠΈ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° Π΄Π° Π±ΡΠ΄Π΅ ΠΎΡΠΏΠΎΡΠ²Π°Π½Π° ΠΏΡΠΈ Π²ΠΈΡΠΎΠΊΠ° ΠΏΠ°ΡΠ°Π»Π΅Π»ΠΈΠ·Π°ΡΠΈΡ ΠΈ Π²ΠΈΡΠΎΠΊΠ° ΠΏΡΠΎΠΏΡΡΠΊΠ½Π° ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ.
- Envoy ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ»ΠΎΠΆΠ½Π° ΡΠΈΡΡΠ΅ΠΌΠ° Π·Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ°ΡΠ°, ΠΊΠΎΡΡΠΎ Π΅ Π»ΠΎΠΊΠ°Π»Π½Π° Π·Π° ΠΏΠΎΡΠΎΠΊΠ°. Π’ΠΎΠ²Π° ΡΠ΅ Π±ΡΠ΄Π΅ ΡΠ΅ΠΌΠ° Π½Π° ΠΎΡΠ΄Π΅Π»Π΅Π½ ΠΏΠΎΡΡ. ΠΡΠ΅ ΠΏΠ°ΠΊ, Π½Π°ΠΊΡΠ°ΡΠΊΠΎ ΡΠ΅ ΡΠΏΠΎΠΌΠ΅Π½Π°, ΡΠ΅ ΠΊΠ°ΡΠΎ ΡΠ°ΡΡ ΠΎΡ Π»ΠΎΠΊΠ°Π»Π½Π°ΡΠ° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ°ΡΠ° Π½Π° ΠΏΠΎΡΠΎΠΊΠ° ΠΏΠΎΠ½ΡΠΊΠΎΠ³Π° Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° Π·Π° ΡΠ΅Π½ΡΡΠ°Π»Π½ΠΎΡΠΎ "Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ Π½Π° ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ°ΡΠ°". Π’Π°Π·ΠΈ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° Π½ΠΈΠΊΠΎΠ³Π° Π½Π΅ ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠ°.
- ΠΡΠ½ΠΎΠ²Π½ΠΈΡΡ ΠΏΠΎΡΠΎΠΊ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ½ΠΎ ΡΠ΅ Π½ΡΠΆΠ΄Π°Π΅ ΠΎΡ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠΈΡ Ρ Π²ΡΠΈΡΠΊΠΈ ΡΠ°Π±ΠΎΡΠ½ΠΈ ΠΏΠΎΡΠΎΡΠΈ. Π’ΠΎΠ²Π° ΡΡΠ°Π²Π° ΡΡΠ΅Π· "ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°Π½Π΅" ΠΎΡ ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡ ΠΏΠΎΡΠΎΠΊ Π² ΡΠ°Π±ΠΎΡΠ½ΠΈΡΠ΅ ΠΏΠΎΡΠΎΡΠΈ, Π° ΠΏΠΎΠ½ΡΠΊΠΎΠ³Π° ΠΈ ΠΎΡ ΡΠ°Π±ΠΎΡΠ½ΠΈΡΠ΅ ΠΏΠΎΡΠΎΡΠΈ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡ ΠΏΠΎΡΠΎΠΊ. ΠΠ° ΠΈΠ·ΠΏΡΠ°ΡΠ°Π½Π΅ΡΠΎ Π΅ Π½ΡΠΆΠ½Π° Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ°, Π·Π° Π΄Π° ΠΌΠΎΠΆΠ΅ ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°Π½ΠΎΡΠΎ ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΏΠΎΡΡΠ°Π²Π΅Π½ΠΎ Π² ΠΎΠΏΠ°ΡΠΊΠ° Π·Π° ΠΏΠΎΡΠ»Π΅Π΄Π²Π°ΡΠ° Π΄ΠΎΡΡΠ°Π²ΠΊΠ°. Π’Π΅Π·ΠΈ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ Π½ΠΈΠΊΠΎΠ³Π° Π½Π΅ ΡΡΡΠ±Π²Π° Π΄Π° ΠΏΠΎΠ΄Π»Π΅ΠΆΠ°Ρ Π½Π° ΡΠ΅ΡΠΈΠΎΠ·Π½ΠΎ ΡΡΡΠ΅Π²Π½ΠΎΠ²Π°Π½ΠΈΠ΅, Π½ΠΎ Π²ΡΠ΅ ΠΏΠ°ΠΊ ΠΌΠΎΠ³Π°Ρ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈ Π΄Π° Π±ΡΠ΄Π°Ρ Π±Π»ΠΎΠΊΠΈΡΠ°Π½ΠΈ.
- ΠΠΎΠ³Π°ΡΠΎ Envoy Π·Π°ΠΏΠΈΡΠ²Π° Π² ΡΠΈΡΡΠ΅ΠΌΠ½ΠΈΡ ΠΏΠΎΡΠΎΠΊ Π·Π° Π³ΡΠ΅ΡΠΊΠΈ (standard error), ΡΠΎΠΉ ΠΏΠΎΠ»ΡΡΠ°Π²Π° Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° Π½Π° ΡΠ΅Π»ΠΈΡ ΠΏΡΠΎΡΠ΅Ρ. ΠΠ°ΡΠΎ ΡΡΠ»ΠΎ, Π»ΠΎΠΊΠ°Π»Π½ΠΎΡΠΎ Π²ΠΎΠ΄Π΅Π½Π΅ Π½Π° ΠΆΡΡΠ½Π°Π» ΠΎΡ Envoy ΡΠ΅ ΡΡΠΈΡΠ° Π·Π° ΡΠΆΠ°ΡΠ½ΠΎ ΠΏΠΎ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ°, Π·Π°ΡΠΎΠ²Π° ΠΌΡ Π½Π΅ ΡΠ΅ ΠΎΠ±ΡΡΡΠ° ΠΌΠ½ΠΎΠ³ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π·Π° ΠΏΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΈΠ΅.
- ΠΠΌΠ° Π½ΡΠΊΠΎΠ»ΠΊΠΎ Π΄ΡΡΠ³ΠΈ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΈ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ, Π½ΠΎ Π½ΠΈΡΠΎ Π΅Π΄Π½Π° ΠΎΡ ΡΡΡ Π½Π΅ Π΅ ΠΊΡΠΈΡΠΈΡΠ½Π° Π·Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° ΠΈ Π½ΠΈΠΊΠΎΠ³Π° Π½Π΅ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΎΡΠΏΠΎΡΠ²Π°.
ΠΠΎΠΊΠ°Π»Π½ΠΎ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ Π½Π° ΠΏΠΎΡΠΎΠΊΠ° (Thread local storage)
ΠΠΎΡΠ°Π΄ΠΈ Π½Π°ΡΠΈΠ½Π°, ΠΏΠΎ ΠΊΠΎΠΉΡΠΎ Envoy ΠΎΡΠ΄Π΅Π»Ρ Π·Π°Π΄ΡΠ»ΠΆΠ΅Π½ΠΈΡΡΠ° Π½Π° ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡ ΠΏΠΎΡΠΎΠΊ ΠΎΡ Π·Π°Π΄ΡΠ»ΠΆΠ΅Π½ΠΈΡΡΠ° Π½Π° ΡΠ°Π±ΠΎΡΠ½ΠΈΡ ΠΏΠΎΡΠΎΠΊ, ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π° ΠΈΠ·ΠΈΡΠΊΠ²Π°Π½Π΅, ΡΠ΅ ΡΠ»ΠΎΠΆΠ½Π°ΡΠ° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΈΠ·Π²ΡΡΡΠ΅Π½Π° Π² Π³Π»Π°Π²Π½ΠΈΡ ΠΏΠΎΡΠΎΠΊ ΠΈ ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π΅Π½Π° Π½Π° Π²ΡΠ΅ΠΊΠΈ ΡΠ°Π±ΠΎΡΠ΅Π½ ΠΏΠΎΡΠΎΠΊ Ρ Π²ΠΈΡΠΎΠΊΠ° ΡΡΠ΅ΠΏΠ΅Π½ Π½Π° ΠΏΠ°ΡΠ°Π»Π΅Π»ΠΈΠ·ΡΠΌ. Π ΡΠΎΠ·ΠΈ ΡΠ°Π·Π΄Π΅Π» ΡΠ΅ ΠΎΠΏΠΈΡΠ²Π° ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° Envoy Thread Local Storage (TLS) Π½Π° Π²ΠΈΡΠΎΠΊΠΎ Π½ΠΈΠ²ΠΎ. Π ΡΠ»Π΅Π΄Π²Π°ΡΠΈΡ ΡΠ°Π·Π΄Π΅Π» ΡΠ΅ ΠΎΠΏΠΈΡΠ° ΠΊΠ°ΠΊ ΡΡ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΊΠ»ΡΡΡΠ΅ΡΠ°.
![[ΠΠ΅ΡΠ΅Π²ΠΎΠ΄] ΠΠΎΠ΄Π΅Π» Π½Π° Π½ΠΈΡΠΊΠΈΡΠ΅ Π½Π° Envoy (Envoy threading model)](/wp-content/uploads/2019/04/a47af1e8eb1f55a4d7609b3ff3ee9ce1.jpeg)
ΠΠ°ΠΊΡΠΎ Π²Π΅ΡΠ΅ Π±Π΅ΡΠ΅ ΡΠΏΠΎΠΌΠ΅Π½Π°ΡΠΎ, ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡΡ ΠΏΠΎΡΠΎΠΊ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π° ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π²ΡΠΈΡΠΊΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΡΠΎ (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 (Envoy threading model)](/wp-content/uploads/2019/04/238f5718729e1f12f8f0d6507f16abe8.jpeg)
Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΏΠΎΡΠΎΡΠΈΡΠ΅ Π½Π° ΠΊΠ»Π°ΡΡΠ΅ΡΠ° Π²ΠΊΠ»ΡΡΠ²Π° ΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ ΠΈ Π΅ΡΠ°ΠΏΠΈ:
- ΠΠ΅Π½ΠΈΠ΄ΠΆΡΡΡΡ Π½Π° ΠΊΠ»Π°ΡΡΠ΅ΡΠ° Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Π² 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), ΡΠ°Π±Π»ΠΈΡΠΈΡΠ΅ Π½Π° ΠΌΠ°ΡΡΡΡΡΠΈ ΡΠ΅ ΡΡΠ·Π΄Π°Π²Π°Ρ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡ ΠΏΠΎΡΠΎΠΊ. Snapshot, ΡΠ°ΠΌΠΎ Π·Π° ΡΠ΅ΡΠ΅Π½Π΅, ΡΠ΅ Π±ΡΠ΄Π΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π΅Π½ Π½Π° Π²ΡΠ΅ΠΊΠΈ ΡΠ°Π±ΠΎΡΠ΅Π½ ΠΏΠΎΡΠΎΠΊ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΠ°ΡΠ° RCU (Read Copy Update). Π’ΠΎΠ²Π° ΠΏΡΠ°Π²ΠΈ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ Π² ΡΠ°Π±Π»ΠΈΡΠΈΡΠ΅ Π½Π° ΠΌΠ°ΡΡΡΡΡΠΈ Π°ΡΠΎΠΌΠ°ΡΠ½ΠΎ Π΅ΡΠ΅ΠΊΡΠΈΠ²Π½ΠΈ.
- ΠΠ΅ΡΠΈΡΠ°Π½Π΅ Π½Π° HTTP Π·Π°Π³Π»Π°Π²ΠΈΡ: ΠΠ°ΠΊΡΠΎ ΡΠ΅ ΠΎΠΊΠ°Π·Π²Π°, ΠΈΠ·ΡΠΈΡΠ»ΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° HTTP Π·Π°Π³Π»Π°Π²ΠΈΠ΅ΡΠΎ Π·Π° Π²ΡΡΠΊΠ° Π·Π°ΡΠ²ΠΊΠ° (ΠΏΡΠΈ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° ~25K+ RPS Π½Π° ΡΠ΄ΡΠΎ) Π΅ Π΄ΠΎΡΡΠ° ΡΠΊΡΠΏΠΎ. Envoy ΡΠ΅Π½ΡΡΠ°Π»Π½ΠΎ ΠΈΠ·ΡΠΈΡΠ»ΡΠ²Π° Π·Π°Π³Π»Π°Π²ΠΈΠ΅ΡΠΎ ΠΏΡΠΈΠ±Π»ΠΈΠ·ΠΈΡΠ΅Π»Π½ΠΎ Π½Π° Π²ΡΠ΅ΠΊΠΈ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½ ΡΠ΅ΠΊΡΠ½Π΄Π° ΠΈ Π³ΠΎ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ Π½Π° Π²ΡΠ΅ΠΊΠΈ ΡΠ°Π±ΠΎΡΠ½ΠΈΠΊ ΠΏΡΠ΅Π· TLS ΠΈ RCU.
ΠΠΌΠ° ΠΈ Π΄ΡΡΠ³ΠΈ ΡΠ»ΡΡΠ°ΠΈ, Π½ΠΎ ΠΏΡΠ΅Π΄Ρ ΠΎΠ΄Π½ΠΈΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠΈ ΡΡΡΠ±Π²Π° Π΄Π° ΠΎΡΠΈΠ³ΡΡΡΡ Π΄ΠΎΠ±ΡΠΎ ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ Π·Π° ΠΊΠ°ΠΊΠ²ΠΎ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° TLS.
ΠΠ·Π²Π΅ΡΡΠ½ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° (Known performance pitfalls)
ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠ΅ ΠΎΠ±ΡΠΎ Π²Π·Π΅ΡΠΎ Envoy ΡΠ°Π±ΠΎΡΠΈ Π΄ΠΎΡΡΠ° Π΄ΠΎΠ±ΡΠ΅, ΠΈΠΌΠ° Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΈ ΠΎΠ±Π»Π°ΡΡΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΈΠ·ΠΈΡΠΊΠ²Π°Ρ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΠΊΠΎΠ³Π°ΡΠΎ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Ρ ΠΌΠ½ΠΎΠ³ΠΎ Π²ΠΈΡΠΎΠΊΠ° ΠΏΠ°ΡΠ°Π»Π΅Π»Π½ΠΎΡΡ ΠΈ ΠΏΡΠΎΠΏΡΡΠΊΠ½Π° ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ:
- ΠΠ°ΠΊΡΠΎ Π²Π΅ΡΠ΅ Π΅ ΠΎΠΏΠΈΡΠ°Π½ΠΎ Π² ΡΠ°Π·ΠΈ ΡΡΠ°ΡΠΈΡ, Π² ΠΌΠΎΠΌΠ΅Π½ΡΠ° Π²ΡΠΈΡΠΊΠΈ ΡΠ°Π±ΠΎΡΠ½ΠΈ ΠΏΠΎΡΠΎΡΠΈ ΠΏΠΎΠ»ΡΡΠ°Π²Π°Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° ΠΏΡΠΈ Π·Π°ΠΏΠΈΡ Π² Π±ΡΡΠ΅ΡΠ° Π½Π° Π΄Π½Π΅Π²Π½ΠΈΠΊΠ° Π·Π° Π΄ΠΎΡΡΡΠΏ. ΠΡΠΈ Π²ΠΈΡΠΎΠΊΠ° ΠΏΠ°ΡΠ°Π»Π΅Π»Π½ΠΎΡΡ ΠΈ Π²ΠΈΡΠΎΠΊΠ° ΠΏΡΠΎΠΏΡΡΠΊΠ½Π° ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ, Π²Π΅ΡΠΎΡΡΠ½ΠΎ ΡΠ΅ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ°ΠΊΠ΅ΡΠΈΡΠ°Π½Π΅ Π½Π° Π΄Π½Π΅Π²Π½ΠΈΡΠΈΡΠ΅ Π·Π° Π΄ΠΎΡΡΡΠΏ Π·Π° Π²ΡΠ΅ΠΊΠΈ ΡΠ°Π±ΠΎΡΠ΅Π½ ΠΏΠΎΡΠΎΠΊ Π·Π° ΡΠΌΠ΅ΡΠΊΠ° Π½Π° Π½Π΅ΠΏΠΎΠ΄ΡΠ΅Π΄Π΅Π½Π° Π΄ΠΎΡΡΠ°Π²ΠΊΠ° ΠΏΡΠΈ Π·Π°ΠΏΠΈΡ Π² ΠΊΡΠ°ΠΉΠ½ΠΈΡ ΡΠ°ΠΉΠ». ΠΠ°ΡΠΎ Π°Π»ΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π°, ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΡΡΠ·Π΄Π°Π΄Π΅ ΠΎΡΠ΄Π΅Π»Π΅Π½ Π΄Π½Π΅Π²Π½ΠΈΠΊ Π·Π° Π΄ΠΎΡΡΡΠΏ Π·Π° Π²ΡΠ΅ΠΊΠΈ ΡΠ°Π±ΠΎΡΠ΅Π½ ΠΏΠΎΡΠΎΠΊ.
- ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠ΅ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ°ΡΠ° Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°Π½Π°, ΠΏΡΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π²ΠΈΡΠΎΠΊΠ° ΠΏΠ°ΡΠ°Π»Π΅Π»Π½ΠΎΡΡ ΠΈ ΠΏΡΠΎΠΏΡΡΠΊΠ½Π° ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ, Π²Π΅ΡΠΎΡΡΠ½ΠΎ ΡΠ΅ Π½Π°ΡΡΡΠΏΠΈ Π°ΡΠΎΠΌΠ°ΡΠ½Π° ΠΊΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠΈΡ Π½Π° ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡΠ°Π»Π½Π°ΡΠ° ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ°. Π Π΅ΡΠ΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΡΠΎΠ·ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΡΠ° Π±ΡΠΎΡΡΠΈ Π·Π° Π΅Π΄ΠΈΠ½ ΡΠ°Π±ΠΎΡΠ΅Π½ ΠΏΠΎΡΠΎΠΊ Ρ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ½ΠΎ Π½ΡΠ»ΠΈΡΠ°Π½Π΅ Π½Π° ΡΠ΅Π½ΡΡΠ°Π»Π½ΠΈΡΠ΅ Π±ΡΠΎΡΡΠΈ. Π’ΠΎΠ²Π° ΡΠ΅ Π±ΡΠ΄Π΅ ΡΠ°Π·Π³Π»Π΅Π΄Π°Π½ΠΎ Π² ΡΠ»Π΅Π΄Π²Π°ΡΠ° ΡΡΠ°ΡΠΈΡ.
- Π‘Π΅Π³Π°ΡΠ½Π°ΡΠ° Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ° Π½ΡΠΌΠ° Π΄Π° ΡΠ°Π±ΠΎΡΠΈ Π΄ΠΎΠ±ΡΠ΅, Π°ΠΊΠΎ Envoy Π΅ ΡΠ°Π·ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ Π² ΡΡΠ΅Π½Π°ΡΠΈΠΉ, Π² ΠΊΠΎΠΉΡΠΎ ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠ°Π»ΠΊΠΎ Π²ΡΡΠ·ΠΊΠΈ, ΠΈΠ·ΠΈΡΠΊΠ²Π°ΡΠΈ Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΈ ΡΠ΅ΡΡΡΡΠΈ Π·Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°. ΠΡΠΌΠ° Π³Π°ΡΠ°Π½ΡΠΈΡ, ΡΠ΅ Π²ΡΡΠ·ΠΊΠΈΡΠ΅ ΡΠ΅ Π±ΡΠ΄Π°Ρ ΡΠ°Π²Π½ΠΎΠΌΠ΅ΡΠ½ΠΎ ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ°Π±ΠΎΡΠ½ΠΈΡΠ΅ ΠΏΠΎΡΠΎΡΠΈ. Π’ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΡΠ΅ΡΠΈ ΡΡΠ΅Π· Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅ Π½Π° Π±Π°Π»Π°Π½ΡΠΈΡΠΎΠ²ΠΊΠ° Π½Π° ΡΠ°Π±ΠΎΡΠ½ΠΈΡΠ΅ Π²ΡΡΠ·ΠΊΠΈ, ΠΏΡΠΈ ΠΊΠΎΡΡΠΎ ΡΠ΅ Π±ΡΠ΄Π΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½Π° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΠΎΠ±ΠΌΠ΅Π½ Π½Π° Π²ΡΡΠ·ΠΊΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ°Π±ΠΎΡΠ½ΠΈ ΠΏΠΎΡΠΎΡΠΈ.
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ (Conclusion)
ΠΠΎΠ΄Π΅Π»ΡΡ Π½Π° ΠΏΠΎΡΠΎΡΠΈΡΠ΅ Envoy Π΅ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠ°Π½ Π΄Π° ΠΎΡΠΈΠ³ΡΡΠΈ ΠΏΡΠΎΡΡΠΎΡΠ° ΠΏΡΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅ΡΠΎ ΠΈ ΠΌΠ°ΡΠΈΠ²Π΅Π½ ΠΏΠ°ΡΠ°Π»Π΅Π»ΠΈΠ·ΡΠΌ, ΠΊΠ°ΡΠΎ ΡΡΡΠ΅Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»Π½ΠΎ Π½Π΅Π΅ΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΠΏΠ°ΠΌΠ΅ΡΡΠ° ΠΈ Π²ΡΡΠ·ΠΊΠΈΡΠ΅, Π°ΠΊΠΎ Π½Π΅ ΡΠ° ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½ΠΈ. Π’Π°Π·ΠΈ ΠΌΠΎΠ΄Π΅Π»Π½Π° ΡΡΡΡΠΊΡΡΡΠ° ΡΠ°Π±ΠΎΡΠΈ ΠΈΠ·ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ Π΄ΠΎΠ±ΡΠ΅ ΠΏΡΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π³ΠΎΠ»ΡΠΌ Π±ΡΠΎΠΉ ΠΏΠΎΡΠΎΡΠΈ ΠΈ ΠΏΡΠΎΠΏΡΡΠΊΠ½Π° ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ.
ΠΠ°ΠΊΡΠΎ ΡΠΏΠΎΠΌΠ΅Π½Π°Ρ
Π½Π°ΠΊΡΠ°ΡΠΊΠΎ Π² Twitter, Π΄ΠΈΠ·Π°ΠΉΠ½ΡΡ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ°Π±ΠΎΡΠΈ ΠΈ Π½Π°Π΄ Π½Π°ΠΏΡΠ»Π½ΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π΅Π½ ΠΌΡΠ΅ΠΆΠΎΠ² ΡΡΠ΅ΠΊ Π² ΡΠ΅ΠΆΠΈΠΌ Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ, ΠΊΠ°ΡΠΎ DPDK (Data Plane Development Kit), ΠΊΠΎΠ΅ΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ ΡΠΎΠ²Π° ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡΠ΅ ΡΡΡΠ²ΡΡΠΈ Π΄Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π°Ρ ΠΌΠΈΠ»ΠΈΠΎΠ½ΠΈ Π·Π°ΡΠ²ΠΊΠΈ Π² ΡΠ΅ΠΊΡΠ½Π΄Π° Ρ ΠΏΡΠ»Π½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° L7. Π©Π΅ Π±ΡΠ΄Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ ΠΊΠ°ΠΊΠ²ΠΎ ΡΠ΅ Π±ΡΠ΄Π΅ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΎ ΠΏΡΠ΅Π· ΡΠ»Π΅Π΄Π²Π°ΡΠΈΡΠ΅ Π½ΡΠΊΠΎΠ»ΠΊΠΎ Π³ΠΎΠ΄ΠΈΠ½ΠΈ.
ΠΠ΄ΠΈΠ½ ΠΏΠΎΡΠ»Π΅Π΄Π΅Π½ ΠΊΡΠ°ΡΡΠΊ ΠΊΠΎΠΌΠ΅Π½ΡΠ°Ρ: ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΡΠΈ ΠΌΠΈ Π·Π°Π΄Π°Π΄ΠΎΡ
Π° Π²ΡΠΏΡΠΎΡΠ° Π·Π°ΡΠΎ ΠΈΠ·Π±ΡΠ°Ρ
ΠΌΠ΅ C ++ Π·Π° Envoy. ΠΡΠΈΡΠΈΠ½Π°ΡΠ° ΠΎΡΡΠ°Π²Π°, ΡΠ΅ ΡΠΎΠ²Π° Π²ΡΠ΅ ΠΎΡΠ΅ Π΅ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½ΠΈΡΡ ΡΠΈΡΠΎΠΊΠΎ ΡΠ°Π·ΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½ Π΅Π·ΠΈΠΊ Π½Π° ΠΈΠ½Π΄ΡΡΡΡΠΈΠ°Π»Π½ΠΎ Π½ΠΈΠ²ΠΎ, Π½Π° ΠΊΠΎΠΉΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·Π³ΡΠ°Π΄ΠΈ Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΠ°ΡΠ°, ΠΎΠΏΠΈΡΠ°Π½Π° Π² ΡΠΎΠ·ΠΈ ΠΏΠΎΡΡ. C ++ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΎ Π½Π΅ Π΅ Π·Π° Π²ΡΠΈΡΠΊΠΈ ΠΈΠ»ΠΈ Π΄ΠΎΡΠΈ Π·Π° ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠΈ, Π½ΠΎ Π·Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈ ΡΠ»ΡΡΠ°ΠΈ Π½Π° ΡΠΏΠΎΡΡΠ΅Π±Π° Π²ΡΠ΅ ΠΎΡΠ΅ Π΅ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½ΠΈΡΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π·Π° ΠΈΠ·Π²ΡΡΡΠ²Π°Π½Π΅ Π½Π° ΡΠ°Π±ΠΎΡΠ°ΡΠ°.
ΠΠΈΠ½ΠΊΠΎΠ²Π΅ ΠΊΡΠΌ ΠΊΠΎΠ΄
ΠΠΈΠ½ΠΊΠΎΠ²Π΅ ΠΊΡΠΌ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΈ ΠΈ Π·Π°Π³Π»Π°Π²Π½ΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ, ΠΎΠ±ΡΡΠΆΠ΄Π°Π½ΠΈ Π² ΡΠΎΠ·ΠΈ ΠΏΠΎΡΡ:
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: habr.com
