Π‘Π΅Ρ‚ΡŒ, которая Π»Π΅Ρ‡ΠΈΡ‚ сСбя сама: магия Flow Label ΠΈΒ Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΈΠ² Π²ΠΎΠΊΡ€ΡƒΠ³ ядра Linux. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

Π’ соврСмСнных Π΄Π°Ρ‚Π°-Ρ†Π΅Π½Ρ‚Ρ€Π°Ρ… установлСны сотни Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… устройств, ΠΏΠΎΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ Π²ΠΈΠ΄Π°ΠΌΠΈ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ΠΎΠ². Но Π΄Π°ΠΆΠ΅ ΠΈΠ΄Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€ с ΠΈΠ΄Π΅Π°Π»ΡŒΠ½Ρ‹ΠΌ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ΠΎΠΌ Π² Ρ€ΡƒΠΊΠ°Ρ… смоТСт ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΎΡ‚Ρ€Π΅Π°Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° сСтСвой сбой лишь Π·Π° нСсколько ΠΌΠΈΠ½ΡƒΡ‚. Π’ Π΄ΠΎΠΊΠ»Π°Π΄Π΅ Π½Π° ΠΊΠΎΠ½Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΈ Next Hop 2020 я прСдставил ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ»ΠΎΠ³ΠΈΡŽ Π΄ΠΈΠ·Π°ΠΉΠ½Π° сСти Π”Π¦, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π΅ΡΡ‚ΡŒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Π°Ρ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ β€” Π΄Π°Ρ‚Π°-Ρ†Π΅Π½Ρ‚Ρ€ Π»Π΅Ρ‡ΠΈΡ‚ сСбя сам Π·Π° миллисСкунды. Π’ΠΎΡ‡Π½Π΅Π΅, ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€ спокойно Ρ‡ΠΈΠ½ΠΈΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ сСрвисы Π΅Π΅ просто Π½Π΅ Π·Π°ΠΌΠ΅Ρ‡Π°ΡŽΡ‚.

β€” Для Π½Π°Ρ‡Π°Π»Π° я Π΄Π°ΠΌ достаточно ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΡƒΡŽ Π²Π²ΠΎΠ΄Π½ΡƒΡŽ для Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ, Π½Π΅ Π² курсС устройства соврСмСнного Π”Π¦.
Π‘Π΅Ρ‚ΡŒ, которая Π»Π΅Ρ‡ΠΈΡ‚ сСбя сама: магия Flow Label ΠΈ Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΈΠ² Π²ΠΎΠΊΡ€ΡƒΠ³ ядра Linux. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

Для ΠΌΠ½ΠΎΠ³ΠΈΡ… сСтСвых ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€ΠΎΠ² ΡΠ΅Ρ‚ΡŒ Π΄Π°Ρ‚Π°-Ρ†Π΅Π½Ρ‚Ρ€Π° начинаСтся, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, с ToR, со свитча Π² стойкС. ToR ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π²Π° Ρ‚ΠΈΠΏΠ° Π»ΠΈΠ½ΠΊΠΎΠ². МалСнькиС ΠΈΠ΄ΡƒΡ‚ ΠΊ сСрвСрам, Π΄Ρ€ΡƒΠ³ΠΈΠ΅ β€” ΠΈΡ… Π² N Ρ€Π°Π· большС β€” ΠΈΠ΄ΡƒΡ‚ Π² сторону спайнов ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ уровня, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΊ Π΅Π³ΠΎ Π°ΠΏΠ»ΠΈΠ½ΠΊΠ°ΠΌ. Аплинки ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ Ρ€Π°Π²Π½ΠΎΠ·Π½Π°Ρ‡Π½Ρ‹ΠΌΠΈ, ΠΈ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ ΠΌΠ΅ΠΆΠ΄Ρƒ Π°ΠΏΠ»ΠΈΠ½ΠΊΠ°ΠΌΠΈ балансируСтся Π½Π° основС Ρ…Π΅ΡˆΠ° ΠΎΡ‚ 5-tuple, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ входят proto, src_ip, dst_ip, src_port, dst_port. Π—Π΄Π΅ΡΡŒ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΡΡŽΡ€ΠΏΡ€ΠΈΠ·ΠΎΠ².
Π‘Π΅Ρ‚ΡŒ, которая Π»Π΅Ρ‡ΠΈΡ‚ сСбя сама: магия Flow Label ΠΈ Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΈΠ² Π²ΠΎΠΊΡ€ΡƒΠ³ ядра Linux. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

Π”Π°Π»ΡŒΡˆΠ΅, ΠΊΠ°ΠΊ выглядит Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° ΠΏΠ»Π΅ΠΉΠ½ΠΎΠ²? Π‘ΠΏΠ°ΠΉΠ½Ρ‹ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ уровня ΠΌΠ΅ΠΆΠ΄Ρƒ собой Π½Π΅ соСдинСны, Π° ΡΠΎΠ΅Π΄ΠΈΠ½ΡΡŽΡ‚ΡΡ посрСдством супСрспайнов. Π—Π° супСрспайны Ρƒ нас Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚Π²Π΅Ρ‡Π°Ρ‚ΡŒ Π±ΡƒΠΊΠ²Π° X, ΠΎΠ½Π° практичСски ΠΊΠ°ΠΊ кроссконнСкт.
Π‘Π΅Ρ‚ΡŒ, которая Π»Π΅Ρ‡ΠΈΡ‚ сСбя сама: магия Flow Label ΠΈ Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΈΠ² Π²ΠΎΠΊΡ€ΡƒΠ³ ядра Linux. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

И понятноС Π΄Π΅Π»ΠΎ, Ρ‡Ρ‚ΠΎ с Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны ΠΊΠΎ всСм спайнам ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ уровня ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Ρ‚ΠΎΡ€Ρ‹. Π§Ρ‚ΠΎ Π²Π°ΠΆΠ½ΠΎ Π½Π° этой ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ΅? Если Ρƒ нас ΠΈΠ΄Π΅Ρ‚ взаимодСйствиС Π²Π½ΡƒΡ‚Ρ€ΠΈ стойки, Ρ‚ΠΎ взаимодСйствиС, понятноС Π΄Π΅Π»ΠΎ, ΠΈΠ΄Π΅Ρ‚ Ρ‡Π΅Ρ€Π΅Π· ToR. Если взаимодСйствиС ΠΈΠ΄Π΅Ρ‚ Π²Π½ΡƒΡ‚Ρ€ΠΈ модуля, Ρ‚ΠΎ взаимодСйствиС ΠΈΠ΄Π΅Ρ‚ Ρ‡Π΅Ρ€Π΅Π· спайны ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ уровня. Если взаимодСйствиС ΠΌΠ΅ΠΆΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΠ΅ β€” ΠΊΠ°ΠΊ здСсь, ToR 1 ΠΈ ToR 2, β€” Ρ‚ΠΎ взаимодСйствиС ΠΏΠΎΠΉΠ΄Π΅Ρ‚ Ρ‡Π΅Ρ€Π΅Π· спайны ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ, Ρ‚Π°ΠΊ ΠΈ Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ уровня.
Π‘Π΅Ρ‚ΡŒ, которая Π»Π΅Ρ‡ΠΈΡ‚ сСбя сама: магия Flow Label ΠΈ Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΈΠ² Π²ΠΎΠΊΡ€ΡƒΠ³ ядра Linux. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

ВСорСтичСски такая Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° Π»Π΅Π³ΠΊΠΎ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅Ρ‚ΡΡ. Если Ρƒ нас Π΅ΡΡ‚ΡŒ портовая Π΅ΠΌΠΊΠΎΡΡ‚ΡŒ, запас мСста Π² Π΄Π°Ρ‚Π°-Ρ†Π΅Π½Ρ‚Ρ€Π΅ ΠΈ Π·Π°Ρ€Π°Π½Π΅Π΅ ΠΏΡ€ΠΎΠ»ΠΎΠΆΠ΅Π½Π½ΠΎΠ΅ Π²ΠΎΠ»ΠΎΠΊΠ½ΠΎ, Ρ‚ΠΎ всСгда количСство ΠΏΠ»Π΅ΠΉΠ½ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Ρ€Π°ΡΡ‚ΠΈΡ‚ΡŒ, Ρ‚Π΅ΠΌ самым ΠΏΠΎΠ²Ρ‹ΡˆΠ°Ρ ΠΎΠ±Ρ‰ΡƒΡŽ Π΅ΠΌΠΊΠΎΡΡ‚ΡŒ систСмы. На Π±ΡƒΠΌΠ°Π³Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΡ‡Π΅Π½ΡŒ Π»Π΅Π³ΠΊΠΎ. Π‘Ρ‹Π»ΠΎ Π±Ρ‹ Ρ‚Π°ΠΊ Π² ΠΆΠΈΠ·Π½ΠΈ. Но сСгодняшний рассказ Π½Π΅ ΠΎΠ± этом.
Π‘Π΅Ρ‚ΡŒ, которая Π»Π΅Ρ‡ΠΈΡ‚ сСбя сама: магия Flow Label ΠΈ Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΈΠ² Π²ΠΎΠΊΡ€ΡƒΠ³ ядра Linux. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

Π― Ρ…ΠΎΡ‡Ρƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Π»ΠΈ сдСланы ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Π΅ Π²Ρ‹Π²ΠΎΠ΄Ρ‹. Π£ нас Π²Π½ΡƒΡ‚Ρ€ΠΈ Π΄Π°Ρ‚Π°-Ρ†Π΅Π½Ρ‚Ρ€Π° ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡƒΡ‚Π΅ΠΉ. Они условно нСзависимы. Один ΠΏΡƒΡ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π΄Π°Ρ‚Π°-Ρ†Π΅Π½Ρ‚Ρ€Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ ToR. Π’Π½ΡƒΡ‚Ρ€ΠΈ модуля Ρƒ нас количСство ΠΏΡƒΡ‚Π΅ΠΉ Ρ€Π°Π²Π½ΠΎ количСству ΠΏΠ»Π΅ΠΉΠ½ΠΎΠ². ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΏΡƒΡ‚Π΅ΠΉ ΠΌΠ΅ΠΆΠ΄Ρƒ модулями Ρ€Π°Π²Π½ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΡŽ числа ΠΏΠ»Π΅ΠΉΠ½ΠΎΠ² Π½Π° число супСрспайнов Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΏΠ»Π΅ΠΉΠ½Π΅. Π§Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Π»ΠΎ понятнСС, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡ‡ΡƒΠ²ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ°ΡΡˆΡ‚Π°Π±, я Π΄Π°ΠΌ Ρ†ΠΈΡ„Ρ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ справСдливы для ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Π΄Π°Ρ‚Π°-Ρ†Π΅Π½Ρ‚Ρ€ΠΎΠ² ЯндСкса.
Π‘Π΅Ρ‚ΡŒ, которая Π»Π΅Ρ‡ΠΈΡ‚ сСбя сама: магия Flow Label ΠΈ Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΈΠ² Π²ΠΎΠΊΡ€ΡƒΠ³ ядра Linux. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

ПлСйнов восСмь, Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΏΠ»Π΅ΠΉΠ½Π΅ 32 супСрспайна. Π’ ΠΈΡ‚ΠΎΠ³Π΅ получаСтся, Ρ‡Ρ‚ΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ модуля восСмь ΠΏΡƒΡ‚Π΅ΠΉ, Π° ΠΏΡ€ΠΈ ΠΌΠ΅ΠΆΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΠΌ взаимодСйствии ΠΈΡ… ΡƒΠΆΠ΅ 256.

Π‘Π΅Ρ‚ΡŒ, которая Π»Π΅Ρ‡ΠΈΡ‚ сСбя сама: магия Flow Label ΠΈ Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΈΠ² Π²ΠΎΠΊΡ€ΡƒΠ³ ядра Linux. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

Π’ΠΎ Π΅ΡΡ‚ΡŒ Ссли ΠΌΡ‹ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌ Cookbook, пытаСмся Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ Ρ‚ΠΎΠΌΡƒ, ΠΊΠ°ΠΊ ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ отказоустойчивыС Π΄Π°Ρ‚Π°-Ρ†Π΅Π½Ρ‚Ρ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π»Π΅Ρ‡Π°Ρ‚ сСбя ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ, Ρ‚ΠΎ плСйновая Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° β€” ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ Π²Ρ‹Π±ΠΎΡ€. Она позволяСт Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Π·Π°Π΄Π°Ρ‡Ρƒ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ, ΠΈ тСорСтичСски это Π»Π΅Π³ΠΊΠΎ. Π•ΡΡ‚ΡŒ мноТСство нСзависимых ΠΏΡƒΡ‚Π΅ΠΉ. ΠžΡΡ‚Π°Π΅Ρ‚ΡΡ вопрос: ΠΊΠ°ΠΊ такая Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° ΠΏΠ΅Ρ€Π΅ΠΆΠΈΠ²Π°Π΅Ρ‚ сбои? Π‘Ρ‹Π²Π°ΡŽΡ‚ Ρ€Π°Π·Π½Ρ‹Π΅ сбои. И ΠΌΡ‹ сСйчас это обсудим.
Π‘Π΅Ρ‚ΡŒ, которая Π»Π΅Ρ‡ΠΈΡ‚ сСбя сама: магия Flow Label ΠΈ Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΈΠ² Π²ΠΎΠΊΡ€ΡƒΠ³ ядра Linux. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

ΠŸΡƒΡΡ‚ΡŒ Ρƒ нас ΠΎΠ΄ΠΈΠ½ ΠΈΠ· супСрспайнов Β«Π·Π°Π±ΠΎΠ»Π΅Π»Β». Π― здСсь вСрнулся ΠΊ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅ Π΄Π²ΡƒΡ… ΠΏΠ»Π΅ΠΉΠ½ΠΎΠ². Π’ качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΌΡ‹ остановимся Π½Π° Π½ΠΈΡ…, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ здСсь попросту Π±ΡƒΠ΄Π΅Ρ‚ Π»Π΅Π³Ρ‡Π΅ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ происходит, с мСньшим числом двиТущихся частСй. ΠŸΡƒΡΡ‚ΡŒ X11 Π·Π°Π±ΠΎΠ»Π΅Π». Как это повлияСт Π½Π° сСрвисы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΆΠΈΠ²ΡƒΡ‚ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π΄Π°Ρ‚Π°-Ρ†Π΅Π½Ρ‚Ρ€ΠΎΠ²? ΠžΡ‡Π΅Π½ΡŒ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ зависит ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ сбой выглядит Π½Π° самом Π΄Π΅Π»Π΅.
Π‘Π΅Ρ‚ΡŒ, которая Π»Π΅Ρ‡ΠΈΡ‚ сСбя сама: магия Flow Label ΠΈ Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΈΠ² Π²ΠΎΠΊΡ€ΡƒΠ³ ядра Linux. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

Если сбой Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ, ловится Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠΊΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ BFD, Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠΊΠ° радостно ΠΊΠ»Π°Π΄Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½Ρ‹Π΅ стыки ΠΈ ΠΈΠ·ΠΎΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, Ρ‚ΠΎ всС Ρ…ΠΎΡ€ΠΎΡˆΠΎ. Π£ нас мноТСство ΠΏΡƒΡ‚Π΅ΠΉ, Ρ‚Ρ€Π°Ρ„ΠΈΠΊ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ΡΡ Π½Π° Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚Ρ‹, ΠΈ сСрвисы Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ замСтят. Π­Ρ‚ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ сцСнарий.
Π‘Π΅Ρ‚ΡŒ, которая Π»Π΅Ρ‡ΠΈΡ‚ сСбя сама: магия Flow Label ΠΈ Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΈΠ² Π²ΠΎΠΊΡ€ΡƒΠ³ ядра Linux. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

ΠŸΠ»ΠΎΡ…ΠΎΠΉ сцСнарий β€” Ссли Ρƒ нас Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ постоянныС ΠΏΠΎΡ‚Π΅Ρ€ΠΈ, ΠΈ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠΊΠ° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π½Π΅ Π·Π°ΠΌΠ΅Ρ‡Π°Π΅Ρ‚. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊ это влияСт Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π½Π°ΠΌ придСтся ΠΏΠΎΡ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° обсуТдСниС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» TCP.
Π‘Π΅Ρ‚ΡŒ, которая Π»Π΅Ρ‡ΠΈΡ‚ сСбя сама: магия Flow Label ΠΈ Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΈΠ² Π²ΠΎΠΊΡ€ΡƒΠ³ ядра Linux. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

Π― надСюсь, Ρ‡Ρ‚ΠΎ Π½ΠΈΠΊΠΎΠ³ΠΎ Π½Π΅ ΡˆΠΎΠΊΠΈΡ€ΡƒΡŽ этой ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ: TCP β€” ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» с ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ. Π’ΠΎ Π΅ΡΡ‚ΡŒ Π² ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅ΠΌ случаС Ρƒ нас ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚Π΅Π»ΡŒ отправляСт Π΄Π²Π° ΠΏΠ°ΠΊΠ΅Ρ‚Π°, ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π½Π° Π½ΠΈΡ… кумулятивный ack: Β«Π― ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» Π΄Π²Π° ΠΏΠ°ΠΊΠ΅Ρ‚Π°Β».
Π‘Π΅Ρ‚ΡŒ, которая Π»Π΅Ρ‡ΠΈΡ‚ сСбя сама: магия Flow Label ΠΈ Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΈΠ² Π²ΠΎΠΊΡ€ΡƒΠ³ ядра Linux. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

ПослС этого ΠΎΠ½ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ Π΅Ρ‰Π΅ Π΄Π²Π° ΠΏΠ°ΠΊΠ΅Ρ‚Π°, ΠΈ ситуация повторится. Π― Π·Π°Ρ€Π°Π½Π΅Π΅ ΠΏΡ€ΠΎΡˆΡƒ прощСния Π·Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½ΠΈΠ΅. Π’Π°ΠΊΠΎΠΉ сцСнарий Π²Π΅Ρ€Π½Ρ‹ΠΉ, Ссли ΠΎΠΊΠ½ΠΎ (число ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Π² ΠΏΠΎΠ»Π΅Ρ‚Π΅) Ρ€Π°Π²Π½ΠΎ Π΄Π²ΡƒΠΌ. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π² ΠΎΠ±Ρ‰Π΅ΠΌ случаС это Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‚Π°ΠΊ. Но Π½Π° контСкст пСрСпосылки ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΎΠΊΠ½Π° Π½Π΅ влияСт.
Π‘Π΅Ρ‚ΡŒ, которая Π»Π΅Ρ‡ΠΈΡ‚ сСбя сама: магия Flow Label ΠΈ Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΈΠ² Π²ΠΎΠΊΡ€ΡƒΠ³ ядра Linux. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

Π§Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚, Ссли ΠΌΡ‹ потСряСм ΠΏΠ°ΠΊΠ΅Ρ‚ 3? Π’ этом случаС ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»ΡŒ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ 1, 2 ΠΈ 4. И ΠΎΠ½ Π² явном Π²ΠΈΠ΄Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΡ†ΠΈΠΈ SACK сообщит ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚Π΅Π»ΡŽ: Β«Π’Ρ‹ знаСшь, Ρ‚Ρ€ΠΈ дошло, Π° сСрСдка ΠΏΠΎΡ‚Π΅Ρ€ΡΠ»Π°ΡΡŒΒ». Он Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚: Β«Ack 2, SACK 4Β».
Π‘Π΅Ρ‚ΡŒ, которая Π»Π΅Ρ‡ΠΈΡ‚ сСбя сама: магия Flow Label ΠΈ Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΈΠ² Π²ΠΎΠΊΡ€ΡƒΠ³ ядра Linux. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

ΠžΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚Π΅Π»ΡŒ Π² этот ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π±Π΅Π· ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ повторяСт ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚ΠΎΡ‚ ΠΏΠ°ΠΊΠ΅Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ потСрялся.
Π‘Π΅Ρ‚ΡŒ, которая Π»Π΅Ρ‡ΠΈΡ‚ сСбя сама: магия Flow Label ΠΈ Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΈΠ² Π²ΠΎΠΊΡ€ΡƒΠ³ ядра Linux. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

Но Ссли потСряСтся послСдний ΠΏΠ°ΠΊΠ΅Ρ‚ Π² ΠΎΠΊΠ½Π΅, ситуация Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ совсСм ΠΈΠ½Π°Ρ‡Π΅.

ΠŸΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ Ρ‚Ρ€ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Π° ΠΈ ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ ΠΆΠ΄Π°Ρ‚ΡŒ. Благодаря Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ оптимизациям Π² TCP-стСка ядра Linux ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ ΠΆΠ΄Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π½ΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚Π°, Ссли Π½Π΅Ρ‚ явного указания Π²ΠΎ Ρ„Π»Π°Π³Π°Ρ…, Ρ‡Ρ‚ΠΎ это послСдний ΠΏΠ°ΠΊΠ΅Ρ‚ Π»ΠΈΠ±ΠΎ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅. Он ΠΏΠΎΠ΄ΠΎΠΆΠ΄Π΅Ρ‚, ΠΏΠΎΠΊΠ° истСчСт Delayed ACK Ρ‚Π°ΠΉΠΌΠ°ΡƒΡ‚, ΠΈ послС этого ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹Π΅ Ρ‚Ρ€ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Π°. Но Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΡƒΠΆΠ΅ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚Π΅Π»ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ ΠΆΠ΄Π°Ρ‚ΡŒ. Он ΠΆΠ΅ Π½Π΅ Π·Π½Π°Π΅Ρ‚, потСрялся Ρ‡Π΅Ρ‚Π²Π΅Ρ€Ρ‚Ρ‹ΠΉ ΠΏΠ°ΠΊΠ΅Ρ‚ ΠΈΠ»ΠΈ Π²ΠΎΡ‚-Π²ΠΎΡ‚ Π΄ΠΎΠΉΠ΄Π΅Ρ‚. А Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ ΡΠ΅Ρ‚ΡŒ, ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ Π΄ΠΎΠΆΠ΄Π°Ρ‚ΡŒΡΡ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° явного указания, Ρ‡Ρ‚ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚ потСрян, ΠΈΠ»ΠΈ истСчСния RTO timeout.
Π‘Π΅Ρ‚ΡŒ, которая Π»Π΅Ρ‡ΠΈΡ‚ сСбя сама: магия Flow Label ΠΈ Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΈΠ² Π²ΠΎΠΊΡ€ΡƒΠ³ ядра Linux. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ RTO timeout? Π­Ρ‚ΠΎ максимум ΠΎΡ‚ высчитанного TCP-стСком RTT ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ константы. Π§Ρ‚ΠΎ это Π·Π° константа, ΠΌΡ‹ сСйчас обсудим.
Π‘Π΅Ρ‚ΡŒ, которая Π»Π΅Ρ‡ΠΈΡ‚ сСбя сама: магия Flow Label ΠΈ Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΈΠ² Π²ΠΎΠΊΡ€ΡƒΠ³ ядра Linux. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

Но Π²Π°ΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎ Ссли Π½Π°ΠΌ снова Π½Π΅ Π²Π΅Π·Π΅Ρ‚ ΠΈ Ρ‡Π΅Ρ‚Π²Π΅Ρ€Ρ‚Ρ‹ΠΉ ΠΏΠ°ΠΊΠ΅Ρ‚ снова тСряСтся, Ρ‚ΠΎ RTO удваиваСтся. Π’ΠΎ Π΅ΡΡ‚ΡŒ каТдая нСудачная ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° β€” это ΡƒΠ΄Π²ΠΎΠ΅Π½ΠΈΠ΅ Ρ‚Π°ΠΉΠΌΠ°ΡƒΡ‚Π°.
Π‘Π΅Ρ‚ΡŒ, которая Π»Π΅Ρ‡ΠΈΡ‚ сСбя сама: магия Flow Label ΠΈ Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΈΠ² Π²ΠΎΠΊΡ€ΡƒΠ³ ядра Linux. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

Π’Π΅ΠΏΠ΅Ρ€ΡŒ посмотрим, Ρ‡Π΅ΠΌΡƒ ΠΆΠ΅ Ρ€Π°Π²Π½Π° эта Π±Π°Π·Π°. По Π΄Π΅Ρ„ΠΎΠ»Ρ‚Ρƒ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ RTO Ρ€Π°Π²Π΅Π½ 200 мс. Π­Ρ‚ΠΎ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ RTO для Π΄Π°Ρ‚Π°-ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ². Для SYN-ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² ΠΎΠ½ Π΄Ρ€ΡƒΠ³ΠΎΠΉ, 1 сСкунда. Как ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ, Π΄Π°ΠΆΠ΅ пСрвая ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΠΏΠ΅Ρ€Π΅ΠΏΠΎΡΠ»Π°Ρ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒ Π² 100 Ρ€Π°Π· большС, Ρ‡Π΅ΠΌ RTT Π²Π½ΡƒΡ‚Ρ€ΠΈ Π΄Π°Ρ‚Π°-Ρ†Π΅Π½Ρ‚Ρ€Π°.
Π‘Π΅Ρ‚ΡŒ, которая Π»Π΅Ρ‡ΠΈΡ‚ сСбя сама: магия Flow Label ΠΈ Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΈΠ² Π²ΠΎΠΊΡ€ΡƒΠ³ ядра Linux. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

Π’Π΅ΠΏΠ΅Ρ€ΡŒ вСрнСмся ΠΊ Π½Π°ΡˆΠ΅ΠΌΡƒ ΡΡ†Π΅Π½Π°Ρ€ΠΈΡŽ. Π§Ρ‚ΠΎ происходит Ρƒ сСрвиса? БСрвис Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ Ρ‚Π΅Ρ€ΡΡ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹. ΠŸΡƒΡΡ‚ΡŒ сСрвису Π²Π½Π°Ρ‡Π°Π»Π΅ условно Π²Π΅Π·Π΅Ρ‚ ΠΈ тСряСтся Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π² сСрСдинС ΠΎΠΊΠ½Π°, Ρ‚ΠΎΠ³Π΄Π° ΠΎΠ½ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ SACK, пСрСпосылаСт ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΡ‚Π΅Ρ€ΡΠ»ΠΈΡΡŒ.
Π‘Π΅Ρ‚ΡŒ, которая Π»Π΅Ρ‡ΠΈΡ‚ сСбя сама: магия Flow Label ΠΈ Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΈΠ² Π²ΠΎΠΊΡ€ΡƒΠ³ ядра Linux. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

Но Ссли Π½Π΅Π²Π΅Π·Π΅Π½ΠΈΠ΅ повторяСтся, Ρ‚ΠΎ Ρƒ нас случаСтся RTO. Π§Ρ‚ΠΎ здСсь Π²Π°ΠΆΠ½ΠΎ? Π”Π°, Ρƒ нас Π² сСти ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡƒΡ‚Π΅ΠΉ. Но TCP-Ρ‚Ρ€Π°Ρ„ΠΈΠΊ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ TCP-соСдинСния Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ ΠΈΠ΄Ρ‚ΠΈ Ρ‡Π΅Ρ€Π΅Π· ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Π±ΠΈΡ‚Ρ‹ΠΉ стСк. ΠŸΠΎΡ‚Π΅Ρ€ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² ΠΏΡ€ΠΈ условии, Ρ‡Ρ‚ΠΎ этот наш Π²ΠΎΠ»ΡˆΠ΅Π±Π½Ρ‹ΠΉ X11 Π½Π΅ гаснСт ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ, Π½Π΅ приводят ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ ΠΏΠ΅Ρ€Π΅Ρ‚Π΅ΠΊΠ°Π΅Ρ‚ Π² участки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½Ρ‹ΠΌΠΈ. ΠœΡ‹ пытаСмся Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚ Ρ‡Π΅Ρ€Π΅Π· Ρ‚ΠΎΡ‚ ΠΆΠ΅ самый Π±ΠΈΡ‚Ρ‹ΠΉ стСк. Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ каскадному ΠΎΡ‚ΠΊΠ°Π·Ρƒ: Π΄Π°Ρ‚Π°-Ρ†Π΅Π½Ρ‚Ρ€ β€” это мноТСство Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΈ Ρ‡Π°ΡΡ‚ΡŒ TCP-соСдинСний всСх этих ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ Π΄Π΅Π³Ρ€Π°Π΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ β€” ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ супСрспайн Π·Π°Ρ‚Ρ€Π°Π³ΠΈΠ²Π°Π΅Ρ‚ Π²ΠΎΠΎΠ±Ρ‰Π΅ всС прилоТСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΅ΡΡ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π”Π¦. Как Π² ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΊΠ΅: Π½Π΅ ΠΏΠΎΠ΄ΠΊΠΎΠ²Π°Π»ΠΈ лошадь β€” конь Π·Π°Ρ…Ρ€ΠΎΠΌΠ°Π»; конь Π·Π°Ρ…Ρ€ΠΎΠΌΠ°Π» β€” донСсСниС Π½Π΅ доставили; донСсСниС Π½Π΅ доставили β€” ΠΏΡ€ΠΎΠΈΠ³Ρ€Π°Π»ΠΈ Π²ΠΎΠΉΠ½Ρƒ. Волько здСсь счСт ΠΈΠ΄Π΅Ρ‚ Π½Π° сСкунды с ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° возникновСния ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π΄ΠΎ стадии Π΄Π΅Π³Ρ€Π°Π΄Π°Ρ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ Ρ‡ΡƒΠ²ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ сСрвисы. А Π·Π½Π°Ρ‡ΠΈΡ‚ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π³Π΄Π΅-Ρ‚ΠΎ ΠΌΠΎΠ³ΡƒΡ‚ Π½Π΅Π΄ΠΎΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ.
Π‘Π΅Ρ‚ΡŒ, которая Π»Π΅Ρ‡ΠΈΡ‚ сСбя сама: магия Flow Label ΠΈ Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΈΠ² Π²ΠΎΠΊΡ€ΡƒΠ³ ядра Linux. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

Π•ΡΡ‚ΡŒ Π΄Π²Π° классичСских Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π° Π΄ΠΎΠΏΠΎΠ»Π½ΡΡŽΡ‚. ΠŸΠ΅Ρ€Π²ΠΎΠ΅ β€” это сСрвисы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ‹Ρ‚Π°ΡŽΡ‚ΡΡ ΠΏΠΎΠ΄Π»ΠΎΠΆΠΈΡ‚ΡŒ соломки ΠΈ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ Ρ‚Π°ΠΊ: «А Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΌΡ‹ ΠΏΠΎΠ΄ΠΊΡ€ΡƒΡ‚ΠΈΠΌ Ρ‡Ρ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π² TCP-стСкС. А Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΌΡ‹ сдСлаСм Ρ‚Π°ΠΉΠΌΠ°ΡƒΡ‚Ρ‹ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ прилоТСния ΠΈΠ»ΠΈ Π΄ΠΎΠ»Π³ΠΎ ΠΆΠΈΠ²ΡƒΡ‰ΠΈΠ΅ TCP-сСссии с Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΌΠΈ health checksΒ». ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΈΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ: Π°) Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΡŽΡ‚ΡΡ; Π±) ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠ»ΠΎΡ…ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ΡΡ. Π’ΠΎ Π΅ΡΡ‚ΡŒ Π΄Π°ΠΆΠ΅ Ссли сСрвис случайно настроит TCP-стСк Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΅ΠΌΡƒ стало Π»ΡƒΡ‡ΡˆΠ΅, Π²ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, это вряд Π»ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠΎ для всСх ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈ всСх Π΄Π°Ρ‚Π°-Ρ†Π΅Π½Ρ‚Ρ€ΠΎΠ², Π° Π²ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, скорСС всСго, ΠΎΠ½ Π½Π΅ ΠΏΠΎΠΉΠΌΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ сдСлано ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ, Π° Ρ‡Ρ‚ΠΎ Π½Π΅Ρ‚. Π’ΠΎ Π΅ΡΡ‚ΡŒ ΠΎΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΠ»ΠΎΡ…ΠΎ ΠΈ Π½Π΅ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅Ρ‚ΡΡ. И Ссли Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ сСтСвая ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, ΠΊΡ‚ΠΎ Π²ΠΈΠ½ΠΎΠ²Π°Ρ‚? ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, NOC. Π§Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ NOC?

Π‘Π΅Ρ‚ΡŒ, которая Π»Π΅Ρ‡ΠΈΡ‚ сСбя сама: магия Flow Label ΠΈ Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΈΠ² Π²ΠΎΠΊΡ€ΡƒΠ³ ядра Linux. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

МногиС сСрвисы ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ Π² NOC Ρ€Π°Π±ΠΎΡ‚Π° происходит ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ. Но Ссли Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ чСстно, Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ.
Π‘Π΅Ρ‚ΡŒ, которая Π»Π΅Ρ‡ΠΈΡ‚ сСбя сама: магия Flow Label ΠΈ Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΈΠ² Π²ΠΎΠΊΡ€ΡƒΠ³ ядра Linux. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

NOC Π² классичСской схСмС занимаСтся Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ мноТСства ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ΠΎΠ². Π­Ρ‚ΠΎ ΠΊΠ°ΠΊ black box-ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ΠΈ, Ρ‚Π°ΠΊ ΠΈ white box. О ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ black box-ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° спайнов рассказывал АлСксандр КлимСнко Π½Π° ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΌ Next Hop. ΠšΡΡ‚Π°Ρ‚ΠΈ, этот ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. Но Π΄Π°ΠΆΠ΅ ΠΈΠ΄Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π»Π°Π³ Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ это нСсколько ΠΌΠΈΠ½ΡƒΡ‚. ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½ срабатываСт, Π΄Π΅ΠΆΡƒΡ€Π½Ρ‹ΠΌ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ врСмя, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρƒ, Π»ΠΎΠΊΠ°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ ΠΈ послС этого ΠΏΠΎΠ³Π°ΡΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½Ρ‹ΠΉ участок. Π’ΠΎ Π΅ΡΡ‚ΡŒ Π² Π»ΡƒΡ‡ΡˆΠ΅ΠΌ случаС Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ 5 ΠΌΠΈΠ½ΡƒΡ‚, Π² Ρ…ΡƒΠ΄ΡˆΠ΅ΠΌ 20 ΠΌΠΈΠ½ΡƒΡ‚, Ссли сходу оказываСтся Π½Π΅ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Π³Π΄Π΅ ΠΆΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ ΠΏΠΎΡ‚Π΅Ρ€ΠΈ. ΠŸΠΎΠ½ΡΡ‚Π½ΠΎΠ΅ Π΄Π΅Π»ΠΎ, Ρ‡Ρ‚ΠΎ всС это врСмя β€” 5 ΠΈΠ»ΠΈ 20 ΠΌΠΈΠ½ΡƒΡ‚ β€” Ρƒ нас Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Ρ‚ΡŒ сСрвисы, Ρ‡Ρ‚ΠΎ, Π½Π°Π²Π΅Ρ€Π½ΠΎΠ΅, Π½Π΅Ρ…ΠΎΡ€ΠΎΡˆΠΎ.
Π‘Π΅Ρ‚ΡŒ, которая Π»Π΅Ρ‡ΠΈΡ‚ сСбя сама: магия Flow Label ΠΈ Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΈΠ² Π²ΠΎΠΊΡ€ΡƒΠ³ ядра Linux. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

Π§Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ Π±Ρ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ? Π£ нас ΠΆΠ΅ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡƒΡ‚Π΅ΠΉ. А ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ Ρ€ΠΎΠ²Π½ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ TCP-ΠΏΠΎΡ‚ΠΎΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π½Π΅ Π²Π΅Π·Π΅Ρ‚, ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡŽΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚. НуТно Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π½Π°ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ мноТСство ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΎΠ² Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΎΠ΄Π½ΠΎΠ³ΠΎ TCP-соСдинСния. Казалось Π±Ρ‹, Ρƒ нас Π΅ΡΡ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅. Π•ΡΡ‚ΡŒ TCP, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‚Π°ΠΊ ΠΈ называСтся β€” multipath TCP, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ TCP для мноТСства ΠΏΡƒΡ‚Π΅ΠΉ. ΠŸΡ€Π°Π²Π΄Π°, разрабатывался ΠΎΠ½ для ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ β€” для смартфонов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ нСсколько сСтСвых устройств. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΌΠ°ΠΊΡΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ ΠΈΠ»ΠΈ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ€Π΅ΠΆΠΈΠΌ primary/backup, Π±Ρ‹Π» Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎ для прилоТСния создаСт нСсколько ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² (сСансов) ΠΈ позволяСт Π² случаС возникновСния сбоя ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ. Или, ΠΊΠ°ΠΊ я сказал, ΠΌΠ°ΠΊΡΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ полосу.

Но здСсь Π΅ΡΡ‚ΡŒ нюанс. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Π² Ρ‡Π΅ΠΌ ΠΎΠ½, Π½Π°ΠΌ придСтся ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΏΠΎΡ‚ΠΎΠΊΠΈ.
Π‘Π΅Ρ‚ΡŒ, которая Π»Π΅Ρ‡ΠΈΡ‚ сСбя сама: магия Flow Label ΠΈ Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΈΠ² Π²ΠΎΠΊΡ€ΡƒΠ³ ядра Linux. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

ΠŸΠΎΡ‚ΠΎΠΊΠΈ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ. Π’Π½Π°Ρ‡Π°Π»Π΅ устанавливаСтся ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ. ΠŸΠΎΡ‚ΠΎΠΌ с использованиСм ΠΊΡƒΠΊΠΈ, которая ΡƒΠΆΠ΅ согласована Π² Ρ€Π°ΠΌΠΊΠ°Ρ… этого ΠΏΠΎΡ‚ΠΎΠΊΠ°, ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ. И здСсь ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°.
Π‘Π΅Ρ‚ΡŒ, которая Π»Π΅Ρ‡ΠΈΡ‚ сСбя сама: магия Flow Label ΠΈ Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΈΠ² Π²ΠΎΠΊΡ€ΡƒΠ³ ядра Linux. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ссли ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Π½Π΅ установится, Π²Ρ‚ΠΎΡ€Ρ‹Π΅ ΠΈ Ρ‚Ρ€Π΅Ρ‚ΡŒΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π½ΠΈΠΊΠΎΠ³Π΄Π° ΠΈ Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚. Π’ΠΎ Π΅ΡΡ‚ΡŒ multipath TCP Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΠΏΠΎΡ‚Π΅Ρ€ΡŽ SYN ΠΏΠ°ΠΊΠ΅Ρ‚Π° Ρƒ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°. И Ссли SYN тСряСтся, multipath TCP прСвращаСтся Π² ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ TCP. А Π·Π½Π°Ρ‡ΠΈΡ‚, Π² срСдС Π΄Π°Ρ‚Π°-Ρ†Π΅Π½Ρ‚Ρ€Π° Π½Π΅ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΠΌ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ ΠΏΠΎΡ‚Π΅Ρ€ΡŒ Π² Ρ„Π°Π±Ρ€ΠΈΠΊΠ΅ ΠΈ Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ мноТСство ΠΏΡƒΡ‚Π΅ΠΉ Π² случаС сбоя.
Π‘Π΅Ρ‚ΡŒ, которая Π»Π΅Ρ‡ΠΈΡ‚ сСбя сама: магия Flow Label ΠΈ Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΈΠ² Π²ΠΎΠΊΡ€ΡƒΠ³ ядра Linux. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

Π§Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΠΌ ΠΏΠΎΠΌΠΎΡ‡ΡŒ? НСкоторыС ΠΈΠ· вас ΡƒΠΆΠ΅ догадались ΠΈΠ· названия, Ρ‡Ρ‚ΠΎ Π²Π°ΠΆΠ½Ρ‹ΠΌ ΠΏΠΎΠ»Π΅ΠΌ Π² нашСм дальнСйшСм рассказС станСт ΠΏΠΎΠ»Π΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° IPv6 flow label. И ΠΏΡ€Π°Π²Π΄Π°, это ΠΏΠΎΠ»Π΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ появляСтся Π² v6, Π΅Π³ΠΎ Π½Π΅Ρ‚ Π² v4, ΠΎΠ½ΠΎ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ 20 Π±ΠΈΡ‚, ΠΈ ΠΏΠΎ ΠΏΠΎΠ²ΠΎΠ΄Ρƒ Π΅Π³ΠΎ использования Π΄ΠΎΠ»Π³ΠΎΠ΅ врСмя шли споры. Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ интСрСсно β€” споры шли, Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Π»ΠΎΡΡŒ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… RFC, Π° Π² Linux-ядрС Π² Ρ‚ΠΎ ΠΆΠ΅ врСмя появилась рСализация, которая Ρ‚Π°ΠΊ Π½ΠΈΠ³Π΄Π΅ ΠΈ Π½Π΅ Π·Π°Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π°.
Π‘Π΅Ρ‚ΡŒ, которая Π»Π΅Ρ‡ΠΈΡ‚ сСбя сама: магия Flow Label ΠΈ Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΈΠ² Π²ΠΎΠΊΡ€ΡƒΠ³ ядра Linux. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

Π― ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽ Π²Π°ΠΌ вмСстС со ΠΌΠ½ΠΎΠΉ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒΡΡ Π½Π° нСбольшоС расслСдованиС. Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим, Ρ‡Ρ‚ΠΎ происходило Π² ядрС Linux Π·Π° послСдниС нСсколько Π»Π΅Ρ‚.

Π‘Π΅Ρ‚ΡŒ, которая Π»Π΅Ρ‡ΠΈΡ‚ сСбя сама: магия Flow Label ΠΈ Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΈΠ² Π²ΠΎΠΊΡ€ΡƒΠ³ ядра Linux. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

2014 Π³ΠΎΠ΄. Π˜Π½ΠΆΠ΅Π½Π΅Ρ€ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ ΠΊΡ€ΡƒΠΏΠ½ΠΎΠΉ ΠΈ ΡƒΠ²Π°ΠΆΠ°Π΅ΠΌΠΎΠΉ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ добавляСт Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ядра Linux Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ значСния flow label ΠΎΡ‚ Ρ…Π΅ΡˆΠ° сокСта. Π§Ρ‚ΠΎ здСсь ΠΏΡ‹Ρ‚Π°Π»ΠΈΡΡŒ ΠΏΠΎΡ‡ΠΈΠ½ΠΈΡ‚ΡŒ? Π­Ρ‚ΠΎ связано с RFC 6438, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ±ΡΡƒΠΆΠ΄Π°Π»Π°ΡΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°. Π’Π½ΡƒΡ‚Ρ€ΠΈ Π΄Π°Ρ‚Π°-Ρ†Π΅Π½Ρ‚Ρ€Π° Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ инкапсулируСтся IPv4 Π² ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ IPv6, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ сама Ρ„Π°Π±Ρ€ΠΈΠΊΠ° β€” IPv6, Π½ΠΎ Π½Π°Ρ€ΡƒΠΆΡƒ ΠΊΠ°ΠΊ-Ρ‚ΠΎ Π½Π°Π΄ΠΎ ΠΎΡ‚Π΄Π°Ρ‚ΡŒ IPv4. Π”ΠΎΠ»Π³ΠΎΠ΅ врСмя Π±Ρ‹Π»ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ со свичами, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΌΠΎΠ³Π»ΠΈ Π·Π°Π³Π»ΡΠ½ΡƒΡ‚ΡŒ ΠΏΠΎΠ΄ Π΄Π²Π° IP-Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π΄ΠΎ TCP ΠΈΠ»ΠΈ UDP ΠΈ Π½Π°ΠΉΡ‚ΠΈ Ρ‚Π°ΠΌ src_ports, dst_ports. ΠŸΠΎΠ»ΡƒΡ‡Π°Π»ΠΎΡΡŒ, Ρ‡Ρ‚ΠΎ Ρ…Π΅Ρˆ, Ссли ΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° Π΄Π²Π° ΠΏΠ΅Ρ€Π²Ρ‹Π΅ IP-Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°, оказывался Ρ‡ΡƒΡ‚ΡŒ Π»ΠΈ Π½Π΅ фиксированным. Π§Ρ‚ΠΎΠ±Ρ‹ этого ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ балансировка этого инкапсулированного Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ° Ρ€Π°Π±ΠΎΡ‚Π°Π»Π° ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ, ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΠ»ΠΈ Π² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ поля flow label Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Ρ…Π΅Ρˆ ΠΎΡ‚ 5-tuple инкапсулированного ΠΏΠ°ΠΊΠ΅Ρ‚Π°. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚ΠΎ ΠΆΠ΅ самоС Π±Ρ‹Π»ΠΎ сдСлано ΠΈ для Π΄Ρ€ΡƒΠ³ΠΈΡ… схСм инкапсуляции, для UDP, для GRE, Π² послСднСм использовалось ΠΏΠΎΠ»Π΅ GRE Key. Π’Π°ΠΊ ΠΈΠ»ΠΈ ΠΈΠ½Π°Ρ‡Π΅, здСсь Ρ†Π΅Π»ΠΈ понятны. И ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅, Π½Π° Ρ‚ΠΎΡ‚ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΎΠ½ΠΈ Π±Ρ‹Π»ΠΈ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹.

Π‘Π΅Ρ‚ΡŒ, которая Π»Π΅Ρ‡ΠΈΡ‚ сСбя сама: магия Flow Label ΠΈ Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΈΠ² Π²ΠΎΠΊΡ€ΡƒΠ³ ядра Linux. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

Π’ 2015 Π³ΠΎΠ΄Ρƒ ΠΎΡ‚ этого ΠΆΠ΅ ΡƒΠ²Π°ΠΆΠ°Π΅ΠΌΠΎΠ³ΠΎ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Π° ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΠ°Ρ‚Ρ‡. Он ΠΎΡ‡Π΅Π½ΡŒ интСрСсный. Π’ Π½Π΅ΠΌ говорится ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ β€” ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Ρ€Π°Π½Π΄ΠΎΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ…Π΅Ρˆ Π² случаС Π½Π΅Π³Π°Ρ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ события ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π΅Π³Π°Ρ‚ΠΈΠ²Π½ΠΎΠ΅ событиС ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ? Π­Ρ‚ΠΎ RTO, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΡ‹ с Π²Π°ΠΌΠΈ Ρ€Π°Π½Π΅Π΅ обсуТдали, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ потСря хвоста ΠΎΠΊΠ½Π° β€” событиС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π΅Π³Π°Ρ‚ΠΈΠ²Π½ΠΎΠ΅. ΠŸΡ€Π°Π²Π΄Π°, ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ слоТно Π΄ΠΎΠ³Π°Π΄Π°Ρ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ это ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΠ½ΠΎ.

Π‘Π΅Ρ‚ΡŒ, которая Π»Π΅Ρ‡ΠΈΡ‚ сСбя сама: магия Flow Label ΠΈ Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΈΠ² Π²ΠΎΠΊΡ€ΡƒΠ³ ядра Linux. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

2016 Π³ΠΎΠ΄, другая уваТаСмая компания, Ρ‚ΠΎΠΆΠ΅ большая. Она Ρ€Π°Π·Π±ΠΈΡ€Π°Π΅Ρ‚ послСдниС костыли ΠΈ Π΄Π΅Π»Π°Π΅Ρ‚ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ Ρ…Π΅Ρˆ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ Ρ€Π°Π½Π΅Π΅ сдСлали Ρ€Π°Π½Π΄ΠΎΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ мСняСтся Π½Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ рСтрансмит SYN ΠΈ послС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ RTO Ρ‚Π°ΠΉΠΌΠ°ΡƒΡ‚Π°. И Π² этом письмС Π² ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΈ послСдний Ρ€Π°Π· Π·Π²ΡƒΡ‡ΠΈΡ‚ конСчная Ρ†Π΅Π»ΡŒ β€” ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ Π² случаС возникновСния ΠΏΠΎΡ‚Π΅Ρ€ΡŒ ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΊΠ°Π½Π°Π»ΠΎΠ² ΠΈΠΌΠ΅Π» Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ мягкой ΠΏΠ΅Ρ€Π΅ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ, использования мноТСства ΠΏΡƒΡ‚Π΅ΠΉ. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, послС этого Π±Ρ‹Π»Π° масса ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΉ, Π²Ρ‹ Π»Π΅Π³ΠΊΠΎ ΠΈΡ… смоТСтС Π½Π°ΠΉΡ‚ΠΈ.

Π‘Π΅Ρ‚ΡŒ, которая Π»Π΅Ρ‡ΠΈΡ‚ сСбя сама: магия Flow Label ΠΈ Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΈΠ² Π²ΠΎΠΊΡ€ΡƒΠ³ ядра Linux. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

Π₯отя Π½Π΅Ρ‚, Π½Π΅ смоТСтС, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π½Π° эту Ρ‚Π΅ΠΌΡƒ Π½Π΅ Π±Ρ‹Π»ΠΎ. Но ΠΌΡ‹-Ρ‚ΠΎ Π·Π½Π°Π΅ΠΌ!

Π‘Π΅Ρ‚ΡŒ, которая Π»Π΅Ρ‡ΠΈΡ‚ сСбя сама: магия Flow Label ΠΈ Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΈΠ² Π²ΠΎΠΊΡ€ΡƒΠ³ ядра Linux. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

И Ссли Π²Ρ‹ Π½Π΅ Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° поняли, Ρ‡Ρ‚ΠΎ ΠΆΠ΅ Π±Ρ‹Π»ΠΎ сдСлано, я Π²Π°ΠΌ сСйчас расскаТу.
Π‘Π΅Ρ‚ΡŒ, которая Π»Π΅Ρ‡ΠΈΡ‚ сСбя сама: магия Flow Label ΠΈ Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΈΠ² Π²ΠΎΠΊΡ€ΡƒΠ³ ядра Linux. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

Π§Ρ‚ΠΎ ΠΆΠ΅ Π±Ρ‹Π»ΠΎ сдСлано, ΠΊΠ°ΠΊΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ Π² ядро Linux? txhash мСняСтся Π½Π° Ρ€Π°Π½Π΄ΠΎΠΌΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ послС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ события RTO. Π­Ρ‚ΠΎΡ‚ Ρ‚ΠΎΡ‚ самый Π½Π΅Π³Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ. Π₯Сш зависит ΠΎΡ‚ этого txhash, Π° flow label зависит ΠΎΡ‚ skb hash. Π—Π΄Π΅ΡΡŒ Π΅ΡΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ΠΊΠ»Π°Π΄ΠΊΠΈ ΠΏΠΎ функциям, Π½Π° ΠΎΠ΄ΠΈΠ½ слайд всС Π΄Π΅Ρ‚Π°Π»ΠΈ Π½Π΅ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ. Если ΠΊΠΎΠΌΡƒ-Ρ‚ΠΎ Π»ΡŽΠ±ΠΎΠΏΡ‹Ρ‚Π½ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΉΡ‚ΠΈ ΠΏΠΎ ΠΊΠΎΠ΄Ρƒ ядра ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ.

Π§Ρ‚ΠΎ здСсь Π²Π°ΠΆΠ½ΠΎ? Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ поля flow label мСняСтся Π½Π° случайноС число послС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ RTO. Как это влияСт Π½Π° наш нСсчастливый TCP-ΠΏΠΎΡ‚ΠΎΠΊ?
Π‘Π΅Ρ‚ΡŒ, которая Π»Π΅Ρ‡ΠΈΡ‚ сСбя сама: магия Flow Label ΠΈ Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΈΠ² Π²ΠΎΠΊΡ€ΡƒΠ³ ядра Linux. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

Π’ случаС возникновСния SACK Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ измСнилось, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ пытаСмся ΠΏΠ΅Ρ€Π΅ΠΏΠΎΡΠ»Π°Ρ‚ΡŒ извСстный потСрянный ΠΏΠ°ΠΊΠ΅Ρ‚. Пока всС ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠΎ.
Π‘Π΅Ρ‚ΡŒ, которая Π»Π΅Ρ‡ΠΈΡ‚ сСбя сама: магия Flow Label ΠΈ Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΈΠ² Π²ΠΎΠΊΡ€ΡƒΠ³ ядра Linux. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

Но Π² случаС RTO, ΠΏΡ€ΠΈ условии, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ flow label Π² Ρ…Π΅Ρˆ-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π½Π° ToR, Ρ‚Ρ€Π°Ρ„ΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΉΡ‚ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΎΠΌ. И Ρ‡Π΅ΠΌ большС ΠΏΠ»Π΅ΠΉΠ½ΠΎΠ², Ρ‚Π΅ΠΌ большС шансов, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π½Π°ΠΉΠ΄Π΅Ρ‚ ΠΏΡƒΡ‚ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ Π·Π°Ρ‚Ρ€ΠΎΠ½ΡƒΡ‚ сбоСм Π½Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌ устройствС.
Π‘Π΅Ρ‚ΡŒ, которая Π»Π΅Ρ‡ΠΈΡ‚ сСбя сама: магия Flow Label ΠΈ Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΈΠ² Π²ΠΎΠΊΡ€ΡƒΠ³ ядра Linux. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

ΠžΡΡ‚Π°Π΅Ρ‚ΡΡ ΠΎΠ΄Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° β€” RTO. Π”Ρ€ΡƒΠ³ΠΎΠΉ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, находится, Π½ΠΎ ΡƒΠΆ ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ Π½Π° это тратится Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. 200 мс β€” это ΠΌΠ½ΠΎΠ³ΠΎ. Π‘Π΅ΠΊΡƒΠ½Π΄Π° β€” это Π²ΠΎΠΎΠ±Ρ‰Π΅ Π΄ΠΈΠΊΠΎΡΡ‚ΡŒ. РаньшС я рассказывал ΠΏΡ€ΠΎ Ρ‚Π°ΠΉΠΌΠ°ΡƒΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°ΡŽΡ‚ сСрвисы. Π’Π°ΠΊ Π²ΠΎΡ‚, сСкунда β€” это Ρ‚Π°ΠΉΠΌΠ°ΡƒΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ настраиваСт сСрвис Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ прилоТСния, ΠΈ Π² этом сСрвис Π±ΡƒΠ΄Π΅Ρ‚ Π΄Π°ΠΆΠ΅ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€Π°Π². ΠŸΡ€ΠΈΡ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ, ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡŽΡΡŒ, настоящий RTT Π²Π½ΡƒΡ‚Ρ€ΠΈ соврСмСнного Π΄Π°Ρ‚Π°-Ρ†Π΅Π½Ρ‚Ρ€Π° β€” Π² Ρ€Π°ΠΉΠΎΠ½Π΅ 1 миллисСкунды.
Π‘Π΅Ρ‚ΡŒ, которая Π»Π΅Ρ‡ΠΈΡ‚ сСбя сама: магия Flow Label ΠΈ Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΈΠ² Π²ΠΎΠΊΡ€ΡƒΠ³ ядра Linux. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

Π§Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ с RTO-Ρ‚Π°ΠΉΠΌΠ°ΡƒΡ‚Π°ΠΌΠΈ? Π’Π°ΠΉΠΌΠ°ΡƒΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° RTO Π² случаС ΠΏΠΎΡ‚Π΅Ρ€ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΈΠ· user space: Π΅ΡΡ‚ΡŒ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° IP, ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· Π΅Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π΅ΡΡ‚ΡŒ Ρ‚ΠΎΡ‚ самый rto_min. Учитывая, Ρ‡Ρ‚ΠΎ ΠΊΡ€ΡƒΡ‚ΠΈΡ‚ΡŒ RTO, бСзусловно, Π½ΡƒΠΆΠ½ΠΎ Π½Π΅ глобально, Π° для Π·Π°Π΄Π°Π½Π½Ρ‹Ρ… прСфиксов, Ρ‚Π°ΠΊΠΎΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ выглядит Π²ΠΏΠΎΠ»Π½Π΅ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΌ.
Π‘Π΅Ρ‚ΡŒ, которая Π»Π΅Ρ‡ΠΈΡ‚ сСбя сама: магия Flow Label ΠΈ Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΈΠ² Π²ΠΎΠΊΡ€ΡƒΠ³ ядра Linux. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

ΠŸΡ€Π°Π²Π΄Π°, с SYN_RTO всё нСсколько Ρ…ΡƒΠΆΠ΅. Он Π½Π°Ρ‚ΡƒΡ€Π°Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΈΠ±ΠΈΡ‚ гвоздями. Π’ ядрС зафиксировано Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ β€” 1 сСкунда, ΠΈ всё. Из user space Π΄ΠΎΡ‚ΡΠ½ΡƒΡ‚ΡŒΡΡ Ρ‚ΡƒΠ΄Π° нСльзя. Π•ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ способ.
Π‘Π΅Ρ‚ΡŒ, которая Π»Π΅Ρ‡ΠΈΡ‚ сСбя сама: магия Flow Label ΠΈ Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΈΠ² Π²ΠΎΠΊΡ€ΡƒΠ³ ядра Linux. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

На ΠΏΠΎΠΌΠΎΡ‰ΡŒ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ eBPF. Если Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½Π½ΠΎ, это нСбольшиС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° C. Π˜Ρ… ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² Ρ…ΡƒΠΊΠΈ Π² Ρ€Π°Π·Π½Ρ‹Ρ… мСстах исполнСния стСка ядра ΠΈ TCP-стСка, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ большоС количСство настроСк. Π’ΠΎΠΎΠ±Ρ‰Π΅, eBPF β€” это долгосрочный Ρ‚Ρ€Π΅Π½Π΄. ВмСсто Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΈΠ»ΠΈΡ‚ΡŒ дСсятки Π½ΠΎΠ²Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² sysctl ΠΈ Ρ€Π°ΡΡˆΠΈΡ€ΡΡ‚ΡŒ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρƒ IP, Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Π½Π½ΠΎ Π² сторону eBPF ΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ Π΅Π³ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ eBPF ΠΌΠΎΠΆΠ½ΠΎ динамичСски ΠΌΠ΅Π½ΡΡ‚ΡŒ congestion controls ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ€Π°Π·Π½ΠΎΠΎΠ±Ρ€Π°Π·Π½Ρ‹Π΅ настройки TCP.
Π‘Π΅Ρ‚ΡŒ, которая Π»Π΅Ρ‡ΠΈΡ‚ сСбя сама: магия Flow Label ΠΈ Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΈΠ² Π²ΠΎΠΊΡ€ΡƒΠ³ ядра Linux. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

Но Π½Π°ΠΌ Π²Π°ΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π½Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΊΡ€ΡƒΡ‚ΠΈΡ‚ΡŒ значСния SYN_RTO. ΠŸΡ€ΠΈΡ‡Π΅ΠΌ Π΅ΡΡ‚ΡŒ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΎ Π²Ρ‹Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€: https://elixir.bootlin.com/linux/latest/source/samples/bpf/tcp_synrto_kern.c. Π§Ρ‚ΠΎ здСсь сдСлано? ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ, Π½ΠΎ сам ΠΏΠΎ сСбС ΠΎΡ‡Π΅Π½ΡŒ Π³Ρ€ΡƒΠ±Ρ‹ΠΉ. Π—Π΄Π΅ΡΡŒ прСдполагаСтся, Ρ‡Ρ‚ΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π΄Π°Ρ‚Π°-Ρ†Π΅Π½Ρ‚Ρ€Π° ΠΌΡ‹ сравниваСм ΠΏΠ΅Ρ€Π²Ρ‹Π΅ 44 Π±ΠΈΡ‚Π°, Ссли ΠΎΠ½ΠΈ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‚, Π·Π½Π°Ρ‡ΠΈΡ‚, ΠΌΡ‹ оказываСмся Π²Π½ΡƒΡ‚Ρ€ΠΈ Π”Π¦. И Π² этом случаС ΠΌΡ‹ мСняСм Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ SYN_RTO timeout Π½Π° 4ms. Π’Ρƒ ΠΆΠ΅ ΡΠ°ΠΌΡƒΡŽ Π·Π°Π΄Π°Ρ‡Ρƒ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΊΡƒΠ΄Π° изящнСй. Но этот простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π°) Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ; Π±) ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ просто.

Π‘Π΅Ρ‚ΡŒ, которая Π»Π΅Ρ‡ΠΈΡ‚ сСбя сама: магия Flow Label ΠΈ Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΈΠ² Π²ΠΎΠΊΡ€ΡƒΠ³ ядра Linux. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

Π§Ρ‚ΠΎ ΠΌΡ‹ ΡƒΠΆΠ΅ Π·Π½Π°Π΅ΠΌ? Π§Ρ‚ΠΎ плСйновая Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° позволяСт ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ, ΠΎΠ½Π° оказываСтся Π½Π°ΠΌ Ρ‡Ρ€Π΅Π·Π²Ρ‹Ρ‡Π°ΠΉΠ½ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ flow label Π½Π° ToR ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΠ±Ρ‚Π΅ΠΊΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½Ρ‹Π΅ участки. Π‘Π°ΠΌΡ‹ΠΉ Π»ΡƒΡ‡ΡˆΠΈΠΉ способ ΡΠ½ΠΈΠ·ΠΈΡ‚ΡŒ значСния RTO ΠΈ SYN-RTO β€” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ eBPF-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. ΠžΡΡ‚Π°Π΅Ρ‚ΡΡ вопрос: Π° бСзопасно Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ flow label для балансировки? И здСсь Π΅ΡΡ‚ΡŒ нюанс.
Π‘Π΅Ρ‚ΡŒ, которая Π»Π΅Ρ‡ΠΈΡ‚ сСбя сама: магия Flow Label ΠΈ Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΈΠ² Π²ΠΎΠΊΡ€ΡƒΠ³ ядра Linux. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

ΠŸΡƒΡΡ‚ΡŒ Ρƒ вас Π² сСти Π΅ΡΡ‚ΡŒ сСрвис, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΆΠΈΠ²Π΅Ρ‚ Π² anycast. К соТалСнию, Ρƒ мСня Π½Π΅Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Ρ€Π°ΡΡΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ anycast, Π½ΠΎ это распрСдСлСнный сСрвис, Ρ€Π°Π·Π½Ρ‹Π΅ физичСскиС сСрвСра ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ доступны ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΈ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ IP-адрСсу. И здСсь Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°: событиС RTO ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΡ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠΈ Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ° Ρ‡Π΅Ρ€Π΅Π· Ρ„Π°Π±Ρ€ΠΈΠΊΡƒ. Оно ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ ΠΈ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ Π±ΡƒΡ„Π΅Ρ€Π° ToR: ΠΊΠΎΠ³Π΄Π° случаСтся incast-событиС, ΠΎΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ Π΄Π°ΠΆΠ΅ Π½Π° хостС, ΠΊΠΎΠ³Π΄Π° хост Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΏΡ€ΠΎΠ»ΠΈΠ²Π°Π΅Ρ‚. Когда происходит событиС RTO, ΠΈ ΠΎΠ½ΠΎ мСняСт flow label. Π’ этом случаС Ρ‚Ρ€Π°Ρ„ΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΏΠ°ΡΡ‚ΡŒ Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ anycast instance. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, это stateful anycast, ΠΎΠ½ Π΄Π΅Ρ€ΠΆΠΈΡ‚ Π² сСбС connection state β€” это ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ L3 Balancer ΠΈΠ»ΠΈ Π΅Ρ‰Π΅ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ сСрвис. Π’ΠΎΠ³Π΄Π° Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ послС RTO TCP-соСдинСниС ΠΏΡ€ΠΈΠ»Π΅Ρ‚Π°Π΅Ρ‚ Π½Π° сСрвСр, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ± этом TCP-соСдинСнии Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π·Π½Π°Π΅Ρ‚. И Ссли Ρƒ нас Π½Π΅Ρ‚ ΡˆΠ΅Ρ€ΠΈΠ½Π³Π° стСйтов ΠΌΠ΅ΠΆΠ΄Ρƒ anycast-сСрвСрами, Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠΉ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ±Ρ€ΠΎΡˆΠ΅Π½ ΠΈ TCP-соСдинСниС порвСтся.
Π‘Π΅Ρ‚ΡŒ, которая Π»Π΅Ρ‡ΠΈΡ‚ сСбя сама: магия Flow Label ΠΈ Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΈΠ² Π²ΠΎΠΊΡ€ΡƒΠ³ ядра Linux. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

Π§Ρ‚ΠΎ здСсь ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ? Π’Π½ΡƒΡ‚Ρ€ΠΈ вашСй ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΉ срСды, Π³Π΄Π΅ Π²Ρ‹ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚Π΅ балансировку flow label, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ flow label ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ anycast-сСрвСрам. Π‘Π°ΠΌΡ‹ΠΉ простой способ β€” ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это Ρ‡Π΅Ρ€Π΅Π· Ρ‚Ρƒ ΠΆΠ΅ eBPF-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ. Но здСсь ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ β€” Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ, Ссли Π²Ρ‹ ΠΎΠΏΠ΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ Π½Π΅ ΡΠ΅Ρ‚ΡŒΡŽ Π΄Π°Ρ‚Π°-Ρ†Π΅Π½Ρ‚Ρ€Π°, Π° ΡΠ²Π»ΡΠ΅Ρ‚Π΅ΡΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ связи? Π­Ρ‚ΠΎ ΠΈ ваша ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Ρ‚ΠΎΠΆΠ΅: начиная с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… вСрсий Juniper ΠΈ Arista Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ flow label Π² Ρ…Π΅Ρˆ-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠΎ Π΄Π΅Ρ„ΠΎΠ»Ρ‚Ρƒ β€” чСстно говоря, ΠΏΠΎ нСпонятной ΠΌΠ½Π΅ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ Ρ€Π²Π°Ρ‚ΡŒ TCP-соСдинСния ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ, ΠΈΠ΄ΡƒΡ‰ΠΈΡ… Ρ‡Π΅Ρ€Π΅Π· Π²Π°ΡˆΡƒ ΡΠ΅Ρ‚ΡŒ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ я Π½Π°ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ настройки Π²Π°ΡˆΠΈΡ… ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ² Π² этом мСстС.

Π’Π°ΠΊ ΠΈΠ»ΠΈ ΠΈΠ½Π°Ρ‡Π΅, ΠΌΠ½Π΅ каТСтся, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ экспСримСнтам.
Π‘Π΅Ρ‚ΡŒ, которая Π»Π΅Ρ‡ΠΈΡ‚ сСбя сама: магия Flow Label ΠΈ Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΈΠ² Π²ΠΎΠΊΡ€ΡƒΠ³ ядра Linux. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

Когда ΠΌΡ‹ Π²ΠΊΠ»ΡŽΡ‡ΠΈΠ»ΠΈ flow label Π½Π° ToR, ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΠ»ΠΈ eBPF Π°Π³Π΅Π½Ρ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΆΠΈΠ²Π΅Ρ‚ Π½Π° хостах, ΠΌΡ‹ Ρ€Π΅ΡˆΠΈΠ»ΠΈ Π½Π΅ Π΄ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ большого сбоя, Π° провСсти ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ Π²Π·Ρ€Ρ‹Π²Ρ‹. ΠœΡ‹ взяли ToR, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Π°ΠΏΠ»ΠΈΠ½ΠΊΠ°, ΠΈ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· Π½ΠΈΡ… устроили Π΄Ρ€ΠΎΠΏΡ‹. Нарисовали ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, сказали β€” Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Ρ‚Ρ‹ Ρ‚Π΅Ρ€ΡΠ΅ΡˆΡŒ всС ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹. Как ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ слСва, Ρƒ нас per-packet monitoring, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ просСл Π΄ΠΎ значСния 75%, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ 25% ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Ρ‚Π΅Ρ€ΡΡŽΡ‚ΡΡ. Π‘ΠΏΡ€Π°Π²Π° Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ сСрвисов, ΠΆΠΈΠ²ΡƒΡ‰ΠΈΡ… Π·Π° этим ToR. По сути это Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ° стыков с сСрвСрами Π²Π½ΡƒΡ‚Ρ€ΠΈ стойки. Как ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ, ΠΎΠ½ΠΈ просСли Π΄Π°ΠΆΠ΅ Π½ΠΈΠΆΠ΅. ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΠΎΠ½ΠΈ просСли Π½ΠΈΠΆΠ΅ β€” Π½Π΅ Π½Π° 25%, Π° Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях Π² 3–4 Ρ€Π°Π·Π°? Если TCP-соСдинСнию Π½Π΅ Π²Π΅Π·Π΅Ρ‚, ΠΎΠ½ΠΎ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ Π΄ΠΎΡΡ‚ΡƒΡ‡Π°Ρ‚ΡŒΡΡ Ρ‡Π΅Ρ€Π΅Π· Π±ΠΈΡ‚Ρ‹ΠΉ стык. Π­Ρ‚ΠΎ усугубляСтся Ρ‚ΠΈΠΏΠΎΠ²Ρ‹ΠΌ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ сСрвиса Π²Π½ΡƒΡ‚Ρ€ΠΈ Π”Π¦ β€” Π½Π° ΠΎΠ΄ΠΈΠ½ запрос ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ гСнСрируСтся N запросов ΠΊ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΌ сСрвисам, ΠΈ ΠΎΡ‚Π²Π΅Ρ‚ ΡƒΠΉΠ΄Π΅Ρ‚ ΠΊ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ, Π»ΠΈΠ±ΠΎ ΠΊΠΎΠ³Π΄Π° отвСтят всС источники Π΄Π°Π½Π½Ρ‹Ρ…, Π»ΠΈΠ±ΠΎ ΠΊΠΎΠ³Π΄Π° сработаСт Ρ‚Π°ΠΉΠΌΠ°ΡƒΡ‚ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ прилоТСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΅Ρ‰Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ настроСн. Π’ΠΎ Π΅ΡΡ‚ΡŒ всС вСсьма ΠΈ вСсьма ΠΏΠ»ΠΎΡ…ΠΎ.
Π‘Π΅Ρ‚ΡŒ, которая Π»Π΅Ρ‡ΠΈΡ‚ сСбя сама: магия Flow Label ΠΈ Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΈΠ² Π²ΠΎΠΊΡ€ΡƒΠ³ ядра Linux. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρ‚ΠΎΡ‚ ΠΆΠ΅ самый экспСримСнт, Π½ΠΎ с Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ flow label. Как ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ, слСва наш ΠΏΠ°ΠΊΠ΅Ρ‚Π½Ρ‹ΠΉ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ просСл Π½Π° Ρ‚Π΅ ΠΆΠ΅ самыС 25%. Π­Ρ‚ΠΎ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π·Π½Π°Π΅Ρ‚ ΠΎ рСтрансмитах, ΠΎΠ½ отправляСт ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ ΠΈ просто считаСт ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ количСства доставлСнных ΠΈ потСрянных ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ².

А справа находится Π³Ρ€Π°Ρ„ΠΈΠΊ сСрвисов. Π’Ρ‹ здСсь Π½Π΅ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ эффСкта ΠΎΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½ΠΎΠ³ΠΎ стыка. Π’Ρ€Π°Ρ„ΠΈΠΊ Π·Π° Ρ‚Π΅ самыС миллисСкунды ΠΏΠ΅Ρ€Π΅Ρ‚Π΅ΠΊ ΠΈΠ· ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½ΠΎΠ³ΠΎ участка Π² Ρ‚Ρ€ΠΈ ΠΎΡΡ‚Π°Π²ΡˆΠΈΡ…ΡΡ Π°ΠΏΠ»ΠΈΠ½ΠΊΠ°, Π½Π΅ Π·Π°Ρ‚Ρ€ΠΎΠ½ΡƒΡ‚Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ. ΠœΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ ΡΠ΅Ρ‚ΡŒ, которая Π»Π΅Ρ‡ΠΈΡ‚ сСбя сама.

Π‘Π΅Ρ‚ΡŒ, которая Π»Π΅Ρ‡ΠΈΡ‚ сСбя сама: магия Flow Label ΠΈ Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΈΠ² Π²ΠΎΠΊΡ€ΡƒΠ³ ядра Linux. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

Π­Ρ‚ΠΎ ΠΌΠΎΠΉ послСдний слайд, врСмя подвСсти ΠΈΡ‚ΠΎΠ³ΠΈ. Π’Π΅ΠΏΠ΅Ρ€ΡŒ, я надСюсь, Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊ ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΡΠ΅Ρ‚ΡŒ Π΄Π°Ρ‚Π°-Ρ†Π΅Π½Ρ‚Ρ€Π°, ΡΠΏΠΎΡΠΎΠ±Π½ΡƒΡŽ ΠΊ ΡΠ°ΠΌΠΎΠ»Π΅Ρ‡Π΅Π½ΠΈΡŽ. Π’Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΠΎ Π°Ρ€Ρ…ΠΈΠ²Ρƒ ядра Linux ΠΈ Π²Ρ‹ΠΈΡΠΊΠΈΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΌ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ°Ρ‚Ρ‡ΠΈ, Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ Flow label Π² Π΄Π°Π½Π½ΠΎΠΌ случаС Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, Π½ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ этому ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡƒ Π½ΡƒΠΆΠ½ΠΎ остороТно. И я Π΅Ρ‰Π΅ Ρ€Π°Π· ΠΏΠΎΠ΄Ρ‡Π΅Ρ€ΠΊΠΈΠ²Π°ΡŽ, Ρ‡Ρ‚ΠΎ Ссли Π²Ρ‹ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ связи, Π²Ρ‹ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ flow label Π² качСствС Ρ…Π΅Ρˆ-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΈΠ½Π°Ρ‡Π΅ Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ Ρ€Π²Π°Ρ‚ΡŒ сСссии Π²Π°ΡˆΠΈΡ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ.

Π£ сСтСвых ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€ΠΎΠ² Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΡ‚ΠΈ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ сдвиг: ΡΠ΅Ρ‚ΡŒ начинаСтся Π½Π΅ с ToR, Π½Π΅ с сСтСвого устройства, Π° с хоста. Достаточно яркий ΠΏΡ€ΠΈΠΌΠ΅Ρ€ β€” Ρ‚ΠΎ, ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ eBPF ΠΈ для измСнСния RTO, ΠΈ для фиксации flow label Π² сторону anycast-сСрвисов.

ΠœΠ΅Ρ…Π°Π½ΠΈΠΊΠ° flow label, бСзусловно, ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΈ для Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ административного сСгмСнта. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ ΠΌΠ΅ΠΆΠ΄Ρƒ Π΄Π°Ρ‚Π°-Ρ†Π΅Π½Ρ‚Ρ€Π°ΠΌΠΈ, Π° ΠΌΠΎΠΆΠ½ΠΎ особым способом ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΡƒΡŽ ΠΌΠ΅Ρ…Π°Π½ΠΈΠΊΡƒ ΠΈ для управлСния исходящим Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠΎΠΌ. Но ΠΎΠ± этом я расскаТу, надСюсь, Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π°Π·. Бпасибо большоС Π·Π° Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅.

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