БистСма управлСния ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠ΅ΠΉ сСти Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ Qrator

БистСма управлСния ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠ΅ΠΉ сСти Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ Qrator

TL;DR: ОписаниС ΠΊΠ»ΠΈΠ΅Π½Ρ‚-сСрвСрной Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ нашСй Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ систСмы управлСния ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠ΅ΠΉ сСти, QControl. Π’ основС Π»Π΅ΠΆΠΈΡ‚ Π΄Π²ΡƒΡ…ΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹ΠΉ транспортный ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ», Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΉ с ΡƒΠΏΠ°ΠΊΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ Π² gzip сообщСниями Π±Π΅Π· дСкомпрСссии ΠΌΠ΅ΠΆΠ΄Ρƒ эндпойнтами. РаспрСдСлСнныС Ρ€ΠΎΡƒΡ‚Π΅Ρ€Ρ‹ ΠΈ эндпойнты ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ Π°ΠΏΠ΄Π΅ΠΉΡ‚Ρ‹, Π° сам ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» позволяСт установку Π»ΠΎΠΊΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Ρ… Ρ€Π΅Π»Π΅Π΅Π². БистСма построСна ΠΏΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ Π΄ΠΈΡ„Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ бэкапа (β€œrecent-stable”, ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ΡΡ Π½ΠΈΠΆΠ΅) ΠΈ задСйствуСт язык запросов JMESpath вмСстС с ΡˆΠ°Π±Π»ΠΎΠ½ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠΌ Jinja для Ρ€Π΅Π½Π΄Π΅Ρ€Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ².

Qrator Labs управляСт глобально распрСдСлСнной ΡΠ΅Ρ‚ΡŒΡŽ Π½Π΅ΠΉΡ‚Ρ€Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π°Ρ‚Π°ΠΊ. Наша ΡΠ΅Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ anycast, Π° подсСти Π°Π½ΠΎΠ½ΡΠΈΡ€ΡƒΡŽΡ‚ΡΡ посрСдством BGP. Π‘ΡƒΠ΄ΡƒΡ‡ΠΈ BGP anycast-ΡΠ΅Ρ‚ΡŒΡŽ, физичСски располоТСнной Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ€Π΅Π³ΠΈΠΎΠ½Π°Ρ… Π—Π΅ΠΌΠ»ΠΈ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΈ ΠΎΡ‚Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅Π»Π΅Π³ΠΈΡ‚ΠΈΠΌΠ½Ρ‹ΠΉ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ Π±Π»ΠΈΠΆΠ΅ ΠΊ ядру ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π° β€” Tier-1 ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°ΠΌ.

Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, Π±Ρ‹Ρ‚ΡŒ гСографичСски распрСдСлСнной ΡΠ΅Ρ‚ΡŒΡŽ нСпросто. ΠšΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρƒ сСтСвыми Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ присутствия критичСски Π²Π°ΠΆΠ½Π° для ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Π° услуг бСзопасности, для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΡƒΡŽ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ всСх ΡƒΠ·Π»ΠΎΠ² сСти, обновляя ΠΈΡ… своСврСмСнным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ с Ρ†Π΅Π»ΡŒΡŽ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ основной услуги для потрСбитСля Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π±Ρ‹Π»ΠΎ Π½Π°ΠΉΡ‚ΠΈ способ Π½Π°Π΄Π΅ΠΆΠ½ΠΎ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠ½Ρ‚ΠΈΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ.

Π’ Π½Π°Ρ‡Π°Π»Π΅ Π±Ρ‹Π»ΠΎ Π‘Π»ΠΎΠ²ΠΎ. Оно быстро стало ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΌ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠΌ, Π½ΡƒΠΆΠ΄Π°ΡŽΡ‰ΠΈΠΌΡΡ Π² Π°ΠΏΠ΄Π΅ΠΉΡ‚Π΅.


ΠšΡ€Π°Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½Ρ‹ΠΌ ΠΊΠ°ΠΌΠ½Π΅ΠΌ сущСствования QControl ΠΈ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ основной ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΎΠΉ Ρ‚Ρ€Π°Ρ‚Ρ‹ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ количСства Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ рСсурсов Π½Π° построСниС Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ€ΠΎΠ΄Π° ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° являСтся Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π΅Π΄ΠΈΠ½Ρ‹ΠΉ Π°Π²Ρ‚ΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π½Ρ‹ΠΉ источник ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΈ, Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ счСтС, ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с Π½ΠΈΠΌ наши Ρ‚ΠΎΡ‡ΠΊΠΈ присутствия. Π‘Π°ΠΌΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π±Ρ‹Π»ΠΎ лишь ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ Π² Ρ…ΠΎΠ΄Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ QControl. Помимо этого, Π½Π°ΠΌ Ρ‚Π°ΠΊΠΆΠ΅ Π±Ρ‹Π»ΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ с ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ ΠΈ ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌΠΈ сСрвисами Π½Π° Ρ‚ΠΎΡ‡ΠΊΠ°Ρ… присутствия (ВП), ΡƒΠΌΠ½Ρ‹Π΅ (ΠΈ настраиваСмыС) способы Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π°Π·Π³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ доступа. Помимо этого, ΠΌΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ Ρ…ΠΎΡ‚Π΅Π»ΠΈ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ систСмой с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄, Π° Π½Π΅ внСсСниСм ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΉ Π² Ρ„Π°ΠΉΠ»Ρ‹. Π”ΠΎ QControl, Π΄Π°Π½Π½Ρ‹Π΅ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΠ»ΠΈΡΡŒ Π½Π° Ρ‚ΠΎΡ‡ΠΊΠΈ присутствия практичСски Π² Ρ€ΡƒΡ‡Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅. Если ΠΎΠ΄Π½Π° ΠΈΠ· Ρ‚ΠΎΡ‡Π΅ΠΊ присутствия Π±Ρ‹Π»Π° нСдоступна, ΠΈ ΠΌΡ‹ Π·Π°Π±Ρ‹Π²Π°Π»ΠΈ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π΅Π΅ ΠΏΠΎΠ·ΠΆΠ΅, конфигурация ΠΎΠΊΠ°Π·Ρ‹Π²Π°Π»Π°ΡΡŒ рассинхронизированной β€” ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ врСмя Π½Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ Π΅Π΅ Π² строй.

Π’ ΠΈΡ‚ΠΎΠ³Π΅ ΠΌΡ‹ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π»ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ схСму:
БистСма управлСния ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠ΅ΠΉ сСти Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ Qrator
ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ сСрвСр отвСтствСнСн Π·Π° Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΡŽ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅, Ρƒ Ρ€ΠΎΡƒΡ‚Π΅Ρ€Π° Π΅ΡΡ‚ΡŒ нСсколько эндпойнтов, ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‰ΠΈΡ… ΠΈ Ρ‚Ρ€Π°Π½ΡΠ»ΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ Π°ΠΏΠ΄Π΅ΠΉΡ‚Ρ‹ ΠΎΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Π½Π° сСрвСр, Π° с сСрвСра Π½Π° Ρ‚ΠΎΡ‡ΠΊΠΈ присутствия.

ΠšΠ°Ρ‡Π΅ΡΡ‚Π²ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚-соСдинСния всС Π΅Ρ‰Π΅ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ различаСтся Π² Ρ€Π°Π·Π½Ρ‹Ρ… ΡƒΠ³ΠΎΠ»ΠΊΠ°Ρ… ΠΏΠ»Π°Π½Π΅Ρ‚Ρ‹ β€” для ΠΈΠ»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½ΠΎΠ³ΠΎ тСзиса, Π΄Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° простой MTR ΠΈΠ· ΠŸΡ€Π°Π³ΠΈ, ЧСшской РСспублики Π² Π‘ΠΈΠ½Π³Π°ΠΏΡƒΡ€ ΠΈ Π“ΠΎΠ½ΠΊΠΎΠ½Π³.

БистСма управлСния ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠ΅ΠΉ сСти Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ Qrator
MTR ΠΈΠ· ΠŸΡ€Π°Π³ΠΈ Π² Π‘ΠΈΠ½Π³Π°ΠΏΡƒΡ€

БистСма управлСния ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠ΅ΠΉ сСти Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ Qrator
Π’ΠΎ ΠΆΠ΅ самоС Π΄ΠΎ Π“ΠΎΠ½ΠΊΠΎΠ½Π³Π°

ВысокиС Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚ ΠΌΠ΅Π½ΡŒΡˆΡƒΡŽ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ. Помимо этого, Π΅ΡΡ‚ΡŒ потСря ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ². Π¨ΠΈΡ€ΠΈΠ½Π° ΠΊΠ°Π½Π°Π»ΠΎΠ² Π½Π΅ компСнсируСт эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, которая Π΄ΠΎΠ»ΠΆΠ½Π° всСгда ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒΡΡ Π²ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΏΡ€ΠΈ построСнии Π΄Π΅Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… систСм.

Полная конфигурация Ρ‚ΠΎΡ‡ΠΊΠΈ присутствия β€” это Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ объСм Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅Ρ€Π΅ΡΠ»Π°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΈΠΌ получатСлям ΠΏΠΎ Π½Π΅Π½Π°Π΄Π΅ΠΆΠ½Ρ‹ΠΌ соСдинСниям. К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, хотя конфигурация ΠΈ мСняСтся постоянно, это происходит нСбольшими порциями.

Π”ΠΈΠ·Π°ΠΉΠ½ recent-stable

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

Π’ ΠΈΡ‚ΠΎΠ³Π΅, ΠΌΡ‹ ΠΏΡ€ΠΈΡˆΠ»ΠΈ ΠΊ довольно интСрСсному Ρ€Π΅ΡˆΠ΅Π½ΠΈΡŽ β€” Ρƒ нас Π΅ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΎΠΏΠΎΡ€Π½Ρ‹ΠΉ слой, фиксированный, Π½Π°Π·ΠΎΠ²Π΅ΠΌ Π΅Π³ΠΎ stable, ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Π΄ΠΈΡ„Ρ„ для Π½Π΅Π³ΠΎ β€” recent. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ recent основан Π½Π° послСднСм сформированном stable ΠΈ являСтся достаточным для пСрСстроСния ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ свСТий recent Π΄ΠΎΠ΅Π·ΠΆΠ°Π΅Ρ‚ Π΄ΠΎ мСста назначСния, старый ΡƒΠΆΠ΅ Π½Π΅ Π½ΡƒΠΆΠ΅Π½.

ΠžΡΡ‚Π°Π΅Ρ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ врСмя ΠΎΡ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΡΠ²Π΅ΠΆΡƒΡŽ stable ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠ·-Π·Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ recent стал слишком большим. Π’Π°ΠΊΠΆΠ΅ Π²Π°ΠΆΠ½Ρ‹ΠΌ здСсь являСтся ΠΈ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ рассылаСм всС эти обновлСния Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ бродкаста/ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΊΠ°ΡΡ‚Π°, Π½Π΅ бСспокоясь ΠΎΠ± ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… получатСлях ΠΈ ΠΈΡ… способности ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ кусочки Π΄Π°Π½Π½Ρ‹Ρ… вмСстС. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΡ‹ ΡƒΠ±Π΅Π΄ΠΈΠ»ΠΈΡΡŒ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρƒ всСх находится ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΉ stable β€” ΠΌΡ‹ отправляСм Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½ΠΎΠ²Ρ‹Π΅ recent. Π‘Ρ‚ΠΎΠΈΡ‚ Π»ΠΈ ΡƒΡ‚ΠΎΡ‡Π½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚? Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. Stable ΠΊΡΡˆΠΈΡ€ΡƒΠ΅Ρ‚ΡΡ Π½Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΌ сСрвСрС ΠΈ получатСлях, recent создаСтся ΠΏΠΎ нСобходимости.

АрхитСктура Π΄Π²ΡƒΡ…ΡƒΡ€ΠΎΠ²Π½Π΅Π²ΠΎΠ³ΠΎ транспорта

ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΠΌΡ‹ построили наш транспорт Π½Π° Π΄Π²ΡƒΡ… уровнях? ΠžΡ‚Π²Π΅Ρ‚ достаточно прост β€” ΠΌΡ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ ΠΎΡ‚Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΎΡ‚ высокоуровнСвой Π»ΠΎΠ³ΠΈΠΊΠΈ, чСрпая Π²Π΄ΠΎΡ…Π½ΠΎΠ²Π΅Π½ΠΈΠ΅ Π² ΠΌΠΎΠ΄Π΅Π»ΠΈ OSI с Π΅Π΅ транспортным ΡƒΡ€ΠΎΠ²Π½Π΅ΠΌ ΠΈ ΡƒΡ€ΠΎΠ²Π½Π΅ΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. На Ρ€ΠΎΠ»ΡŒ транспортного ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° ΠΌΡ‹ взяли Thrift, Π° для высокоуровнСвого Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… сообщСний β€” Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ сСриализации msgpack. ИмСнно поэтому Ρ€ΠΎΡƒΡ‚Π΅Ρ€ (Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠΉ multicast/broadcast/relay) Π½Π΅ смотрит Π²Π½ΡƒΡ‚Ρ€ΡŒ msgpack, Π½Π΅ распаковываСт ΠΈ Π½Π΅ ΡƒΠΏΠ°ΠΊΠΎΠ²Ρ‹Π²Π°Π΅Ρ‚ содСрТимоС ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ ΠΈ выполняСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ пСрСсылку Π΄Π°Π½Π½Ρ‹Ρ….

Thrift (с Π°Π½Π³Π».β€‰β€”β€‰Β«Π±Π΅Ρ€Π΅ΠΆΠ»ΠΈΠ²ΠΎΡΡ‚ΡŒΒ», произносится ΠΊΠ°ΠΊ [ΞΈrift]) β€” язык описания интСрфСйсов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для опрСдСлСния ΠΈ создания слуТб ΠΏΠΎΠ΄ Ρ€Π°Π·Π½Ρ‹Π΅ языки программирования. ЯвляСтся Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠΌ ΠΊ ΡƒΠ΄Π°Π»Ρ‘Π½Π½ΠΎΠΌΡƒ Π²Ρ‹Π·ΠΎΠ²Ρƒ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ (RPC). Π‘ΠΎΡ‡Π΅Ρ‚Π°Π΅Ρ‚ Π² сСбС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ с Π΄Π²ΠΈΠΆΠΊΠΎΠΌ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π° для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ слуТб, Π² Ρ‚ΠΎΠΉ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ стСпСни эффСктивно ΠΈ Π»Π΅Π³ΠΊΠΎ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… ΠΌΠ΅ΠΆΠ΄Ρƒ языками.

ΠœΡ‹ взяли Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ Thrift ΠΈΠ·-Π·Π° RPC ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΌΠ½ΠΎΠ³ΠΈΡ… языков. Как ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ, Π»Π΅Π³ΠΊΠΈΠΌΠΈ частями стали ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΈ сСрвСр. Однако, Ρ€ΠΎΡƒΡ‚Π΅Ρ€ оказался ΠΊΡ€Π΅ΠΏΠΊΠΈΠΌ ΠΎΡ€Π΅ΡˆΠΊΠΎΠΌ, отчасти ΠΈΠ·-Π·Π° отсутствия Π³ΠΎΡ‚ΠΎΠ²ΠΎΠ³ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π²ΠΎ врСмя нашСй Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

БистСма управлСния ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠ΅ΠΉ сСти Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ QratorΠ‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΠΏΡ†ΠΈΠΈ, Ρ‚ΠΈΠΏΠ° protobuf / gRPC, ΠΎΠ΄Π½Π°ΠΊΠΎ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Π½Π°Ρ‡ΠΈΠ½Π°Π»ΠΈ наш ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, gRPC Π±Ρ‹Π» достаточно ΠΌΠΎΠ»ΠΎΠ΄Ρ‹ΠΌ ΠΈ ΠΌΡ‹ Π½Π΅ Ρ€Π΅ΡˆΠΈΠ»ΠΈΡΡŒ Π²Π·ΡΡ‚ΡŒ Π΅Π³ΠΎ Π½Π° Π±ΠΎΡ€Ρ‚.

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ (ΠΈ Π½Π° самом Π΄Π΅Π»Π΅, Ρ‚Π°ΠΊ ΠΈ стоило ΠΏΠΎΡΡ‚ΡƒΠΏΠΈΡ‚ΡŒ) ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ собствСнный вСлосипСд. Π‘Ρ‹Π»ΠΎ Π±Ρ‹ ΠΏΡ€ΠΎΡ‰Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚-сСрвСрная Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° являСтся ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ прямолинСйной Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Ρ€ΠΎΡƒΡ‚Π΅Ρ€ Π½Π° Thrift. Π’Π°ΠΊ ΠΈΠ»ΠΈ ΠΈΠ½Π°Ρ‡Π΅, ΠΊ самописным ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°ΠΌ ΠΈ рСализациям популярных Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ (Π½Π΅ зря) сущСствуСт Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎΠ΅ прСдвзятоС ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅, ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΏΡ€ΠΈ обсуТдСнии всСгда поднимаСтся вопрос: «А ΠΊΠ°ΠΊ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ это ΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ языки?Β». ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΡ‹ сразу ΠΆΠ΅ Π²Ρ‹ΠΊΠΈΠ½ΡƒΠ»ΠΈ ΠΈΠ΄Π΅ΠΈ ΠΎ вСлосипСдС.

Msgpack β€” Π°Π½Π°Π»ΠΎΠ³ JSON, Π½ΠΎ быстрСС ΠΈ мСньшС. Π­Ρ‚ΠΎ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ сСриализации Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΠΎΠ±ΠΌΠ΅Π½ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ мноТСством языков.

На ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ Ρƒ нас находится Thrift с ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠΉ Ρ€ΠΎΡƒΡ‚Π΅Ρ€Ρƒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ для пСрСсылки сообщСния. На Π²Ρ‚ΠΎΡ€ΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ β€” ΡƒΠΏΠ°ΠΊΠΎΠ²Π°Π½Π½Ρ‹Π΅ структуры msgpack.

ΠœΡ‹ Π²Ρ‹Π±Ρ€Π°Π»ΠΈ msgpack ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΎ быстрСС ΠΈ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Π΅Π΅ Π² сравнСнии с JSON. Но Ρ‡Ρ‚ΠΎ Π΅Ρ‰Π΅ Π²Π°ΠΆΠ½Π΅Π΅, ΠΎΠ½ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ кастомныС Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…, позволяя Π½Π°ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΡ€ΡƒΡ‚Ρ‹Π΅ Ρ„ΠΈΡ‡ΠΈ Ρ‚ΠΈΠΏΠ° ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ сырых Π±ΠΈΠ½Π°Ρ€Π½ΠΈΠΊΠΎΠ² ΠΈΠ»ΠΈ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‰ΠΈΡ… отсутствиС Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π²Π°ΠΆΠ½ΠΎ для нашСй схСмы β€œrecent-stable”.

JMESPath
JMESPath это язык запросов ΠΊ JSON.
ИмСнно Ρ‚Π°ΠΊ выглядит описаниС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΈΠ· ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ JMESPath, Π½ΠΎ Π½Π° самом Π΄Π΅Π»Π΅, ΠΎΠ½ Π΄Π°Π΅Ρ‚ Π³ΠΎΡ€Π°Π·Π΄ΠΎ большС. JMESPath позволяСт ΠΈΡΠΊΠ°Ρ‚ΡŒ ΠΈ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€Π΅Π²ΡŒΡ Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠΉ Π΄Ρ€Π΅Π²ΠΎΠ²ΠΈΠ΄Π½ΠΎΠΉ структурС, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ измСнСния ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ Π½Π° Π»Π΅Ρ‚Ρƒ. А Π΅Ρ‰Ρ‘ ΠΎΠ½ позволяСт Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹ ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ прСобразования Π΄Π°Π½Π½Ρ‹Ρ…. Π₯отя ΠΎΠ½, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ напряТСния Π³ΠΎΠ»ΠΎΠ²Π½ΠΎΠ³ΠΎ ΠΌΠΎΠ·Π³Π° для понимания.

Jinja
Для Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»Π΅ΠΉ, Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ Π² Ρ„Π°ΠΉΠ» β€” поэтому ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΡˆΠ°Π±Π»ΠΎΠ½Π½Ρ‹ΠΉ Π΄Π²ΠΈΠΆΠΎΠΊ ΠΈ Jinja являСтся ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹ΠΌ Π²Ρ‹Π±ΠΎΡ€ΠΎΠΌ. Π‘ Π΅Π΅ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΡ‹ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» ΠΈΠ· шаблона ΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… Π² Ρ‚ΠΎΡ‡ΠΊΠ΅ назначСния.

Для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ Ρ„Π°ΠΉΠ»Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Π½Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ запрос JMESPath, шаблон для мСстополоТСния Ρ„Π°ΠΉΠ»Π° Π² Π€Π‘, шаблон для самого ΠΊΠΎΠ½Ρ„ΠΈΠ³Π°. Π’Π°ΠΊΠΆΠ΅ Π½Π° этом этапС Π½Π΅ΠΏΠ»ΠΎΡ…ΠΎ ΡƒΡ‚ΠΎΡ‡Π½ΠΈΡ‚ΡŒ ΠΏΡ€Π°Π²Π° доступа ΠΊ Ρ„Π°ΠΉΠ»Ρƒ. ВсС это ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ ΡƒΠ΄Π°Ρ‡Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΡΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΎΠ΄Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ β€” ΠΏΠ΅Ρ€Π΅Π΄ Π½Π°Ρ‡Π°Π»ΠΎΠΌ шаблона ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΌΡ‹ ставим Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ YAML, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠ΅.

НапримСр:

---
selector: "[@][[email protected]._meta.version == `42`] | items([0].fft_config || `{}`)"
destination_filename: "fft/{{ match[0] }}.json"
file_mode: 0644
reload_daemons: [fft] ...
{{ dict(match[1]) | json(indent=2, sort_keys=True) }}

Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» для Π½ΠΎΠ²ΠΎΠ³ΠΎ сСрвиса ΠΌΡ‹ добавляСм Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½ΠΎΠ²Ρ‹ΠΉ Ρ„Π°ΠΉΠ» шаблона. НС Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ Π½ΠΈΠΊΠ°ΠΊΠΈΠ΅ измСнСния исходного ΠΊΠΎΠ΄Π° ΠΈΠ»ΠΈ ПО Π½Π° Ρ‚ΠΎΡ‡ΠΊΠ°Ρ… присутствия.

Π§Ρ‚ΠΎ измСнилось послС Π²Π²ΠΎΠ΄Π° QControl Π² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΡƒΡŽ Π΄Π΅ΡΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ? ΠŸΠ΅Ρ€Π²ΠΎΠ΅ ΠΈ самоС Π²Π°ΠΆΠ½ΠΎΠ΅ β€” согласованная ΠΈ надСТная доставка ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΏΠΎ всСм ΡƒΠ·Π»Π°ΠΌ сСти. Π’Ρ‚ΠΎΡ€ΠΎΠ΅ β€” ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΌΠΎΡ‰Π½ΠΎΠ³ΠΎ инструмСнта ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΈ внСсСния Π² Π½Π΅Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ нашСй ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ, Π° Ρ‚Π°ΠΊΠΆΠ΅ потрСбитСлями услуги.

ВсС это Π½Π°ΠΌ ΡƒΠ΄Π°Π»ΠΎΡΡŒ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ задСйствуя схСму ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ recent-stable для упрощСния ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΌ сСрвСром ΠΈ получатСлями ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π΄Π²ΡƒΡ…ΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹ΠΉ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ нСзависимого ΠΎΡ‚ содСрТимого способа ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. УспСшно ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π² основанный Π½Π° Jinja Π΄Π²ΠΈΠΆΠΎΠΊ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Π² Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ ΡΠ΅Ρ‚ΡŒ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ. Данная систСма ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΡˆΠΈΡ€ΠΎΠΊΠΈΠΉ Π½Π°Π±ΠΎΡ€ способов ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ для нашСй распрСдСлСнной ΠΈ Ρ€Π°Π·Π½ΠΎΡˆΠ΅Ρ€ΡΡ‚Π½ΠΎΠΉ ΠΏΠ΅Ρ€ΠΈΡ„Π΅Ρ€ΠΈΠΈ.

Π—Π° ΠΏΠΎΠΌΠΎΡ‰ΡŒ Π² написании ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π° спасибо VolanDamrod, serenheit, NoN.

Английская вСрсия поста.

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

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