[ΠŸΡ€Π΅Π²ΠΎΠ΄] МодСл Π½Π° нишки Π½Π° Envoy

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

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

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

Π•Π΄ΠΈΠ½ ΠΎΡ‚ Π½Π°ΠΉ-чСсто срСщанитС тСхничСски Π²ΡŠΠΏΡ€ΠΎΡΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌ относно Envoy, Π΅ Π΄Π° поискам описаниС Π½Π° ниско Π½ΠΈΠ²ΠΎ Π½Π° ΠΌΠΎΠ΄Π΅Π»Π° Π½Π° нишки, ΠΊΠΎΠΉΡ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°. Π’ Ρ‚Π°Π·ΠΈ публикация Ρ‰Π΅ опиша ΠΊΠ°ΠΊ Envoy ΠΊΠ°Ρ€Ρ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΡ€Π° Π²Ρ€ΡŠΠ·ΠΊΠΈΡ‚Π΅ към Π½ΠΈΡˆΠΊΠΈΡ‚Π΅, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ систСмата Thread Local Storage, която ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½ΠΎ, Π·Π° Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈ ΠΊΠΎΠ΄Π° ΠΏΠΎ-ΠΏΠ°Ρ€Π°Π»Π΅Π»Π΅Π½ ΠΈ ΠΏΠΎ-високопроизводитСлСн.

ΠŸΡ€Π΅Π³Π»Π΅Π΄ Π½Π° Π½ΠΈΡˆΠΊΠΈΡ‚Π΅

[ΠŸΡ€Π΅Π²ΠΎΠ΄] МодСл Π½Π° нишки Π½Π° Envoy

Envoy ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Ρ‚Ρ€ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Ρ‚ΠΈΠΏΠ° ΠΏΠΎΡ‚ΠΎΡ†ΠΈ:

  • ОсновСн: Π’Π°Π·ΠΈ нишка ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€Π° стартиранСто ΠΈ прСкратяванСто Π½Π° процСса, цялата ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° API Π½Π° XDS (xDiscovery Service), Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ DNS, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° изправността, ΠΎΠ±Ρ‰ΠΎ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π° ΠΈ Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π·Π° изпълнСниС, Π½ΡƒΠ»ΠΈΡ€Π°Π½Π΅ Π½Π° статистиката, администриранС ΠΈ ΠΎΠ±Ρ‰ΠΎ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° процСси - сигнали Π½Π° Linux, Π³ΠΎΡ€Π΅Ρ‰ рСстарт ΠΈ Ρ‚.Π½. сС случва Π² Ρ‚Π°Π·ΠΈ нишка Π΅ асинхронно ΠΈ "Π½Π΅Π±Π»ΠΎΠΊΠΈΡ€Π°Ρ‰ΠΎ". ΠšΠ°Ρ‚ΠΎ цяло основната нишка ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½ΠΈΡ€Π° всички процСси с ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Π° функционалност, ΠΊΠΎΠΈΡ‚ΠΎ Π½Π΅ изискват голямо количСство CPU Π·Π° изпълнСниС. Π’ΠΎΠ²Π° позволява ΠΏΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅Π½ ΠΊΠΎΠ΄ Π΄Π° бъдС написан Ρ‚Π°ΠΊΠ°, сякаш Π΅ Сднонишков.
  • Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΠΊ: По ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Envoy създава Ρ€Π°Π±ΠΎΡ‚Π½Π° нишка Π·Π° всяка Ρ…Π°Ρ€Π΄ΡƒΠ΅Ρ€Π½Π° нишка Π² систСмата, Ρ‚ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€Π° Ρ‡Ρ€Π΅Π· опцията --concurrency. Всяка Ρ€Π°Π±ΠΎΡ‚Π½Π° нишка изпълнява β€žΠ½Π΅Π±Π»ΠΎΠΊΠΈΡ€Π°Ρ‰β€œ Ρ†ΠΈΠΊΡŠΠ» Π½Π° ΡΡŠΠ±ΠΈΡ‚ΠΈΡ, ΠΊΠΎΠΉΡ‚ΠΎ отговаря Π·Π° ΠΏΡ€ΠΎΡΠ»ΡƒΡˆΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° всСки ΡΠ»ΡƒΡˆΠ°Ρ‚Π΅Π»; към ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π½Π° писанС (29 юли 2017 Π³.) няма ΡˆΠ°Ρ€Π΄ΠΈΠ½Π³ Π½Π° ΡΠ»ΡƒΡˆΠ°Ρ‚Π΅Π»Ρ, ΠΏΡ€ΠΈΠ΅ΠΌΠ°Π½Π΅ Π½Π° Π½ΠΎΠ²ΠΈ Π²Ρ€ΡŠΠ·ΠΊΠΈ, инстанциранС Π½Π° Ρ„ΠΈΠ»Ρ‚ΡŠΡ€Π΅Π½ стСк Π·Π° Π²Ρ€ΡŠΠ·ΠΊΠ°Ρ‚Π° ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° всички Π²Ρ…ΠΎΠ΄Π½ΠΎ/ΠΈΠ·Ρ…ΠΎΠ΄Π½ΠΈ (IO) ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° ΠΆΠΈΠ²ΠΎΡ‚Π° Π½Π° Π²Ρ€ΡŠΠ·ΠΊΠ°Ρ‚Π°. ΠžΡ‚Π½ΠΎΠ²ΠΎ, Ρ‚ΠΎΠ²Π° позволява ΠΏΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ ΠΊΠΎΠ΄ΠΎΠ²Π΅ Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Π²Ρ€ΡŠΠ·ΠΊΠ°Ρ‚Π° Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ написани, сякаш са Сднонишкови.
  • ΠŸΡ€ΠΎΠΌΠΈΠ²Π°Π½Π΅ Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅: ВсСки Ρ„Π°ΠΉΠ», ΠΊΠΎΠΉΡ‚ΠΎ Envoy записва, Π³Π»Π°Π²Π½ΠΎ рСгистрационни Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Π·Π° Π΄ΠΎΡΡ‚ΡŠΠΏ, Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° ΠΈΠΌΠ° нСзависима Π±Π»ΠΎΠΊΠΈΡ€Π°Ρ‰Π° нишка. Π’ΠΎΠ²Π° сС дълТи Π½Π° Ρ„Π°ΠΊΡ‚Π°, Ρ‡Π΅ Π·Π°ΠΏΠΈΡΡŠΡ‚ във Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅, ΠΊΠ΅ΡˆΠΈΡ€Π°Π½ΠΈ ΠΎΡ‚ Ρ„Π°ΠΉΠ»ΠΎΠ²Π°Ρ‚Π° систСма, Π΄ΠΎΡ€ΠΈ ΠΊΠΎΠ³Π°Ρ‚ΠΎ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° O_NONBLOCK понякога ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π±Π»ΠΎΠΊΠΈΡ€Π° (въздишка). ΠšΠΎΠ³Π°Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΡ‚Π΅ нишки трябва Π΄Π° ΠΏΠΈΡˆΠ°Ρ‚ във Ρ„Π°ΠΉΠ», Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π²ΡΡŠΡ‰Π½ΠΎΡΡ‚ сС прСмСстват Π² Π±ΡƒΡ„Π΅Ρ€ Π² ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π°, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ Π² ΠΊΡ€Π°ΠΉΠ½Π° смСтка сС изчистват ΠΏΡ€Π΅Π· Π½ΠΈΡˆΠΊΠ°Ρ‚Π° Ρ„Π°ΠΉΠ» Ρ„Π»ΡŠΡˆ. Π’ΠΎΠ²Π° Π΅ Π΅Π΄Π½Π° област ΠΎΡ‚ ΠΊΠΎΠ΄, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ тСхничСски всички Ρ€Π°Π±ΠΎΡ‚Π½ΠΈ нишки ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±Π»ΠΎΠΊΠΈΡ€Π°Ρ‚ Π΅Π΄Π½ΠΎ ΠΈ ΡΡŠΡ‰ΠΎ Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ сС ΠΎΠΏΠΈΡ‚Π²Π°Ρ‚ Π΄Π° Π·Π°ΠΏΡŠΠ»Π½ΡΡ‚ Π±ΡƒΡ„Π΅Ρ€ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π°.

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Π²Ρ€ΡŠΠ·ΠΊΠ°Ρ‚Π°

ΠšΠ°ΠΊΡ‚ΠΎ бСшС обсъдСно Π½Π°ΠΊΡ€Π°Ρ‚ΠΊΠΎ ΠΏΠΎ-Π³ΠΎΡ€Π΅, всички Ρ€Π°Π±ΠΎΡ‚Π½ΠΈ нишки ΡΠ»ΡƒΡˆΠ°Ρ‚ всички ΡΠ»ΡƒΡˆΠ°Ρ‚Π΅Π»ΠΈ Π±Π΅Π· Π½ΠΈΠΊΠ°ΠΊΠ²ΠΎ ΡˆΠ°Ρ€Π΄ΠΈΠ½Π³. По Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½ ядрото сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° Π΅Π»Π΅Π³Π°Π½Ρ‚Π½ΠΎ ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Π½Π΅ Π½Π° ΠΏΡ€ΠΈΠ΅Ρ‚ΠΈ сокСти към Ρ€Π°Π±ΠΎΡ‚Π½ΠΈ нишки. Π‘ΡŠΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΈΡ‚Π΅ ядра ΠΊΠ°Ρ‚ΠΎ цяло са ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΠΎΠ±Ρ€ΠΈ Π² Ρ‚ΠΎΠ²Π°, Ρ‚Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΊΠ°Ρ‚ΠΎ повишаванС Π½Π° ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π° Π½Π° Π²Ρ…ΠΎΠ΄/ΠΈΠ·Ρ…ΠΎΠ΄ (IO), Π·Π° Π΄Π° сС ΠΎΠΏΠΈΡ‚Π°Ρ‚ Π΄Π° Π·Π°ΠΏΡŠΠ»Π½ΡΡ‚ Π΄Π°Π΄Π΅Π½Π° нишка с Ρ€Π°Π±ΠΎΡ‚Π°, ΠΏΡ€Π΅Π΄ΠΈ Π΄Π° Π·Π°ΠΏΠΎΡ‡Π½Π°Ρ‚ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Π΄Ρ€ΡƒΠ³ΠΈ нишки, ΠΊΠΎΠΈΡ‚ΠΎ ΡΡŠΡ‰ΠΎ ΡΠ»ΡƒΡˆΠ°Ρ‚ Π½Π° ΡΡŠΡ‰ΠΈΡ сокСт, ΠΈ ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° Π½Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ ΠΊΡ€ΡŠΠ³ΠΎΠ² Ρ€Π΅ΠΆΠΈΠΌ Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅ (Spinlock) Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° всяка заявка.
Π‘Π»Π΅Π΄ ΠΊΠ°Ρ‚ΠΎ Π²Ρ€ΡŠΠ·ΠΊΠ°Ρ‚Π° бъдС ΠΏΡ€ΠΈΠ΅Ρ‚Π° Π² Ρ€Π°Π±ΠΎΡ‚Π½Π° нишка, тя Π½ΠΈΠΊΠΎΠ³Π° Π½Π΅ напуска Ρ‚Π°Π·ΠΈ нишка. Цялата ΠΏΠΎ-Π½Π°Ρ‚Π°Ρ‚ΡŠΡˆΠ½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Π²Ρ€ΡŠΠ·ΠΊΠ°Ρ‚Π° сС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π° изцяло Π² Ρ€Π°Π±ΠΎΡ‚Π½Π°Ρ‚Π° нишка, Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ всяко ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ прСнасочванС.

Π’ΠΎΠ²Π° ΠΈΠΌΠ° няколко Π²Π°ΠΆΠ½ΠΈ послСдици:

  • Всички ΠΏΡƒΠ»ΠΎΠ²Π΅ Π·Π° Π²Ρ€ΡŠΠ·ΠΊΠΈ Π² Envoy са присвоСни Π½Π° Ρ€Π°Π±ΠΎΡ‚Π½Π° нишка. Π’Π°ΠΊΠ° Ρ‡Π΅, Π²ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‡Π΅ ΠΏΡƒΠ»ΠΎΠ²Π΅Ρ‚Π΅ Π·Π° HTTP/2 Π²Ρ€ΡŠΠ·ΠΊΠΈ правят само Π΅Π΄Π½Π° Π²Ρ€ΡŠΠ·ΠΊΠ° към всСки хост Π½Π°Π³ΠΎΡ€Π΅ ΠΏΠΎ Π²Π΅Ρ€ΠΈΠ³Π°Ρ‚Π° навСднъТ, Π°ΠΊΠΎ ΠΈΠΌΠ° Ρ‡Π΅Ρ‚ΠΈΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π½ΠΈ нишки, Ρ‰Π΅ ΠΈΠΌΠ° Ρ‡Π΅Ρ‚ΠΈΡ€ΠΈ HTTP/2 Π²Ρ€ΡŠΠ·ΠΊΠΈ Π½Π° хост Π½Π°Π³ΠΎΡ€Π΅ ΠΏΠΎ Π²Π΅Ρ€ΠΈΠ³Π°Ρ‚Π° Π² стабилно ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅.
  • ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π°Ρ‚Π° Envoy Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΏΠΎ Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½ Π΅, Ρ‡Π΅ ΠΊΠ°Ρ‚ΠΎ Π΄ΡŠΡ€ΠΆΠΈ всичко Π² Π΅Π΄Π½Π° Ρ€Π°Π±ΠΎΡ‚Π½Π° нишка, ΠΏΠΎΡ‡Ρ‚ΠΈ цСлият ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС написан Π±Π΅Π· Π±Π»ΠΎΠΊΠΈΡ€Π°Π½Π΅ ΠΈ сякаш Π΅ Сднонишков. Π’ΠΎΠ·ΠΈ Π΄ΠΈΠ·Π°ΠΉΠ½ улСснява писанСто Π½Π° ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄ ΠΈ сС ΠΌΠ°Ρ‰Π°Π±ΠΈΡ€Π° нСвСроятно Π΄ΠΎΠ±Ρ€Π΅ Π΄ΠΎ ΠΏΠΎΡ‡Ρ‚ΠΈ Π½Π΅ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ Π±Ρ€ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π½ΠΈ нишки.
  • Π•Π΄ΠΈΠ½ ΠΎΡ‚ основнитС ΠΈΠ·Π²ΠΎΠ΄ΠΈ ΠΎΠ±Π°Ρ‡Π΅ Π΅, Ρ‡Π΅ ΠΎΡ‚ Π³Π»Π΅Π΄Π½Π° Ρ‚ΠΎΡ‡ΠΊΠ° Π½Π° ΠΏΡƒΠ» ΠΏΠ°ΠΌΠ΅Ρ‚ ΠΈ СфСктивност Π½Π° Π²Ρ€ΡŠΠ·ΠΊΠ°Ρ‚Π°, Π²ΡΡŠΡ‰Π½ΠΎΡΡ‚ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Π²Π°ΠΆΠ½ΠΎ Π΄Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Ρ‚Π΅ --concurrency. НаличиСто Π½Π° ΠΏΠΎΠ²Π΅Ρ‡Π΅ Ρ€Π°Π±ΠΎΡ‚Π½ΠΈ нишки ΠΎΡ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡ‚ΠΎ Ρ‰Π΅ ΠΈΠ·Ρ€Π°Π·Ρ…ΠΎΠ΄Π²Π° ΠΏΠ°ΠΌΠ΅Ρ‚, Ρ‰Π΅ създадС ΠΏΠΎΠ²Π΅Ρ‡Π΅ Π½Π΅Π°ΠΊΡ‚ΠΈΠ²Π½ΠΈ Π²Ρ€ΡŠΠ·ΠΊΠΈ ΠΈ Ρ‰Π΅ Π½Π°ΠΌΠ°Π»ΠΈ скоростта Π½Π° Π³Ρ€ΡƒΠΏΠΈΡ€Π°Π½Π΅ Π½Π° Π²Ρ€ΡŠΠ·ΠΊΠΈ. Π’ Lyft Π½Π°ΡˆΠΈΡ‚Π΅ ΠΏΡ€Π°Ρ‚Π΅Π½ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ с кош работят с ΠΌΠ½ΠΎΠ³ΠΎ ниска СдноврСмСнност, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ производитСлността ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»Π½ΠΎ ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π° Π½Π° услугитС, Π΄ΠΎ ΠΊΠΎΠΈΡ‚ΠΎ сС Π½Π°ΠΌΠΈΡ€Π°Ρ‚. ИзпълнявамС Envoy ΠΊΠ°Ρ‚ΠΎ ΠΊΡ€Π°ΠΉΠ½ΠΎ прокси само ΠΏΡ€ΠΈ максимална СдноврСмСнност.

Какво ΠΎΠ·Π½Π°Ρ‡Π°Π²Π° Π½Π΅Π±Π»ΠΎΠΊΠΈΡ€Π°Π½Π΅?

Π’Π΅Ρ€ΠΌΠΈΠ½ΡŠΡ‚ "Π½Π΅Π±Π»ΠΎΠΊΠΈΡ€Π°Ρ‰" Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ няколко ΠΏΡŠΡ‚ΠΈ досСга, ΠΊΠΎΠ³Π°Ρ‚ΠΎ сС обсъТда ΠΊΠ°ΠΊ работят основнитС ΠΈ Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΡ‚Π΅ нишки. ЦСлият ΠΊΠΎΠ΄ Π΅ написан ΠΏΡ€ΠΈ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ, Ρ‡Π΅ Π½ΠΈΡ‰ΠΎ Π½ΠΈΠΊΠΎΠ³Π° Π½Π΅ Π΅ Π±Π»ΠΎΠΊΠΈΡ€Π°Π½ΠΎ. Π’ΠΎΠ²Π° ΠΎΠ±Π°Ρ‡Π΅ Π½Π΅ Π΅ съвсСм вярно (ΠΊΠΎΠ΅ Π½Π΅ Π΅ съвсСм вярно?).

Envoy ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° няколко дълги Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½ΠΈΡ Π½Π° процСси:

  • ΠšΠ°ΠΊΡ‚ΠΎ бСшС обсъдСно, ΠΊΠΎΠ³Π°Ρ‚ΠΎ записватС рСгистрационни Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Π·Π° Π΄ΠΎΡΡ‚ΡŠΠΏ, всички Ρ€Π°Π±ΠΎΡ‚Π½ΠΈ нишки ΠΏΡ€ΠΈΠ΄ΠΎΠ±ΠΈΠ²Π°Ρ‚ Π΅Π΄Π½Π° ΠΈ ΡΡŠΡ‰Π° ΠΊΠ»ΡŽΡ‡Π°Π»ΠΊΠ°, ΠΏΡ€Π΅Π΄ΠΈ Π±ΡƒΡ„Π΅Ρ€ΡŠΡ‚ Π½Π° рСгистрационния Ρ„Π°ΠΉΠ» Π² ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° Π΄Π° бъдС запълнСн. Π’Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π·Π° Π·Π°Π΄ΡŠΡ€ΠΆΠ°Π½Π΅ Π½Π° Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅Ρ‚ΠΎ трябва Π΄Π° Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠ°Π»ΠΊΠΎ, Π½ΠΎ Π΅ възмоТно Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅Ρ‚ΠΎ Π΄Π° бъдС оспорСно ΠΏΡ€ΠΈ висока СдноврСмСнност ΠΈ висока пропускатСлна способност.
  • Envoy ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΌΠ½ΠΎΠ³ΠΎ слоТна систСма Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° статистики, ΠΊΠΎΠΈΡ‚ΠΎ са Π»ΠΎΠΊΠ°Π»Π½ΠΈ Π·Π° Π½ΠΈΡˆΠΊΠ°Ρ‚Π°. Π’ΠΎΠ²Π° Ρ‰Π΅ Π΅ Ρ‚Π΅ΠΌΠ° Π½Π° ΠΎΡ‚Π΄Π΅Π»Π½Π° публикация. ВсС ΠΏΠ°ΠΊ Ρ‰Π΅ спомСна Π½Π°ΠΊΡ€Π°Ρ‚ΠΊΠΎ, Ρ‡Π΅ ΠΊΠ°Ρ‚ΠΎ част ΠΎΡ‚ Π»ΠΎΠΊΠ°Π»Π½Π°Ρ‚Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° статистиката Π½Π° Π½ΠΈΡˆΠΊΠ°Ρ‚Π°, понякога Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° сС ΠΏΠΎΠ»ΡƒΡ‡ΠΈ Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅ Π½Π° Ρ†Π΅Π½Ρ‚Ρ€Π°Π»Π΅Π½ β€žΡ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π·Π° ΡΡ‚Π°Ρ‚ΠΈΡΡ‚ΠΈΠΊΠ°β€œ. Π’ΠΎΠ²Π° Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅ Π½ΠΈΠΊΠΎΠ³Π° Π½Π΅ трябва Π΄Π° сС изисква.
  • ΠžΡΠ½ΠΎΠ²Π½Π°Ρ‚Π° нишка ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ΠΈΡ‡Π½ΠΎ трябва Π΄Π° сС ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½ΠΈΡ€Π° с всички Ρ€Π°Π±ΠΎΡ‚Π½ΠΈ нишки. Π’ΠΎΠ²Π° сС ΠΏΡ€Π°Π²ΠΈ Ρ‡Ρ€Π΅Π· β€žΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Π½Π΅β€œ ΠΎΡ‚ основната нишка към Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΡ‚Π΅ нишки, Π° понякога ΠΈ ΠΎΡ‚ Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΡ‚Π΅ нишки ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ към основната нишка. Π˜Π·ΠΏΡ€Π°Ρ‰Π°Π½Π΅Ρ‚ΠΎ изисква Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Π½ΠΎΡ‚ΠΎ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ Π΄Π° ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Π² опашка Π·Π° ΠΏΠΎ-късна доставка. Π’Π΅Π·ΠΈ ΠΊΠ»ΡŽΡ‡Π°Π»ΠΊΠΈ Π½ΠΈΠΊΠΎΠ³Π° Π½Π΅ трябва Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ сСриозно оспорвани, Π½ΠΎ Π²ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π° тСхничСски ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Π±Π»ΠΎΠΊΠΈΡ€Π°Π½ΠΈ.
  • ΠšΠΎΠ³Π°Ρ‚ΠΎ Envoy запишС ΠΆΡƒΡ€Π½Π°Π» Π² ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΎΡ‚ систСмни Π³Ρ€Π΅ΡˆΠΊΠΈ (стандартна Π³Ρ€Π΅ΡˆΠΊΠ°), Ρ‚ΠΎΠΉ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π° Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅ Π½Π° цСлия процСс. ΠšΠ°Ρ‚ΠΎ цяло Π»ΠΎΠΊΠ°Π»Π½ΠΎΡ‚ΠΎ рСгистриранС Π½Π° Envoy сС счита Π·Π° уТасно ΠΎΡ‚ Π³Π»Π΅Π΄Π½Π° Ρ‚ΠΎΡ‡ΠΊΠ° Π½Π° производитСлността, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Π½Π΅ Π΅ ΠΎΠ±ΡŠΡ€Π½Π°Ρ‚ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° подобряванСто ΠΌΡƒ.
  • Има няколко Π΄Ρ€ΡƒΠ³ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π½ΠΈ Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½ΠΈΡ, Π½ΠΎ Π½ΠΈΡ‚ΠΎ Π΅Π΄Π½ΠΎ ΠΎΡ‚ тях Π½Π΅ Π΅ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½ΠΎ Π·Π° производитСлността ΠΈ Π½ΠΈΠΊΠΎΠ³Π° Π½Π΅ трябва Π΄Π° сС оспорва.

Π›ΠΎΠΊΠ°Π»Π½ΠΎ ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π½Π° нишки

ΠŸΠΎΡ€Π°Π΄ΠΈ Π½Π°Ρ‡ΠΈΠ½Π°, ΠΏΠΎ ΠΊΠΎΠΉΡ‚ΠΎ Envoy раздСля отговорноститС Π½Π° Π³Π»Π°Π²Π½Π°Ρ‚Π° нишка ΠΎΡ‚ отговорноститС Π½Π° Ρ€Π°Π±ΠΎΡ‚Π½Π°Ρ‚Π° нишка, ΠΈΠΌΠ° изискванС слоТната ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π΄Π° ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠΈ Π½Π° Π³Π»Π°Π²Π½Π°Ρ‚Π° нишка ΠΈ слСд Ρ‚ΠΎΠ²Π° Π΄Π° сС прСдостави Π½Π° всяка Ρ€Π°Π±ΠΎΡ‚Π½Π° нишка ΠΏΠΎ силно ΠΏΠ°Ρ€Π°Π»Π΅Π»Π΅Π½ Π½Π°Ρ‡ΠΈΠ½. Π’ΠΎΠ·ΠΈ Ρ€Π°Π·Π΄Π΅Π» описва Envoy Thread Local Storage (TLS) Π½Π° високо Π½ΠΈΠ²ΠΎ. Π’ слСдващия Ρ€Π°Π·Π΄Π΅Π» Ρ‰Π΅ опиша ΠΊΠ°ΠΊ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€.
[ΠŸΡ€Π΅Π²ΠΎΠ΄] МодСл Π½Π° нишки Π½Π° Envoy

ΠšΠ°ΠΊΡ‚ΠΎ Π²Π΅Ρ‡Π΅ бСшС описано, Π³Π»Π°Π²Π½Π°Ρ‚Π° нишка ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π° практичСски цялата функционалност Π½Π° Ρ€Π°Π²Π½ΠΈΠ½Π°Ρ‚Π° Π½Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ» Π² процСса Envoy. ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π½Π°Ρ‚Π° Ρ€Π°Π²Π½ΠΈΠ½Π° Ρ‚ΡƒΠΊ Π΅ ΠΌΠ°Π»ΠΊΠΎ ΠΏΡ€Π΅Ρ‚ΠΎΠ²Π°Ρ€Π΅Π½Π°, Π½ΠΎ ΠΊΠΎΠ³Π°Ρ‚ΠΎ я ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅Ρ‚Π΅ Π² Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° самия процСс Envoy ΠΈ я сравнитС с прСнасочванСто, ΠΊΠΎΠ΅Ρ‚ΠΎ правят Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΡ‚Π΅ нишки, ΠΈΠΌΠ° смисъл. ΠžΠ±Ρ‰ΠΎΡ‚ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Π΅, Ρ‡Π΅ ΠΏΡ€ΠΎΡ†Π΅ΡΡŠΡ‚ Π½Π° основната нишка Π²ΡŠΡ€ΡˆΠΈ извСстна Ρ€Π°Π±ΠΎΡ‚Π° ΠΈ слСд Ρ‚ΠΎΠ²Π° трябва Π΄Π° Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π° всяка Ρ€Π°Π±ΠΎΡ‚Π½Π° нишка спорСд Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚Π° ΠΎΡ‚ Ρ‚Π°Π·ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°. Π² Ρ‚ΠΎΠ·ΠΈ случай Ρ€Π°Π±ΠΎΡ‚Π½Π°Ρ‚Π° нишка Π½Π΅ трябва Π΄Π° ΠΏΡ€ΠΈΠ΄ΠΎΠ±ΠΈΠ²Π° Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅ ΠΏΡ€ΠΈ всСки Π΄ΠΎΡΡ‚ΡŠΠΏ.

БистСмата TLS (Π»ΠΎΠΊΠ°Π»Π½ΠΎ ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π½Π° нишки) Π½Π° Envoy Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΏΠΎ слСдния Π½Π°Ρ‡ΠΈΠ½:

  • ΠšΠΎΠ΄ΡŠΡ‚, изпълняван Π² основната нишка, ΠΌΠΎΠΆΠ΅ Π΄Π° Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»ΠΈ TLS слот Π·Π° цСлия процСс. Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‡Π΅ Ρ‚ΠΎΠ²Π° Π΅ абстрахирано, Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° Ρ‚ΠΎΠ²Π° Π΅ индСкс във Π²Π΅ΠΊΡ‚ΠΎΡ€, осигуряващ O(1) Π΄ΠΎΡΡ‚ΡŠΠΏ.
  • ΠžΡΠ½ΠΎΠ²Π½Π°Ρ‚Π° нишка ΠΌΠΎΠΆΠ΅ Π΄Π° инсталира ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π½ΠΈ Π΄Π°Π½Π½ΠΈ Π² своя слот. ΠšΠΎΠ³Π°Ρ‚ΠΎ Ρ‚ΠΎΠ²Π° станС, Π΄Π°Π½Π½ΠΈΡ‚Π΅ сС ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Ρ‚ във всяка Ρ€Π°Π±ΠΎΡ‚Π½Π° нишка ΠΊΠ°Ρ‚ΠΎ Π½ΠΎΡ€ΠΌΠ°Π»Π½ΠΎ ΡΡŠΠ±ΠΈΡ‚ΠΈΠ΅ Π·Π° Ρ†ΠΈΠΊΡŠΠ» Π½Π° ΡΡŠΠ±ΠΈΡ‚ΠΈΡ.
  • Π Π°Π±ΠΎΡ‚Π½ΠΈΡ‚Π΅ нишки ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Ρ‡Π΅Ρ‚Π°Ρ‚ ΠΎΡ‚ своя TLS слот ΠΈ Π΄Π° ΠΈΠ·Π²Π»ΠΈΡ‡Π°Ρ‚ всички Π»ΠΎΠΊΠ°Π»Π½ΠΈ Π·Π° Π½ΠΈΡˆΠΊΠ°Ρ‚Π° Π΄Π°Π½Π½ΠΈ, Π½Π°Π»ΠΈΡ‡Π½ΠΈ Ρ‚Π°ΠΌ.

Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‡Π΅ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ проста ΠΈ нСвСроятно ΠΌΠΎΡ‰Π½Π° ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ°, тя Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½Π° Π½Π° концСпцията Π·Π° Π±Π»ΠΎΠΊΠΈΡ€Π°Π½Π΅ Π½Π° RCU (Ρ‡Π΅Ρ‚Π΅Π½Π΅-ΠΊΠΎΠΏΠΈΡ€Π°Π½Π΅-актуализация). По ΡΡŠΡ‰Π΅ΡΡ‚Π²ΠΎ Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΡ‚Π΅ нишки Π½ΠΈΠΊΠΎΠ³Π° Π½Π΅ Π²ΠΈΠΆΠ΄Π°Ρ‚ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π² Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π² TLS слотовСтС, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ. ΠŸΡ€ΠΎΠΌΡΠ½Π°Ρ‚Π° Π½Π°ΡΡ‚ΡŠΠΏΠ²Π° само ΠΏΡ€Π΅Π· ΠΏΠ΅Ρ€ΠΈΠΎΠ΄Π° Π½Π° ΠΏΠΎΡ‡ΠΈΠ²ΠΊΠ° ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΡ‚Π΅ ΡΡŠΠ±ΠΈΡ‚ΠΈΡ.

Envoy ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Ρ‚ΠΎΠ²Π° ΠΏΠΎ Π΄Π²Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π½Π°Ρ‡ΠΈΠ½Π°:

  • Π§Ρ€Π΅Π· ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Π½Π΅ Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π΄Π°Π½Π½ΠΈ във всяка Ρ€Π°Π±ΠΎΡ‚Π½Π° нишка, Π΄Π°Π½Π½ΠΈΡ‚Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Π΄ΠΎΡΡ‚ΡŠΠΏΠ½ΠΈ Π±Π΅Π· Π½ΠΈΠΊΠ°ΠΊΠ²ΠΎ Π±Π»ΠΎΠΊΠΈΡ€Π°Π½Π΅.
  • Π§Ρ€Π΅Π· ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Π½Π΅ Π½Π° сподСлСн ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π» към Π³Π»ΠΎΠ±Π°Π»Π½ΠΈ Π΄Π°Π½Π½ΠΈ Π² Ρ€Π΅ΠΆΠΈΠΌ само Π·Π° Ρ‡Π΅Ρ‚Π΅Π½Π΅ Π½Π° всяка Ρ€Π°Π±ΠΎΡ‚Π½Π° нишка. По Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½ всяка Ρ€Π°Π±ΠΎΡ‚Π½Π° нишка ΠΈΠΌΠ° Π±Ρ€ΠΎΠΉ Ρ€Π΅Ρ„Π΅Ρ€Π΅Π½Ρ‚Π½ΠΈ Π΄Π°Π½Π½ΠΈ, ΠΊΠΎΠΉΡ‚ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Π½Π°ΠΌΠ°Π»Π΅Π½, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° сС изпълнява. Π‘Π°ΠΌΠΎ ΠΊΠΎΠ³Π°Ρ‚ΠΎ всички Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΡ†ΠΈ сС успокоят ΠΈ ΠΊΠ°Ρ‡Π°Ρ‚ Π½ΠΎΠ²ΠΈ сподСлСни Π΄Π°Π½Π½ΠΈ, старитС Π΄Π°Π½Π½ΠΈ Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ ΡƒΠ½ΠΈΡ‰ΠΎΠΆΠ΅Π½ΠΈ. Π’ΠΎΠ²Π° Π΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½ΠΎ с RCU.

Нишки Π·Π° Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€

Π’ Ρ‚ΠΎΠ·ΠΈ Ρ€Π°Π·Π΄Π΅Π» Ρ‰Π΅ опиша ΠΊΠ°ΠΊ TLS (Π»ΠΎΠΊΠ°Π»Π½ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π½Π° нишки) сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€. Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π²Π° xDS API ΠΈ/ΠΈΠ»ΠΈ DNS ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Π·Π΄Ρ€Π°Π²Π΅Ρ‚ΠΎ.
[ΠŸΡ€Π΅Π²ΠΎΠ΄] МодСл Π½Π° нишки Π½Π° Envoy

Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π½ΠΈΡ ΠΏΠΎΡ‚ΠΎΠΊ Π²ΠΊΠ»ΡŽΡ‡Π²Π° слСднитС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ ΠΈ ΡΡ‚ΡŠΠΏΠΊΠΈ:

  1. ΠœΠ΅Π½ΠΈΠ΄ΠΆΡŠΡ€ΡŠΡ‚ Π½Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ΠΈ Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π² Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° Envoy, ΠΊΠΎΠΉΡ‚ΠΎ управлява всички извСстни ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ΠΈ Π½Π°Π³ΠΎΡ€Π΅ ΠΏΠΎ Π²Π΅Ρ€ΠΈΠ³Π°Ρ‚Π°, API Π½Π° услугата Π·Π° ΠΎΡ‚ΠΊΡ€ΠΈΠ²Π°Π½Π΅ Π½Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ (CDS), API Π½Π° услугата Π·Π° Ρ‚Π°ΠΉΠ½ΠΎ ΠΎΡ‚ΠΊΡ€ΠΈΠ²Π°Π½Π΅ (SDS) ΠΈ услугата Π·Π° ΠΎΡ‚ΠΊΡ€ΠΈΠ²Π°Π½Π΅ Π½Π° ΠΊΡ€Π°ΠΉΠ½Π° Ρ‚ΠΎΡ‡ΠΊΠ° (EDS), DNS ΠΈ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΈ външни ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ. Π’ΠΎΠΉ Π΅ ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€Π΅Π½ Π·Π° ΡΡŠΠ·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° β€žΠ΅Π²Π΅Π½Ρ‚ΡƒΠ°Π»Π½ΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»Π΅Π½β€œ ΠΈΠ·Π³Π»Π΅Π΄ Π½Π° всСки Π²ΡŠΠ·Ρ…ΠΎΠ΄ΡΡ‰ ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€, ΠΊΠΎΠΉΡ‚ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π²Π° ΠΎΡ‚ΠΊΡ€ΠΈΡ‚ΠΈ хостовС, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ здравословно ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅.
  2. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°Ρ‚Π° Π½Π° изправността ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° Π°ΠΊΡ‚ΠΈΠ²Π½Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° изправността ΠΈ Π΄ΠΎΠΊΠ»Π°Π΄Π²Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ Π² ΠΈΠ·ΠΏΡ€Π°Π²Π½ΠΎΡ‚ΠΎ ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅ Π½Π° ΠΌΠ΅Π½ΠΈΠ΄ΠΆΡŠΡ€Π° Π½Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π°.
  3. CDS (услуга Π·Π° ΠΎΡ‚ΠΊΡ€ΠΈΠ²Π°Π½Π΅ Π½Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ΠΈ) / SDS (услуга Π·Π° Ρ‚Π°ΠΉΠ½ΠΎ ΠΎΡ‚ΠΊΡ€ΠΈΠ²Π°Π½Π΅) / EDS (услуга Π·Π° ΠΎΡ‚ΠΊΡ€ΠΈΠ²Π°Π½Π΅ Π½Π° ΠΊΡ€Π°ΠΉΠ½ΠΈ Ρ‚ΠΎΡ‡ΠΊΠΈ) / DNS сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°Ρ‚, Π·Π° Π΄Π° сС ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈ члСнството Π² ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€. ΠŸΡ€ΠΎΠΌΡΠ½Π°Ρ‚Π° Π½Π° ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅Ρ‚ΠΎ сС Π²Ρ€ΡŠΡ‰Π° Π½Π° ΠΌΠ΅Π½ΠΈΠ΄ΠΆΡŠΡ€Π° Π½Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π°.
  4. Всяка Ρ€Π°Π±ΠΎΡ‚Π½Π° нишка Π½Π΅ΠΏΡ€Π΅ΠΊΡŠΡΠ½Π°Ρ‚ΠΎ изпълнява Ρ†ΠΈΠΊΡŠΠ» Π½Π° ΡΡŠΠ±ΠΈΡ‚ΠΈΠ΅.
  5. ΠšΠΎΠ³Π°Ρ‚ΠΎ ΠΌΠ΅Π½ΠΈΠ΄ΠΆΡŠΡ€ΡŠΡ‚ Π½Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈ, Ρ‡Π΅ ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π° сС Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΠ»ΠΎ, Ρ‚ΠΎΠΉ създава Π½ΠΎΠ²Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚Π½Π° снимка само Π·Π° Ρ‡Π΅Ρ‚Π΅Π½Π΅ Π½Π° ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π° ΠΈ я ΠΈΠ·ΠΏΡ€Π°Ρ‰Π° Π½Π° всяка Ρ€Π°Π±ΠΎΡ‚Π½Π° нишка.
  6. По Π²Ρ€Π΅ΠΌΠ΅ Π½Π° слСдващия Ρ‚ΠΈΡ… ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ Ρ€Π°Π±ΠΎΡ‚Π½Π°Ρ‚Π° нишка Ρ‰Π΅ Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚Π½Π°Ρ‚Π° снимка Π² разпрСдСлСния TLS слот.
  7. По Π²Ρ€Π΅ΠΌΠ΅ Π½Π° I/O ΡΡŠΠ±ΠΈΡ‚ΠΈΠ΅, ΠΊΠΎΠ΅Ρ‚ΠΎ трябва Π΄Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈ хоста Π·Π° балансиранС Π½Π° Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅Ρ‚ΠΎ, ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚ΡŠΡ‚ Π·Π° балансиранС Π½Π° Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅Ρ‚ΠΎ Ρ‰Π΅ поиска TLS (Π»ΠΎΠΊΠ°Π»Π½ΠΎ ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π½Π° нишки) слот, Π·Π° Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈ информация Π·Π° хоста. Π’ΠΎΠ²Π° Π½Π΅ изисква ΠΊΠ»ΡŽΡ‡Π°Π»ΠΊΠΈ. Π˜ΠΌΠ°ΠΉΡ‚Π΅ ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄ ΡΡŠΡ‰ΠΎ, Ρ‡Π΅ TLS ΠΌΠΎΠΆΠ΅ ΡΡŠΡ‰ΠΎ Π΄Π° задСйства ΡΡŠΠ±ΠΈΡ‚ΠΈΡ Π·Π° Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Π±Π°Π»Π°Π½ΡΡŒΠΎΡ€ΠΈΡ‚Π΅ Π½Π° Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅Ρ‚ΠΎ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ Π΄Π° ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° прСизчислят кСшовС, структури ΠΎΡ‚ Π΄Π°Π½Π½ΠΈ ΠΈ Ρ‚.Π½. Π’ΠΎΠ²Π° Π΅ извън ΠΎΠ±Ρ…Π²Π°Ρ‚Π° Π½Π° Ρ‚Π°Π·ΠΈ публикация, Π½ΠΎ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ мСста Π² ΠΊΠΎΠ΄Π°.

Използвайки Π³ΠΎΡ€Π½Π°Ρ‚Π° ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°, Envoy ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π° всяка заявка Π±Π΅Π· Π½ΠΈΠΊΠ°ΠΊΠ²ΠΎ Π±Π»ΠΎΠΊΠΈΡ€Π°Π½Π΅ (освСн ΠΊΠ°ΠΊΡ‚ΠΎ Π΅ описано ΠΏΠΎ-Π³ΠΎΡ€Π΅). ОсвСн слоТността Π½Π° самия TLS ΠΊΠΎΠ΄, ΠΏΠΎ-голямата част ΠΎΡ‚ ΠΊΠΎΠ΄Π° Π½Π΅ трябва Π΄Π° Ρ€Π°Π·Π±ΠΈΡ€Π° ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ½ΠΈΡˆΠΊΠΎΠ²ΠΎΡΡ‚Ρ‚Π° ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС написана Π΅Π΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎ. Π’ΠΎΠ²Π° ΠΏΡ€Π°Π²ΠΈ ΠΏΠΎ-голямата част ΠΎΡ‚ ΠΊΠΎΠ΄Π° ΠΏΠΎ-лСсСн Π·Π° писанС Π² допълнСниС към ΠΏΡ€Π΅Π²ΡŠΠ·Ρ…ΠΎΠ΄Π½Π°Ρ‚Π° производитСлност.

Π”Ρ€ΡƒΠ³ΠΈ подсистСми, ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ TLS

TLS (Thread local storage) ΠΈ RCU (Read Copy Update) сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ ΡˆΠΈΡ€ΠΎΠΊΠΎ Π² Envoy.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅:

  • ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΡŠΠΌ Π·Π° промяна Π½Π° функционалността ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° изпълнСниС: ВСкущият списък с Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½Π° функционалност сС изчислява Π² Π³Π»Π°Π²Π½Π°Ρ‚Π° нишка. Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° Π½Π° всяка Ρ€Π°Π±ΠΎΡ‚Π½Π° нишка сС Π΄Π°Π²Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚Π½Π° снимка само Π·Π° Ρ‡Π΅Ρ‚Π΅Π½Π΅, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ RCU сСмантика.
  • Подмяна Π½Π° ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚Π½ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ: Π—Π° Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ с ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈ, прСдоставСни ΠΎΡ‚ RDS (Route Discovery Service), Ρ‚Π°Π±Π»ΠΈΡ†ΠΈΡ‚Π΅ с ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈ сС ΡΡŠΠ·Π΄Π°Π²Π°Ρ‚ Π² Π³Π»Π°Π²Π½Π°Ρ‚Π° нишка. ΠœΠΎΠΌΠ΅Π½Ρ‚Π½Π°Ρ‚Π° снимка само Π·Π° Ρ‡Π΅Ρ‚Π΅Π½Π΅ впослСдствиС Ρ‰Π΅ бъдС прСдоставСна Π½Π° всяка Ρ€Π°Π±ΠΎΡ‚Π½Π° нишка с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° RCU (Read Copy Update) сСмантика. Π’ΠΎΠ²Π° ΠΏΡ€Π°Π²ΠΈ промяната Π½Π° ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚Π½ΠΈΡ‚Π΅ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΠΎ Π΅Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½Π°.
  • ΠšΠ΅ΡˆΠΈΡ€Π°Π½Π΅ Π½Π° HTTP Π·Π°Π³Π»Π°Π²ΠΊΠΈ: ΠšΠ°ΠΊΡ‚ΠΎ сС ΠΎΠΊΠ°Π·Π°, изчисляванСто Π½Π° HTTP Π·Π°Π³Π»Π°Π²ΠΊΠ°Ρ‚Π° Π·Π° всяка заявка (Π΄ΠΎΠΊΠ°Ρ‚ΠΎ сС изпълнява ~25K+ RPS Π½Π° ядро) Π΅ доста скъпо. Envoy изчислява Ρ†Π΅Π½Ρ‚Ρ€Π°Π»Π½ΠΎ Π·Π°Π³Π»Π°Π²ΠΊΠ°Ρ‚Π° ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»Π½ΠΎ Π½Π° всСки ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½ сСкунда ΠΈ я прСдоставя Π½Π° всСки Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΠΊ Ρ‡Ρ€Π΅Π· TLS ΠΈ RCU.

Има ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ случаи, Π½ΠΎ ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½ΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ трябва Π΄Π° прСдоставят Π΄ΠΎΠ±Ρ€ΠΎ Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Π·Π° ΠΊΠ°ΠΊΠ²ΠΎ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° TLS.

Π˜Π·Π²Π΅ΡΡ‚Π½ΠΈ ΠΊΠ°ΠΏΠ°Π½ΠΈ Π² производитСлността

Π”ΠΎΠΊΠ°Ρ‚ΠΎ Envoy сС прСдставя доста Π΄ΠΎΠ±Ρ€Π΅ ΠΊΠ°Ρ‚ΠΎ цяло, ΠΈΠΌΠ° няколко Π·Π°Π±Π΅Π»Π΅ΠΆΠΈΡ‚Π΅Π»Π½ΠΈ области, ΠΊΠΎΠΈΡ‚ΠΎ изискват Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΠΊΠΎΠ³Π°Ρ‚ΠΎ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° с ΠΌΠ½ΠΎΠ³ΠΎ висока СдноврСмСнност ΠΈ пропускатСлна способност:

  • ΠšΠ°ΠΊΡ‚ΠΎ Π΅ описано Π² Ρ‚Π°Π·ΠΈ статия, понастоящСм всички Ρ€Π°Π±ΠΎΡ‚Π½ΠΈ нишки ΠΏΡ€ΠΈΠ΄ΠΎΠ±ΠΈΠ²Π°Ρ‚ Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅ ΠΏΡ€ΠΈ запис Π² Π±ΡƒΡ„Π΅Ρ€Π° Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° Π½Π° ΠΆΡƒΡ€Π½Π°Π»Π° Π·Π° Π΄ΠΎΡΡ‚ΡŠΠΏ. ΠŸΡ€ΠΈ висока СдноврСмСнност ΠΈ висока пропускатСлна способност Ρ‰Π΅ трябва Π΄Π° Π³Ρ€ΡƒΠΏΠΈΡ€Π°Ρ‚Π΅ рСгистрационнитС Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Π·Π° Π΄ΠΎΡΡ‚ΡŠΠΏ Π·Π° всяка Ρ€Π°Π±ΠΎΡ‚Π½Π° нишка Π·Π° смСтка Π½Π° доставката извън Ρ€Π΅Π΄Π° ΠΏΡ€ΠΈ запис Π² крайния Ρ„Π°ΠΉΠ». ΠšΠ°Ρ‚ΠΎ Π°Π»Ρ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΡΡŠΠ·Π΄Π°Π΄Π΅Ρ‚Π΅ ΠΎΡ‚Π΄Π΅Π»Π΅Π½ ΠΆΡƒΡ€Π½Π°Π» Π·Π° Π΄ΠΎΡΡ‚ΡŠΠΏ Π·Π° всяка Ρ€Π°Π±ΠΎΡ‚Π½Π° нишка.
  • Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‡Π΅ статистиката Π΅ силно ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€Π°Π½Π°, ΠΏΡ€ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ висока СдноврСмСнност ΠΈ пропускатСлна способност вСроятно Ρ‰Π΅ ΠΈΠΌΠ° Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΠΎ ΡΡŠΡ€Π΅Π²Π½ΠΎΠ²Π°Π½ΠΈΠ΅ Π·Π° ΠΎΡ‚Π΄Π΅Π»Π½ΠΈ статистики. Π Π΅ΡˆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Π΅ броячи Π½Π° Ρ€Π°Π±ΠΎΡ‚Π½Π° нишка с ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ΠΈΡ‡Π½ΠΎ Π½ΡƒΠ»ΠΈΡ€Π°Π½Π΅ Π½Π° Ρ†Π΅Π½Ρ‚Ρ€Π°Π»Π½ΠΈΡ‚Π΅ броячи. Π’ΠΎΠ²Π° Ρ‰Π΅ бъдС обсъдСно Π² слСдваща публикация.
  • Π’Π΅ΠΊΡƒΡ‰Π°Ρ‚Π° Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° няма Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ Π΄ΠΎΠ±Ρ€Π΅, Π°ΠΊΠΎ Envoy сС Π²Π½Π΅Π΄Ρ€ΠΈ Π² сцСнарий, ΠΏΡ€ΠΈ ΠΊΠΎΠΉΡ‚ΠΎ ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠ°Π»ΠΊΠΎ Π²Ρ€ΡŠΠ·ΠΊΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ изискват Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΈ рСсурси Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°. Няма гаранция, Ρ‡Π΅ Π²Ρ€ΡŠΠ·ΠΊΠΈΡ‚Π΅ Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ Ρ€Π°Π²Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎ Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΡ‚Π΅ нишки. Π’ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Ρ€Π΅ΡˆΠ΅Π½ΠΎ Ρ‡Ρ€Π΅Π· ΠΏΡ€ΠΈΠ»Π°Π³Π°Π½Π΅ Π½Π° балансиранС Π½Π° Ρ€Π°Π±ΠΎΡ‚Π½ΠΈ Π²Ρ€ΡŠΠ·ΠΊΠΈ, ΠΊΠΎΠ΅Ρ‚ΠΎ Ρ‰Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ ΠΎΠ±ΠΌΠ΅Π½ Π½Π° Π²Ρ€ΡŠΠ·ΠΊΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π±ΠΎΡ‚Π½ΠΈ нишки.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

ΠœΠΎΠ΄Π΅Π»ΡŠΡ‚ Π·Π° нишки Π½Π° Envoy Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€Π°Π½ Π΄Π° осигурява Π»Π΅ΠΊΠΎΡ‚Π° Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ ΠΈ масивСн ΠΏΠ°Ρ€Π°Π»Π΅Π»ΠΈΠ·ΡŠΠΌ Π·Π° смСтка Π½Π° ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»Π½ΠΎ Ρ€Π°Π·Ρ‚ΠΎΡ‡ΠΈΡ‚Π΅Π»Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚ ΠΈ Π²Ρ€ΡŠΠ·ΠΊΠΈ, Π°ΠΊΠΎ Π½Π΅ Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½ ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ. Π’ΠΎΠ·ΠΈ ΠΌΠΎΠ΄Π΅Π» ΠΌΡƒ позволява Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΠΎΠ±Ρ€Π΅ ΠΏΡ€ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ голям Π±Ρ€ΠΎΠΉ нишки ΠΈ производитСлност.
ΠšΠ°ΠΊΡ‚ΠΎ спомСнах Π½Π°ΠΊΡ€Π°Ρ‚ΠΊΠΎ Π² Twitter, Π΄ΠΈΠ·Π°ΠΉΠ½ΡŠΡ‚ ΠΌΠΎΠΆΠ΅ ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ Π²ΡŠΡ€Ρ…Ρƒ пълСн ΠΌΡ€Π΅ΠΆΠΎΠ² стСк Π² потрСбитСлски Ρ€Π΅ΠΆΠΈΠΌ, ΠΊΠ°Ρ‚ΠΎ DPDK (Data Plane Development Kit), ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ ΠΊΠΎΠ½Π²Π΅Π½Ρ†ΠΈΠΎΠ½Π°Π»Π½ΠΈ ΡΡŠΡ€Π²ΡŠΡ€ΠΈ, ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π°Ρ‰ΠΈ ΠΌΠΈΠ»ΠΈΠΎΠ½ΠΈ заявки Π² сСкунда с пълна L7 ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°. Π©Π΅ бъдС ΠΌΠ½ΠΎΠ³ΠΎ интСрСсно Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ ΠΊΠ°ΠΊΠ²ΠΎ Ρ‰Π΅ бъдС ΠΈΠ·Π³Ρ€Π°Π΄Π΅Π½ΠΎ ΠΏΡ€Π΅Π· слСдващитС няколко Π³ΠΎΠ΄ΠΈΠ½ΠΈ.
Π•Π΄ΠΈΠ½ послСдСн Π±ΡŠΡ€Π· ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€: ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡŠΡ‚ΠΈ са ΠΌΠ΅ ΠΏΠΈΡ‚Π°Π»ΠΈ Π·Π°Ρ‰ΠΎ ΠΈΠ·Π±Ρ€Π°Ρ…ΠΌΠ΅ C++ Π·Π° Envoy. ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π°Ρ‚Π° остава, Ρ‡Π΅ Ρ‚ΠΎΠΉ всС ΠΎΡ‰Π΅ Π΅ СдинствСният ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ индустриалСн Π΅Π·ΠΈΠΊ, Π½Π° ΠΊΠΎΠΉΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΠΈΠ·Π³Ρ€Π°Π΄Π΅Π½Π° Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°Ρ‚Π°, описана Π² Ρ‚Π°Π·ΠΈ публикация. C++ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ Π½Π΅ Π΅ подходящ Π·Π° всички ΠΈΠ»ΠΈ Π΄ΠΎΡ€ΠΈ Π·Π° ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ, Π½ΠΎ Π·Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ случаи Π½Π° ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π° Ρ‚ΠΎΠΉ всС ΠΎΡ‰Π΅ Π΅ СдинствСният инструмСнт Π·Π° ΡΠ²ΡŠΡ€ΡˆΠ²Π°Π½Π΅ Π½Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π°.

Π’Ρ€ΡŠΠ·ΠΊΠΈ към ΠΊΠΎΠ΄

Π’Ρ€ΡŠΠ·ΠΊΠΈ към Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ с интСрфСйси ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π° Π·Π°Π³Π»Π°Π²ΠΊΠΈ, обсъдСни Π² Ρ‚Π°Π·ΠΈ публикация:

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: www.habr.com

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€