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

ΠŸΡ€Π΅Π²ΠΎΠ΄ Π½Π° ΡΡ‚Π°Ρ‚ΠΈΡ˜Π°Ρ‚Π°: МодСл Π½Π° нишки Π·Π° ΠΈΡΠΏΡ€Π°ΡœΠ°ΡšΠ΅ - https://blog.envoyproxy.io/envoy-threading-model-a8d44b922310

Овој напис ΠΌΠΈ бСшС доста интСрСсСн, ΠΈ бидСјќи Envoy Π½Π°Ρ˜Ρ‡Π΅ΡΡ‚ΠΎ сС користи ΠΊΠ°ΠΊΠΎ Π΄Π΅Π» ΠΎΠ΄ β€žistioβ€œ ΠΈΠ»ΠΈ Сдноставно ΠΊΠ°ΠΊΠΎ β€žΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΎΡ€ Π½Π° Π²Π»Π΅Π·β€œ Π½Π° kubernetes, ΠΏΠΎΠ²Π΅ΡœΠ΅Ρ‚ΠΎ Π»ΡƒΡ“Π΅ ја Π½Π΅ΠΌΠ°Π°Ρ‚ истата Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½Π° ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ†ΠΈΡ˜Π° со Π½Π΅Π³ΠΎ ΠΊΠ°ΠΊΠΎ, Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€, со Ρ‚ΠΈΠΏΠΈΡ‡Π½ΠΈΡ‚Π΅ Π˜Π½ΡΡ‚Π°Π»Π°Ρ†ΠΈΠΈ Nginx ΠΈΠ»ΠΈ Haproxy. ΠœΠ΅Ρ“ΡƒΡ‚ΠΎΠ°, Π°ΠΊΠΎ Π½Π΅ΡˆΡ‚ΠΎ сС ΡΠΊΡ€ΡˆΠΈ, Π±ΠΈ Π±ΠΈΠ»ΠΎ Π΄ΠΎΠ±Ρ€ΠΎ Π΄Π° сС Ρ€Π°Π·Π±Π΅Ρ€Π΅ ΠΊΠ°ΠΊΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€Π° ΠΎΠ΄Π²Π½Π°Ρ‚Ρ€Π΅. Π‘Π΅ ΠΎΠ±ΠΈΠ΄ΠΎΠ² Π΄Π° ΠΏΡ€Π΅Π²Π΅Π΄Π°ΠΌ ΡˆΡ‚ΠΎ Π΅ ΠΌΠΎΠΆΠ½ΠΎ повСќС ΠΎΠ΄ тСкстот Π½Π° руски, Π²ΠΊΠ»ΡƒΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ ΠΈ посСбни Π·Π±ΠΎΡ€ΠΎΠ²ΠΈ Π·Π° ΠΎΠ½ΠΈΠ΅ Π½Π° ΠΊΠΎΠΈ ΠΈΠΌ Π΅ Π±ΠΎΠ»Π½ΠΎ Π΄Π° Π³ΠΎ ΠΏΠΎΠ³Π»Π΅Π΄Π½Π°Ρ‚ ΠΎΠ²Π°, Π³ΠΈ оставив ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΠΈΡ‚Π΅ Π²ΠΎ Π·Π°Π³Ρ€Π°Π΄ΠΈ. Π”ΠΎΠ±Ρ€Π΅Π΄ΠΎΡ˜Π΄ΠΎΠ²Ρ‚Π΅ Π²ΠΎ ΠΌΠ°Ρ‡ΠΊΠ°.

Π’Π΅Ρ…Π½ΠΈΡ‡ΠΊΠ°Ρ‚Π° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π° Π½Π° ниско Π½ΠΈΠ²ΠΎ Π·Π° Π±Π°Π·Π°Ρ‚Π° Π½Π° ΠΊΠΎΠ΄ΠΎΠ²ΠΈ Envoy ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°Π»Π½ΠΎ Π΅ ΠΏΡ€ΠΈΠ»ΠΈΡ‡Π½ΠΎ Ρ€Π΅Ρ‚ΠΊΠ°. Π—Π° Π΄Π° Π³ΠΎ ΠΏΠΎΠΏΡ€Π°Π²Π°ΠΌ ΠΎΠ²Π°, ΠΏΠ»Π°Π½ΠΈΡ€Π°ΠΌ Π΄Π° Π½Π°ΠΏΡ€Π°Π²Π°ΠΌ ΡΠ΅Ρ€ΠΈΡ˜Π° Π±Π»ΠΎΠ³ постови Π·Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈΡ‚Π΅ потсистСми Π½Π° Envoy. Π‘ΠΈΠ΄Π΅Ρ˜ΡœΠΈ ΠΎΠ²Π° Π΅ ΠΏΡ€Π²Π° ΡΡ‚Π°Ρ‚ΠΈΡ˜Π°, Π²Π΅ ΠΌΠΎΠ»Π°ΠΌ Π΄ΠΎΠ·Π²ΠΎΠ»Π΅Ρ‚Π΅ ΠΌΠΈ Π΄Π° Π·Π½Π°ΠΌ ΡˆΡ‚ΠΎ мислитС ΠΈ ΡˆΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π²Π΅ интСрСсира Π²ΠΎ ΠΈΠ΄Π½ΠΈΡ‚Π΅ статии.

Π•Π΄Π½ΠΎ ΠΎΠ΄ Π½Π°Ρ˜Ρ‡Π΅ΡΡ‚ΠΈΡ‚Π΅ Ρ‚Π΅Ρ…Π½ΠΈΡ‡ΠΊΠΈ ΠΏΡ€Π°ΡˆΠ°ΡšΠ° ΡˆΡ‚ΠΎ Π³ΠΈ Π΄ΠΎΠ±ΠΈΠ²Π°ΠΌ Π·Π° Envoy Π΅ Π±Π°Ρ€Π°ΡšΠ΅Ρ‚ΠΎ Π·Π° опис Π½Π° ниско Π½ΠΈΠ²ΠΎ Π½Π° ΠΌΠΎΠ΄Π΅Π»ΠΎΡ‚ Π½Π° нишки ΡˆΡ‚ΠΎ Π³ΠΎ користи. Π’ΠΎ овој пост, ќС опишам ΠΊΠ°ΠΊΠΎ Envoy Π³ΠΈ ΠΌΠ°ΠΏΠΈΡ€Π° врскитС со Π½ΠΈΡˆΠΊΠΈΡ‚Π΅, ΠΊΠ°ΠΊΠΎ ΠΈ систСмот Π·Π° Π»ΠΎΠΊΠ°Π»Π½ΠΎ ΡΠΊΠ»Π°Π΄ΠΈΡ€Π°ΡšΠ΅ Π½Π° нишки ΡˆΡ‚ΠΎ Π³ΠΎ користи Π²Π½Π°Ρ‚Ρ€Π΅ΡˆΠ½ΠΎ Π·Π° Π΄Π° Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈ ΠΊΠΎΠ΄ΠΎΡ‚ повСќС ΠΏΠ°Ρ€Π°Π»Π΅Π»Π΅Π½ ΠΈ со високи пСрформанси.

ΠŸΡ€Π΅Π³Π»Π΅Π΄ Π½Π° нишки

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

Envoy користи Ρ‚Ρ€ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Ρ‚ΠΈΠΏΠΎΠ²ΠΈ Π½Π° струи:

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

Π Π°ΠΊΡƒΠ²Π°ΡšΠ΅ со ΠΏΠΎΠ²Ρ€Π·ΡƒΠ²Π°ΡšΠ΅

Како ΡˆΡ‚ΠΎ бСшС дискутирано Π½Π°ΠΊΡ€Π°Ρ‚ΠΊΠΎ ΠΏΠΎΠ³ΠΎΡ€Π΅, ситС Ρ€Π°Π±ΠΎΡ‚Π½ΠΈ нишки Π³ΠΈ ΡΠ»ΡƒΡˆΠ°Π°Ρ‚ ситС ΡΠ»ΡƒΡˆΠ°Ρ‚Π΅Π»ΠΈ Π±Π΅Π· Π½ΠΈΠΊΠ°ΠΊΠ²ΠΎ Ρ‚Ρ€ΠΎΡˆΠ΅ΡšΠ΅. Π’Π°ΠΊΠ°, ΠΊΠ΅Ρ€Π½Π΅Π»ΠΎΡ‚ сС користи Π·Π° Π±Π»Π°Π³ΠΎΠ΄Π°Ρ‚Π½ΠΎ ΠΈΡΠΏΡ€Π°ΡœΠ°ΡšΠ΅ ΠΏΡ€ΠΈΡ„Π°Ρ‚Π΅Π½ΠΈ сокСти Π΄ΠΎ Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΡ‚Π΅ нишки. Π‘ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½ΠΈΡ‚Π΅ ΠΊΠ΅Ρ€Π½Π΅Π»ΠΈ Π³Π΅Π½Π΅Ρ€Π°Π»Π½ΠΎ сС ΠΌΠ½ΠΎΠ³Ρƒ Π΄ΠΎΠ±Ρ€ΠΈ Π²ΠΎ ΠΎΠ²Π°, Ρ‚ΠΈΠ΅ користат Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΊΠ°ΠΊΠΎ ΡˆΡ‚ΠΎ Π΅ Π·Π°Ρ˜Π°ΠΊΠ½ΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΡ‚ Π½Π° Π²Π»Π΅Π·/ΠΈΠ·Π»Π΅Π· (IO) Π·Π° Π΄Π° сС ΠΎΠ±ΠΈΠ΄Π°Ρ‚ Π΄Π° ја ΠΏΠΎΠΏΠΎΠ»Π½Π°Ρ‚ Π½ΠΈΡˆΠΊΠ°Ρ‚Π° со Ρ€Π°Π±ΠΎΡ‚Π° ΠΏΡ€Π΅Π΄ Π΄Π° ΠΏΠΎΡ‡Π½Π°Ρ‚ Π΄Π° користат Π΄Ρ€ΡƒΠ³ΠΈ нишки ΠΊΠΎΠΈ исто Ρ‚Π°ΠΊΠ° ΡΠ»ΡƒΡˆΠ°Π°Ρ‚ Π½Π° истиот ΠΏΡ€ΠΈΠΊΠ»ΡƒΡ‡ΠΎΠΊ, Π° исто Ρ‚Π°ΠΊΠ° Π½Π΅ користат ΠΊΡ€ΡƒΠ³-Ρ€ΠΎΠ±ΠΈΠ½ Π·Π°ΠΊΠ»ΡƒΡ‡ΡƒΠ²Π°ΡšΠ΅ (Spinlock) Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° сСкоС Π±Π°Ρ€Π°ΡšΠ΅.
ΠžΡ‚ΠΊΠ°ΠΊΠΎ ќС сС ΠΏΡ€ΠΈΡ„Π°Ρ‚ΠΈ врската Π½Π° Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΡ‡ΠΊΠ° нишка, Ρ‚Π°Π° никогаш Π½Π΅ ја Π½Π°ΠΏΡƒΡˆΡ‚Π° Ρ‚Π°Π° нишка. Π¦Π΅Π»Π°Ρ‚Π° ΠΏΠΎΠ½Π°Ρ‚Π°ΠΌΠΎΡˆΠ½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° врската сС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΡƒΠ²Π° цСлосно Π²ΠΎ Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΠΎΡ‚ ΠΊΠΎΠ½Π΅Ρ†, Π²ΠΊΠ»ΡƒΡ‡ΡƒΠ²Π°Ρ˜ΡœΠΈ Π³ΠΎ сСкоС ΠΎΠ΄Π½Π΅ΡΡƒΠ²Π°ΡšΠ΅ Π·Π° ΠΏΡ€Π΅ΠΏΡ€Π°ΡœΠ°ΡšΠ΅.

Ова ΠΈΠΌΠ° Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ Π²Π°ΠΆΠ½ΠΈ послСдици:

  • Π‘ΠΈΡ‚Π΅ Π±Π°Π·Π΅Π½ΠΈ Π·Π° ΠΏΠΎΠ²Ρ€Π·ΡƒΠ²Π°ΡšΠ΅ Π²ΠΎ Envoy сС Π΄ΠΎΠ΄Π΅Π»Π΅Π½ΠΈ Π½Π° Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΡ‡ΠΊΠ° нишка. Π—Π½Π°Ρ‡ΠΈ, ΠΈΠ°ΠΊΠΎ Π±Π°Π·Π΅Π½ΠΈΡ‚Π΅ Π·Π° ΠΏΠΎΠ²Ρ€Π·ΡƒΠ²Π°ΡšΠ΅ HTTP/2 ΠΏΡ€Π°Π²Π°Ρ‚ само Π΅Π΄Π½Π° врска со сСкој Π½Π°Π³ΠΎΡ€Π΅Π½ хост Π²ΠΎ исто Π²Ρ€Π΅ΠΌΠ΅, Π°ΠΊΠΎ ΠΈΠΌΠ° Ρ‡Π΅Ρ‚ΠΈΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π½ΠΈ нишки, ќС ΠΈΠΌΠ° Ρ‡Π΅Ρ‚ΠΈΡ€ΠΈ HTTP/2 ΠΊΠΎΠ½Π΅ΠΊΡ†ΠΈΠΈ ΠΏΠΎ upstream домаќин Π²ΠΎ стабилна ΡΠΎΡΡ‚ΠΎΡ˜Π±Π°.
  • ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π°Ρ‚Π° Π·ΠΎΡˆΡ‚ΠΎ Envoy Ρ€Π°Π±ΠΎΡ‚ΠΈ Π½Π° овој Π½Π°Ρ‡ΠΈΠ½ Π΅ Ρ‚ΠΎΠ° ΡˆΡ‚ΠΎ со Π·Π°Π΄Ρ€ΠΆΡƒΠ²Π°ΡšΠ΅ Π½Π° сè Π½Π° Π΅Π΄Π½Π° Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΡ‡ΠΊΠ° нишка, рСчиси Ρ†Π΅Π»ΠΈΠΎΡ‚ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅ Π΄Π° сС напишС Π±Π΅Π· Π±Π»ΠΎΠΊΠΈΡ€Π°ΡšΠ΅ ΠΈ ΠΊΠ°ΠΊΠΎ Π΄Π° Π΅ со Π΅Π΄Π½Π° нишка. Овој дизајн Π³ΠΎ олСснува ΠΏΠΈΡˆΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ ΠΌΠ½ΠΎΠ³Ρƒ ΠΊΠΎΠ΄ΠΎΠ²ΠΈ ΠΈ Π½Π΅Π²Π΅Ρ€ΠΎΡ˜Π°Ρ‚Π½ΠΎ Π΄ΠΎΠ±Ρ€ΠΎ сС Ρ€Π°Π·ΠΌΠ΅Ρ€ΡƒΠ²Π° Π½Π° рСчиси Π½Π΅ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ Π±Ρ€ΠΎΡ˜ Ρ€Π°Π±ΠΎΡ‚Π½ΠΈ нишки.
  • Π‘Π΅ΠΏΠ°ΠΊ, Π΅Π΄Π΅Π½ ΠΎΠ΄ Π³Π»Π°Π²Π½ΠΈΡ‚Π΅ Ρ‡Π΅ΠΊΠΎΡ€ΠΈ Π΅ Π΄Π΅ΠΊΠ° ΠΎΠ΄ Π³Π»Π΅Π΄Π½Π° Ρ‚ΠΎΡ‡ΠΊΠ° Π½Π° мСмориски Π±Π°Π·Π΅Π½ ΠΈ Сфикасност Π½Π° ΠΏΠΎΠ²Ρ€Π·ΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ, Π²ΡΡƒΡˆΠ½ΠΎΡΡ‚ Π΅ ΠΌΠ½ΠΎΠ³Ρƒ Π²Π°ΠΆΠ½ΠΎ Π΄Π° сС ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π° --concurrency. Ако ΠΈΠΌΠ°Ρ‚Π΅ повСќС Ρ€Π°Π±ΠΎΡ‚Π½ΠΈ нишки ΠΎΡ‚ΠΊΠΎΠ»ΠΊΡƒ ΡˆΡ‚ΠΎ Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎ, ќС ја ΠΏΠΎΡ‚Ρ€ΠΎΡˆΠΈΡ‚Π΅ ΠΌΠ΅ΠΌΠΎΡ€ΠΈΡ˜Π°Ρ‚Π°, ќС создадС повСќС врски Π²ΠΎ ΠΌΠΈΡ€ΡƒΠ²Π°ΡšΠ΅ ΠΈ ќС ја Π½Π°ΠΌΠ°Π»ΠΈ стапката Π½Π° Π·Π΄Ρ€ΡƒΠΆΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΊΠΎΠ½Π΅ΠΊΡ†ΠΈΠΈΡ‚Π΅. Π’ΠΎ Lyft, ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΠΈΡ‚Π΅ Π½Π° Π½Π°ΡˆΠΈΡ‚Π΅ ΠΏΡ€Π°Ρ‚Π΅Π½ΠΈΡ‡ΠΊΠΈ странични ΠΊΠΎΠ»Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ со ΠΌΠ½ΠΎΠ³Ρƒ ΠΌΠ°Π»Π° паралСлност, Ρ‚Π°ΠΊΠ° ΡˆΡ‚ΠΎ пСрформанситС Π³Ρ€ΡƒΠ±ΠΎ сС совпаѓаат со услугитС Π΄ΠΎ ΠΊΠΎΠΈ сСдат. НиС Ρ€Π°Π±ΠΎΡ‚ΠΈΠΌΠ΅ Π½Π° Envoy ΠΊΠ°ΠΊΠΎ прокси Π½Π° Ρ€Π°Π±ΠΎΡ‚ само ΠΏΡ€ΠΈ максимална истоврСмСност.

Π¨Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈ Π½Π΅Π±Π»ΠΎΠΊΠΈΡ€Π°ΡšΠ΅?

Π’Π΅Ρ€ΠΌΠΈΠ½ΠΎΡ‚ β€žΠ½Π΅-Π±Π»ΠΎΠΊΠΈΡ€Π°ΡšΠ΅β€œ Π΅ користСн Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ ΠΏΠ°Ρ‚ΠΈ досСга ΠΊΠΎΠ³Π° сС Π΄ΠΈΡΠΊΡƒΡ‚ΠΈΡ€Π°ΡˆΠ΅ Π·Π° Ρ‚ΠΎΠ° ΠΊΠ°ΠΊΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€Π°Π°Ρ‚ Π³Π»Π°Π²Π½ΠΈΡ‚Π΅ ΠΈ Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΡ‚Π΅ нишки. Π¦Π΅Π»ΠΈΠΎΡ‚ ΠΊΠΎΠ΄ Π΅ напишан ΠΏΠΎΠ΄ прСтпоставка Π΄Π΅ΠΊΠ° Π½ΠΈΡˆΡ‚ΠΎ никогаш Π½Π΅ Π΅ Π±Π»ΠΎΠΊΠΈΡ€Π°Π½ΠΎ. Π‘Π΅ΠΏΠ°ΠΊ, ΠΎΠ²Π° Π½Π΅ Π΅ цСлосно Ρ‚ΠΎΡ‡Π½ΠΎ (ΡˆΡ‚ΠΎ Π½Π΅ Π΅ цСлосно Ρ‚ΠΎΡ‡Π½ΠΎ?).

Envoy користи Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ Π΄ΠΎΠ»Π³ΠΈ процСсни Π±Ρ€Π°Π²ΠΈ:

  • Како ΡˆΡ‚ΠΎ бСшС дискутирано, ΠΊΠΎΠ³Π° сС ΠΏΠΈΡˆΡƒΠ²Π°Π°Ρ‚ Π΄Π½Π΅Π²Π½ΠΈΡ†ΠΈ Π·Π° пристап, ситС Ρ€Π°Π±ΠΎΡ‚Π½ΠΈ нишки Π³ΠΎ Π΄ΠΎΠ±ΠΈΠ²Π°Π°Ρ‚ истото Π·Π°ΠΊΠ»ΡƒΡ‡ΡƒΠ²Π°ΡšΠ΅ ΠΏΡ€Π΅Π΄ Π΄Π° сС ΠΏΠΎΠΏΠΎΠ»Π½ΠΈ Π±Π°Ρ„Π΅Ρ€ΠΎΡ‚ Π·Π° Π΄Π½Π΅Π²Π½ΠΈΡ†ΠΈ Π²ΠΎ ΠΌΠ΅ΠΌΠΎΡ€ΠΈΡ˜Π°Ρ‚Π°. Π’Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π½Π° Π΄Ρ€ΠΆΠ΅ΡšΠ΅ Π½Π° Π±Ρ€Π°Π²Π°Ρ‚Π° Ρ‚Ρ€Π΅Π±Π° Π΄Π° Π±ΠΈΠ΄Π΅ ΠΌΠ½ΠΎΠ³Ρƒ ниско, Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π΅ Π±Ρ€Π°Π²Π°Ρ‚Π° Π΄Π° сС оспорува ΠΏΡ€ΠΈ висока истоврСмСност ΠΈ висока пропусност.
  • Envoy користи ΠΌΠ½ΠΎΠ³Ρƒ слоТСн систСм Π·Π° Π΄Π° сС справи со статистиката ΡˆΡ‚ΠΎ Π΅ Π»ΠΎΠΊΠ°Π»Π½Π° Π½Π° Π½ΠΈΡˆΠΊΠ°Ρ‚Π°. Ова ќС Π±ΠΈΠ΄Π΅ Ρ‚Π΅ΠΌΠ° Π½Π° посСбСн пост. Π‘Π΅ΠΏΠ°ΠΊ, Π½Π°ΠΊΡ€Π°Ρ‚ΠΊΠΎ ќС спомнам Π΄Π΅ΠΊΠ° ΠΊΠ°ΠΊΠΎ Π΄Π΅Π» ΠΎΠ΄ Π»ΠΎΠΊΠ°Π»Π½ΠΎΡ‚ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΡƒΠ²Π°ΡšΠ΅ Π½Π° статистиката Π½Π° Π½ΠΈΡˆΠΊΠΈΡ‚Π΅, понСкогаш Π΅ Π½Π΅ΠΎΠΏΡ…ΠΎΠ΄Π½ΠΎ Π΄Π° сС стСкнС Π±Ρ€Π°Π²Π° Π½Π° Ρ†Π΅Π½Ρ‚Ρ€Π°Π»Π½Π° β€žΡΡ‚Π°Ρ‚ΠΈΡΡ‚ΠΈΠΊΠ°β€œ. Ова Π·Π°ΠΊΠ»ΡƒΡ‡ΡƒΠ²Π°ΡšΠ΅ никогаш Π½Π΅ Ρ‚Ρ€Π΅Π±Π° Π΄Π° сС Π±Π°Ρ€Π°.
  • Π“Π»Π°Π²Π½Π°Ρ‚Π° нишка ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ΠΈΡ‡Π½ΠΎ Ρ‚Ρ€Π΅Π±Π° Π΄Π° сС ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½ΠΈΡ€Π° со ситС Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΡ‡ΠΊΠΈ нишки. Ова сС ΠΏΡ€Π°Π²ΠΈ со β€žΠΎΠ±Ρ˜Π°Π²ΡƒΠ²Π°ΡšΠ΅β€œ ΠΎΠ΄ Π³Π»Π°Π²Π½Π°Ρ‚Π° нишка Π΄ΠΎ Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΡ‡ΠΊΠΈΡ‚Π΅ нишки, Π° понСкогаш ΠΈ ΠΎΠ΄ Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΡ‚Π΅ нишки Π½Π°Π·Π°Π΄ Π΄ΠΎ Π³Π»Π°Π²Π½Π°Ρ‚Π° нишка. Π˜ΡΠΏΡ€Π°ΡœΠ°ΡšΠ΅Ρ‚ΠΎ Π±Π°Ρ€Π° Π·Π°ΠΊΠ»ΡƒΡ‡ΡƒΠ²Π°ΡšΠ΅ Π·Π° Π΄Π° ΠΌΠΎΠΆΠ΅ ΠΎΠ±Ρ˜Π°Π²Π΅Π½Π°Ρ‚Π° ΠΏΠΎΡ€Π°ΠΊΠ° Π΄Π° сС Ρ‡Π΅ΠΊΠ° Π½Π° Ρ€Π΅Π΄ Π·Π° ΠΏΠΎΠ΄ΠΎΡ†Π½Π΅ΠΆΠ½Π° испорака. ОвиС Π±Ρ€Π°Π²ΠΈ никогаш Π½Π΅ Ρ‚Ρ€Π΅Π±Π° сСриозно Π΄Π° сС оспоруваат, Π½ΠΎ сСпак Ρ‚Π΅Ρ…Π½ΠΈΡ‡ΠΊΠΈ ΠΌΠΎΠΆΠ°Ρ‚ Π΄Π° Π±ΠΈΠ΄Π°Ρ‚ Π±Π»ΠΎΠΊΠΈΡ€Π°Π½ΠΈ.
  • Кога Envoy ΠΏΠΈΡˆΡƒΠ²Π° Π΄Π½Π΅Π²Π½ΠΈΠΊ Π½Π° ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΡ‚ Π½Π° систСмски Π³Ρ€Π΅ΡˆΠΊΠΈ (стандардна Π³Ρ€Π΅ΡˆΠΊΠ°), Ρ‚ΠΎΡ˜ Π΄ΠΎΠ±ΠΈΠ²Π° Π·Π°ΠΊΠ»ΡƒΡ‡ΡƒΠ²Π°ΡšΠ΅ Π½Π° Ρ†Π΅Π»ΠΈΠΎΡ‚ процСс. ΠžΠΏΡˆΡ‚ΠΎ Π·Π΅ΠΌΠ΅Π½ΠΎ, Π»ΠΎΠΊΠ°Π»Π½Π°Ρ‚Π° сСча Π½Π° Envoy сС смСта Π·Π° уТасна ΠΎΠ΄ Π³Π»Π΅Π΄Π½Π° Ρ‚ΠΎΡ‡ΠΊΠ° Π½Π° ΠΈΠ·Π²Π΅Π΄Π±Π°Ρ‚Π°, Ρ‚Π°ΠΊΠ° ΡˆΡ‚ΠΎ Π½Π΅ сС посвСти ΠΌΠ½ΠΎΠ³Ρƒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π½Π΅Ρ˜Π·ΠΈΠ½ΠΎΡ‚ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Ρ€ΡƒΠ²Π°ΡšΠ΅.
  • ΠŸΠΎΡΡ‚ΠΎΡ˜Π°Ρ‚ Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ Π΄Ρ€ΡƒΠ³ΠΈ ΡΠ»ΡƒΡ‡Π°Ρ˜Π½ΠΈ Π±Ρ€Π°Π²ΠΈ, Π½ΠΎ Π½ΠΈΡ‚Ρƒ Π΅Π΄Π½Π° ΠΎΠ΄ Π½ΠΈΠ² Π½Π΅ Π΅ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Π° Π·Π° пСрформанситС ΠΈ никогаш Π½Π΅ Ρ‚Ρ€Π΅Π±Π° Π΄Π° сС оспорува.

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

ΠŸΠΎΡ€Π°Π΄ΠΈ Π½Π°Ρ‡ΠΈΠ½ΠΎΡ‚ Π½Π° кој Envoy Π³ΠΈ ΠΎΠ΄Π²ΠΎΡ˜ΡƒΠ²Π° одговорноститС Π½Π° Π³Π»Π°Π²Π½Π°Ρ‚Π° нишка ΠΎΠ΄ одговорноститС Π½Π° Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΠΎΡ‚ ΠΊΠΎΠ½Π΅Ρ†, постои услов Π΄Π° ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·Π²Ρ€ΡˆΠΈ слоТСна ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Π³Π»Π°Π²Π½Π°Ρ‚Π° нишка ΠΈ ΠΏΠΎΡ‚ΠΎΠ° Π΄Π° сС ΠΎΠ±Π΅Π·Π±Π΅Π΄ΠΈ Π½Π° сСкоја Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΡ‡ΠΊΠ° нишка Π½Π° ΠΌΠ½ΠΎΠ³Ρƒ истоврСмСн Π½Π°Ρ‡ΠΈΠ½. Овој Π΄Π΅Π» Π³ΠΎ ΠΎΠΏΠΈΡˆΡƒΠ²Π° Π»ΠΎΠΊΠ°Π»Π½ΠΎΡ‚ΠΎ ΡΠΊΠ»Π°Π΄ΠΈΡ€Π°ΡšΠ΅ Π½Π° Envoy Thread (TLS) Π½Π° високо Π½ΠΈΠ²ΠΎ. Π’ΠΎ слСдниот Π΄Π΅Π» ќС опишам ΠΊΠ°ΠΊΠΎ сС користи Π·Π° ΡƒΠΏΡ€Π°Π²ΡƒΠ²Π°ΡšΠ΅ со кластСр.
[ΠŸΡ€Π΅Π²ΠΎΠ΄] МодСл Π½Π° нишки Π½Π° ΠΏΡ€Π°Ρ‚Π΅Π½ΠΈΠΊ

Како ΡˆΡ‚ΠΎ вСќС бСшС опишано, Π³Π»Π°Π²Π½Π°Ρ‚Π° нишка сС справува ΠΏΡ€Π°ΠΊΡ‚ΠΈΡ‡Π½ΠΎ со ситС функционалности Π½Π° ΡƒΠΏΡ€Π°Π²ΡƒΠ²Π°Ρ‡ΠΊΠ°Ρ‚Π° ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π½Π°Ρ‚Π° Ρ€Π°ΠΌΠ½ΠΈΠ½Π° Π²ΠΎ процСсот Π½Π° ΠŸΡ€Π°Ρ‚Π΅Π½ΠΈΠΊ. ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π½Π°Ρ‚Π° Ρ€Π°ΠΌΠ½ΠΈΠ½Π° ΠΎΠ²Π΄Π΅ Π΅ ΠΌΠ°Π»ΠΊΡƒ ΠΏΡ€Π΅ΠΎΠΏΡ‚ΠΎΠ²Π°Ρ€Π΅Π½Π°, Π½ΠΎ ΠΊΠΎΠ³Π° ќС Π³ΠΎ ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅Ρ‚Π΅ Π²ΠΎ самиот процСс Π½Π° Π•Π½Π²ΠΎΡ˜ ΠΈ ќС Π³ΠΎ спорСдитС со ΠΏΡ€Π΅ΠΏΡ€Π°ΡœΠ°ΡšΠ΅Ρ‚ΠΎ ΡˆΡ‚ΠΎ Π³ΠΎ ΠΏΡ€Π°Π²Π°Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΡ‚Π΅ нишки, ΠΈΠΌΠ° смисла. ΠžΠΏΡˆΡ‚ΠΎΡ‚ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Π΅ Π΄Π΅ΠΊΠ° процСсот Π½Π° Π³Π»Π°Π²Π½Π°Ρ‚Π° нишка ΠΏΡ€Π°Π²ΠΈ ΠΎΠ΄Ρ€Π΅Π΄Π΅Π½Π° Ρ€Π°Π±ΠΎΡ‚Π°, Π° ΠΏΠΎΡ‚ΠΎΠ° Ρ‚Ρ€Π΅Π±Π° Π΄Π° ја Π°ΠΆΡƒΡ€ΠΈΡ€Π° сСкоја Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΡ‡ΠΊΠ° нишка спорСд Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΎΡ‚ ΠΎΠ΄ Ρ‚Π°Π° Ρ€Π°Π±ΠΎΡ‚Π°. Π²ΠΎ овој ΡΠ»ΡƒΡ‡Π°Ρ˜, Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΡ‡ΠΊΠ°Ρ‚Π° нишка Π½Π΅ Ρ‚Ρ€Π΅Π±Π° Π΄Π° стСкнС Π·Π°ΠΊΠ»ΡƒΡ‡ΡƒΠ²Π°ΡšΠ΅ Π½Π° сСкој пристап.

БистСмот TLS (Thread local storage) Π½Π° Envoy Ρ€Π°Π±ΠΎΡ‚ΠΈ Π½Π° слСдниов Π½Π°Ρ‡ΠΈΠ½:

  • ΠšΠΎΠ΄ΠΎΡ‚ ΡˆΡ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚ΠΈ Π½Π° Π³Π»Π°Π²Π½Π°Ρ‚Π° нишка ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΎΠ΄Π²ΠΎΠΈ слот Π·Π° TLS Π·Π° Ρ†Π΅Π»ΠΈΠΎΡ‚ процСс. Иако ΠΎΠ²Π° Π΅ апстрахирано, Π²ΠΎ пракса Ρ‚ΠΎΠ° Π΅ индСкс Π²ΠΎ Π²Π΅ΠΊΡ‚ΠΎΡ€, ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡƒΠ²Π°Ρ˜ΡœΠΈ O(1) пристап.
  • Π“Π»Π°Π²Π½Π°Ρ‚Π° нишка ΠΌΠΎΠΆΠ΅ Π΄Π° инсталира ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π½ΠΈ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π²ΠΎ ΡΠ²ΠΎΡ˜ΠΎΡ‚ слот. Кога ΠΎΠ²Π° Π΅ Π½Π°ΠΏΡ€Π°Π²Π΅Π½ΠΎ, ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈΡ‚Π΅ сС ΠΎΠ±Ρ˜Π°Π²ΡƒΠ²Π°Π°Ρ‚ Π²ΠΎ сСкоја Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΡ‡ΠΊΠ° нишка ΠΊΠ°ΠΊΠΎ Π½ΠΎΡ€ΠΌΠ°Π»Π΅Π½ настан Π½Π° циклусот Π½Π° настани.
  • Π Π°Π±ΠΎΡ‚Π½ΠΈΡ‡ΠΊΠΈΡ‚Π΅ нишки ΠΌΠΎΠΆΠ°Ρ‚ Π΄Π° Ρ‡ΠΈΡ‚Π°Π°Ρ‚ ΠΎΠ΄ Π½ΠΈΠ²Π½ΠΈΠΎΡ‚ слот Π·Π° TLS ΠΈ Π΄Π° Π³ΠΈ ΠΏΡ€Π΅Π·Π΅ΠΌΠ°Ρ‚ ситС Π»ΠΎΠΊΠ°Π»Π½ΠΈ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ΡˆΡ‚ΠΎ сС достапни Ρ‚Π°ΠΌΡƒ.

Иако Π΅ ΠΌΠ½ΠΎΠ³Ρƒ Сдноставна ΠΈ Π½Π΅Π²Π΅Ρ€ΠΎΡ˜Π°Ρ‚Π½ΠΎ моќна ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ°, Ρ‚Π°Π° Π΅ ΠΌΠ½ΠΎΠ³Ρƒ слична Π½Π° ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ‚ΠΎΡ‚ Π½Π° Π±Π»ΠΎΠΊΠΈΡ€Π°ΡšΠ΅ RCU (Read-Copy-Update). Π’ΠΎ ΡΡƒΡˆΡ‚ΠΈΠ½Π°, Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΡ‚Π΅ нишки никогаш Π½Π΅ Π³Π»Π΅Π΄Π°Π°Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠ²ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π²ΠΎ слотови TLS Π΄ΠΎΠ΄Π΅ΠΊΠ° Ρ€Π°Π±ΠΎΡ‚ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π°. ΠŸΡ€ΠΎΠΌΠ΅Π½Π°Ρ‚Π° сС случува само Π²ΠΎ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ΠΎΡ‚ Π½Π° ΠΎΠ΄ΠΌΠΎΡ€ ΠΏΠΎΠΌΠ΅Ρ“Ρƒ Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΡ‚Π΅ настани.

ΠŸΡ€Π΅Ρ‚ΡΡ‚Π°Π²Π½ΠΈΠΊΠΎΡ‚ Π³ΠΎ користи ΠΎΠ²Π° Π½Π° Π΄Π²Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π½Π°Ρ‡ΠΈΠ½ΠΈ:

  • Π‘ΠΎ ΡΠΊΠ»Π°Π΄ΠΈΡ€Π°ΡšΠ΅ Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π½Π° сСкоја Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΡ‡ΠΊΠ° нишка, Π΄ΠΎ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈΡ‚Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° сС пристапи Π±Π΅Π· Π½ΠΈΠΊΠ°ΠΊΠ²ΠΎ Π±Π»ΠΎΠΊΠΈΡ€Π°ΡšΠ΅.
  • Π‘ΠΎ ΠΎΠ΄Ρ€ΠΆΡƒΠ²Π°ΡšΠ΅ Π½Π° сподСлСн ΠΏΠΎΠΊΠ°ΠΆΡƒΠ²Π°Ρ‡ ΠΊΠΎΠ½ Π³Π»ΠΎΠ±Π°Π»Π½ΠΈΡ‚Π΅ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π²ΠΎ Ρ€Π΅ΠΆΠΈΠΌ само Π·Π° Ρ‡ΠΈΡ‚Π°ΡšΠ΅ Π½Π° сСкоја Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΡ‡ΠΊΠ° нишка. Π’Π°ΠΊΠ°, сСкоја Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΡ‡ΠΊΠ° нишка ΠΈΠΌΠ° Π±Ρ€ΠΎΡ˜ Π½Π° Ρ€Π΅Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈ Π·Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ΡˆΡ‚ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π½Π°ΠΌΠ°Π»ΠΈ Π΄ΠΎΠ΄Π΅ΠΊΠ° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ. Π‘Π°ΠΌΠΎ ΠΊΠΎΠ³Π° ситС Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΡ†ΠΈ ќС сС смират ΠΈ ќС ΠΏΡ€ΠΈΠΊΠ°Ρ‡Π°Ρ‚ Π½ΠΎΠ²ΠΈ сподСлСни ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ, старитС ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ќС Π±ΠΈΠ΄Π°Ρ‚ ΡƒΠ½ΠΈΡˆΡ‚Π΅Π½ΠΈ. Ова Π΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½ΠΎ со RCU.

Ниво Π·Π° Π°ΠΆΡƒΡ€ΠΈΡ€Π°ΡšΠ΅ Π½Π° кластСрот

Π’ΠΎ овој Π΄Π΅Π», ќС опишам ΠΊΠ°ΠΊΠΎ сС користи TLS (Π»ΠΎΠΊΠ°Π»Π½ΠΎ ΡΠΊΠ»Π°Π΄ΠΈΡ€Π°ΡšΠ΅ Π½Π° нишки) Π·Π° ΡƒΠΏΡ€Π°Π²ΡƒΠ²Π°ΡšΠ΅ со кластСр. Π£ΠΏΡ€Π°Π²ΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ со кластСрот Π²ΠΊΠ»ΡƒΡ‡ΡƒΠ²Π° xDS API ΠΈ/ΠΈΠ»ΠΈ DNS ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°, ΠΊΠ°ΠΊΠΎ ΠΈ здравствСна ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°.
[ΠŸΡ€Π΅Π²ΠΎΠ΄] МодСл Π½Π° нишки Π½Π° ΠΏΡ€Π°Ρ‚Π΅Π½ΠΈΠΊ

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

  1. Π£ΠΏΡ€Π°Π²ΡƒΠ²Π°Ρ‡ΠΎΡ‚ со кластСри Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Π²ΠΎ Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° Envoy ΡˆΡ‚ΠΎ ΡƒΠΏΡ€Π°Π²ΡƒΠ²Π° со ситС ΠΏΠΎΠ·Π½Π°Ρ‚ΠΈ кластСри Π½Π°Π³ΠΎΡ€Π΅, API-Ρ‚ΠΎ Π½Π° услугата Π·Π° ΠΎΡ‚ΠΊΡ€ΠΈΠ²Π°ΡšΠ΅ кластСри (CDS), API-Ρ‚ΠΎ Π½Π° услугата Π·Π° Ρ‚Π°Ρ˜Π½ΠΎ ΠΎΡ‚ΠΊΡ€ΠΈΠ²Π°ΡšΠ΅ (SDS) ΠΈ услугата Π·Π° ΠΎΡ‚ΠΊΡ€ΠΈΠ²Π°ΡšΠ΅ ΠΊΡ€Π°Ρ˜Π½Π° Ρ‚ΠΎΡ‡ΠΊΠ° (EDS), DNS ΠΈ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΈΡ‚Π΅ Π½Π°Π΄Π²ΠΎΡ€Π΅ΡˆΠ½ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π½Π° Π·Π΄Ρ€Π°Π²Ρ˜Π΅Ρ‚ΠΎ. Вој Π΅ ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ€Π΅Π½ Π·Π° создавањС β€žΠ΅Π²Π΅Π½Ρ‚ΡƒΠ°Π»Π½ΠΎ ΠΊΠΎΠ½Π·ΠΈΡΡ‚Π΅Π½Ρ‚Π΅Π½β€œ ΠΏΡ€ΠΈΠΊΠ°Π· Π½Π° сСкоС Π³ΠΎΡ€Π½ΠΎ кластСр, ΠΊΠΎΠ΅ Π³ΠΈ Π²ΠΊΠ»ΡƒΡ‡ΡƒΠ²Π° ΠΎΡ‚ΠΊΡ€ΠΈΠ΅Π½ΠΈΡ‚Π΅ домаќини, ΠΊΠ°ΠΊΠΎ ΠΈ здравствСната ΡΠΎΡΡ‚ΠΎΡ˜Π±Π°.
  2. ЗдравствСниот ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡƒΠ²Π°Ρ‡ Π²Ρ€ΡˆΠΈ Π°ΠΊΡ‚ΠΈΠ²Π½Π° здравствСна ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΈ Π³ΠΈ извСстува ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ Π½Π° здравствСната ΡΠΎΡΡ‚ΠΎΡ˜Π±Π° Π΄ΠΎ ΠΌΠ΅Π½Π°ΡŸΠ΅Ρ€ΠΎΡ‚ Π½Π° кластСрот.
  3. CDS (Cluster Discovery Service) / SDS (Secret Discovery Service) / EDS (Endpoint Discovery Service) / DNS сС Π²Ρ€ΡˆΠ°Ρ‚ Π·Π° Π΄Π° сС ΠΎΠ΄Ρ€Π΅Π΄ΠΈ члСнството Π²ΠΎ кластСрот. ΠŸΡ€ΠΎΠΌΠ΅Π½Π°Ρ‚Π° Π½Π° ΡΠΎΡΡ‚ΠΎΡ˜Π±Π°Ρ‚Π° сС Π²Ρ€Π°ΡœΠ° Π½Π° ΠΌΠ΅Π½Π°ΡŸΠ΅Ρ€ΠΎΡ‚ Π½Π° кластСрот.
  4. БСкоја Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΡ‡ΠΊΠ° нишка ΠΊΠΎΠ½Ρ‚ΠΈΠ½ΡƒΠΈΡ€Π°Π½ΠΎ ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π° циклус Π½Π° настани.
  5. Кога ΠΌΠ΅Π½Π°ΡŸΠ΅Ρ€ΠΎΡ‚ Π½Π° кластСрот ќС ΡƒΡ‚Π²Ρ€Π΄ΠΈ Π΄Π΅ΠΊΠ° ΡΠΎΡΡ‚ΠΎΡ˜Π±Π°Ρ‚Π° Π½Π° кластСрот Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½Π΅Ρ‚Π°, Ρ‚ΠΎΡ˜ создава Π½ΠΎΠ²Π° слика само Π·Π° Ρ‡ΠΈΡ‚Π°ΡšΠ΅ Π½Π° ΡΠΎΡΡ‚ΠΎΡ˜Π±Π°Ρ‚Π° Π½Π° кластСрот ΠΈ ја ΠΈΡΠΏΡ€Π°ΡœΠ° Π΄ΠΎ сСкоја Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΡ‡ΠΊΠ° нишка.
  6. Π’ΠΎ Ρ‚Π΅ΠΊΠΎΡ‚ Π½Π° слСдниот Ρ‚ΠΈΠ²ΠΎΠΊ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄, Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΡ‡ΠΊΠ°Ρ‚Π° нишка ќС ја Π°ΠΆΡƒΡ€ΠΈΡ€Π° снимката Π²ΠΎ Π΄ΠΎΠ΄Π΅Π»Π΅Π½ΠΈΠΎΡ‚ слот Π·Π° TLS.
  7. Π—Π° Π²Ρ€Π΅ΠΌΠ΅ Π½Π° I/O настан ΡˆΡ‚ΠΎ Ρ‚Ρ€Π΅Π±Π° Π΄Π° Π³ΠΎ ΠΎΠ΄Ρ€Π΅Π΄ΠΈ балансот Π½Π° Π΄ΠΎΠΌΠ°ΡœΠΈΠ½ΠΎΡ‚ Π·Π° Π²Ρ‡ΠΈΡ‚ΡƒΠ²Π°ΡšΠ΅, балансСрот Π½Π° ΠΎΠΏΡ‚ΠΎΠ²Π°Ρ€ΡƒΠ²Π°ΡšΠ΅ ќС ΠΏΠΎΠ±Π°Ρ€Π° слот TLS (Thread local storage) Π·Π° Π΄Π° Π΄ΠΎΠ±ΠΈΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π·Π° Π΄ΠΎΠΌΠ°ΡœΠΈΠ½ΠΎΡ‚. Ова Π½Π΅ Π±Π°Ρ€Π° Π±Ρ€Π°Π²ΠΈ. Π—Π°Π±Π΅Π»Π΅ΠΆΠ΅Ρ‚Π΅ исто Ρ‚Π°ΠΊΠ° Π΄Π΅ΠΊΠ° TLS исто Ρ‚Π°ΠΊΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π° настани Π·Π° Π°ΠΆΡƒΡ€ΠΈΡ€Π°ΡšΠ΅, Ρ‚Π°ΠΊΠ° ΡˆΡ‚ΠΎ балансирачитС Π½Π° ΠΎΠΏΡ‚ΠΎΠ²Π°Ρ€ΡƒΠ²Π°ΡšΠ΅ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ ΠΌΠΎΠΆΠ°Ρ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ Π΄Π° прСсмСтуваат кСшови, структури Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ΠΈΡ‚Π½. Ова Π΅ Π½Π°Π΄Π²ΠΎΡ€ ΠΎΠ΄ опсСгот Π½Π° овој пост, Π½ΠΎ сС користи Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ мСста Π²ΠΎ ΠΊΠΎΠ΄ΠΎΡ‚.

ΠšΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ ја Π³ΠΎΡ€Π΅Π½Π°Π²Π΅Π΄Π΅Π½Π°Ρ‚Π° ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°, Envoy ΠΌΠΎΠΆΠ΅ Π΄Π° Π³ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΈ сСкоС Π±Π°Ρ€Π°ΡšΠ΅ Π±Π΅Π· Π½ΠΈΠΊΠ°ΠΊΠ²ΠΎ Π±Π»ΠΎΠΊΠΈΡ€Π°ΡšΠ΅ (освСн ΠΊΠ°ΠΊΠΎ ΡˆΡ‚ΠΎ Π΅ опишано ΠΏΡ€Π΅Ρ‚Ρ…ΠΎΠ΄Π½ΠΎ). Настрана ΠΎΠ΄ слоТСноста Π½Π° самиот TLS ΠΊΠΎΠ΄, ΠΏΠΎΠ³ΠΎΠ»Π΅ΠΌΠΈΠΎΡ‚ Π΄Π΅Π» ΠΎΠ΄ ΠΊΠΎΠ΄ΠΎΡ‚ Π½Π΅ Ρ‚Ρ€Π΅Π±Π° Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅ ΠΊΠ°ΠΊΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€Π° ΠΌΡƒΠ»Ρ‚ΠΈΠ½ΠΈΡˆΠΊΠ°Ρ‚Π° ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° сС напишС со Π΅Π΄Π½Π° нишка. Ова Π³ΠΎ олСснува ΠΏΠΈΡˆΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° ΠΏΠΎΠ³ΠΎΠ»Π΅ΠΌΠΈΠΎΡ‚ Π΄Π΅Π» ΠΎΠ΄ ΠΊΠΎΠ΄ΠΎΡ‚, ΠΏΠΎΠΊΡ€Π°Ρ˜ супСриорнитС пСрформанси.

Π”Ρ€ΡƒΠ³ΠΈ потсистСми ΡˆΡ‚ΠΎ користат TLS

TLS (Thread local storage) ΠΈ RCU (Read Copy Update) сС ΡˆΠΈΡ€ΠΎΠΊΠΎ користСни Π²ΠΎ Envoy.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π·Π° ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π°:

  • ΠœΠ΅Ρ…Π°Π½ΠΈΠ·Π°ΠΌ Π·Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π° Π½Π° функционалноста Π·Π° Π²Ρ€Π΅ΠΌΠ΅ Π½Π° ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ: Π’Π΅ΠΊΠΎΠ²Π½Π°Ρ‚Π° листа Π½Π° ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½Π° функционалност сС прСсмСтува Π²ΠΎ Π³Π»Π°Π²Π½Π°Ρ‚Π° нишка. БСкоја Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΡ‡ΠΊΠ° нишка ΠΏΠΎΡ‚ΠΎΠ° Π΄ΠΎΠ±ΠΈΠ²Π° слика само Π·Π° Ρ‡ΠΈΡ‚Π°ΡšΠ΅ ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ RCU сСмантика.
  • Π—Π°ΠΌΠ΅Π½Π° Π½Π° Ρ‚Π°Π±Π΅Π»ΠΈΡ‚Π΅ Π½Π° ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚Π°Ρ‚Π°: Π—Π° Ρ‚Π°Π±Π΅Π»ΠΈΡ‚Π΅ Π·Π° ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈ ΠΎΠ±Π΅Π·Π±Π΅Π΄Π΅Π½ΠΈ ΠΎΠ΄ RDS (Услуга Π·Π° ΠΎΡ‚ΠΊΡ€ΠΈΠ²Π°ΡšΠ΅ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈ), Ρ‚Π°Π±Π΅Π»ΠΈΡ‚Π΅ Π·Π° ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈ сС ΠΊΡ€Π΅ΠΈΡ€Π°Π°Ρ‚ Π½Π° Π³Π»Π°Π²Π½Π°Ρ‚Π° нишка. Π‘Π½ΠΈΠΌΠΊΠ°Ρ‚Π° само Π·Π° Ρ‡ΠΈΡ‚Π°ΡšΠ΅ послСдоватСлно ќС Π±ΠΈΠ΄Π΅ ΠΎΠ±Π΅Π·Π±Π΅Π΄Π΅Π½Π° Π·Π° сСкоја Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΡ‡ΠΊΠ° нишка ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ RCU (Read Copy Update) сСмантика. Ова Π³ΠΎ ΠΏΡ€Π°Π²ΠΈ ΠΌΠ΅Π½ΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° Ρ‚Π°Π±Π΅Π»ΠΈΡ‚Π΅ Π½Π° Ρ€ΡƒΡ‚ΠΈ атомски Сфикасни.
  • ΠšΠ΅ΡˆΠΈΡ€Π°ΡšΠ΅ Π½Π° Π·Π°Π³Π»Π°Π²ΠΈΠ΅Ρ‚ΠΎ Π½Π° HTTP: Како ΡˆΡ‚ΠΎ сС испоставува, ΠΏΡ€Π΅ΡΠΌΠ΅Ρ‚ΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° Π·Π°Π³Π»Π°Π²ΠΈΠ΅Ρ‚ΠΎ Π½Π° HTTP Π·Π° сСкоС Π±Π°Ρ€Π°ΡšΠ΅ (Π΄ΠΎΠ΄Π΅ΠΊΠ° Ρ€Π°Π±ΠΎΡ‚ΠΈ ~25K+ RPS ΠΏΠΎ Ρ˜Π°Π΄Ρ€ΠΎ) Π΅ ΠΏΡ€ΠΈΠ»ΠΈΡ‡Π½ΠΎ скапо. Envoy Ρ†Π΅Π½Ρ‚Ρ€Π°Π»Π½ΠΎ Π³ΠΎ прСсмСтува Π·Π°Π³Π»Π°Π²ΠΈΠ΅Ρ‚ΠΎ ΠΏΡ€ΠΈΠ±Π»ΠΈΠΆΠ½ΠΎ Π½Π° сСкои ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π° сСкунда ΠΈ Π³ΠΎ ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡƒΠ²Π° Π½Π° сСкој Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΠΊ ΠΏΡ€Π΅ΠΊΡƒ TLS ΠΈ RCU.

Има ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ случаи, Π½ΠΎ ΠΏΡ€Π΅Ρ‚Ρ…ΠΎΠ΄Π½ΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Ρ‚Ρ€Π΅Π±Π° Π΄Π° Π΄Π°Π΄Π°Ρ‚ Π΄ΠΎΠ±Ρ€ΠΎ Ρ€Π°Π·Π±ΠΈΡ€Π°ΡšΠ΅ Π·Π° ΡˆΡ‚ΠΎ сС користи TLS.

ΠŸΠΎΠ·Π½Π°Ρ‚ΠΈ стапици Π½Π° пСрформанситС

Π”ΠΎΠ΄Π΅ΠΊΠ° Envoy Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€Π° доста Π΄ΠΎΠ±Ρ€ΠΎ Π²ΠΎ Ρ†Π΅Π»ΠΈΠ½Π°, ΠΈΠΌΠ° Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ Π·Π½Π°Ρ‡Π°Ρ˜Π½ΠΈ области ΠΊΠΎΠΈ Π±Π°Ρ€Π°Π°Ρ‚ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΊΠΎΠ³Π° сС користи со ΠΌΠ½ΠΎΠ³Ρƒ висока истоврСмСност ΠΈ пропусност:

  • Како ΡˆΡ‚ΠΎ Π΅ опишано Π²ΠΎ овој напис, ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°Π»Π½ΠΎ ситС Ρ€Π°Π±ΠΎΡ‚Π½ΠΈ нишки Π΄ΠΎΠ±ΠΈΠ²Π°Π°Ρ‚ Π·Π°ΠΊΠ»ΡƒΡ‡ΡƒΠ²Π°ΡšΠ΅ ΠΊΠΎΠ³Π° ΠΏΠΈΡˆΡƒΠ²Π°Π°Ρ‚ Π²ΠΎ мСморискиот Π±Π°Ρ„Π΅Ρ€ Π·Π° Π΄Π½Π΅Π²Π½ΠΈΠΊ Π·Π° пристап. ΠŸΡ€ΠΈ висока конкурСнтност ΠΈ висока пропусност, ќС Ρ‚Ρ€Π΅Π±Π° Π΄Π° Π³ΠΈ Π³Ρ€ΡƒΠΏΠΈΡ€Π°Ρ‚Π΅ Π΄Π½Π΅Π²Π½ΠΈΡ†ΠΈΡ‚Π΅ Π·Π° пристап Π·Π° сСкоја Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΡ‡ΠΊΠ° нишка Π½Π° смСтка Π½Π° Π½Π΅Π½Π°Ρ€Π°Ρ‡Π°Π½Π° испорака ΠΏΡ€ΠΈ Π·Π°ΠΏΠΈΡˆΡƒΠ²Π°ΡšΠ΅ Π²ΠΎ ΠΊΠΎΠ½Π΅Ρ‡Π½Π°Ρ‚Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°. АлтСрнативно, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΊΡ€Π΅ΠΈΡ€Π°Ρ‚Π΅ посСбСн Π΄Π½Π΅Π²Π½ΠΈΠΊ Π·Π° пристап Π·Π° сСкоја Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΡ‡ΠΊΠ° нишка.
  • Иако статистикитС сС високо ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€Π°Π½ΠΈ, ΠΏΡ€ΠΈ ΠΌΠ½ΠΎΠ³Ρƒ висока истоврСмСност ΠΈ пропусната моќ, Π½Π°Ρ˜Π²Π΅Ρ€ΠΎΡ˜Π°Ρ‚Π½ΠΎ, ќС ΠΈΠΌΠ° атомска расправа Π·Π° ΠΏΠΎΠ΅Π΄ΠΈΠ½Π΅Ρ‡Π½ΠΈ статистики. Π Π΅ΡˆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π·Π° овој ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Π΅ Π±Ρ€ΠΎΡ˜Π°Ρ‡ΠΈ ΠΏΠΎ Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΡ‡ΠΊΠ° нишка со ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ΠΈΡ‡Π½ΠΎ Ρ€Π΅ΡΠ΅Ρ‚ΠΈΡ€Π°ΡšΠ΅ Π½Π° Ρ†Π΅Π½Ρ‚Ρ€Π°Π»Π½ΠΈΡ‚Π΅ Π±Ρ€ΠΎΡ˜Π°Ρ‡ΠΈ. Π—Π° ΠΎΠ²Π° ќС сС дискутира Π²ΠΎ Π½Π°Ρ€Π΅Π΄Π½ΠΈΠΎΡ‚ пост.
  • Π‘Π΅Π³Π°ΡˆΠ½Π°Ρ‚Π° Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° Π½Π΅ΠΌΠ° Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ Π΄ΠΎΠ±Ρ€ΠΎ Π°ΠΊΠΎ Envoy сС распорСди Π²ΠΎ сцСнарио ΠΊΠ°Π΄Π΅ ΡˆΡ‚ΠΎ ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³Ρƒ ΠΌΠ°Π»ΠΊΡƒ врски ΠΊΠΎΠΈ Π±Π°Ρ€Π°Π°Ρ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΈ рСсурси Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°. НС постои Π³Π°Ρ€Π°Π½Ρ†ΠΈΡ˜Π° Π΄Π΅ΠΊΠ° врскитС ќС Π±ΠΈΠ΄Π°Ρ‚ Ρ€Π°ΠΌΠ½ΠΎΠΌΠ΅Ρ€Π½ΠΎ распорСдСни ΠΌΠ΅Ρ“Ρƒ Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΡ‚Π΅ нишки. Ова ΠΌΠΎΠΆΠ΅ Π΄Π° сС Ρ€Π΅ΡˆΠΈ со ΡΠΏΡ€ΠΎΠ²Π΅Π΄ΡƒΠ²Π°ΡšΠ΅ Π½Π° Π±Π°Π»Π°Π½ΡΠΈΡ€Π°ΡšΠ΅ Π½Π° Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΡ‚Π΅ врски, ΡˆΡ‚ΠΎ ќС ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠΈ Ρ€Π°Π·ΠΌΠ΅Π½Π° Π½Π° врски ΠΏΠΎΠΌΠ΅Ρ“Ρƒ Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΡ‚Π΅ нишки.

Π—Π°ΠΊΠ»ΡƒΡ‡ΠΎΠΊ

ΠœΠΎΠ΄Π΅Π»ΠΎΡ‚ Π½Π° нишки Π½Π° Envoy Π΅ Π΄ΠΈΠ·Π°Ρ˜Π½ΠΈΡ€Π°Π½ Π΄Π° ΠΎΠ±Π΅Π·Π±Π΅Π΄ΠΈ Π»Π΅ΡΠ½ΠΎΡ‚ΠΈΡ˜Π° Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°ΡšΠ΅ ΠΈ масовСн ΠΏΠ°Ρ€Π°Π»Π΅Π»ΠΈΠ·Π°ΠΌ Π½Π° смСтка Π½Π° ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΡ˜Π°Π»Π½ΠΎ Π½Π΅ΠΏΠΎΡ‚Ρ€Π΅Π±Π½Π°Ρ‚Π° ΠΌΠ΅ΠΌΠΎΡ€ΠΈΡ˜Π° ΠΈ врски, Π΄ΠΎΠΊΠΎΠ»ΠΊΡƒ Π½Π΅ сС ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½ΠΈ. Овој ΠΌΠΎΠ΄Π΅Π» ΠΌΡƒ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π° Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΌΠ½ΠΎΠ³Ρƒ Π΄ΠΎΠ±Ρ€ΠΎ ΠΏΡ€ΠΈ ΠΌΠ½ΠΎΠ³Ρƒ висок Π±Ρ€ΠΎΡ˜ Π½Π° нишки ΠΈ пропусната моќ.
Како ΡˆΡ‚ΠΎ Π½Π°ΠΊΡ€Π°Ρ‚ΠΊΠΎ спомнав Π½Π° Π’Π²ΠΈΡ‚Π΅Ρ€, Π΄ΠΈΠ·Π°Ρ˜Π½ΠΎΡ‚ ΠΌΠΎΠΆΠ΅ Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΈ Π½Π° ΠΌΡ€Π΅ΠΆΠ΅Π½ стСк со цСлосСн кориснички Ρ€Π΅ΠΆΠΈΠΌ, ΠΊΠ°ΠΊΠΎ ΡˆΡ‚ΠΎ Π΅ DPDK (ΠšΠΎΠΌΠΏΠ»Π΅Ρ‚ Π·Π° Ρ€Π°Π·Π²ΠΎΡ˜ Π½Π° Ρ€Π°ΠΌΠ½ΠΈΠ½Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ), ΡˆΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Ρ€Π΅Π·ΡƒΠ»Ρ‚ΠΈΡ€Π° со ΠΊΠΎΠ½Π²Π΅Π½Ρ†ΠΈΠΎΠ½Π°Π»Π½ΠΈ сСрвСри ΠΊΠΎΠΈ Ρ€Π°ΠΊΡƒΠ²Π°Π°Ρ‚ со ΠΌΠΈΠ»ΠΈΠΎΠ½ΠΈ Π±Π°Ρ€Π°ΡšΠ° Π²ΠΎ сСкунда со цСлосна ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° L7. ЌС Π±ΠΈΠ΄Π΅ ΠΌΠ½ΠΎΠ³Ρƒ интСрСсно Π΄Π° сС Π²ΠΈΠ΄ΠΈ ΡˆΡ‚ΠΎ ќС сС ΠΈΠ·Π³Ρ€Π°Π΄ΠΈ Π²ΠΎ слСднитС Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ Π³ΠΎΠ΄ΠΈΠ½ΠΈ.
Π•Π΄Π΅Π½ послСдСн Π±Ρ€Π· ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€: ΠΌΠ½ΠΎΠ³ΡƒΠΏΠ°Ρ‚ΠΈ ΠΌΠ΅ ΠΏΡ€Π°ΡˆΡƒΠ²Π°Π° Π·ΠΎΡˆΡ‚ΠΎ ΠΈΠ·Π±Ρ€Π°Π²ΠΌΠ΅ C++ Π·Π° Envoy. ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π°Ρ‚Π° останува Ρ‚ΠΎΠ° ΡˆΡ‚ΠΎ Ρ‚ΠΎΡ˜ сè ΡƒΡˆΡ‚Π΅ Π΅ СдинствСниот ΡˆΠΈΡ€ΠΎΠΊΠΎ користСн индустриски јазик Π½Π° кој ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·Π³Ρ€Π°Π΄ΠΈ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°Ρ‚Π° опишана Π²ΠΎ овој пост. C++ Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ‚ΠΈΠ²Π½ΠΎ Π½Π΅ Π΅ ΠΏΠΎΠ³ΠΎΠ΄Π΅Π½ Π·Π° ситС, ΠΏΠ° Π΄ΡƒΡ€ΠΈ ΠΈ Π·Π° ΠΌΠ½ΠΎΠ³Ρƒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ, Π½ΠΎ Π·Π° ΠΎΠ΄Ρ€Π΅Π΄Π΅Π½ΠΈ случаи Π½Π° ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π° сСпак Π΅ СдинствСната Π°Π»Π°Ρ‚ΠΊΠ° Π·Π° Π΄Π° сС Π·Π°Π²Ρ€ΡˆΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π°.

Врски Π΄ΠΎ ΠΊΠΎΠ΄ΠΎΡ‚

Врски Π΄ΠΎ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ со ΠΈΠ½Ρ‚Π΅Ρ€Ρ„Π΅Ρ˜ΡΠΈ ΠΈ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Π½Π° Π·Π°Π³Π»Π°Π²ΠΈΠ΅Ρ‚ΠΎ ΡˆΡ‚ΠΎ сС дискутирани Π²ΠΎ овој пост:

Π˜Π·Π²ΠΎΡ€: www.habr.com

Π”ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€