Весной в Технократию пришла задача: есть 1500 организаций по всей России, каждая должна уметь автоматически отслеживать активность пользователей. Организации присылают видео со своих офлайн-площадок, а дальше дело за нами: принять, валидировать, вытащить нужные данные. Так начиналась эта история. Меня зовут Руслан Абдуллаев, я DevOps в Технократии, и сейчас расскажу, что мы с этим делали.

Инструменты

Первым делом проспойлерим технологии этого проекта — дань уважения самым нетерпеливым. Для обработки видео остановились на продуктах Visionlabs, а именно Luna Platform и Facestream. Тут обязательно наличие CentOS на серверах и AVX2 инструкций процессора. Система хранения данных — облачное хранилище от Selectel. Ну и весь наш бекенд на питоне. Связка оказалась рабочей, так что переходим к подробностям.

Система хранения 

Клубок начали разматывать со стороны организаций. Решили, что им для  загрузки видео подойдет FTP — это просто, и с большой долей вероятности каждая из 1500 организаций найдет себе разбирающегося специалиста для настройки. 

Но удобно должно быть и нам,  а FTP — не лучший вариант для нашего бэкэнда. То ли дело какой-нибудь S3. Тогда мы подумали: хорошо бы найти систему, которая комбинирует оба способа. И такая система нашлась — облачное хранилища от Selectel.

Пришли к выводу, что оптимально заводить один облачный контейнер на каждую организацию, присваивать ей уникальный логин и пароль с доступом для загрузки в свой контейнер. Также назначили суперюзера, которого дали нашему бекэнду для доступа по S3 во все контейнеры.

Осталось всего ничего: завести 1500 контейнеров, прописать 1500 пользователей с правами. Звучит не очень весело, но делать это руками конечно же мы не будем. Раскурили API селектела и проработали структуру вложенных папок-контейнеров. На этой основе написали скрипт. 

Фактически мы вытащили id всех организаций из базы и обычным циклом прошлись по ним, создавая облачные контейнеры и их структуру. Очень удобно. Стоит уточнить, что у селектела есть ограничение на 2000 контейнеров, но поддержка идет на встречу и готова расширить лимит.

Дальше мы описали систему аналитикам, а они написали нужные инструкции уже для организаций. По ним любой человек с минимальными знаниями сможет работать с системой. 

Сейчас мы получаем 200-300 ГБ данных в день.

Система обработки видео

Со стороны архитектуры внедрение Luna Platform и Facestream довольно простая задача. Поэтому я опишу схему работы всей нашей системы.

Для начала на основе документации и наших тестов этих продуктов мы рассчитали мощности серверов, которые будут быстро обрабатывать данные. Для Luna Platform взяли рекомендованную вендором конфигурацию: 8 ядер, 32 Гб оперативки и 400 Гб быстрого SSD, чтобы выдержать частые обращения к базе. 

А вот с Facestream пришлось подумать, потому что основная нагрузка по обработке приходится именно на него. При этом важно, чтобы обработка не затягивалась по времени. Выход — обрабатывать несколько видео параллельно. 

Провели тесты и выяснили: для параллельной обработки 20 видео нужно 24 ядра и 36 Гб оперативной памяти. Этого вполне хватает, чтобы обрабатывать все полученные видео в течение дня. Нам этого достаточно.

ВАЖНО! Не забываем уточнять у хостера модель процессора: без AVX2 инструкций ничего работать не будет. Они сейчас есть почти везде, но уточнить надо. И обязательно берем CentOS.

Подняли сервера и накатили туда эти продукты. Задача тривиальная. Главный совет —  грамотно рассчитать мощность для параллельной обработки. После осталось подружить наш основной бекэнд со всеми этими облаками и обработчиками видео. 

Для этого написали микросервис, который предоставляет собой довольно высокоуровневую абстракцию над Luna Platform и Facestream. По сути это апишка, в которую удобно закидывать задачи на обработку данных нужным нам образом. Добавили в шедулер основного бэкэнда таску, которая обходит данные в облаке и отсылает новые в написанный  микросервис.

Примерная схема того, как все это работает
Примерная схема того, как все это работает

Кстати, недавно столкнулись с проблемой: Facestream потребляет больше трафика, чем ожидалось. Изначально предполагали, что количество трафика будет сопоставимо количеству данных, которые хранятся в контейнерах Но в один из дней Facestream неожиданно потребил в 3 раза больше, чем мы ожидали. Это было странно и причину мы пока до конца не выяснили. 

Какие советы мы можем дать? 

  •  Используйте лицензии на основе доменного имени машины, а не fingerprint сервера: она работает куда стабильнее. 

  • При закладывании бюджета на хранилище селектела учитывайте стоимость трафика. Не всегда трафик равен количеству данных.

  • Про мониторинг и бекапы думаю и говорить нечего.


Также подписывайтесь на наш телеграм-канал «Голос Технократии». Каждое утро мы публикуем новостной дайджест из мира ИТ, а по вечерам делимся интересными и полезными мастридами.

Комментарии (5)


  1. Daar
    02.12.2021 18:48

    Сейчас мы получаем 200-300 ГБ данных в день.

    Это со всех 1500 организаций??? Это где-то по 200Мб на нос, как-то маловато для видео. Или на точке 1 камера с частотой 5 кадров в секунду? И думаю врядли она лица выдергивает из кадра 320х240.

    И обязательно берем CentOS.

    А какая причина? На других тестировали?

    И если не такая страшная тайна, то сколько вы заплатили за лицензии? Хотя бы грубые цифры, порядок цен что бы понимать.


    1. technokratiya Автор
      03.12.2021 09:20

      Отвечает автор:

      Все организации шлют нам данные не синхронно, то есть за день нам могут прийти данные и от 10 и от 500 организаций. Средний размер видео это 2-3гб. Что связанно с CentOS, хоть сама Luna и поставляется в докере, но Visionlabs предоставляет свои бинарники и скрипты развертывания и обслуживания написанные под CentOS. Так же они поставляют свои пакеты, нужные для работы системы в виде rpm.

      По ценам не можем сориентировать, к сожалению :(


    1. SkeelzyDarko
      03.12.2021 09:57
      +1

      EOL CentOS - 31 декабря.

      Пора латать дыры.


  1. theurs
    03.12.2021 07:08

    остановите землю, я не хочу жить на одной планете с веб макаками и дево псами


  1. DeeZ
    05.12.2021 20:29
    +1

    Извините, а о чем статья?

    Смогу я развернуть такую же систему по вашей статье? нет.

    Есть ли какие то аргументированные советы? нет. Обязательно берите центось.

    Зачем 1500 контейнеров? почему нельзя использовать 1?

    Что такое Facestream? я так понял какой то продукт сторонний?

    Какой результат получили? что дало\что показало видео?

    Рассказ о том, что вы купили и установили какую то софтину, получается?