Netramesh – лСгковСсноС service mesh Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅

Π’ процСссС ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° ΠΎΡ‚ ΠΌΠΎΠ½ΠΎΠ»ΠΈΡ‚Π½ΠΎΠ³ΠΎ прилоТСния ΠΊ микросСрвисной Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅ ΠΌΡ‹ сталкиваСмся с Π½ΠΎΠ²Ρ‹ΠΌΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ.

Π’ ΠΌΠΎΠ½ΠΎΠ»ΠΈΡ‚Π½ΠΎΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ достаточно просто ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, Π² ΠΊΠ°ΠΊΠΎΠΉ части систСмы ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»Π° ошибка. Π‘ΠΊΠΎΡ€Π΅Π΅ всСго, ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π² ΠΊΠΎΠ΄Π΅ самого ΠΌΠΎΠ½ΠΎΠ»ΠΈΡ‚Π°, Π»ΠΈΠ±ΠΎ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…. Но ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Π½Π°Ρ‡ΠΈΠ½Π°Π΅ΠΌ ΠΈΡΠΊΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ Π² микросСрвисной Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅, всё ΡƒΠΆΠ΅ Π½Π΅ Ρ‚Π°ΠΊ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ. НуТно Π½Π°ΠΉΡ‚ΠΈ вСсь ΠΏΡƒΡ‚ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΎΡˆΠ΅Π» запрос ΠΎΡ‚ Π½Π°Ρ‡Π°Π»Π° Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π°, Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΈΠ· сотСн микросСрвисов. ΠŸΡ€ΠΈΡ‡Ρ‘ΠΌ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΈΠ· Π½ΠΈΡ… Π΅Ρ‰Π΅ ΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ собствСнныС Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Ρ‚ΡŒ ΠΊΠ°ΠΊ логичСскиС ошибки, Ρ‚Π°ΠΊ ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ ΠΈ ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒΡŽ.

Netramesh – лСгковСсноС service mesh Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅

Π― Π΄ΠΎΠ»Π³ΠΎ искал инструмСнт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠΌΠΎΠ³ Π±Ρ‹ ΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒΡΡ с Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ (писал ΠΎΠ± этом Π½Π° Π₯Π°Π±Ρ€Π΅: 1, 2), Π½ΠΎ Π² ΠΈΡ‚ΠΎΠ³Π΅ сдСлал собствСнноС опСнсорсноС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅. Π’ ΡΡ‚Π°Ρ‚ΡŒΠ΅ я Ρ€Π°ΡΡΠΊΠ°Π·Ρ‹Π²Π°ΡŽ ΠΎ прСимущСствах ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° service mesh ΠΈ дСлюсь Π½ΠΎΠ²Ρ‹ΠΌ инструмСнтом для Π΅Π³ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.

РаспрСдСлСнный tracing являСтся распространСнным Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ поиска ошибок Π² распрСдСлённых систСмах. Но Ρ‡Ρ‚ΠΎ Ссли Π² систСмС Π΅Ρ‰Ρ‘ Π½Π΅ Π²Π½Π΅Π΄Ρ€Ρ‘Π½ Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊ сбору ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ сСтСвых взаимодСйствиях, ΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ Ρ…ΡƒΠΆΠ΅, Π² части систСмы ΠΎΠ½ ΡƒΠΆΠ΅ исправно Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Π° Π² части Π΅Π³ΠΎ Π½Π΅Ρ‚, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ Π½Π΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Π² старыС сСрвисы? Для опрСдСлСния Ρ‚ΠΎΡ‡Π½ΠΎΠΉ ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΉ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΏΠΎΠ»Π½ΡƒΡŽ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Ρƒ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ происходит Π² систСмС. ОсобСнно Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΈΠΌΠ΅Π½Π½ΠΎ микросСрвисы ΡƒΡ‡Π°ΡΡ‚Π²ΡƒΡŽΡ‚ Π² основных ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Ρ‹Ρ… для бизнСса путях.

Π’ΡƒΡ‚ ΠΊ Π½Π°ΠΌ Π½Π° ΠΏΠΎΠΌΠΎΡ‰ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠΉΡ‚ΠΈ service mesh ΠΏΠΎΠ΄Ρ…ΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ займётся всСй ΠΌΠ°ΡˆΠΈΠ½Π΅Ρ€ΠΈΠ΅ΠΉ ΠΏΠΎ сбору сСтСвой ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ Π½ΠΈΠΆΠ΅, Ρ‡Π΅ΠΌ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ сами сСрвисы. Π­Ρ‚ΠΎΡ‚ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ позволяСт Π½Π°ΠΌ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ вСсь Ρ‚Ρ€Π°Ρ„ΠΈΠΊ ΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π½Π° Π»Π΅Ρ‚Ρƒ. ΠŸΡ€ΠΈΡ‡Ρ‘ΠΌ прилоТСния ΠΎ Π½Ρ‘ΠΌ Π΄Π°ΠΆΠ΅ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π½ΠΈΡ‡Π΅Π³ΠΎ Π·Π½Π°Ρ‚ΡŒ.

Service mesh ΠΏΠΎΠ΄Ρ…ΠΎΠ΄

Π“Π»Π°Π²Π½ΠΎΠΉ ΠΈΠ΄Π΅Π΅ΠΉ service mesh ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° являСтся Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ инфраструктурного слоя Π½Π°Π΄ ΡΠ΅Ρ‚ΡŒΡŽ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π½Π°ΠΌ Π΄Π΅Π»Π°Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹Π΅ Π²Π΅Ρ‰ΠΈ с мСТсСрвисным взаимодСйствиСм. Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ: ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ микросСрвису добавляСтся Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ sidecar ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ с ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½Ρ‹ΠΌ прокси, Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ пропускаСтся вСсь входящий ΠΈ исходящий Ρ‚Ρ€Π°Ρ„ΠΈΠΊ сСрвиса. И это Ρ‚ΠΎ самоС мСсто, Π³Π΄Π΅ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΡΠΊΡƒΡŽ балансировку, ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ бСзопасности, Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ограничСния Π½Π° количСство запросов ΠΈ ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒ Π²Π°ΠΆΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΏΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΈΡŽ сСрвисов Π² production.

Netramesh – лСгковСсноС service mesh Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅

РСшСния

Π£ΠΆΠ΅ Π΅ΡΡ‚ΡŒ нСсколько Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°: Istio ΠΈ linkerd2. Они ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ мноТСство возмоТностСй ΠΈΠ· ΠΊΠΎΡ€ΠΎΠ±ΠΊΠΈ. Но ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ с этим ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ ΠΈ большой overhead Π½Π° рСсурсы. ΠŸΡ€ΠΈΡ‡Ρ‘ΠΌ Ρ‡Π΅ΠΌ большС кластСр, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ такая систСма, Ρ‚Π΅ΠΌ большС потрСбуСтся рСсурсов Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠΉ инфраструктуры. Π’ Авито ΠΌΡ‹ эксплуатируСм kubernetes кластСры, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… находятся тысячи экзСмпляров сСрвисов (ΠΈ ΠΈΡ… число ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ быстро расти). Π’ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Istio потрСбляСт ~300Mb ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти Π½Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ экзСмпляр сСрвиса. Из-Π·Π° большого количСства возмоТностСй прозрачная балансировка Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ влияниС Π½Π° ΠΏΠΎΠ»Π½ΠΎΠ΅ врСмя ΠΎΡ‚Π²Π΅Ρ‚Π° сСрвисов (Π²ΠΏΠ»ΠΎΡ‚ΡŒ Π΄ΠΎ 10ms).

Π’ ΠΈΡ‚ΠΎΠ³Π΅ ΠΌΡ‹ посмотрСли Π½Π° Ρ‚ΠΎ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΈΠΌΠ΅Π½Π½ΠΎ возмоТности Π½Π°ΠΌ Π½ΡƒΠΆΠ½Ρ‹ прямо сСйчас, ΠΈ Ρ€Π΅ΡˆΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ основноС, ΠΈΠ·-Π·Π° Ρ‡Π΅Π³ΠΎ ΠΌΡ‹ Π½Π°Ρ‡Π°Π»ΠΈ Π²Π½Π΅Π΄Ρ€ΡΡ‚ΡŒ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, Π±Ρ‹Π»Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒ tracing ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ со всСй систСмы ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎ. Π’Π°ΠΊΠΆΠ΅ Π½Π°ΠΌ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Π½Π°Π΄ взаимодСйствиСм сСрвисов ΠΈ Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ манипуляции с Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ ΠΌΠ΅ΠΆΠ΄Ρƒ сСрвисами.

Π’ ΠΈΡ‚ΠΎΠ³Π΅ ΠΌΡ‹ ΠΏΡ€ΠΈΡˆΠ»ΠΈ ΠΊ своСму Ρ€Π΅ΡˆΠ΅Π½ΠΈΡŽ:β€Š Netramesh.

Netramesh

Netramesh β€” это лСгковСсноС service mesh Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ с Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ бСсконСчного ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ Π²Π½Π΅ зависимости ΠΎΡ‚ количСства сСрвисов Π² систСмС.

Π“Π»Π°Π²Π½Ρ‹ΠΌΠΈ цСлями Π½ΠΎΠ²ΠΎΠ³ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ являлись малСнький overhead ΠΏΠΎ рСсурсам ΠΈ высокая ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. Из основных возмоТностСй ΠΌΡ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ сразу ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ tracing span’ы Π² Π½Π°ΡˆΡƒ Jaeger систСму.

БСгодня Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΎΠ±Π»Π°Ρ‡Π½Ρ‹Ρ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ рСализуСтся Π½Π° Golang. И, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π½Π° это Π΅ΡΡ‚ΡŒ свои ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹. ΠŸΠΈΡΠ°Ρ‚ΡŒ Π½Π° Golang сСтСвыС прилоТСния, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠ΅ асинхронно с Π²Π²ΠΎΠ΄ΠΎΠΌ-Π²Ρ‹Π²ΠΎΠ΄ΠΎΠΌ ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ΡΡ ΠΏΠΎ нСобходимости Π½Π° ядра, ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΈ достаточно просто. И, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½ΠΎ, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ получаСтся достаточной для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ этой Π·Π°Π΄Π°Ρ‡ΠΈ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΡ‹ Ρ‚ΠΎΠΆΠ΅ Π²Ρ‹Π±Ρ€Π°Π»ΠΈ Golang.

ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ

ΠœΡ‹ сфокусировали наши усилия Π½Π° достиТСнии максимальной ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ дСплоится рядом с ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ экзСмпляром сСрвиса, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ нСбольшоС ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти ΠΈ процСссорного Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. И, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠ° Π½Π° ΠΎΡ‚Π²Π΅Ρ‚ Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠ°Π»Π°.

Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим, ΠΊΠ°ΠΊΠΈΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈΡΡŒ.

RAM

Netramesh потрСбляСт ~10Mb Π±Π΅Π· Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ° ΠΈ 50Mb максимально с Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ Π΄ΠΎ 10000 RPS Π½Π° ΠΎΠ΄ΠΈΠ½ instance.

Istio envoy proxy всСгда потрСбляСт ~300Mb Π² Π½Π°ΡˆΠΈΡ… кластСрах с тысячами instance’ов. Π­Ρ‚ΠΎ Π½Π΅ позволяСт ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π½Π° вСсь кластСр.

Netramesh – лСгковСсноС service mesh Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅

Netramesh – лСгковСсноС service mesh Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅

C Netramesh ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΠ΅ потрСблСния памяти Π² ~10 Ρ€Π°Π·.

CPU

ИспользованиС CPU ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π°Π²Π½ΠΎ ΠΏΠΎΠ΄ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ. Оно зависит ΠΎΡ‚ количСства запросов Π² Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΊ sidecar. ЗначСния ΠΏΡ€ΠΈ 3000 запросах Π² сСкунду Π² ΠΏΠΈΠΊΠ΅:

Netramesh – лСгковСсноС service mesh Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅

Netramesh – лСгковСсноС service mesh Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅

Π•ΡΡ‚ΡŒ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ Π²Π°ΠΆΠ½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚: Netramesh β€” Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π±Π΅Π· control plane ΠΈ Π±Π΅Π· Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π½Π΅ потрСбляСт процСссорноС врСмя. Π‘ Istio sidecar’ы всСгда ΠΎΠ±Π½ΠΎΠ²Π»ΡΡŽΡ‚ endpoint’ы сСрвисов. Π’ ΠΈΡ‚ΠΎΠ³Π΅ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊΡƒΡŽ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Ρƒ Π±Π΅Π· Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ:

Netramesh – лСгковСсноС service mesh Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅

ΠœΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ HTTP/1 для взаимодСйствия ΠΌΠ΅ΠΆΠ΄Ρƒ сСрвисами. Π£Π²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΎΡ‚Π²Π΅Ρ‚Π° Ρƒ Istio ΠΏΡ€ΠΈ проксировании Ρ‡Π΅Ρ€Π΅Π· envoy Π±Ρ‹Π»ΠΎ Π΄ΠΎ 5-10ms, Ρ‡Ρ‚ΠΎ достаточно ΠΌΠ½ΠΎΠ³ΠΎ для сСрвисов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ ΠΎΡ‚Π²Π΅Ρ‡Π°Ρ‚ΡŒ Π·Π° миллисСкунду. Π‘ Netramesh это врСмя ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΠ»ΠΎΡΡŒ Π΄ΠΎ 0.5-2ms.

ΠœΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΡŒ

НСбольшоС количСство рСсурсов, Π·Π°Ρ‚Ρ€Π°Ρ‡ΠΈΠ²Π°Π΅ΠΌΠΎΠ΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ прокси, Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ Π΅Π³ΠΎ рядом с ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ сСрвисом. Netramesh Π½Π°ΠΌΠ΅Ρ€Π΅Π½Π½ΠΎ Π±Ρ‹Π» создан Π±Π΅Π· control plane ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° для простого поддСрТания лСгковСсности ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ sidecar’а. Часто Π² service mesh Ρ€Π΅ΡˆΠ΅Π½ΠΈΡΡ… control plane распространяСт service discovery ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π² ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ sidecar. ВмСстС с Π½Π΅ΠΉ ΠΏΡ€ΠΈΠ΅Π·ΠΆΠ°Π΅Ρ‚ ΠΈ информация ΠΎ timeout’ах, настройках балансировки. ВсС это позволяСт Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… Π²Π΅Ρ‰Π΅ΠΉ, Π½ΠΎ, ΠΊ соТалСнию, Ρ€Π°Π·Π΄ΡƒΠ²Π°Π΅Ρ‚ sidecar’ы Π² Ρ€Π°Π·ΠΌΠ΅Ρ€Π΅.

Service discovery

Netramesh – лСгковСсноС service mesh Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅

Netramesh Π½Π΅ добавляСт ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ² для service discovery. Π’Π΅ΡΡŒ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ проксируСтся ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎ Ρ‡Π΅Ρ€Π΅Π· netra sidecar.

Netramesh ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ HTTP/1 ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½ΠΎΠΉ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ». Для Π΅Π³ΠΎ опрСдСлСния ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ список ΠΏΠΎΡ€Ρ‚ΠΎΠ². ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Π² систСмС Π΅ΡΡ‚ΡŒ нСсколько ΠΏΠΎΡ€Ρ‚ΠΎΠ², ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ происходит взаимодСйствиС ΠΏΠΎ HTTP. НапримСр, Ρƒ нас для взаимодСйствия сСрвисов ΠΈ Π²Π½Π΅ΡˆΠ½ΠΈΡ… запросов ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ 80, 8890, 8080. Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ окруТСния NETRA_HTTP_PORTS.

Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Kubernetes Π² качСствС оркСстратора ΠΈ Π΅Π³ΠΎ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Service сущностСй для внутрикластСрного взаимодСйствия ΠΌΠ΅ΠΆΠ΄Ρƒ сСрвисами, Ρ‚ΠΎ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ остаСтся Ρ€ΠΎΠ²Π½ΠΎ Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅. Π‘Π½Π°Ρ‡Π°Π»Π° микросСрвис ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ service IP адрСс с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ kube-dns ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Π½ΠΎΠ²ΠΎΠ΅ соСдинСниС ΠΊ Π½Π΅ΠΌΡƒ. Π­Ρ‚ΠΎ соСдинСниС устанавливаСтся сначала с Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ netra-sidecar ΠΈ всС TCP ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΈΠ»Π΅Ρ‚Π°ΡŽΡ‚ ΠΈΠΌΠ΅Π½Π½ΠΎ Π² netra. Π”Π°Π»Π΅Π΅ ΡƒΠΆΠ΅ netra-sidecar устанавливаСт соСдинСниС с ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ назначСния. NAT Π½Π° pod IP Π½Π° Π½ΠΎΠ΄Π΅ остаСтся Ρ€ΠΎΠ²Π½ΠΎ Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ Π±Π΅Π· netra.

РаспрСдСлСнный tracing ΠΈ ΠΏΡ€ΠΎΠΊΠΈΠ΄Ρ‹Π²Π°Π½ΠΈΠ΅ контСкста

Netramesh прСдоставляСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡƒΡŽ для ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ tracing span’ов ΠΎ HTTP взаимодСйствии. Netra-sidecar парсят HTTP ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ», ΠΈΠ·ΠΌΠ΅Ρ€ΡΡŽΡ‚ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ запросов, Π΄ΠΎΡΡ‚Π°ΡŽΡ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΈΠ· HTTP header’ов. Π’ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ счСтС ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ всС trace’ы Π² Π΅Π΄ΠΈΠ½ΠΎΠΉ Jaeger систСмС. Для Ρ‚ΠΎΠ½ΠΊΠΎΠΉ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ окруТСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ прСдоставляСт ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° jaeger go library.

Netramesh – лСгковСсноС service mesh Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅

Netramesh – лСгковСсноС service mesh Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅

Но Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°. Пока сСрвисы Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΠΏΡ€ΠΎΠΊΠΈΠ΄Ρ‹Π²Π°Ρ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ uber Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ, ΠΌΡ‹ Π½Π΅ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ соСдинСнныС tracing span’ы Π² систСмС. А это Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ для быстрого поиска ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ. Π’ΡƒΡ‚ Netramesh снова ΠΈΠΌΠ΅Π΅Ρ‚ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅. ΠŸΡ€ΠΎΠΊΡΠΈ Ρ‡ΠΈΡ‚Π°ΡŽΡ‚ HTTP Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ ΠΈ, Ссли Π² Π½ΠΈΡ… Π½Π΅Ρ‚ uber trace id, Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ Π΅Π³ΠΎ. Netramesh Ρ‚Π°ΠΊΠΆΠ΅ Ρ…Ρ€Π°Π½ΠΈΡ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ входящих ΠΈ исходящих запросах Π² sidecar ΠΈ сопоставляСт ΠΈΡ… ΠΏΡƒΡ‚Ρ‘ΠΌ обогащСния Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΌΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°ΠΌΠΈ исходящих запросов. ВсС, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ Π² сСрвисах β€” ΠΏΡ€ΠΎΠΊΠΈΠ΄Ρ‹Π²Π°Ρ‚ΡŒ всСго ΠΎΠ΄ΠΈΠ½ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ X-Request-Id, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ окруТСния NETRA_HTTP_REQUEST_ID_HEADER_NAME. Для управлСния Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ context’а Π² Netramesh, ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ окруТСния: NETRA_TRACING_CONTEXT_EXPIRATION_MILLISECONDS (врСмя, Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ контСкст) ΠΈ NETRA_TRACING_CONTEXT_CLEANUP_INTERVAL (ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ΠΈΡ‡Π½ΠΎΡΡ‚ΡŒ подчистки контСкста).

Π’Π°ΠΊΠΆΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ нСсколько ΠΏΡƒΡ‚Π΅ΠΉ Π² вашСй систСмС ΠΏΡƒΡ‚Π΅ΠΌ маркирования ΠΈΡ… ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ сСссионным ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ΠΎΠΌ. Netra позволяСт ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ HTTP_HEADER_TAG_MAP для прСвращСния HTTP Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ tracing span Ρ‚Π΅Π³ΠΈ. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ особСнно ΠΏΠΎΠ»Π΅Π·Π½ΠΎ для тСстирования. ПослС прохоТдСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ тСста, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ какая Ρ‡Π°ΡΡ‚ΡŒ систСмы Π±Ρ‹Π»Π° Π·Π°Ρ‚Ρ€ΠΎΠ½ΡƒΡ‚Π°, ΠΎΡ‚Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Π² ΠΏΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌΡƒ session ΠΊΠ»ΡŽΡ‡Ρƒ.

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ источника запроса

Для опрСдСлСния Ρ‚ΠΎΠ³ΠΎ, ΠΎΡ‚ΠΊΡƒΠ΄Π° ΠΏΡ€ΠΈΡˆΠ΅Π» запрос, ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΠΎΠΌ автоматичСского добавлСния Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° с источником. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ окруТСния NETRA_HTTP_X_SOURCE_HEADER_NAME ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ имя Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ автоматичСски ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒΡΡ. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ NETRA_HTTP_X_SOURCE_VALUE ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒΡΡ X-Source Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Π½Π° всС исходящиС запросы.

Π­Ρ‚ΠΎ позволяСт ΡƒΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎ ΠΏΠΎ всСй сСти ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ распространСниС этого ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ³ΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°. Π”Π°Π»Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π² сСрвисах ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π² Π»ΠΎΠ³ΠΈ, ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ.

Π ΠΎΡƒΡ‚ΠΈΠ½Π³ Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ° ΠΈ внутрСнности Netramesh

Netramesh состоит ΠΈΠ· Π΄Π²ΡƒΡ… Π³Π»Π°Π²Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ². ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ, netra-init, устанавливаСт сСтСвыС ΠΏΡ€Π°Π²ΠΈΠ»Π° для ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Π° Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ°. Он ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ iptables redirect ΠΏΡ€Π°Π²ΠΈΠ»Π° для ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Π° всСго, Π»ΠΈΠ±ΠΎ части Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ° Π½Π° sidecar, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ Π³Π»Π°Π²Π½Ρ‹ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠΌ Netramesh. МоТно Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎΡ€Ρ‚Ρ‹ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° входящиС ΠΈ исходящиС TCP сСссии: INBOUND_INTERCEPT_PORTS, OUTBOUND_INTERCEPT_PORTS.

Π’Π°ΠΊΠΆΠ΅ Π² инструмСнтС Π΅ΡΡ‚ΡŒ интСрСсная Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ β€” вСроятностный Ρ€ΠΎΡƒΡ‚ΠΈΠ½Π³. Если ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Netramesh ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ для сбора tracing span’ов, Ρ‚ΠΎ Π² production ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ‚ΡŒ рСсурсы ΠΈ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ вСроятностный Ρ€ΠΎΡƒΡ‚ΠΈΠ½Π³ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… NETRA_INBOUND_PROBABILITY ΠΈ NETRA_OUTBOUND_PROBABILITY (ΠΎΡ‚ 0 Π΄ΠΎ 1). Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Ρ€Π°Π²Π½ΠΎ 1 (пСрСхватываСтся вСсь Ρ‚Ρ€Π°Ρ„ΠΈΠΊ).

ПослС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Π° netra sidecar ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π½ΠΎΠ²ΠΎΠ΅ соСдинСниС ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ SO_ORIGINAL_DST ΠΎΠΏΡ†ΠΈΡŽ сокСта для получСния ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ назначСния. Π—Π°Ρ‚Π΅ΠΌ Netra ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Π½ΠΎΠ²ΠΎΠ΅ соСдинСниС ΠΊ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΌΡƒ IP-адрСсу ΠΈ устанавливаСт двустороннСС TCP-ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ сторонами, ΡΠ»ΡƒΡˆΠ°Ρ вСсь проходящий Ρ‚Ρ€Π°Ρ„ΠΈΠΊ. Если ΠΏΠΎΡ€Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΠΊΠ°ΠΊ HTTP, Netra пытаСтся ΠΏΠ°Ρ€ΡΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΈ Ρ‚Ρ€Π΅ΠΉΡΠΈΡ‚ΡŒ. Если парсинг HTTP оказываСтся Π½Π΅ΡƒΡΠΏΠ΅ΡˆΠ½Ρ‹ΠΌ, Netra Π΄Π΅Π»Π°Π΅Ρ‚ фоллбэк Π½Π° TCP ΠΈ ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎ проксируСт Π±Π°ΠΉΡ‚Ρ‹.

ΠŸΠΎΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΠ΅ Π³Ρ€Π°Ρ„Π° зависимостСй

ПослС получСния большого количСства tracing ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π² Jaeger, хочСтся ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΠΎΠ»Π½Ρ‹ΠΉ Π³Ρ€Π°Ρ„ взаимодСйствий Π² систСмС. Но Ссли ваша систСма достаточно Π½Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π° ΠΈ Π·Π° дСнь ΡΠΊΠ°ΠΏΠ»ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΌΠΈΠ»Π»ΠΈΠ°Ρ€Π΄Ρ‹ tracing span’ов, ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΈΡ… Π°Π³Ρ€Π΅Π³Π°Ρ†ΠΈΡŽ становится Π½Π΅ ΡΡ‚ΠΎΠ»ΡŒ простой Π·Π°Π΄Π°Ρ‡Π΅ΠΉ. Π•ΡΡ‚ΡŒ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ способ для этого: spark-dependencies. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ ΠΎΠ½ Π·Π°ΠΉΠΌΠ΅Ρ‚ часы для построСния ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ Π³Ρ€Π°Ρ„Π° ΠΈ заставит Π²Ρ‹ΠΊΠ°Ρ‡Π°Ρ‚ΡŒ ΠΈΠ· Jaeger вСсь dataset Π·Π° ΠΏΡ€ΠΎΡˆΠ΅Π΄ΡˆΠΈΠ΅ сутки.

Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Elasticsearch для хранСния tracing span’ов, ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ простой ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ΠΎΠΉ Π½Π° Golang, которая построит Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅ Π³Ρ€Π°Ρ„ Π·Π° ΠΌΠΈΠ½ΡƒΡ‚Ρ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ особСнности ΠΈ возмоТности Elasticsearch.

Netramesh – лСгковСсноС service mesh Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅

Как ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Netramesh

Netra ΠΌΠΎΠΆΠ½ΠΎ просто Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊ Π»ΡŽΠ±ΠΎΠΌΡƒ сСрвису, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅ΠΌΡƒ ΠΏΠΎΠ΄ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ любого оркСстратора. МоТно ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚ΡƒΡ‚.

На Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Ρƒ Netra Π½Π΅Ρ‚ возмоТности автоматичСского внСдрСния sidecar’а ΠΊ сСрвисам, Π½ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΠ»Π°Π½Ρ‹ Π½Π° Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ.

Π‘ΡƒΠ΄ΡƒΡ‰Π΅Π΅ Netramesh

Π“Π»Π°Π²Π½ΠΎΠΉ Ρ†Π΅Π»ΡŒΡŽ Netramesh являСтся достиТСниС ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… Π·Π°Ρ‚Ρ€Π°Ρ‚ Π½Π° рСсурсы ΠΈ высокая ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, прСдоставляя основныС возмоТности для observability ΠΈ контроля мСТсСрвисного взаимодСйствия.

Π’ Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ Netramesh ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠ² ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½ΠΎΠ³ΠΎ уровня ΠΏΠΎΠΌΠΈΠΌΠΎ HTTP. Π’ блиТайшСм Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ появится Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ L7 Ρ€ΠΎΡƒΡ‚ΠΈΠ½Π³Π°.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Netramesh, Ссли Π²Ρ‹ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°Π΅Ρ‚Π΅ΡΡŒ с ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΌΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ, ΠΈ ΠΏΠΈΡˆΠΈΡ‚Π΅ Π½Π°ΠΌ вопросы ΠΈ прСдлоТСния.

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

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ