Перейти к основному содержимому

Постановка проблемы

Контекст

Распознавание фотографий выполняется цепочкой из трех сервисов:

  • RecognitionService — распознает лица через VkVision или Athlete
  • TaggingService — создает задачи на авто- и ручное тегирование, управляет стратегиями обработки
  • TagatorService — распределяет задачи ручного тегирования между тегаторами

В сезон обрабатываются сотни тысяч фотографий в неделю. Текущая архитектура приводит к избыточной сложности и операционным проблемам.

Проблемы текущей архитектуры

Сложность процесса обработки

  • Длинная цепочка взаимодействий между сервисами
  • Избыточные межсервисные вызовы
  • Сложность отладки и мониторинга распределенного процесса

Дублирование данных

  • Каждый сервис хранит копию фотографий и связанных данных
  • Объемы данных многократно увеличиваются
  • Необходима синхронизация данных между сервисами

Нагрузка на БД и инфраструктуру

  • Избыточные чтения/записи из-за промежуточных статусов
  • Создание Hangfire-задач на каждое фото нагружает Redis
  • Высокая нагрузка на БД при синхронизации данных

Проблемы с изменением стратегии

  • При изменении стратегии распознавания перебираются все фотографии альбома
  • Процесс долгий и создает высокий риск сбоев
  • Невозможность корректно остановить и продолжить процесс

Ограничения приоритетов

  • Приоритеты работают только для ручного тегирования
  • При параллельной загрузке альбомов обработка идет последовательно
  • Обработка по событиям не учитывает приоритет альбома

Цели нового решения

  • Объединить RecognitionService и TaggingService в единый сервис распознавания
  • Обеспечить единый сценарий обработки лиц и номеров
  • Сократить дублирование данных и нагрузку на БД
  • Упростить архитектуру и уменьшить количество межсервисных взаимодействий
  • Создать основу для улучшенной валидации результатов
  • Сохранить текущую функциональность и стратегии тегирования

Границы решения

Объединяются:

  • RecognitionService
  • TaggingService

Не объединяется:

  • TagatorService остается отдельным сервисом
    • Может обслуживать несколько инстансов (MSP, ByMSP, Witisi)
    • Имеет потенциал развития как отдельное направление бизнеса
    • Может быть заменен внешним решением без влияния на Media

Ссылки