[ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄] МодСл Π½Π° Π½ΠΈΡˆΠΊΠΈΡ‚Π΅ Π½Π° Envoy (Envoy threading model)

ΠŸΡ€Π΅Π²ΠΎΠ΄ Π½Π° статията: МодСл Π½Π° нишки Π½Π° Envoy β€” https://blog.envoyproxy.io/envoy-threading-model-a8d44b922310

Π’Π°Π·ΠΈ статия ΠΌΠΈ сС стори Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ интСрСсна, Π° Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Envoy Π½Π°ΠΉ-чСсто сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΊΠ°Ρ‚ΠΎ част ΠΎΡ‚ Β«istioΒ» ΠΈΠ»ΠΈ просто ΠΊΠ°Ρ‚ΠΎ Β«ingress controllerΒ» Π² Kubernetes, ΠΏΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ Ρ…ΠΎΡ€Π° няма Π΄Π° ΠΈΠΌΠ°Ρ‚ ΡΡŠΡ‰ΠΎΡ‚ΠΎ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ взаимодСйствиС с Π½Π΅Π³ΠΎ, ΠΊΠ°ΠΊΡ‚ΠΎ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ с Ρ‚ΠΈΠΏΠΈΡ‡Π½ΠΈ инсталации Π½Π° Nginx ΠΈΠ»ΠΈ Haproxy. Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°,Π°ΠΊΠΎ Π½Π΅Ρ‰ΠΎ сС Π½Π°Π»ΠΎΠΆΠΈ, Π±ΠΈ Π±ΠΈΠ»ΠΎ Π΄ΠΎΠ±Ρ€Π΅ Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ ΠΊΠ°ΠΊ Π΅ устроСно ΠΎΡ‚Π²ΡŠΡ‚Ρ€Π΅. ΠžΠΏΠΈΡ‚Π°Ρ… сС Π΄Π° ΠΏΡ€Π΅Π²Π΅Π΄Π° възмоТно Π½Π°ΠΉ-ΠΌΠ½ΠΎΠ³ΠΎ тСкст Π½Π° Π±ΡŠΠ»Π³Π°Ρ€ΡΠΊΠΈ, Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ ΠΈ спСциални Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΈ; Π·Π° Ρ‚Π΅Π·ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Π½Π΅ ТСлаят Π΄Π° Π²ΠΈΠΆΠ΄Π°Ρ‚ Ρ‚ΠΎΠ²Π°, оставих ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΠΈΡ‚Π΅ Π² скобки. Π”ΠΎΠ±Ρ€Π΅ дошли ΠΏΠΎΠ΄ ΠΊΠ°Ρ‚.

ВСхничСската докумСнтация Π½Π° ниско Π½ΠΈΠ²ΠΎ относно ΠΊΠΎΠ΄Π° Π½Π° Envoy Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π΅ доста оскъдна. Π—Π° Π΄Π° ΠΊΠΎΡ€ΠΈΠ³ΠΈΡ€Π°ΠΌ Ρ‚ΠΎΠ²Π°, ΠΏΠ»Π°Π½ΠΈΡ€Π°ΠΌ Π΄Π° направя сСрия статии Π² Π±Π»ΠΎΠ³Π° Π·Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ подсистСми Π½Π° Envoy. Въй ΠΊΠ°Ρ‚ΠΎ Ρ‚ΠΎΠ²Π° Π΅ ΠΏΡŠΡ€Π²Π°Ρ‚Π° статия, моля, оставСтС ΠΌΠΈ Π²Π°ΡˆΠ΅Ρ‚ΠΎ ΠΌΠ½Π΅Π½ΠΈΠ΅ ΠΈ ΠΊΠ°ΠΊΠ²ΠΎ Π±ΠΈ Π²ΠΈ Π±ΠΈΠ»ΠΎ интСрСсно Π² слСдващитС статии.

Π•Π΄ΠΈΠ½ ΠΎΡ‚ Π½Π°ΠΉ-чСсто Π·Π°Π΄Π°Π²Π°Π½ΠΈΡ‚Π΅ тСхничСски Π²ΡŠΠΏΡ€ΠΎΡΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌ Π·Π° Envoy, Π΅ исканСто Π·Π° ниско Π½ΠΈΠ²ΠΎ описаниС Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π°Ρ‚Π° ΠΌΠΎΠ΄Π΅Π» Π½Π° нишки (threading model). Π’ Ρ‚ΠΎΠ·ΠΈ пост Ρ‰Π΅ опиша ΠΊΠ°ΠΊ Envoy ΡΠ²ΡŠΡ€Π·Π²Π° ΡΡŠΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡΡ‚Π° с Π½ΠΈΡˆΠΊΠΈΡ‚Π΅ ΠΈ Ρ‰Π΅ Π΄Π°ΠΌ описаниС Π½Π° систСмата Π·Π° Π»ΠΎΠΊΠ°Π»Π½ΠΎ ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π½Π° нишки (Thread Local Storage), която сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°, Π·Π° Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈ ΠΊΠΎΠ΄Π° ΠΏΠΎ-ΠΏΠ°Ρ€Π°Π»Π΅Π»Π΅Π½ ΠΈ високопроизводитСлСн.

ΠžΠ±Ρ‰ ΠΏΡ€Π΅Π³Π»Π΅Π΄ Π½Π° Π½ΠΈΡˆΠΊΠΈΡ‚Π΅ (Threading overview)

[ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄] МодСл Π½Π° Π½ΠΈΡˆΠΊΠΈΡ‚Π΅ Π½Π° Envoy (Envoy threading model)

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)

ΠšΠ°ΠΊΡ‚ΠΎ Π²Π΅Ρ‡Π΅ бСшС спомСнато, основният ΠΏΠΎΡ‚ΠΎΠΊ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π° практичСски всички Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅Ρ‚ΠΎ (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)

Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΏΠΎΡ‚ΠΎΡ†ΠΈΡ‚Π΅ Π½Π° кластСра Π²ΠΊΠ»ΡŽΡ‡Π²Π° слСднитС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ ΠΈ Π΅Ρ‚Π°ΠΏΠΈ:

  1. ΠœΠ΅Π½ΠΈΠ΄ΠΆΡŠΡ€ΡŠΡ‚ Π½Π° кластСра Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π² Envoy, ΠΊΠΎΠΉΡ‚ΠΎ управлява всички извСстни upstream Π½Π° кластСра, API интСрфСйса CDS (Cluster Discovery Service), API интСрфСйситС SDS (Secret Discovery Service) ΠΈ EDS (Endpoint Discovery Service), DNS ΠΈ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΈ външни ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π½Π° работоспособността (health checking). Π’ΠΎΠΉ Π΅ ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€Π΅Π½ Π·Π° ΡΡŠΠ·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° "Π² ΠΊΡ€Π°ΠΉΠ½Π° смСтка послСдоватСлно" (eventually consistent) прСдставлСниС Π½Π° всСки upstream Π½Π° кластСра, ΠΊΠΎΠ΅Ρ‚ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π²Π° ΠΎΡ‚ΠΊΡ€ΠΈΡ‚ΠΈΡ‚Π΅ хостовС, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅Ρ‚ΠΎ Π½Π° работоспособността (health status).
  2. Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚ Π·Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° работоспособност (health checker) Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ провСрява работоспособността ΠΈ Π΄ΠΎΠΊΠ»Π°Π΄Π²Π° Π·Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ Π² ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅Ρ‚ΠΎ Π½Π° работоспособността Π½Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π½ΠΈΡ ΠΌΠ΅Π½ΠΈΠ΄ΠΆΡŠΡ€.
  3. CDS (Cluster Discovery Service) / SDS (Secret Discovery Service) / EDS (Endpoint Discovery Service) / DNS сС ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚ Π·Π° установяванС Π½Π° принадлСТност към ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π°. ΠŸΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ Π² ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅Ρ‚ΠΎ сС Π²Ρ€ΡŠΡ‰Π°Ρ‚ Π½Π° ΠΌΠ΅Π½ΠΈΠ΄ΠΆΡŠΡ€Π° Π½Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π°.
  4. ВсСки Ρ€Π°Π±ΠΎΡ‚Π΅Π½ ΠΏΠΎΡ‚ΠΎΠΊ постоянно изпълнява Ρ†ΠΈΠΊΡŠΠ» Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° ΡΡŠΠ±ΠΈΡ‚ΠΈΡ.
  5. ΠšΠΎΠ³Π°Ρ‚ΠΎ ΠΌΠ΅Π½ΠΈΠ΄ΠΆΡŠΡ€ΡŠΡ‚ Π½Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈ, Ρ‡Π΅ ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π° Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½Π΅Π½ΠΎ, Ρ‚ΠΎΠΉ създава Π½ΠΎΠ²Π° снимка Π½Π° ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π°, Π΄ΠΎΡΡ‚ΡŠΠΏΠ½Π° само Π·Π° Ρ‡Π΅Ρ‚Π΅Π½Π΅, ΠΈ я ΠΈΠ·ΠΏΡ€Π°Ρ‰Π° Π½Π° всСки Ρ€Π°Π±ΠΎΡ‚Π΅Π½ ΠΏΠΎΡ‚ΠΎΠΊ.
  6. ΠŸΡ€Π΅Π· слСдващия ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ Π½Π° ΠΏΠΎΠΊΠΎΠΉ работният ΠΏΠΎΡ‚ΠΎΠΊ Ρ‰Π΅ ΠΎΠ±Π½ΠΎΠ²ΠΈ снимката Π² рСзСрвирания слот TLS.
  7. По Π²Ρ€Π΅ΠΌΠ΅ Π½Π° ΡΡŠΠ±ΠΈΡ‚ΠΈΠ΅Ρ‚ΠΎ Π½Π° Π²Ρ…ΠΎΠ΄-ΠΈΠ·Ρ…ΠΎΠ΄, ΠΊΠΎΠ΅Ρ‚ΠΎ трябва Π΄Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈ хост Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅Ρ‚ΠΎ, Π±Π°Π»Π°Π½ΡΠΈΡ€ΠΎΠ²Ρ‡ΠΈΠΊΡŠΡ‚ Π½Π° Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅Ρ‚ΠΎ Ρ‰Π΅ поиска слот 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

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster