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

# Как настроить систему для лучшей производительности

В этом разделе содержатся общие рекомендации для достижения максимальной производительности системы.

### Масштабирование​

В случае, когда нагрузка возрастает, для стабилизации работы

предусмотрено масштабирование следующих сервисов в ручном режиме:

- image-api-deepfake-estimator: сервис используется для оценки наличия признаков использования технологии DeepFake.
- image-api-quality-assessment-estimator: сервис используется для оценки качества изображения лица.
- image-api-liveness-estimator: сервис используется для детекции лиц и оценки принадлежности лица на изображении реальному человеку.
- image-api-age-estimator: сервис используется для оценки возраста человека по изображению лица.
- image-api-gender-estimator: сервис используется для оценки пола человека по изображению лица.
- image-api-face-detector-template-extractor: сервис используется для построения поискового биометрического шаблона лица.
- image-api-face-detector-face-fitter: сервис используется для детекции лиц и определения антропометрических точек лица.
- video-recorder-video-recorder: сервис для сохранения видео.

Для масштабирования сервиса необходимо выполнить следующую команду:

    $ kubectl scale deployment <SERVICE_NAME>-dep --replicas <COUNT>

где `<SERVICE_NAME>` — наименование сервиса (например, lrs-lrs), а `<COUNT>` — количество экземпляров сервиса.

### Принципы масштабирования​

Входная нагрузка зависит от настроек веб-компоненты. Далее подробно описаны параметры и их влияние на нагрузку.
Во всех последующих разделах входящая нагрузка будет обозначаться как A. A измеряется в запросах в секунду (RPS).

#### Количество референсных кадров​

Чем больше референсных кадров, тем выше нагрузка на сервис image-api-quality-assessment-estimator и image-api-face-detector-face-fitter (далее — сервисы первичной обработки), так как каждый кадр проходит через них.

Из всех обработанных кадров выбираются 3 лучших по качеству. Эти кадры дополнительно обрабатываются сервисами image-api-deepfake-estimator и image-api-liveness-estimator (далее — сервисы вторичной обработки).

Таким образом, при стандартной настройке в 10 референсных кадров каждая сессия генерирует:

- 10 запросов к каждому сервису первичной обработки и
- 3 запроса к каждому сервису вторичной обработки.

Если референсных кадров меньше трёх, нагрузка на сервисы первичной и вторичной обработки будет одинаковой. Например, при 2 кадрах каждый сервис обеих групп получит по 2 запроса.

Для минимальной задержки обработки при количестве референсных кадров B сервисы масштабируются следующим образом:

- Количество реплик каждого сервиса из группы первичной обработки = A * B.
- Количество реплик каждого сервиса из группы вторичной обработки = A * min(B, 3)

Примеры масштабирования, где RPS и количество референсных кадров различаются:

RPS \ Количество референсных кадров | 1\10 | 2\10 | 1\5 | 1\1 | 2\1 | 1\2
--- | --- | --- | --- | --- | --- | ---
image-api-quality-assessment-estimator | 10 | 20 | 5 | 1 | 2 | 2
image-api-face-detector-face-fitter | 10 | 20 | 5 | 1 | 2 | 2
image-api-liveness-estimator | 3 | 6 | 3 | 1 | 2 | 2
image-api-deepfake-estimator | 3 | 6 | 3 | 1 | 2 | 2

#### Количество и длительность проверок с записью видео на сессию пользователя​

Количество проверок с видео настраивается параметрами записи видео контроля движений. Длина видео зависит от пользователя и требует расчётов на основе реальных данных.

Чем больше суммарная длительность видео, тем выше пиковая нагрузка на сервис video-recorder-video-recorder. Например, при нагрузке 1 RPS и сессиях с видеопроверкой длиной в 1 минуту одновременно будет происходить до 60 активных сессий записи.

Если используется настройка WebCodec, нагрузка ложится на процессы сервиса video-recorder-video-recorder. Их количество задаётся параметром `decoder.decoding_process_count` в файле ./cfg/video-recorder.values.yaml. Один процесс выдерживает до 20 параллельных сессий записи через WebCodec без заметного замедления. Рекомендуется масштабировать сервис, а не только увеличивать число процессов в конфигурации.

Формула масштабирования при длительности видео B секунд и количестве процессов C:

- Количество реплик сервиса video-recorder-video-recorder = A * B / C

Примеры масштабирования сервиса video-recorder-video-recorder с зафиксированым числом процессов, равным 5:

RPS \ Суммарная длинна в секундах видео проверок в каждой сессии | 1\60 | 2\60 | 1\120
--- | --- | --- | ---
video-recorder-video-recorder | 1 | 2 | 2

При использовании настройки MediaRecorder процессы сервиса video-recorder-video-recorder не задействуются, и масштабирование не требуется.

Для обработки видео контроля движений используется только сервис video-recorder-video-recorder.

#### Факторы, не зависящие от конфигурации веб-компоненты​

Некоторые факторы нагрузки не связаны с настройками компоненты. В конце каждой сессии, независимо от того, регистрация это или авторизация, изображение обрабатывается сервисами:

- image-api-gender-estimator
- image-api-age-estimator
- image-api-face-detector-template-extractor

Для сервисов image-api-gender-estimator и image-api-age-estimator допускается масштабирование в половину нагрузки. Количество реплик равно: A / 2.
Сервис image-api-face-detector-template-extractor масштабируется 1 к 1. Количество реплик равно: A.

Примеры количества реплик сервисов, где RPS варьируется:

RPS | 1 | 2 | 6
--- | --- | --- | ---
image-api-gender-estimator | 1 | 1 | 3
image-api-age-estimator | 1 | 1 | 3
image-api-face-detector-template-extractor | 1 | 2 | 6

Для сохранения параметров масштабирования откройте файлы ./cfg/platform.values.yaml, ./cfg/image-api.values.yaml, ./cfg/lrs.values.yaml и ./cfg/video-recorder.values.yaml найдите поле `replicas` в блоке сервиса и укажите новые значения реплик.

При следующих установках сервисы будут автоматически масштабироваться до указанных значений.