Перейти к содержанию

Диаграммы последовательностей#

В данном разделе приведены диаграммы последовательности для основных операций 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)