Взаимодействие сервисов#
Ниже приведена схема взаимодействия сервисов модуля индексирования.
Перед началом работы с LIM пользователь должен создать список и прикрепить к нему необходимое количество лиц.
Перед тем как отправить запрос на сравнение из сервиса API, пользователь должен создать индекс, который создается с помощью создания задачи на его построение. Задача создается в сервисе Index Manager и может быть разового типа или фонового типа.
После создания, задача отправляется в очередь в БД Redis (IMan1).
Кроме очереди, БД Redis выступает хранилищем для всех задач на построение индексов. Там же используется механизм RedLock, обеспечивающий работу нескольких экземпляров сервиса Index Manager (см. раздел "Работа с несколькими экземплярами").
Сервис Index Manager взаимодействует с БД Faces для отслеживания изменений в списках (IMan2) если была создана задача фонового типа.
Далее Index Manager отправляет запрос в сервис Indexer на построение индекса (In1). После получения запроса, сервис Indexer извлекает БШ из БД Faces (In2) и начинает построение индекса. Построенный индекс сохраняется в хранилище (In3).
После успешного создания индекса, статус задачи изменяется на "success". Перед отправкой запроса на сравнение нужно проверить статус индекса с помощью запроса "get tasks" к сервису Index Manager. При отправке пользовательских запросов к сервису Index Manager на получение информации об индексах, сервис будет взаимодействовать с хранилищем индексов (IMan3).
Indexed Matcher загружает индекс в память (IMat1), загружает метку для сравнения (содержит "list_id" индекса в памяти) в БД Redis (IMat2) и слушает поток Redis пока там не появится запрос на сравнение.
Сервис Indexed Matcher постоянно следит за изменениями в списках с лицами, взаимодействуя с базой данных Faces (IMat4). В случае внесения новых изменений в список, сервис Indexed Matcher постепенно добавляет новые биометрические шаблоны в соответствующий индекс в памяти. При этом индекс, находящийся в хранилище, остается неизменным до его перестроения. При необходимости данный функционал можно отключить (см. раздел "Обновление индекса в памяти").
После того, как индекс создан и загружен в память сервиса Indexed Matcher, пользователь выполняет запрос на сравнение в сервисе API, прикрепляя изображение эталона. Данный запрос перенаправляется в сервис Python Matcher Proxy (A1), где плагин сравнения генерирует запрос определенного формата, содержащий метку для сравнения и биометрический шаблон эталона, и определяет загружена ли метка для сравнения в БД Redis сервисом Indexed Matcher. Далее выполняется выбор сервиса для выполнения сравнения: - если метка для сравнения не загружена в БД Redis, то запрос направляется в Python Matcher (PMP1). В таком случае сравнение будет выполнено с помощью классического метода перебора биометрических шаблонов. - если метка для сравнения загружена в БД Redis, то запрос направляется в виде сообщения в поток Redis. Сервис Indexed Matcher считывает сообщение из потока Redis (IMat2). После этого сервис Indexed Matcher проверяет наличие лицензии LUNA PLATFORM 5 на возможность выполнения сравнения, взаимодействуя с сервисом Licenses (IMat3).
См. подробную информацию о выборе сервиса для выполнения сравнения в разделе "Плагин сравнения для Python Matcher Proxy".
После окончания сравнения сервис Indexed Matcher записывает результаты сравнения в канал Redis (IMat2). Плагин сравнения сервиса Python Matcher Proxy считывает результаты сравнения и возвращает их пользователю в сервис API (PMP2).
См. раздел "Диаграммы последовательности" для более подробного описания процессов LUNA Index Module.