Многоуровневое хранение данных
При пиковых нагрузках жесткий диск не справляется со своевременным сохранением файлов событий. В результате новые события ставятся в очередь, и в определенный момент процесс сохранения прекращается.
Эту проблему можно решить с помощью многоуровневого хранения данных, которое работает следующим образом: сначала FindFace Multi сохраняет изображения событий в быстрое (т.н. «горячее») хранилище – SSD-накопитель с ограниченным объемом, а затем перекладчик (сервис findface-multi-file-mover
) переносит их в долговременное (т.н. «холодное») хранилище – обычный HDD. В горячее хранилище сохраняются только миниатюры и полнокадровые изображения. Остальные данные, включая видео, изображения картотеки, отчеты и т.д., сразу сохраняются в холодное хранилище и не требуют переноса. Чтобы начать пользоваться сервисом перемещения файлов, включите горячее хранилище.
Включение горячего хранилища
По умолчанию сохранение в горячее хранилище отключено. Сервис findface-multi-file-mover
запускается вместе с другими сервисами, но при этом не функционирует. Чтобы включить сервис горячего хранения, выполните следующие действия:
Выделите SSD для горячего хранилища. Учитывайте объем SSD: он должен быть достаточно большим, чтобы хранить изображения при пиковой нагрузке до их перемещения в холодное хранилище. Создайте каталог для горячего хранилища на хосте (например,
/home/username/fast
).sudo mkdir ~/fast
В файле
/opt/findface-multi/configs/findface-multi-legacy/findface-multi-legacy.py
настройте параметрFAST_MEDIA_ROOT
. По умолчанию он имеет значениеNone
.sudo vi /opt/findface-multi/configs/findface-multi-legacy/findface-multi-legacy.py FAST_MEDIA_ROOT = '/var/lib/fast-storage/uploads'
Откройте файл конфигурации
/opt/findface-multi/docker-compose.yaml
.Определите раздел
fast-storage
в томах верхнего уровня. Замените/home/ubuntu/fast
на директорию вашего SSD.sudo vi /opt/findface-multi/docker-compose.yaml volumes: ... fast-storage: driver: local driver_opts: {device: /home/ubuntu/fast, o: bind, type: none}
Найдите сервис
findface-multi-file-mover
.findface-multi-file-mover: command: [python3, /app/service.py, --config=/etc/config.yml] depends_on: [findface-multi-legacy, nats-jetstream] image: docker.int.ntl/ntech/multi/multi/file-mover:ffmulti-2.3.0 logging: {driver: journald} networks: [product-network] restart: always volumes: ['./configs/findface-multi-file-mover/findface-multi-file-mover.yaml:/etc/config.yml:ro', 'findface-multi-uploads:/mnt/slow_storage/uploads']
Настройте сервис
findface-multi-file-mover
. В томах (volumes
) укажите'fast-storage:/mnt/fast_storage/uploads'
– директорию горячего хранилища, из которой файлы впоследствии будут перекладываться в холодное хранилище.Примечание
Том
fast-storage
монтируется в/mnt/fast_storage/uploads
в контейнереfindface-multi-file-mover
.fast-storage
в приведенном ниже примере определяет путь (директорию) к вашему SSD, который будет использоваться для горячего хранения данных.findface-multi-file-mover: ... volumes: ['./configs/findface-multi-file-mover/findface-multi-file-mover.yaml:/etc/config.yml:ro', 'findface-multi-uploads:/mnt/slow_storage/uploads', 'fast-storage:/mnt/fast_storage/uploads']
В сервисах
findface-multi-legacy
,findface-multi-legacy-singleton-services
иfindface-multi-ui
в томах (volumes
) смонтируйте именованный томfast-storage
в/var/lib/fast-storage/uploads
следующим образом'fast-storage:/var/lib/fast-storage/uploads'
в секцииvolumes
соответствующего сервиса. Это необходимо сделать по нескольким причинам:Чтобы сервис
findface-multi-legacy
сохранял изображения событий в указанную директорию горячего хранилища.Внутри сервиса
findface-multi-legacy-singleton-services
формируются отчеты, поэтому необходимо указать директорию горячего хранилища'fast-storage:/var/lib/fast-storage/uploads'
в томах (volumes
) сервисаfindface-multi-legacy-singleton-services
.До того, как сервис
findface-multi-file-mover
переместит миниатюру и полнокадровое изображение события в холодное хранилище, сервисfindface-multi-ui
будет отображать их пользователю из указанного каталога горячего хранилища.
... findface-multi-legacy: depends_on: findface-multi-identity-provider: {condition: service_healthy} findface-multi-legacy-migrate: {condition: service_completed_successfully} healthcheck: {interval: 5s, retries: 3, start_period: 300s, test: 'curl -f http://localhost:8002/healthcheck || exit 1', timeout: 3s} image: docker.int.ntl/ntech/multi/multi/legacy:ffmulti-2.3.0 logging: {driver: journald} networks: [product-network] restart: always volumes: ['./configs/findface-multi-legacy/findface-multi-legacy.py:/etc/findface-security/config.py:ro', './configs/findface-multi-legacy/ui-config.yaml:/etc/findface-security/ui-config.yaml:ro', 'findface-multi-uploads:/var/lib/findface-security/uploads', 'fast-storage:/var/lib/fast-storage/uploads'] ... findface-multi-legacy-singleton-services: command: [run-single-instance-services] depends_on: findface-multi-identity-provider: {condition: service_healthy} findface-multi-legacy-migrate: {condition: service_completed_successfully} healthcheck: {interval: 5s, retries: 3, start_period: 300s, test: 'curl -f http://localhost:9901/healthcheck || exit 1', timeout: 3s} image: docker.int.ntl/ntech/multi/multi/legacy:ffmulti-2.3.0 logging: {driver: journald} networks: [product-network] restart: always volumes: ['./configs/findface-multi-legacy/findface-multi-legacy.py:/etc/findface-security/config.py:ro', './configs/findface-multi-legacy/ui-config.yaml:/etc/findface-security/ui-config.yaml:ro', 'findface-multi-uploads:/var/lib/findface-security/uploads', 'fast-storage:/var/lib/fast-storage/uploads'] ... findface-multi-ui: depends_on: [findface-multi-legacy] image: docker.int.ntl/ntech/multi/multi/ui:ffmulti-2.3.0 logging: {driver: journald} networks: [product-network] ports: ['80:80'] restart: always volumes: ['./configs/findface-multi-ui/nginx-site.conf:/etc/nginx/conf.d/default.conf:ro', 'findface-multi-uploads:/var/lib/findface-security/uploads', 'fast-storage:/var/lib/fast-storage/uploads'] ...
Выполните пересборку контейнеров FindFace Multi из директории
/opt/findface-multi
.cd /opt/findface-multi sudo docker-compose down sudo docker-compose up -d
Запуск нескольких экземпляров сервиса findface-multi-file-mover
Для обеспечения отказоустойчивости может потребоваться эксплуатация нескольких экземпляров сервиса findface-multi-file-mover
. Для их запуска выполните следующие действия:
В файле
/opt/findface-multi/docker-compose.yaml
укажите конфигурациюfindface-multi-file-mover
столько раз, сколько экземпляров сервиса вы планируете использовать, например,findface-multi-file-mover: command: [python3, /app/service.py, --config=/etc/config.yml] depends_on: [findface-multi-legacy, nats-jetstream] image: docker.int.ntl/ntech/multi/multi/file-mover:ffmulti-2.3.0 logging: {driver: journald} networks: [product-network] restart: always volumes: ['./configs/findface-multi-file-mover/findface-multi-file-mover.yaml:/etc/config.yml:ro', 'findface-multi-uploads:/mnt/slow_storage/uploads', 'fast-storage:/mnt/fast_storage/uploads'] findface-multi-file-mover-2: command: [python3, /app/service.py, --config=/etc/config.yml] depends_on: [findface-multi-legacy, nats-jetstream] image: docker.int.ntl/ntech/multi/multi/file-mover:ffmulti-2.3.0 logging: {driver: journald} networks: [product-network] restart: always volumes: ['./configs/findface-multi-file-mover/findface-multi-file-mover.yaml:/etc/config.yml:ro', 'findface-multi-uploads:/mnt/slow_storage/uploads', 'fast-storage:/mnt/fast_storage/uploads']
Выполните пересборку контейнеров FindFace Multi из директории
/opt/findface-multi
.cd /opt/findface-multi sudo docker-compose down sudo docker-compose up -d
Примечание
Если включено сохранение в горячее хранилище, то миниатюры и полнокадровые изображения, которые не были перенесены в холодное хранилище, не будут сохранены при резервном копировании. Если вам нужно сохранить все изображения, скопируйте их из горячего хранилища в холодное с помощью утилиты rsync
. См. Резервное копирование FindFace Multi.