АрхитСктура сСтСвого балансировщика Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ в ЯндСкс.ОблакС

АрхитСктура сСтСвого балансировщика Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π² Π―ндСкс.ОблакС
ΠŸΡ€ΠΈΠ²Π΅Ρ‚, я Π‘Π΅Ρ€Π³Π΅ΠΉ Π•Π»Π°Π½Ρ†Π΅Π², Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽ сСтСвой балансировщик Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π² ЯндСкс.ОблакС. РаньшС я Ρ€ΡƒΠΊΠΎΠ²ΠΎΠ΄ΠΈΠ» Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ L7-балансировщика ΠΏΠΎΡ€Ρ‚Π°Π»Π° ЯндСкса β€” ΠΊΠΎΠ»Π»Π΅Π³ΠΈ ΡˆΡƒΡ‚ΡΡ‚, Ρ‡Ρ‚ΠΎ Ρ‡Π΅ΠΌ Π±Ρ‹ я Π½ΠΈ занимался, получаСтся балансировщик. Π― расскаТу читатСлям Π₯Π°Π±Ρ€Π°, ΠΊΠ°ΠΊ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ Π² ΠΎΠ±Π»Π°Ρ‡Π½ΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅, ΠΊΠ°ΠΊΠΈΠΌ ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ ΠΈΠ΄Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ инструмСнт достиТСния этой Ρ†Π΅Π»ΠΈ ΠΈ ΠΊΠ°ΠΊ двиТСмся ΠΊ ΠΏΠΎΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΡŽ этого инструмСнта.

Для Π½Π°Ρ‡Π°Π»Π° Π²Π²Π΅Π΄Ρ‘ΠΌ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Ρ‹:

  • VIP (Virtual IP) β€” IP-адрСс балансировщика
  • Π‘Π΅Ρ€Π²Π΅Ρ€, бэкСнд, инстанс β€” Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ машина с Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹ΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ
  • RIP (Real IP) β€” IP-адрСс сСрвСра
  • Healthcheck β€” ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° готовности сСрвСра
  • Π—ΠΎΠ½Π° доступности, Availability Zone, AZ β€” изолированная инфраструктура Π² Π΄Π°Ρ‚Π°-Ρ†Π΅Π½Ρ‚Ρ€Π΅
  • Π Π΅Π³ΠΈΠΎΠ½ β€” объСдинСниС Ρ€Π°Π·Π½Ρ‹Ρ… AZ

Балансировщики Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Ρ€Π΅ΡˆΠ°ΡŽΡ‚ Ρ‚Ρ€ΠΈ основныС Π·Π°Π΄Π°Ρ‡ΠΈ: Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ саму балансировку, ΡƒΠ»ΡƒΡ‡ΡˆΠ°ΡŽΡ‚ ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ сСрвиса ΠΈ ΡƒΠΏΡ€ΠΎΡ‰Π°ΡŽΡ‚ Π΅Π³ΠΎ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅. ΠžΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ обСспСчиваСтся Π·Π° счёт автоматичСского управлСния Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠΎΠΌ: балансировщик слСдит Π·Π° состояниСм прилоТСния ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΈΠ· балансировки инстансы, Π½Π΅ ΠΏΡ€ΠΎΡˆΠ΅Π΄ΡˆΠΈΠ΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Тивости. ΠœΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ обСспСчиваСтся Ρ€Π°Π²Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΌ распрСдСлСниСм Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΏΠΎ инстансам, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ΠΌ списка инстансов Π½Π° Π»Π΅Ρ‚Ρƒ. Если балансировка Π±ΡƒΠ΄Π΅Ρ‚ нСдостаточно Ρ€Π°Π²Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎΠΉ, Ρ‚ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· инстансов ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ, ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°ΡŽΡ‰ΡƒΡŽ ΠΈΡ… ΠΏΡ€Π΅Π΄Π΅Π» работоспособности, ΠΈ сСрвис станСт ΠΌΠ΅Π½Π΅Π΅ Π½Π°Π΄Ρ‘ΠΆΠ½Ρ‹ΠΌ.

Балансировщик Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ часто ΠΊΠ»Π°ΡΡΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΡŽΡ‚ ΠΏΠΎ ΡƒΡ€ΠΎΠ²Π½ΡŽ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° ΠΈΠ· ΠΌΠΎΠ΄Π΅Π»ΠΈ OSI, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. Балансирощик Облака Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ TCP, Ρ‡Ρ‚ΠΎ соотвСтствуСт Ρ‡Π΅Ρ‚Π²Ρ‘Ρ€Ρ‚ΠΎΠΌΡƒ ΡƒΡ€ΠΎΠ²Π½ΡŽ, L4.

ΠŸΠ΅Ρ€Π΅ΠΉΠ΄Ρ‘ΠΌ ΠΊ ΠΎΠ±Π·ΠΎΡ€Ρƒ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ балансировщика Облака. Π‘ΡƒΠ΄Π΅ΠΌ постСпСнно ΠΏΠΎΠ²Ρ‹ΡˆΠ°Ρ‚ΡŒ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π΄Π΅Ρ‚Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. ΠœΡ‹ Π΄Π΅Π»ΠΈΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ балансировщика Π½Π° Ρ‚Ρ€ΠΈ класса. Класс config plane ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° взаимодСйствиС с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ ΠΈ Ρ…Ρ€Π°Π½ΠΈΡ‚ Π² сСбС Ρ†Π΅Π»Π΅Π²ΠΎΠ΅ состояниС систСмы. Control plane Ρ…Ρ€Π°Π½ΠΈΡ‚ Π² сСбС Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ΅ состояниС систСмы ΠΈ управляСт систСмами ΠΈΠ· класса data plane, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‚ нСпосрСдствСнно Π·Π° доставку Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ° ΠΎΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² Π΄ΠΎ Π²Π°ΡˆΠΈΡ… инстансов.

Data plane

Π’Ρ€Π°Ρ„ΠΈΠΊ ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ Π½Π° дорогостоящиС устройства ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ border routers. Для ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ отказоустойчивости Π² ΠΎΠ΄Π½ΠΎΠΌ Π΄Π°Ρ‚Π°-Ρ†Π΅Π½Ρ‚Ρ€Π΅ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ нСсколько Ρ‚Π°ΠΊΠΈΡ… устройств. Π”Π°Π»Π΅Π΅ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ Π½Π° балансировщики, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ для ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² Π°Π½ΠΎΠ½ΡΠΈΡ€ΡƒΡŽΡ‚ anycast IP-адрСс Π½Π° всС AZ ΠΏΠΎ BGP.Β 

АрхитСктура сСтСвого балансировщика Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π² Π―ндСкс.ОблакС

Π’Ρ€Π°Ρ„ΠΈΠΊ пСрСдаётся ΠΏΠΎ ECMP β€” это стратСгия ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ, согласно ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ нСсколько ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠΈΡ… ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΎΠ² Π΄ΠΎ Ρ†Π΅Π»ΠΈ (Π² нашСм случаС Ρ†Π΅Π»ΡŒΡŽ Π±ΡƒΠ΄Π΅Ρ‚ destination IP-адрСс) ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΏΠΎ Π»ΡŽΠ±ΠΎΠΌΡƒ ΠΈΠ· Π½ΠΈΡ…. Π’Π°ΠΊΠΆΠ΅ ΠΌΡ‹ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π·ΠΎΠ½Π°Ρ… доступности ΠΏΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ схСмС: анонсируСм адрСс Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· Π·ΠΎΠ½, Ρ‚Ρ€Π°Ρ„ΠΈΠΊ ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ Π² Π±Π»ΠΈΠΆΠ°ΠΉΡˆΡƒΡŽ ΠΈ ΡƒΠΆΠ΅ Π·Π° Π΅Ρ‘ ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ Π½Π΅ Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚. Π”Π°Π»ΡŒΡˆΠ΅ Π² постС ΠΌΡ‹ рассмотрим ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅, Ρ‡Ρ‚ΠΎ происходит с Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠΎΠΌ.

Config plane

Β 
ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠΌ config plane являСтся API, Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ основныС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с балансировщиками: созданиС, ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ состава инстансов, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² healthchecks ΠΈ Ρ‚. Π΄. C ΠΎΠ΄Π½ΠΎΠΉ стороны, это REST API, Π° с Π΄Ρ€ΡƒΠ³ΠΎΠΉ, ΠΌΡ‹ Π² ОблакС ΠΎΡ‡Π΅Π½ΡŒ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ gRPC, поэтому ΠΌΡ‹ Β«ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΠΌΒ» REST Π² gRPC ΠΈ дальшС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ gRPC. Π›ΡŽΠ±ΠΎΠΉ запрос ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ созданию сСрии асинхронных ΠΈΠ΄Π΅ΠΌΠΏΠΎΡ‚Π΅Π½Ρ‚Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π½Π° ΠΎΠ±Ρ‰Π΅ΠΌ ΠΏΡƒΠ»Π΅ Π²ΠΎΡ€ΠΊΠ΅Ρ€ΠΎΠ² ЯндСкс.Облака. Π—Π°Π΄Π°Ρ‡ΠΈ ΠΏΠΈΡˆΡƒΡ‚ΡΡ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π² любоС врСмя приостановлСны, Π° ΠΏΠΎΡ‚ΠΎΠΌ Π·Π°ΠΏΡƒΡ‰Π΅Π½Ρ‹ Π·Π°Π½ΠΎΠ²ΠΎ. Π­Ρ‚ΠΎ обСспСчиваСт ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΡŒ, ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΠ΅ΠΌΠΎΡΡ‚ΡŒ ΠΈ Π»ΠΎΠ³ΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ.

АрхитСктура сСтСвого балансировщика Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π² Π―ндСкс.ОблакС

Π’ ΠΈΡ‚ΠΎΠ³Π΅ Π·Π°Π΄Π°Ρ‡Π° ΠΈΠ· API ΡΠΎΠ²Π΅Ρ€ΡˆΠΈΡ‚ запрос Π² сСрвис-ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ балансировщиков, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ написан Π½Π° Go. Он ΠΌΠΎΠΆΠ΅Ρ‚ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΈ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ балансировщики, ΠΌΠ΅Π½ΡΡ‚ΡŒ состав бэкСндов ΠΈ настройки.Β 

АрхитСктура сСтСвого балансировщика Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π² Π―ндСкс.ОблакС

БСрвис Ρ…Ρ€Π°Π½ΠΈΡ‚ своё состояниС Π² Yandex Database β€” распрСдСлённой управляСмой Π‘Π”, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ вскорС смоТСтС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈ Π²Ρ‹. Π’ ЯндСкс.ОблакС, ΠΊΠ°ΠΊ ΠΌΡ‹ ΡƒΠΆΠ΅ рассказывали, дСйствуСт концСпция dog food: Ссли ΠΌΡ‹ сами ΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ своими сСрвисами, Ρ‚ΠΎ ΠΈ наши ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ Ρ‚ΠΎΠΆΠ΅ Π±ΡƒΠ΄ΡƒΡ‚ с ΡƒΠ΄ΠΎΠ²ΠΎΠ»ΡŒΡΡ‚Π²ΠΈΠ΅ΠΌ ΠΈΠΌΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ. Yandex Database β€” ΠΏΡ€ΠΈΠΌΠ΅Ρ€ воплощСния Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ. ΠœΡ‹ Ρ…Ρ€Π°Π½ΠΈΠΌ Π² YDB всС свои Π΄Π°Π½Π½Ρ‹Π΅, ΠΈ Π½Π°ΠΌ Π½Π΅ приходится Π΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΎΠ± обслуТивании ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π±Π°Π·Ρ‹: эти ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Ρ€Π΅ΡˆΠ΅Π½Ρ‹ Π·Π° нас, ΠΌΡ‹ ΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ Π±Π°Π·ΠΎΠΉ ΠΊΠ°ΠΊ сСрвисом.

ВозвращаСмся ΠΊ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Ρƒ балансировщика. Π•Π³ΠΎ Π·Π°Π΄Π°Ρ‡Π° β€” ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ балансировщикС, ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π·Π°Π΄Π°Ρ‡Ρƒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ готовности Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ Π² healthcheck controller.

Healthcheck controller

Он ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ запросы Π½Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€Π°Π²ΠΈΠ» ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ, сохраняСт ΠΈΡ… Π² YDB, распрСдСляСт Π·Π°Π΄Π°Ρ‡ΠΈ ΠΏΠΎ healtcheck nodes ΠΈ Π°Π³Ρ€Π΅Π³ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π°Ρ‚Π΅ΠΌ ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ Π² Π±Π°Π·Ρƒ ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ΡΡ Π² loadbalancer controller. Он, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, отправляСт запрос Π½Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ состава кластСра Π² data plane Π½Π° loadbalancer-node, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ я расскаТу Π½ΠΈΠΆΠ΅.

АрхитСктура сСтСвого балансировщика Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π² Π―ндСкс.ОблакС

ΠŸΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΏΡ€ΠΎ healthchecks. Π˜Ρ… ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π° нСсколько классов. Π£ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ Π±Ρ‹Π²Π°ΡŽΡ‚ Ρ€Π°Π·Π½Ρ‹Π΅ ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠΈ успСха. TCP-ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ соСдинСниС Π·Π° фиксированноС врСмя. HTTP-ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ ΠΈ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ соСдинСния, ΠΈ получСния ΠΎΡ‚Π²Π΅Ρ‚Π° со статус-ΠΊΠΎΠ΄ΠΎΠΌ 200.

Π’Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ ΠΏΠΎ классу дСйствия β€” ΠΎΠ½ΠΈ Π±Ρ‹Π²Π°ΡŽΡ‚ Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Π΅ ΠΈ пассивныС. ΠŸΠ°ΡΡΠΈΠ²Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ просто слСдят Π·Π° Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ происходит с Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠΎΠΌ, Π½Π΅ прСдпринимая Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… дСйствий. Π­Ρ‚ΠΎ Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° L4, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ зависит ΠΎΡ‚ Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠ² Π±ΠΎΠ»Π΅Π΅ высокого уровня: Π½Π° L4 Π½Π΅Ρ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Ρ‚ΠΎΠΌ, сколько Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ заняла опСрация, ΠΈ Π±Ρ‹Π»ΠΎ Π»ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ соСдинСния Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΌ ΠΈΠ»ΠΈ ΠΏΠ»ΠΎΡ…ΠΈΠΌ. АктивныС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ балансировщик посылал запросы ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ инстансу сСрвСра.

Π‘ΠΎΜΠ»ΡŒΡˆΠ°Ρ Ρ‡Π°ΡΡ‚ΡŒ балансировщиков Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ выполняСт ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ «Тивости» ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ. ΠœΡ‹ Π² ОблакС Ρ€Π΅ΡˆΠΈΠ»ΠΈ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ эти части систСмы для ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΠΈ. Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π½Π°ΠΌ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒ количСство балансировщиков, сохраняя количСство healthcheck-запросов ΠΊ сСрвису. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ healthcheck nodes, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΡˆΠ°Ρ€Π΄ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ ΠΈ Ρ€Π΅ΠΏΠ»ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ Ρ†Π΅Π»ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ. НСльзя Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ с ΠΎΠ΄Π½ΠΎΠ³ΠΎ хоста, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚ΠΊΠ°Π·Π°Ρ‚ΡŒ. Π’ΠΎΠ³Π΄Π° ΠΌΡ‹ Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ состояниС ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π½Ρ‹Ρ… ΠΈΠΌ инстансов. ΠœΡ‹ выполняСм ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ любого ΠΈΠ· инстансов ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ с Ρ‚Ρ€Ρ‘Ρ… healthcheck nodes. Π¦Π΅Π»ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ ΠΌΡ‹ ΡˆΠ°Ρ€Π΄ΠΈΡ€ΡƒΠ΅ΠΌ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΎΠ΄Π°ΠΌΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² консистСнтного Ρ…ΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ.

АрхитСктура сСтСвого балансировщика Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π² Π―ндСкс.ОблакС

Π Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ балансировки ΠΈ healthcheck ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌ. Если healthcheck node ΡΠΎΠ²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ запросы ΠΊ инстансу, минуя балансировщик (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π½Π΅ обслуТиваСт Ρ‚Ρ€Π°Ρ„ΠΈΠΊ), Ρ‚ΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ странная ситуация: рСсурс Π²Ρ€ΠΎΠ΄Π΅ Π±Ρ‹ ΠΆΠΈΠ², Π½ΠΎ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ Π΄ΠΎ Π½Π΅Π³ΠΎ Π½Π΅ Π΄ΠΎΠΉΠ΄Ρ‘Ρ‚. Π­Ρ‚Ρƒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ ΠΌΡ‹ Ρ€Π΅ΡˆΠ°Π΅ΠΌ Ρ‚Π°ΠΊ: Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎ Π·Π°Π²ΠΎΠ΄ΠΈΠΌ healthcheck-Ρ‚Ρ€Π°Ρ„ΠΈΠΊ Ρ‡Π΅Ρ€Π΅Π· балансСровщики. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, схСма пСрСмСщСния ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² с Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠΎΠΌ ΠΎΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² ΠΈ ΠΎΡ‚ healthchecks отличаСтся минимально: Π² ΠΎΠ±ΠΎΠΈΡ… случаях ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ ΠΏΠΎΠΏΠ°Π΄ΡƒΡ‚ Π½Π° балансировщики, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ доставят ΠΈΡ… Π΄ΠΎ Ρ†Π΅Π»Π΅Π²Ρ‹Ρ… рСсурсов.

ΠžΡ‚Π»ΠΈΡ‡ΠΈΠ΅ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ Π΄Π΅Π»Π°ΡŽΡ‚ запросы Π½Π° VIP, Π° healthchecks ΠΎΠ±Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌΡƒ RIP. Π’ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ интСрСсная ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°: нашим ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ ΠΌΡ‹ Π΄Π°Ρ‘ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ рСсурсы Π² сСрых IP-сСтях. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π΄Π²Π° Ρ€Π°Π·Π½Ρ‹Ρ… Π²Π»Π°Π΄Π΅Π»ΡŒΡ†Π° ΠΎΠ±Π»Π°ΠΊΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ спрятали свои сСрвисы Π·Π° балансировщики. Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΡ… Π½ΠΈΡ… Π΅ΡΡ‚ΡŒ рСсурсы Π² подсСти 10.0.0.1/24, ΠΏΡ€ΠΈΡ‡Ρ‘ΠΌ с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ адрСсами. НуТно ΡƒΠΌΠ΅Ρ‚ΡŒ ΠΊΠ°ΠΊΠΈΠΌ-Ρ‚ΠΎ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΈΡ… ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒ, ΠΈ Ρ‚ΡƒΡ‚ Π½Π°Π΄ΠΎ ΠΏΠΎΠ³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒΡΡ Π² устройство Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ сСти ЯндСкс.Облака. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΡΡ‚ΠΈ Π»ΡƒΡ‡ΡˆΠ΅ ΡƒΠ·Π½Π°Ρ‚ΡŒ Π² Π²ΠΈΠ΄Π΅ΠΎ с мСроприятия about:cloud, Π½Π°ΠΌ сСйчас Π²Π°ΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎ ΡΠ΅Ρ‚ΡŒ многослойная ΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ Π² сСбС Ρ‚ΡƒΠ½Π½Π΅Π»ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π°Ρ‚ΡŒ ΠΏΠΎ id подсСти.

Healthcheck nodes ΠΎΠ±Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ ΠΊ балансировщикам с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… ΠΊΠ²Π°Π·ΠΈ-IPv6-адрСсов. ΠšΠ²Π°Π·ΠΈΠ°Π΄Ρ€Π΅Ρ β€” это IPv6-адрСс, Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π·Π°ΡˆΠΈΡ‚ IPv4-адрСс ΠΈ id подсСти ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. Π’Ρ€Π°Ρ„ΠΈΠΊ ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ Π½Π° балансировщик, Ρ‚ΠΎΡ‚ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚ ΠΈΠ· Π½Π΅Π³ΠΎ IPv4-адрСс рСсурса, замСняСт IPv6 Π½Π° IPv4 ΠΈ отправляСт ΠΏΠ°ΠΊΠ΅Ρ‚ Π² ΡΠ΅Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.

ΠžΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ ΠΈΠ΄Ρ‘Ρ‚ Ρ‚Π°ΠΊ ΠΆΠ΅: балансировщик Π²ΠΈΠ΄ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ β€” сСрая ΡΠ΅Ρ‚ΡŒ ΠΈΠ· healthcheckers, ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ IPv4 Π² IPv6.

VPP β€” сСрдцС data plane

Балансировщик Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π½Π° Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ Vector Packet Processing (VPP) β€” Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ΅ ΠΎΡ‚ Cisco для ΠΏΠ°ΠΊΠ΅Ρ‚Π½ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ сСтСвого Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ°. Π’ нашСм случаС Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΠΎΠ²Π΅Ρ€Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ user-space-управлСния сСтСвыми устройствами β€” Data Plane Development Kit (DPDK). Π­Ρ‚ΠΎ обСспСчиваСт Π²Ρ‹ΡΠΎΠΊΡƒΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ²: Π² ядрС происходит Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ мСньшС ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ, Π½Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ контСкста ΠΌΠ΅ΠΆΠ΄Ρƒ kernel space ΠΈ user space.Β 

VPP ΠΈΠ΄Ρ‘Ρ‚ Π΅Ρ‰Ρ‘ дальшС ΠΈ Π²Ρ‹ΠΆΠΈΠΌΠ°Π΅Ρ‚ ΠΈΠ· систСмы Π΅Ρ‰Ρ‘ большС ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π·Π° счёт объСдинСния ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Π² Π±Π°Ρ‚Ρ‡ΠΈ. ΠŸΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ происходит благодаря агрСссивному использованию кэшСй соврСмСнных процСссоров. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ кэши Π΄Π°Π½Π½Ρ‹Ρ… (ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ Β«Π²Π΅ΠΊΡ‚ΠΎΡ€Π°ΠΌΠΈΒ», Π΄Π°Π½Π½Ρ‹Π΅ Π»Π΅ΠΆΠ°Ρ‚ Π±Π»ΠΈΠ·ΠΊΠΎ Π΄Ρ€ΡƒΠ³ ΠΊ Π΄Ρ€ΡƒΠ³Ρƒ), Ρ‚Π°ΠΊ ΠΈ кэши инструкций: Π² VPP ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² слСдуСт ΠΏΠΎ Π³Ρ€Π°Ρ„Ρƒ, Π² ΡƒΠ·Π»Π°Ρ… ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ находятся Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠ΅ ΠΎΠ΄Π½Ρƒ Π·Π°Π΄Π°Ρ‡Ρƒ.

НапримСр, ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° IP-ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Π² VPP ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Π² Ρ‚Π°ΠΊΠΎΠΌ порядкС: сначала Π² ΡƒΠ·Π»Π΅ Ρ€Π°Π·Π±ΠΎΡ€Π° происходит парсинг Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ², Π° ΠΏΠΎΡ‚ΠΎΠΌ ΠΎΠ½ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ΡΡ Π² ΡƒΠ·Π΅Π», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ пСрСсылаСт ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ дальшС согласно Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ.

НСмного Ρ…Π°Ρ€Π΄ΠΊΠΎΡ€Π°. Авторы VPP Π½Π΅ тСрпят компромиссов Π² использовании кэшСй процСссора, поэтому Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π²Π΅ΠΊΡ‚ΠΎΡ€Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² содСрТит Π² сСбС Ρ€ΡƒΡ‡Π½ΡƒΡŽ Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΡŽ: Π΅ΡΡ‚ΡŒ Ρ†ΠΈΠΊΠ» ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ обрабатываСтся ситуация Π²ΠΈΠ΄Π° Β«Ρƒ нас Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚Π° Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈΒ», Π·Π°Ρ‚Π΅ΠΌ β€” Ρ‚ΠΎ ΠΆΠ΅ самоС для Π΄Π²ΡƒΡ…, Π·Π°Ρ‚Π΅ΠΌ β€” для ΠΎΠ΄Π½ΠΎΠ³ΠΎ. Часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ prefetch-инструкции, Π·Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‰ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ Π² кэши для ускорСния доступа ΠΊ Π½ΠΈΠΌ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… итСрациях.

n_left_from = frame->n_vectors;
while (n_left_from > 0)
{
    vlib_get_next_frame (vm, node, next_index, to_next, n_left_to_next);
    // ...
    while (n_left_from >= 4 && n_left_to_next >= 2)
    {
        // processing multiple packets at once
        u32 next0 = SAMPLE_NEXT_INTERFACE_OUTPUT;
        u32 next1 = SAMPLE_NEXT_INTERFACE_OUTPUT;
        // ...
        /* Prefetch next iteration. */
        {
            vlib_buffer_t *p2, *p3;

            p2 = vlib_get_buffer (vm, from[2]);
            p3 = vlib_get_buffer (vm, from[3]);

            vlib_prefetch_buffer_header (p2, LOAD);
            vlib_prefetch_buffer_header (p3, LOAD);

            CLIB_PREFETCH (p2->data, CLIB_CACHE_LINE_BYTES, STORE);
            CLIB_PREFETCH (p3->data, CLIB_CACHE_LINE_BYTES, STORE);
        }
        // actually process data
        /* verify speculative enqueues, maybe switch current next frame */
        vlib_validate_buffer_enqueue_x2 (vm, node, next_index,
                to_next, n_left_to_next,
                bi0, bi1, next0, next1);
    }

    while (n_left_from > 0 && n_left_to_next > 0)
    {
        // processing packets by one
    }

    // processed batch
    vlib_put_next_frame (vm, node, next_index, n_left_to_next);
}

Π˜Ρ‚Π°ΠΊ, Healthchecks ΠΎΠ±Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ ΠΏΠΎ IPv6 ΠΊ VPP, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΈΡ… Π² IPv4. Π­Ρ‚ΠΈΠΌ занимаСтся ΡƒΠ·Π΅Π» Π³Ρ€Π°Ρ„Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌ алгоритмичСским NAT. Для ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ° (ΠΈ прСобразования ΠΈΠ· IPv6 Π² IPv4) Π΅ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅ ΡƒΠ·Π΅Π» алгоритмичСского NAT.

АрхитСктура сСтСвого балансировщика Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π² Π―ндСкс.ОблакС

ΠŸΡ€ΡΠΌΠΎΠΉ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ ΠΎΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² балансировщика ΠΈΠ΄Ρ‘Ρ‚ Ρ‡Π΅Ρ€Π΅Π· ΡƒΠ·Π»Ρ‹ Π³Ρ€Π°Ρ„Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ саму балансировку.Β 

АрхитСктура сСтСвого балансировщика Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π² Π―ндСкс.ОблакС

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΡƒΠ·Π΅Π» β€” sticky sessions. Π’ Π½Ρ‘ΠΌ хранится Ρ…ΡΡˆ ΠΎΡ‚ 5-tuple для установлСнных сСссий. 5-tuple Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя адрСс ΠΈ ΠΏΠΎΡ€Ρ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ пСрСдаётся информация, адрСс ΠΈ ΠΏΠΎΡ€Ρ‚ΠΎΠ² рСсурсов, доступных для ΠΏΡ€ΠΈΡ‘ΠΌΠ° Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ°, Π° Ρ‚Π°ΠΊΠΆΠ΅ сСтСвой ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ».Β 

Π₯эш ΠΎΡ‚ 5-tuple ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Π½Π°ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ мСньшС вычислСний Π² ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΡƒΠ·Π»Π΅ консистСнтного Ρ…ΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π»ΡƒΡ‡ΡˆΠ΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ списка рСсурсов Π·Π° балансировщиком. Когда Π½Π° балансровщик ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ ΠΏΠ°ΠΊΠ΅Ρ‚, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π½Π΅Ρ‚ сСссии, ΠΎΠ½ отправляСтся Π² ΡƒΠ·Π΅Π» consistent hashing. Π’ΡƒΡ‚ ΠΈ происходит балансировка с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ консистСнтного Ρ…ΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ: ΠΌΡ‹ Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ рСсурс ΠΈΠ· списка доступных Β«ΠΆΠΈΠ²Ρ‹Ρ…Β» рСсурсов. Π”Π°Π»Π΅Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ΡΡ Π² ΡƒΠ·Π΅Π» NAT, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ Ρ„Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Π·Π°ΠΌΠ΅Π½Ρƒ адрСса назначСния ΠΈ пСрСрасчёт ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Ρ… сумм. Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, ΠΌΡ‹ слСдуСм ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ VPP β€” ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅ ΠΊ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠΌΡƒ, Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΡƒΠ΅ΠΌ схоТиС вычислСния для увСличСния эффСктивности кэшСй процСссора.

ΠšΠΎΠ½ΡΠΈΡΡ‚Π΅Π½Ρ‚Π½ΠΎΠ΅ Ρ…ΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΠΌΡ‹ Π²Ρ‹Π±Ρ€Π°Π»ΠΈ ΠΈΠΌΠ΅Π½Π½ΠΎ Π΅Π³ΠΎ ΠΈ Ρ‡Ρ‚ΠΎ это Π²ΠΎΠΎΠ±Ρ‰Π΅ Ρ‚Π°ΠΊΠΎΠ΅? Для Π½Π°Ρ‡Π°Π»Π° рассмотрим ΠΏΡ€Π΅ΠΆΠ½ΡŽΡŽ Π·Π°Π΄Π°Ρ‡Ρƒ β€” Π²Ρ‹Π±ΠΎΡ€Π° рСсурса ΠΈΠ· списка.Β 

АрхитСктура сСтСвого балансировщика Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π² Π―ндСкс.ОблакС

ΠŸΡ€ΠΈ нСконсистСнтном Ρ…ΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡŽΡ‚ Ρ…ΡΡˆ ΠΎΡ‚ входящСго ΠΏΠ°ΠΊΠ΅Ρ‚Π°, Π° рСсурс Π²Ρ‹Π±ΠΈΡ€Π°ΡŽΡ‚ ΠΈΠ· списка ΠΏΠΎ остатку ΠΎΡ‚ дСлСния этого Ρ…ΡΡˆΠ° Π½Π° количСство рСсурсов. Пока список остаётся Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½Π½Ρ‹ΠΌ, такая схСма Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ…ΠΎΡ€ΠΎΡˆΠΎ: ΠΌΡ‹ всСгда отправляСм ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌ 5-tuple Π½Π° ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ инстанс. Если ΠΆΠ΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ рСсурс пСрСстал ΠΎΡ‚Π²Π΅Ρ‡Π°Ρ‚ΡŒ Π½Π° healthchecks, Ρ‚ΠΎ для Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ части Ρ…ΡΡˆΠ΅ΠΉ Π²Ρ‹Π±ΠΎΡ€ измСнится. Π£ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° разорвутся TCP-соСдинСния: ΠΏΠ°ΠΊΠ΅Ρ‚, Ρ€Π°Π½Π΅Π΅ попадавший Π½Π° инстанс А, ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΏΠΎΠΏΠ°Π΄Π°Ρ‚ΡŒ Π½Π° инстанс Π‘, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ с сСссиСй для этого ΠΏΠ°ΠΊΠ΅Ρ‚Π° Π½Π΅ Π·Π½Π°ΠΊΠΎΠΌ.

ΠšΠΎΠ½ΡΠΈΡΡ‚Π΅Ρ‚Π½ΠΎΠ΅ Ρ…ΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΠΎΠΏΠΈΡΠ°Π½Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ. ΠŸΡ€ΠΎΡ‰Π΅ всСго ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒ эту ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡŽ Ρ‚Π°ΠΊ: ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ Ρƒ вас Π΅ΡΡ‚ΡŒ ΠΊΠΎΠ»ΡŒΡ†ΠΎ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²Ρ‹ распрСдСляСтС рСсурсы ΠΏΠΎ Ρ…ΡΡˆΡƒ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎ IP:port). Π’Ρ‹Π±ΠΎΡ€ рСсурса β€” это ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚ колСса Π½Π° ΡƒΠ³ΠΎΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ опрСдСляСтся ΠΏΠΎ Ρ…ΡΡˆΡƒ ΠΎΡ‚ ΠΏΠ°ΠΊΠ΅Ρ‚Π°.

АрхитСктура сСтСвого балансировщика Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π² Π―ндСкс.ОблакС

Π’Π΅ΠΌ самым минимизируСтся пСрСраспрСдСлСниС Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ° ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ состава рСсурсов. Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ рСсурса повлияСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° Ρ‚Ρƒ Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠΎΠ»ΡŒΡ†Π° консистСнтного Ρ…ΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ находился Π΄Π°Π½Π½Ρ‹ΠΉ рСсурс. Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ рСсурса Ρ‚ΠΎΠΆΠ΅ мСняСт распрСдСлСниС, Π½ΠΎ Ρƒ нас Π΅ΡΡ‚ΡŒ ΡƒΠ·Π΅Π» sticky sessions, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Π½Π΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ ΡƒΠΆΠ΅ установлСнныС сСссии Π½Π° Π½ΠΎΠ²Ρ‹Π΅ рСсурсы.

ΠœΡ‹ рассмотрСли, Ρ‡Ρ‚ΠΎ происходит с прямым Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠΎΠΌ ΠΌΠ΅ΠΆΠ΄Ρƒ балансировщиком ΠΈ рСсурсами. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ разбСрёмся с ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΌ Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠΎΠΌ. Он слСдуСт ΠΏΠΎ Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅ схСмС, ΠΊΠ°ΠΊ ΠΈ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ β€” Ρ‡Π΅Ρ€Π΅Π· алгоритмичСский NAT, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ NAT 44 для клиСнтского Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ° ΠΈ Ρ‡Π΅Ρ€Π΅Π· NAT 46 для Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ° healthchecks. ΠœΡ‹ придСрТиваСмся своСй ΠΆΠ΅ схСмы: ΡƒΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅ΠΌ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ healthchecks ΠΈ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ.

Loadbalancer-node ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π² сборС

О составС балансировщиков ΠΈ рСсурсов Π² VPP сообщаСт Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ сСрвис β€”Β loadbalancer-node. Он подписываСтся Π½Π° ΠΏΠΎΡ‚ΠΎΠΊ событий ΠΎΡ‚ loadbalancer-controller, ΡƒΠΌΠ΅Π΅Ρ‚ ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Ρ€Π°Π·Π½ΠΈΡ†Ρƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ состояния VPP ΠΈ Ρ†Π΅Π»Π΅Π²ΠΎΠ³ΠΎ состояния, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ ΠΎΡ‚ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°. ΠœΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π·Π°ΠΌΠΊΠ½ΡƒΡ‚ΡƒΡŽ систСму: события ΠΈΠ· API приходят Π½Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ балансировщика, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ставит healthcheck-ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Ρƒ Π·Π°Π΄Π°Ρ‡ΠΈ Π½Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ «Тивости» рСсурсов. Π’ΠΎΡ‚, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, ставит Π·Π°Π΄Π°Ρ‡ΠΈ Π² healthcheck-node ΠΈ Π°Π³Ρ€Π΅Π³ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹, послС Ρ‡Π΅Π³ΠΎ ΠΎΡ‚Π΄Π°Ρ‘Ρ‚ ΠΈΡ… ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Ρƒ балансировщиков. Loadbalancer-node подписываСтся Π½Π° события ΠΎΡ‚ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° ΠΈ мСняСт состояниС VPP. Π’ Ρ‚Π°ΠΊΠΎΠΉ систСмС ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ сСрвис Π·Π½Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ ΠΎ сосСдних сСрвисах. ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ связСй ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΎ, ΠΈ Ρƒ нас Π΅ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ нСзависимо ΡΠΊΡΠΏΠ»ΡƒΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ сСгмСнты.

АрхитСктура сСтСвого балансировщика Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π² Π―ндСкс.ОблакС

ΠšΠ°ΠΊΠΈΡ… вопросов ΡƒΠ΄Π°Π»ΠΎΡΡŒ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ

ВсС наши сСрвисы Π² control plane написаны Π½Π° Go ΠΈ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΌΠΈ характСристиками ΠΏΠΎ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ ΠΈ надёТности. Π’ Go Π΅ΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ опСнсорсных Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ для построСния распрСдСлённых систСм. ΠœΡ‹ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ GRPC, всС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ содСрТат Π² сСбС ΠΎΠΏΠ΅Π½ΡΠΎΡ€ΡΠ½ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ service discovery β€” наши сСрвисы слСдят Π·Π° Ρ€Π°Π±ΠΎΡ‚ΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒΡŽ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π°, ΠΌΠΎΠ³ΡƒΡ‚ ΠΌΠ΅Π½ΡΡ‚ΡŒ свой состав динамичСски, ΠΈ ΠΌΡ‹ провязали это с GRPC-балансировкой. Для ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊ ΠΌΡ‹ Ρ‚ΠΎΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ опСнсорсноС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅. Π’ data plane ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ Π΄ΠΎΡΡ‚ΠΎΠΉΠ½ΡƒΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈ большой запас ΠΏΠΎ рСсурсам: оказалось ΠΎΡ‡Π΅Π½ΡŒ нСпросто ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ стСнд, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΡƒΠΏΠ΅Ρ€Π΅Ρ‚ΡŒΡΡ Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ VPP, Π° Π½Π΅ ΠΆΠ΅Π»Π΅Π·Π½ΠΎΠΉ сСтСвой ΠΊΠ°Ρ€Ρ‚Ρ‹.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ

Π§Ρ‚ΠΎ сработало Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΎ? Π’ Go ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ автоматичСскоС, Π½ΠΎ ΡƒΡ‚Π΅Ρ‡ΠΊΠΈ памяти всё ΠΆΠ΅ Π±Ρ‹Π²Π°ΡŽΡ‚. Π‘Π°ΠΌΡ‹ΠΉ простой способ ΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒΡΡ с Π½ΠΈΠΌΠΈ β€” Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹ ΠΈ Π½Π΅ Π·Π°Π±Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΡ… Π·Π°Π²Π΅Ρ€ΡˆΠ°Ρ‚ΡŒ. Π’Ρ‹Π²ΠΎΠ΄: слСдитС Π·Π° ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ΠΌ памяти Go-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. Часто Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΌ ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ являСтся количСство Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½. Π’ этой истории Π΅ΡΡ‚ΡŒ ΠΈ плюс: Π² Go Π»Π΅Π³ΠΊΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎ runtime β€” ΠΏΠΎ ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΡŽ памяти, ΠΏΠΎ количСству Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Ρ… Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½ ΠΈ ΠΏΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠΌ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌ.

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Go β€” Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½Π΅ Π»ΡƒΡ‡ΡˆΠΈΠΉ Π²Ρ‹Π±ΠΎΡ€ для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… тСстов. Они довольно многословныС, ΠΈ стандартный ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Β«Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ всё Π² CI ΠΏΠ°Ρ‡ΠΊΠΎΠΉΒ» для Π½ΠΈΡ… Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚. Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ тСсты Π±ΠΎΠ»Π΅Π΅ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ ΠΊ рСсурсам, с Π½ΠΈΠΌΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ настоящиС Ρ‚Π°ΠΉΠΌΠ°ΡƒΡ‚Ρ‹. Из-Π·Π° этого тСсты ΠΌΠΎΠ³ΡƒΡ‚ Π·Π°Π²Π΅Ρ€ΡˆΠ°Ρ‚ΡŒΡΡ Π½Π΅ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ CPU занят ΡŽΠ½ΠΈΡ‚-тСстами. Π’Ρ‹Π²ΠΎΠ΄: ΠΏΠΎ возмоТности выполняйтС «тяТёлыС» тСсты ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ‚ ΡŽΠ½ΠΈΡ‚-тСстов.Β 

ΠœΠΈΠΊΡ€ΠΎΡΠ΅Ρ€Π²ΠΈΡΠ½Π°Ρ событийная Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° слоТнСС ΠΌΠΎΠ½ΠΎΠ»ΠΈΡ‚Π°: Π³Ρ€Π΅ΠΏΠ°Ρ‚ΡŒ Π»ΠΎΠ³ΠΈ Π½Π° дСсятках Ρ€Π°Π·Π½Ρ‹Ρ… машин Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π½ΠΎ. Π’Ρ‹Π²ΠΎΠ΄: Ссли Π΄Π΅Π»Π°Π΅Ρ‚Π΅ микросСрвисы, сразу Π΄ΡƒΠΌΠ°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎ трСйсинг.

Наши ΠΏΠ»Π°Π½Ρ‹

ΠœΡ‹ запустим Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ балансировщик, IPv6-балансировщик, Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ сцСнариСв Kubernetes, Π±ΡƒΠ΄Π΅ΠΌ ΠΈ дальшС ΡˆΠ°Ρ€Π΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ наши сСрвисы (сСйчас ΡˆΠ°Ρ€Π΄ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ healthcheck-node ΠΈ healthcheck-ctrl), Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π½ΠΎΠ²Ρ‹Π΅ healthchecks, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌ ΡƒΠΌΠ½ΡƒΡŽ Π°Π³Ρ€Π΅Π³Π°Ρ†ΠΈΡŽ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ. ΠœΡ‹ рассматриваСм Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ наши сСрвисы Π΅Ρ‰Ρ‘ Π±ΠΎΠ»Π΅Π΅ нСзависимыми β€” Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΈ ΠΎΠ±Ρ‰Π°Π»ΠΈΡΡŒ Π½Π΅ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΌΠ΅ΠΆΠ΄Ρƒ собой, Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ сообщСний. Π’ ОблакС Π½Π΅Π΄Π°Π²Π½ΠΎ появился SQS-совмСстимый сСрвис Yandex Message Queue.

НСдавно состоялся ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΉ Ρ€Π΅Π»ΠΈΠ· Yandex Load Balancer. Π˜Π·ΡƒΡ‡Π°ΠΉΡ‚Π΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ ΠΊ сСрвису, управляйтС балансировщиками ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌ Π²Π°ΠΌ способом ΠΈ ΠΏΠΎΠ²Ρ‹ΡˆΠ°ΠΉΡ‚Π΅ ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ своих ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ²!

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