Постановка проблемы
Контекст
Распознавание фотографий выполняется цепочкой из трех сервисов:
- RecognitionService — распознает лица через VkVision или Athlete
- TaggingService — создает задачи на авто- и ручное тегирование, управляет стратегиями обработки
- TagatorService — распределяет задачи ручного тегирования между тегаторами
В сезон обрабатываются сотни тысяч фотографий в неделю. Текущая архитектура приводит к избыточной сложности и операционным проблемам.
Проблемы текущей архитектуры
Сложность процесса обработки
- Длинная цепочка взаимодействий между сервисами
- Избыточные межсервисные вызовы
- Сложность отладки и мониторинга распределенного процесса
Дублирование данных
- Каждый сервис хранит копию фотографий и связанных данных
- Объемы данных многократно увеличиваются
- Необходима синхронизация данных между сервисами
Нагрузка на БД и инфраструктуру
- Избыточные чтения/записи из-за промежуточных статусов
- Создание Hangfire-задач на каждое фото нагружает Redis
- Высокая нагрузка на БД при синхронизации данных
Проблемы с изменением стратегии
- При изменении стратегии распознавания перебираются все фотографии альбома
- Процесс долгий и создает высокий риск сбоев
- Невозможность корректно остановить и продолжить процесс
Ограничения приоритетов
- Приоритеты работают только для ручного тегирования
- При параллельной загрузке альбомов обработка идет последовательно
- Обработка по событиям не учитывает приоритет альбома
Цели нового решения
- Объединить RecognitionService и TaggingService в единый сервис распознавания
- Обеспечить единый сценарий обработки лиц и номеров
- Сократить дублирование данных и нагрузку на БД
- Упростить архитектуру и уменьшить количество межсервисных взаимодействий
- Создать основу для улучшенной валидации результатов
- Сохранить текущую функциональность и стратегии тегирования
Границы решения
Объединяются:
- RecognitionService
- TaggingService
Не объединяется:
- TagatorService остается отдельным сервисом
- Может обслуживать несколько инстансов (MSP, ByMSP, Witisi)
- Имеет потенциал развития как отдельное направление бизнеса
- Может быть заменен внешним решением без влияния на Media
Ссылки
- Репозиторий: https://rr-git.gitlab.yandexcloud.net/media/recognitionservicenew
- Беклог: http://tfs/RR/RR/_workitems/edit/47667
- Задача: http://tfs/RR/RR/_workitems/edit/50100
- Первоначальное проектирование: https://www.notion.so/akolgashkin/2a2cc2338ce7805cadf5f35a782bf7f9