Диаграммы последовательностей#
В данном разделе приведены диаграммы последовательности для основных операций LIM.
Диаграмма построения индекса#
Индекс строится после создания задачи на его построение. Есть два типа создания задач на построение индекса — разовый и фоновый.
Ниже приведена диаграмма последовательности для обоих типов создания задач.
- (1.1) Отправка запроса "create task" на разовое построение индекса
- (1.2.1) Включение динамического индексирования списков с помощью задания значения "dynamic" для настройки "indexing_lists"
- (1.2.2) Задание минимального количества лиц в списке по которому будет строиться индекс (по умолчанию 50 000) в настройке "min_indexing_list_size"
- (1.2.3) Считывание значений настроек из сервиса Configurator
- (1.3.1) Задание набора списков в настройке "indexing_lists"
- (1.3.2) Считывание значения настройки из сервиса Configurator
- (2) Начало процедуры планирования (регулируется настройками "planning_period" и "planning_schedule". Проверка, какие наборы списков должны быть проиндексированы
- (3) Запись информации о создаваемой задаче в хранилище Redis
- (4) Ответ, что задача помещена в хранилище
- (5) Отправка задачи во внутреннюю очередь
- (6) Ответ, что задача помещена в очередь. На данном этапе статус задачи устанавливается как "pending"
- (7) Ответ о создании задачи. Только для разового построения индекса (см. (1.1))
- (8) Начало процедуры поиска (регулируется настройкой "lookup_period"). Проверка статуса запущенных экземпляров Indexer
- (9) Ответ, что экземпляр Indexer готов начать работу
- (10) Извлечение задачи из внутренней очереди
- (11) Ответ, что задача извлечена
- (12) Запрос на построение индекса по созданной задаче
- (13) Ответ, что запрос на построение индекса по созданной задаче принят
- (14) Обновление информации о задаче. На данном этапе статус задачи меняется на "indexing"
- (15) Начало выполнения периодических запросов о статусе индексирования
- (16) Выполнение запросов к сервису Faces на получение биометрических шаблонов, принадлежащих списку
- (17) Перенаправление запросов в БД Faces
- (18) Выгрузка данных из базы данных Faces
- (19) Перенаправление выгруженных данных в сервис Faces
- (20) Процесс построения индекса
- (21) Сохранение индекса в Хранилище индексов
- (22) Продолжение процедуры поиска. Проверка статуса запущенных экземпляров Indexer
- (23) Ответ, что экземпляр завершил построение индекса
- (24) Обновление информации о задаче. На данном этапе статус задачи меняется на "success"
- (25) Отправка в базу данных Influx
- (26) Окончание выполнения периодических запросов о статусе индексирования
Узнать актуальный статус задачи можно с помощью запроса "get tasks" после её создания.
Диаграмма первичной загрузки индекса в память#
Перед началом сравнения индекс загружается в память сервиса Indexed Matcher.
- (1) Загрузка самого актуального индекса из Хранилища в память сервиса Indexed Matcher
- (2) Кэширование индекса в промежуточный каталог. Каталог указывается в настройке "lim_matcher_cache" сервиса Indexed Matcher. По умолчанию кэширование отключено. См. раздел "Кэширование индекса" для подробной информации.
- (3) Загрузка метки для сравнения в Redis. Имя метки совпадает с идентификатором списка
- (4) Ответ, что метка загружена
- (5) Регистрация потока Redis в качестве обработчика сообщений для соответствующей метки для сравнения. На данном этапе потоку присваивается имя метки для сравнения (т.е. имя идентификатора списка)
- (6) Ответ, что поток зарегистрирован
- (7) Ожидание появления запроса на сравнение, который содержит метку для сравнения с точно таким же названием как та, которая загружена в Redis (3) и для которой зарегистрирован поток (5)
Диаграмма сравнения биометрических шаблонов#
Данная диаграмма подразумевает, что индекс уже загружен в память сервиса Indexed Matcher (см. "Диаграмма первичной загрузки индекса в память").
- (1) Отправка запроса на сравнение
- (2) Запрос на определение сложности запроса
- (3) Проверка наличия метки для сравнения
- (4) Ответ
- (5.1.1) Если нет метки для сравнения, то сложность запроса считается бесконечной и плагин сравнения возвращает соответствующую информацию сервису Python Matcher Proxy
- (5.1.2) Запрос на сравнение в сервис Python Matcher
- (5.1.3) Процесс сравнения в сервисе Python Matcher
- (5.1.4) Ответ о результате сравнения в Python Matcher Proxy
- (5.1.5) Ответ о результате сравнения в API
- (5.2.1) Если метка для сравнения существует, то высчитывается определенная сложность запроса и возвращается ответ в сервис Python Matcher Proxy
- (5.2.2) Отправка запроса на сравнение в плагин сравнения
- (5.2.3) Конвертация запроса и отправка его в виде сообщения в поток Redis
- (5.2.4) Сервис Indexed Matcher слушает поток Redis (см. "Диаграмма первичной загрузки индекса в память"). Как только появляется запрос на сравнение, который содержит метку для сравнения с точно таким же названием как та, которая ранее загружена в Redis и для которой зарегистрирован был поток, то Indexed Matcher считывает сообщение на сравнение
- (5.2.5) Ответ, что сообщение считано
- (5.2.6) Выполнение проверки лицензии
- (5.2.7) Ответ о состоянии лицензии (данная диаграмма не отражает случай невалидной лицензии)
- (5.2.8) Выполнения процесса сравнения
- (5.2.9) Запись результата сравнения в канал Redis
- (5.2.10) Считывание плагином сравнения результата сравнения из канала Redis
- (5.2.11) Отправка результата сравнения в Python Matcher Proxy
- (5.2.12) Отправка результата сравнения в API
Диаграмма перезагрузки индекса#
Данная диаграмма отражает только последовательность работы в случае, когда в Хранилище индексов появляется индекс с более новой версией метки сравнения. Если же индекс исчезает из Хранилища, то после проверки состояния индекса, сервис Indexed Matcher удаляет его из памяти. Данный функционал включается с помощью настройки "enabled = 1" (по умолчанию включена) секции "LIM_MATCHER_REFRESH" настроек сервиса Indexed Matcher.
Рекомендуется ознакомиться с разделом "Перезагрузка индекса".
- (1) Проверка изменился ли текущий индекс в Хранилище индексов. Если в Хранилище есть более свежий индекс по времени сохранения для той же метки для сравнения и с нужной версией биометрического шаблона, то это будет учитываться как то, что текущий индекс не актуален.
- (2) Ответ, что индекс не актуален
- (3) Запрос на включение блокировки Redis
- (4) Ответ об успешной блокировке Redis. Если в данный момент невозможно выполнить блокировку, то Indexed Matcher будет выполнять попытки блокировки пока очередная попытка не закончится успехом.
- (5) Если блокировка успешна, то остановка сравнения по текущему индексу
- (6) Удаление старого индекса из памяти Indexed Matcher
- (7) Загрузка нового индекса из Хранилища индексов в память сервиса Indexed Matcher
- (8) Ответ, что индекс загружен в память
- (9) Запрос на отключение блокировки Redis
- (10) Ответ, что блокировка отключена
- (11) Продолжение сравнения
Диаграмма обновления индекса#
Ниже описана диаграмма последовательности для процесса достроения индекса в памяти сервиса Indexed Matcher.
Данная информация описывается для индекса, который уже загружен в память сервиса Indexed Matcher. Индекс в памяти сервиса и индекс в хранилище могут отличаться. Рекомендуется ознакомиться с разделом "Обновление индекса в памяти".
- (1) Прием обработки запросов на сравнение
- (2) Начало сравнения
- (3) Запрос на проверку состояния списка к Faces (запрос выполняется каждую секунду)
- (4) Перенаправление запроса на проверку состояния списка к БД Faces
- (5) Ответ
- (6) Ответ
- (7.1) Если в список не были добавлены новые биометрические шаблоны, то сравнение продолжится до очередной проверки состояния списка (3)
- (7.2.1) Если в список были добавлены новые биометрические шаблоны, то сравнение останавливается
- (7.2.2) Запрос отсутствующих биометрических шаблонов к сервису Faces
- (7.2.3) Перенаправление запроса к БД Faces
- (7.2.4) Ответ, содержащий отсутствующие биометрические шаблоны
- (7.2.5) Ответ, содержащий отсутствующие биометрические шаблоны
- (7.2.6) Добавление отсутствующих биометрических шаблонов в индекс, расположенный в памяти сервиса Indexed Matcher (не более 10 БШ за раз)
- (7.2.7) Продолжение сравнения до очередной проверки состояния списка (3)