Как стать автором
Обновить

Развернули распознавание лиц и хранилище видео для 1500 организаций. Как так вышло?

Время на прочтение3 мин
Количество просмотров2.8K

Весной в Технократию пришла задача: есть 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 сервера: она работает куда стабильнее. 

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

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


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

Теги:
Хабы:
Всего голосов 8: ↑2 и ↓6-3
Комментарии5

Публикации

Истории

Работа

Ближайшие события

19 августа – 20 октября
RuCode.Финал. Чемпионат по алгоритмическому программированию и ИИ
МоскваНижний НовгородЕкатеринбургСтавропольНовосибрискКалининградПермьВладивостокЧитаКраснорскТомскИжевскПетрозаводскКазаньКурскТюменьВолгоградУфаМурманскБишкекСочиУльяновскСаратовИркутскДолгопрудныйОнлайн
3 – 18 октября
Kokoc Hackathon 2024
Онлайн
24 – 25 октября
One Day Offer для AQA Engineer и Developers
Онлайн
25 октября
Конференция по росту продуктов EGC’24
МоскваОнлайн
7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн
7 – 8 ноября
Конференция «Матемаркетинг»
МоскваОнлайн
15 – 16 ноября
IT-конференция Merge Skolkovo
Москва
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань