ΠžΠ±Ρ‰ΠΈΠΉ ΠΎΠ±Π·ΠΎΡ€ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ сСрвиса для ΠΎΡ†Π΅Π½ΠΊΠΈ Π²Π½Π΅ΡˆΠ½ΠΎΡΡ‚ΠΈ Π½Π° основС Π½Π΅ΠΉΡ€ΠΎΠ½Π½Ρ‹Ρ… сСтСй

ΠžΠ±Ρ‰ΠΈΠΉ ΠΎΠ±Π·ΠΎΡ€ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ сСрвиса для ΠΎΡ†Π΅Π½ΠΊΠΈ Π²Π½Π΅ΡˆΠ½ΠΎΡΡ‚ΠΈ Π½Π° основС Π½Π΅ΠΉΡ€ΠΎΠ½Π½Ρ‹Ρ… сСтСй

ВступлСниС

ΠŸΡ€ΠΈΠ²Π΅Ρ‚!

Π’ Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ я подСлюсь ΠΎΠΏΡ‹Ρ‚ΠΎΠΌ построСния микросСрвисной Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ для ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅Π³ΠΎ Π½Π΅ΠΉΡ€ΠΎΠ½Π½Ρ‹Π΅ сСти.

ΠŸΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ трСбованиях ΠΊ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅, посмотрим Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ структурныС Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹, Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Π³ΠΎΡ‚ΠΎΠ²ΠΎΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΡ†Π΅Π½ΠΈΠΌ тСхничСскиС ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ.

ΠŸΡ€ΠΈΡΡ‚Π½ΠΎΠ³ΠΎ чтСния!

ΠŸΠ°Ρ€Ρƒ слов ΠΎ Π·Π°Π΄Π°Ρ‡Π΅ ΠΈ Π΅Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΈ

Основная идСя – Π½Π° основС Ρ„ΠΎΡ‚ΠΎ Π΄Π°Ρ‚ΡŒ ΠΎΡ†Π΅Π½ΠΊΡƒ ΠΏΡ€ΠΈΠ²Π»Π΅ΠΊΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ° ΠΏΠΎ Π΄Π΅ΡΡΡ‚ΠΈΠ±Π°Π»Π»ΡŒΠ½ΠΎΠΉ шкалС.

Π’ Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ ΠΎΡ‚ΠΎΠΉΠ΄Π΅ΠΌ ΠΎΡ‚ описания ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π½Π΅ΠΉΡ€ΠΎΠ½Π½Ρ‹Ρ… сСтСй, Ρ‚Π°ΠΊ ΠΈ процСсса ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, обучСния. Однако, Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΉ, ΠΌΡ‹ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ вСрнСмся ΠΊ Ρ€Π°Π·Π±ΠΎΡ€Ρƒ ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½Π° ΠΎΡ†Π΅Π½ΠΊΠΈ Π½Π° ΡƒΠ³Π»ΡƒΠ±Π»Π΅Π½Π½ΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅.

БСйчас ΠΆΠ΅ ΠΌΡ‹ Π²Π΅Ρ€Ρ…Π½Π΅ΡƒΡ€ΠΎΠ²Π½Π΅Π²ΠΎ пройдСмся ΠΏΠΎ ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½Ρƒ ΠΎΡ†Π΅Π½ΠΊΠΈ, Π° ΡƒΠΏΠΎΡ€ сдСлаСм Π½Π° взаимодСйствиС микросСрвисов Π² контСкстС ΠΎΠ±Ρ‰Π΅ΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.Β 

ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ Π½Π°Π΄ ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ΠΎΠΌ ΠΎΡ†Π΅Π½ΠΊΠΈ ΠΏΡ€ΠΈΠ²Π»Π΅ΠΊΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Π·Π°Π΄Π°Ρ‡Π° Π±Ρ‹Π»Π° Π΄Π΅ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π° Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅:

  1. Π’Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π»ΠΈΡ† Π½Π° Ρ„ΠΎΡ‚ΠΎ
  2. ΠžΡ†Π΅Π½ΠΊΠ° ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· Π»ΠΈΡ†
  3. Π Π΅Π½Π΄Π΅Ρ€ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°

ΠŸΠ΅Ρ€Π²ΠΎΠ΅ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ силами ΠΏΡ€Π΅Π΄ΠΎΠ±ΡƒΡ‡Π΅Π½Π½ΠΎΠΉ MTCNN. Для Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ Π±Ρ‹Π»Π° ΠΎΠ±ΡƒΡ‡Π΅Π½Π° свСрточная Π½Π΅ΠΉΡ€ΠΎΡΠ΅Ρ‚ΡŒ Π½Π° PyTorch, Π² качСствС backbone Π±Ρ‹Π» использован ResNet34 – ΠΈΠ· баланса «качСство / ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ инфСрСнса Π½Π° CPUΒ»

ΠžΠ±Ρ‰ΠΈΠΉ ΠΎΠ±Π·ΠΎΡ€ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ сСрвиса для ΠΎΡ†Π΅Π½ΠΊΠΈ Π²Π½Π΅ΡˆΠ½ΠΎΡΡ‚ΠΈ Π½Π° основС Π½Π΅ΠΉΡ€ΠΎΠ½Π½Ρ‹Ρ… сСтСй

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Π°Ρ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½Π° ΠΎΡ†Π΅Π½ΠΊΠΈ

Анализ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ ΠΊ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°

Π’ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠΌ Ρ†ΠΈΠΊΠ»Π΅ ML ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° этапы Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π°Π΄ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€ΠΎΠΉ ΠΈ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ развСртывания ΠΌΠΎΠ΄Π΅Π»ΠΈ, Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ, ΠΎΠ΄Π½ΠΈ ΠΈΠ· самых Π·Π°Ρ‚Ρ€Π°Ρ‚Π½Ρ‹Ρ… ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ рСсурсам.

ΠžΠ±Ρ‰ΠΈΠΉ ΠΎΠ±Π·ΠΎΡ€ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ сСрвиса для ΠΎΡ†Π΅Π½ΠΊΠΈ Π²Π½Π΅ΡˆΠ½ΠΎΡΡ‚ΠΈ Π½Π° основС Π½Π΅ΠΉΡ€ΠΎΠ½Π½Ρ‹Ρ… сСтСй

Π–ΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» ML ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°

Π”Π°Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π½Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ – Π±Ρ‹Π»ΠΎ принято Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΎΠ±Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ ΠΎΡ†Π΅Π½ΠΊΠΈ Π² ΠΎΠ½Π»Π°ΠΉΠ½-сСрвис, для этого Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»ΠΎΡΡŒ ΠΏΠΎΠ³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒΡΡ Π² Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ. Π‘Ρ‹Π»ΠΈ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½Ρ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π±Π°Π·ΠΎΠ²Ρ‹Π΅ трСбования:

  1. Π•Π΄ΠΈΠ½ΠΎΠ΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π»ΠΎΠ³ΠΎΠ² – всС сСрвисы Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π»ΠΎΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎ мСсто, ΠΈΡ… Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ΄ΠΎΠ±Π½ΠΎ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ
  2. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ сСрвиса ΠΎΡ†Π΅Π½ΠΊΠΈ β€” ΠΊΠ°ΠΊ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ вСроятного Bottleneck
  3. На ΠΎΡ†Π΅Π½ΠΊΡƒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ изобраТСния Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΎ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ΅ ΠΊΠΎΠ»-Π²ΠΎ рСсурсов процСссора β€” Π²ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°Π½ΠΈΠ΅ выбросов Π² распрСдСлСнии Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° инфСрСнс
  4. БыстроС (ΠΏΠ΅Ρ€Π΅)Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ ΠΊΠ°ΠΊ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… сСрвисов, Ρ‚Π°ΠΊ ΠΈ стэка Π² Ρ†Π΅Π»ΠΎΠΌ
  5. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ, ΠΏΡ€ΠΈ нСобходимости, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² Ρ€Π°Π·Π½Ρ‹Ρ… сСрвисах ΠΎΠ±Ρ‰ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹

АрхитСктура

ПослС Π°Π½Π°Π»ΠΈΠ·Π° Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ стало ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ микросСрвисная Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° вписываСтся практичСски идСально.

Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π°Π²ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ лишнСй Π³ΠΎΠ»ΠΎΠ²Π½ΠΎΠΉ Π±ΠΎΠ»ΠΈ, Π² качСствС Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄Π° Π±Ρ‹Π» Π²Ρ‹Π±Ρ€Π°Π½ Telegram API.

Для Π½Π°Ρ‡Π°Π»Π° рассмотрим ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π½ΡƒΡŽ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡƒ Π³ΠΎΡ‚ΠΎΠ²ΠΎΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹, Π΄Π°Π»Π΅Π΅ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ ΠΊ описанию ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ„ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΡƒΠ΅ΠΌ процСсс ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ изобраТСния.

ΠžΠ±Ρ‰ΠΈΠΉ ΠΎΠ±Π·ΠΎΡ€ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ сСрвиса для ΠΎΡ†Π΅Π½ΠΊΠΈ Π²Π½Π΅ΡˆΠ½ΠΎΡΡ‚ΠΈ Π½Π° основС Π½Π΅ΠΉΡ€ΠΎΠ½Π½Ρ‹Ρ… сСтСй

Бтруктурная Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° Π³ΠΎΡ‚ΠΎΠ²ΠΎΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹

ΠŸΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ· ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹, ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡ΠΈΠΌ ΠΈΡ… Single Responsibility Π² процСссС ΠΎΡ†Π΅Π½ΠΊΠΈ изобраТСния.

ΠœΠΈΠΊΡ€ΠΎΡΠ΅Ρ€Π²ΠΈΡ Β«attrai-telegram-botΒ»

Π”Π°Π½Π½Ρ‹ΠΉ микросСрвис инкапсулируСт всС взаимодСйствия с Telegram API. МоТно Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ 2 основных сцСнария – Ρ€Π°Π±ΠΎΡ‚Π° с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΈ Ρ€Π°Π±ΠΎΡ‚Π° с Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½Π° ΠΎΡ†Π΅Π½ΠΊΠΈ. Π Π°Π·Π±Π΅Ρ€Π΅ΠΌ ΠΎΠ±Π° сцСнария Π² ΠΎΠ±Ρ‰Π΅ΠΌ Π²ΠΈΠ΄Π΅.

ΠŸΡ€ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ сообщСния с ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ:

  1. ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡΡ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ, состоящая ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ:
    • Наличия ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° изобраТСния
    • ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, ΡƒΠΆΠ΅ находящихся Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ
  2. ΠŸΡ€ΠΈ ΠΏΡ€ΠΎΡ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠΈ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠΉ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ сохраняСтся Π² docker volume
  3. Π’ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ β€œto_estimate” ΠΏΡ€ΠΎΠ΄ΡŒΡŽΡΠΈΡ‚ΡΡ таска, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ, Π² Ρ‚ΠΎΠΌ числС, Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΡƒΡ‚ΡŒ Π΄ΠΎ изобраТСния, Π»Π΅ΠΆΠ°Ρ‰Π΅Π³ΠΎ Π² нашСм volume
  4. Если Π²Ρ‹ΡˆΠ΅ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»Π΅Π½Π½Ρ‹Π΅ этапы ΠΏΡ€ΠΎΠΉΠ΄Π΅Π½Ρ‹ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ – ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ сообщСниС с ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½Ρ‹ΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ изобраТСния, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ рассчитываСтся Π½Π° основС количСства тасков Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ. Π’ случаС ошибки ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ явным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΎΠ± этом ΠΎΠΏΠΎΠ²Π΅Ρ‰Π΅Π½ – ΠΏΡƒΡ‚Π΅ΠΌ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ сообщСния с ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠ³Π»ΠΎ ΠΏΠΎΠΉΡ‚ΠΈ Π½Π΅ Ρ‚Π°ΠΊ.

Π’Π°ΠΊΠΆΠ΅, Π΄Π°Π½Π½Ρ‹ΠΉ микросСрвис, ΠΊΠ°ΠΊ celery worker, ΡΠ»ΡƒΡˆΠ°Π΅Ρ‚ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Β«after_estimateΒ», которая прСдназначаСтся для тасков, ΠΏΡ€ΠΎΡˆΠ΅Π΄ΡˆΠΈΡ… Ρ‡Π΅Ρ€Π΅Π· ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ ΠΎΡ†Π΅Π½ΠΊΠΈ.

ΠŸΡ€ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ Π½ΠΎΠ²ΠΎΠΉ таски ΠΈΠ· β€œafter_estimate”:

  1. Если ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½ΠΎ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ – отправляСм Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ, Ссли Π½Π΅Ρ‚ – ΠΎΠΏΠΎΠ²Π΅Ρ‰Π°Π΅ΠΌ ΠΎΠ± ошибкС
  2. УдаляСм ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΡΠ²Π»ΡΡŽΡ‰Π΅Π΅ΡΡ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½Π° ΠΎΡ†Π΅Π½ΠΊΠΈ

ΠœΠΈΠΊΡ€ΠΎΡΠ΅Ρ€Π²ΠΈΡ ΠΎΡ†Π΅Π½ΠΊΠΈ Β«attrai-estimatorΒ»

Π”Π°Π½Π½Ρ‹ΠΉ микросСрвис являСтся celery worker ΠΈ инкапсулируСт Π² сСбС всё, Ρ‡Ρ‚ΠΎ связано с ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ΠΎΠΌ ΠΎΡ†Π΅Π½ΠΊΠΈ изобраТСния. Алгоритм Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ‚ΡƒΡ‚ ΠΎΠ΄ΠΈΠ½ – Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ Π΅Π³ΠΎ.

ΠŸΡ€ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ Π½ΠΎΠ²ΠΎΠΉ таски ΠΈΠ· β€œto_estimate”:

  1. ΠŸΡ€ΠΎΠ³ΠΎΠ½ΡΠ΅ΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Ρ‡Π΅Ρ€Π΅Π· ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ ΠΎΡ†Π΅Π½ΠΊΠΈ:
    1. Π—Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ
    2. ΠŸΡ€ΠΈΠ²ΠΎΠ΄ΠΈΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΊ Π½ΡƒΠΆΠ½ΠΎΠΌΡƒ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρƒ
    3. Находим всС Π»ΠΈΡ†Π° (MTCNN)
    4. ΠžΡ†Π΅Π½ΠΈΠ²Π°Π΅ΠΌ всС Π»ΠΈΡ†Π° (ΠΎΠ±ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π΅ΠΌ Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹Π΅ Π² ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΌ ΠΏΡƒΠ½ΠΊΡ‚Π΅ Π»ΠΈΡ†Π° Π² Π±Π°Ρ‚Ρ‡ ΠΈ инфСрСнсим ResNet34)
    5. Π Π΅Π½Π΄Π΅Ρ€ΠΈΠΌ ΠΈΡ‚ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ
      1. ΠžΡ‚Ρ€ΠΈΡΠΎΠ²Π°Π΅ΠΌ bounding boxes
      2. ΠžΡ‚Ρ€ΠΈΡΠΎΠ²Ρ‹Π²Π°Π΅ΠΌ ΠΎΡ†Π΅Π½ΠΊΠΈ
  2. УдаляСм ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ΅ (исходноС) ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅
  3. БохраняСм Π²Ρ‹Ρ…ΠΎΠ΄ с ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½Π° ΠΎΡ†Π΅Π½ΠΊΠΈ
  4. КладСм таску Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ β€œafter_estimate”, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΡΠ»ΡƒΡˆΠ°Π΅Ρ‚ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ микросСрвис β€œattrai-telegram-bot”

Graylog (+ mongoDB + Elasticsearch)

Graylog β€” это Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ для Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ управлСния Π»ΠΎΠ³Π°ΠΌΠΈ. Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅, ΠΎΠ½ использовался ΠΏΠΎ своСму прямому Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ.

Π’Ρ‹Π±ΠΎΡ€ ΠΏΠ°Π» ΠΈΠΌΠ΅Π½Π½ΠΎ Π½Π° Π½Π΅Π³ΠΎ, Π° Π½Π΅ Π½Π° ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½Ρ‹ΠΉ всСм ELK стэк, ΠΏΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ удобства Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π½ΠΈΠΌ ΠΈΠ· ΠΏΠΎΠ΄ Python. ВсС, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ для логирования Π² Graylog, это Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ GELFTCPHandler ΠΈΠ· ΠΏΠ°ΠΊΠ΅Ρ‚Π° graypy ΠΊ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹ΠΌ root logger handlers нашСго python-микросСрвиса.

Π―, ΠΊΠ°ΠΊ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎ этого Ρ€Π°Π±ΠΎΡ‚Π°Π» Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с ELK стэком, Π² Ρ†Π΅Π»ΠΎΠΌ, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» ΠΏΠΎΠ·ΠΈΡ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΎΠΏΡ‹Ρ‚ Π²ΠΎ врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Graylog. ЕдинствСнноС, Ρ‡Ρ‚ΠΎ ΡƒΠ΄Ρ€ΡƒΡ‡Π°Π΅Ρ‚ – прСвосходство ΠΏΠΎ Ρ„ΠΈΡ‡Π°ΠΌ Kibana Π½Π°Π΄ Π²Π΅Π±-интСрфСйсом Graylog.

RabbitMQ

RabbitMQ β€” это Π±Ρ€ΠΎΠΊΠ΅Ρ€ сообщСний Π½Π° основС ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° AMQP.

Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ ΠΎΠ½ использовался ΠΊΠ°ΠΊ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π½Ρ‹ΠΉ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ Π±Ρ€ΠΎΠΊΠ΅Ρ€ для Celery ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π» Π² durable Ρ€Π΅ΠΆΠΈΠΌΠ΅.

Redis

Redis β€” это NoSQL Π‘Π£Π‘Π”, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π°Ρ со структурами Π΄Π°Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠ° Β«ΠΊΠ»ΡŽΡ‡ β€” Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅Β»

Иногда Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² Ρ€Π°Π·Π½Ρ‹Ρ… python-микросСрвисах ΠΎΠ±Ρ‰ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ структуры Π΄Π°Π½Π½Ρ‹Ρ….

НапримСр, Π² Redis хранится hashmap Π²ΠΈΠ΄Π° Β«telegram_user_id => количСство Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… тасок Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈΒ», Ρ‡Ρ‚ΠΎ позволяСт ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ количСство запросов ΠΎΡ‚ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΈ, Ρ‚Π΅ΠΌ самым, ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ DoS-Π°Ρ‚Π°ΠΊΠΈ.

Π€ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΡƒΠ΅ΠΌ процСсс ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ изобраТСния

  1. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ отправляСт ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Telegram Π±ΠΎΡ‚Π°
  2. Β«attrai-telegram-botΒ» ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ сообщСниС ΠΎΡ‚ Telegram API ΠΈ Ρ€Π°Π·Π±ΠΈΡ€Π°Π΅Ρ‚ Π΅Π³ΠΎ
  3. Васк с ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ добавляСтся Π² Π°ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Β«to_estimateΒ»
  4. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ сообщСниС с ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ ΠΎΡ†Π΅Π½ΠΊΠΈ
  5. Β«attrai-estimatorΒ» Π±Π΅Ρ€Π΅Ρ‚ таск ΠΈΠ· ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ Β«to_estimateΒ», прогоняСт Ρ‡Π΅Ρ€Π΅Π· ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ ΠΎΡ†Π΅Π½ΠΊΠΈ ΠΈ ΠΏΡ€ΠΎΠ΄ΡŒΡŽΡΠΈΡ‚ таск Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Β«after_estimateΒ»
  6. Β«attrai-telegram-botΒ», ΡΠ»ΡƒΡˆΠ°ΡŽΡ‰ΠΈΠΉ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Β«after_estimateΒ», отправляСт Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ

DevOps

НаконСц, послС ΠΎΠ±Π·ΠΎΡ€Π° Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ интСрСсной части β€” DevOps

Docker Swarm

Β 

ΠžΠ±Ρ‰ΠΈΠΉ ΠΎΠ±Π·ΠΎΡ€ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ сСрвиса для ΠΎΡ†Π΅Π½ΠΊΠΈ Π²Π½Π΅ΡˆΠ½ΠΎΡΡ‚ΠΈ Π½Π° основС Π½Π΅ΠΉΡ€ΠΎΠ½Π½Ρ‹Ρ… сСтСй

Docker Swarm Β — систСма кластСризации, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π²Π½ΡƒΡ‚Ρ€ΠΈ Docker Engine ΠΈ доступСн ΠΈΠ· ΠΊΠΎΡ€ΠΎΠ±ΠΊΠΈ.

ΠŸΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ «роя», всС Π½ΠΎΠ΄Ρ‹ нашСго кластСра ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π° 2 Ρ‚ΠΈΠΏΠ° – worker ΠΈ manager. На ΠΌΠ°ΡˆΠΈΠ½Π°Ρ… ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Ρ€Π°Π·Π²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π³Ρ€ΡƒΠΏΠΏΡ‹ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² (стэки), ΠΌΠ°ΡˆΠΈΠ½Ρ‹ Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‚ Π·Π° скалированиС, балансировку ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ классныС Ρ„ΠΈΡ‡ΠΈ. ΠœΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Ρ‹ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΈ Π²ΠΎΡ€ΠΊΠ΅Ρ€Π°ΠΌΠΈ.

ΠžΠ±Ρ‰ΠΈΠΉ ΠΎΠ±Π·ΠΎΡ€ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ сСрвиса для ΠΎΡ†Π΅Π½ΠΊΠΈ Π²Π½Π΅ΡˆΠ½ΠΎΡΡ‚ΠΈ Π½Π° основС Π½Π΅ΠΉΡ€ΠΎΠ½Π½Ρ‹Ρ… сСтСй

ΠšΠ»Π°ΡΡ‚Π΅Ρ€ с ΠΎΠ΄Π½ΠΈΠΌ leader manager ΠΈ трСмя worker

Минимально Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ кластСра – 1 Π½ΠΎΠ΄Π°, СдинствСнная машина Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π²Ρ‹ΡΡ‚ΡƒΠΏΠ°Ρ‚ΡŒ ΠΊΠ°ΠΊ leader manager ΠΈ worker. Π˜ΡΡ…ΠΎΠ΄Ρ ΠΈΠ· Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ ΠΊ отказоустойчивости, Π±Ρ‹Π»ΠΎ принято Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π½ΠΎ этот ΠΏΠΎΠ΄Ρ…ΠΎΠ΄.

ЗабСгая Π²ΠΏΠ΅Ρ€Π΅Π΄, скаТу, Ρ‡Ρ‚ΠΎ с ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° ΠΏΠ΅Ρ€Π²ΠΎΠΉ production-поставки, которая Π±Ρ‹Π»Π° Π² сСрСдинС июня, ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, связанных с Π΄Π°Π½Π½ΠΎΠΉ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ кластСра, Π½Π΅ Π±Ρ‹Π»ΠΎ (Π½ΠΎ это Π½Π΅ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ подобная организация Ρ…ΠΎΡ‚ΡŒ сколько-Π½ΠΈΠ±ΡƒΠ΄ΡŒ допустима Π² Π»ΡŽΠ±Ρ‹Ρ… срСднС-ΠΊΡ€ΡƒΠΏΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ…, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°ΡŽΡ‚ΡΡ трСбования ΠΏΠΎ отказоустойчивости).

Docker Stack

Π’ Ρ€Π΅ΠΆΠΈΠΌΠ΅ «роя» Π·Π° Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ стэков (Π½Π°Π±ΠΎΡ€ΠΎΠ² docker services) ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ docker stack

Он ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ docker-compose ΠΊΠΎΠ½Ρ„ΠΈΠ³ΠΈ, позволяя Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ deploy ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹.Β Β 

НапримСр, ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π±Ρ‹Π»ΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Ρ‹ рСсурсы Π½Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· инстансов микросСрвиса ΠΎΡ†Π΅Π½ΠΊΠΈ (выдСляСм Π½Π° N инстансов N ядСр, Π² самом микросСрвисС ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Π΅ΠΌ ΠΊΠΎΠ»-Π²ΠΎ ядСр, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ΅ PyTorch`Π΅ΠΌ, ΠΎΠ΄Π½ΠΈΠΌ)

attrai_estimator:
Β Β image: 'erqups/attrai_estimator:1.2'
Β Β deploy:
Β Β Β Β replicas: 4
Β Β Β Β resources:
Β Β Β Β Β Β limits:
Β Β Β Β Β Β Β Β cpus: '4'
Β Β Β Β restart_policy:
Β Β Β Β Β Β condition: on-failure
      …

Π’Π°ΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Redis, RabbitMQ ΠΈ Graylog β€” stateful сСрвисы ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… Ρ‚Π°ΠΊ ΠΆΠ΅ просто, ΠΊΠ°ΠΊ Β«attrai-estimatorΒ», Π½Π΅ получится

ΠŸΡ€Π΅Π΄Π²Π΅Ρ‰Π°Ρ вопрос β€” ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π½Π΅ Kubernetes?

ΠšΠ°ΠΆΠ΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ использованиС Kubernetes Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… малСнького ΠΈ срСднСго Ρ€Π°Π·ΠΌΠ΅Ρ€Π° – ΠΎΠ²Π΅Ρ€Ρ…Π΅Π΄, вСсь Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΎΡ‚ Docker Swarm, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ довольно user friendly для оркСстратора ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ², Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π½ΠΈΠ·ΠΊΠΈΠΉ ΠΏΠΎΡ€ΠΎΠ³ вхоТдСния.

Π˜Π½Ρ„Ρ€Π°ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°

Π Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π»ΠΎΡΡŒ это всС Π½Π° VDS со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ характСристиками:

  • CPU: 4 ядра Intel® Xeon® Gold 5120 CPU @ 2.20GHz
  • RAM: 8 GB
  • SSD: 160 GB

ПослС локального Π½Π°Π³Ρ€ΡƒΠ·ΠΎΡ‡Π½ΠΎΠ³ΠΎ тСстирования, казалось, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ ΡΠ΅Ρ€ΡŒΠ΅Π·Π½ΠΎΠΌ Π½Π°ΠΏΠ»Ρ‹Π²Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ, Π΄Π°Π½Π½ΠΎΠΉ машинки Π±ΡƒΠ΄Π΅Ρ‚ Ρ…Π²Π°Ρ‚Π°Ρ‚ΡŒ Π²ΠΏΡ€ΠΈΡ‚Ρ‹ΠΊ.

Но, сразу послС дСплоя, я запостил ссылку Π½Π° ΠΎΠ΄Π½Ρƒ ΠΈΠ· самых популярных Π² БНГ ΠΈΠΌΠΈΠ΄ΠΆΠ±ΠΎΡ€Π΄ (Π°Π³Π°, Ρ‚Ρƒ ΡΠ°ΠΌΡƒΡŽ), послС Ρ‡Π΅Π³ΠΎ люди Π·Π°ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΠΎΠ²Π°Π»ΠΈΡΡŒ ΠΈ Π·Π° нСсколько часов сСрвис ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π» дСсятки тысяч ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ. ΠŸΡ€ΠΈ этом Π² ΠΏΠΈΠΊΠΎΠ²Ρ‹Π΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹ рСсурсы CPU ΠΈ RAM Π½Π΅ Π±Ρ‹Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ Π΄Π°ΠΆΠ΅ Π½Π°ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρƒ.

ΠžΠ±Ρ‰ΠΈΠΉ ΠΎΠ±Π·ΠΎΡ€ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ сСрвиса для ΠΎΡ†Π΅Π½ΠΊΠΈ Π²Π½Π΅ΡˆΠ½ΠΎΡΡ‚ΠΈ Π½Π° основС Π½Π΅ΠΉΡ€ΠΎΠ½Π½Ρ‹Ρ… сСтСй
ΠžΠ±Ρ‰ΠΈΠΉ ΠΎΠ±Π·ΠΎΡ€ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ сСрвиса для ΠΎΡ†Π΅Π½ΠΊΠΈ Π²Π½Π΅ΡˆΠ½ΠΎΡΡ‚ΠΈ Π½Π° основС Π½Π΅ΠΉΡ€ΠΎΠ½Π½Ρ‹Ρ… сСтСй

Π•Ρ‰Π΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ

ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΈ запросов Π½Π° ΠΎΡ†Π΅Π½ΠΊΡƒ, с ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° дСплоя, Π² зависимости ΠΎΡ‚ дня

ΠžΠ±Ρ‰ΠΈΠΉ ΠΎΠ±Π·ΠΎΡ€ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ сСрвиса для ΠΎΡ†Π΅Π½ΠΊΠΈ Π²Π½Π΅ΡˆΠ½ΠΎΡΡ‚ΠΈ Π½Π° основС Π½Π΅ΠΉΡ€ΠΎΠ½Π½Ρ‹Ρ… сСтСй

РаспрСдСлСниС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ инфСрСнса ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½Π° ΠΎΡ†Π΅Π½ΠΊΠΈ

ΠžΠ±Ρ‰ΠΈΠΉ ΠΎΠ±Π·ΠΎΡ€ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ сСрвиса для ΠΎΡ†Π΅Π½ΠΊΠΈ Π²Π½Π΅ΡˆΠ½ΠΎΡΡ‚ΠΈ Π½Π° основС Π½Π΅ΠΉΡ€ΠΎΠ½Π½Ρ‹Ρ… сСтСй

Π’Ρ‹Π²ΠΎΠ΄Ρ‹

Π Π΅Π·ΡŽΠΌΠΈΡ€ΡƒΡ, ΠΌΠΎΠ³Ρƒ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊ оркСстрации ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ сСбя ΠΎΠΏΡ€Π°Π²Π΄Π°Π»ΠΈ β€” Π΄Π°ΠΆΠ΅ Π² ΠΏΠΈΠΊΠΎΠ²Ρ‹Π΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹ Π½Π΅ Π±Ρ‹Π»ΠΎ ΠΏΠ°Π΄Π΅Π½ΠΈΠΉ ΠΈ просСданий ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.Β 

Π”ΡƒΠΌΠ°ΡŽ, ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ малСнького ΠΈ срСднСго Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅ Π² своСм процСссС Ρ€Π΅Π°Π»Ρ‚Π°ΠΉΠΌ инфСрСнс Π½Π΅ΠΉΡ€ΠΎΠ½Π½Ρ‹Ρ… сСтСй Π½Π° CPU, ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠ΅Ρ€Π΅Π½ΡΡ‚ΡŒ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ, описанныС Π² Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅.

Π”ΠΎΠ±Π°Π²Π»ΡŽ, Ρ‡Ρ‚ΠΎ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ ΡΡ‚Π°Ρ‚ΡŒΡ Π±Ρ‹Π»Π° большС, Π½ΠΎ, Π΄Π°Π±Ρ‹ Π½Π΅ ΠΏΠΎΡΡ‚ΠΈΡ‚ΡŒ Π»ΠΎΠ½Π³Ρ€ΠΈΠ΄, Ρ€Π΅ΡˆΠΈΠ» Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹ Π² Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ β€” вСрнСмся ΠΊ Π½ΠΈΠΌ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… публикациях.

ΠŸΠΎΡ‚Ρ‹ΠΊΠ°Ρ‚ΡŒ Π±ΠΎΡ‚Π° ΠΌΠΎΠΆΠ½ΠΎ Π² Telegram β€” @AttraiBot, Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π±ΡƒΠ΄Π΅Ρ‚, ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ, Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° осСни 2020 Π³ΠΎΠ΄Π°. Напомню β€” Π½ΠΈΠΊΠ°ΠΊΠΈΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ Π½Π΅ хранятся β€” Π½ΠΈ исходныС изобраТСния, Π½ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½Π° ΠΎΡ†Π΅Π½ΠΊΠΈ β€” всС сносится послС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

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