Многоуровневое хранение данных

При пиковых нагрузках жесткий диск не справляется со своевременным сохранением файлов событий. В результате новые события ставятся в очередь, и в определенный момент процесс сохранения прекращается.

Эту проблему можно решить с помощью многоуровневого хранения данных, которое работает следующим образом: сначала FindFace Multi сохраняет изображения событий в быстрое (т.н. «горячее») хранилище – SSD-накопитель с ограниченным объемом, а затем перекладчик (сервис findface-multi-file-mover) переносит их в долговременное (т.н. «холодное») хранилище – обычный HDD. В горячее хранилище сохраняются только миниатюры и полнокадровые изображения. Остальные данные, включая видео, изображения картотеки, отчеты и т.д., сразу сохраняются в холодное хранилище и не требуют переноса. Чтобы начать пользоваться сервисом перемещения файлов, включите горячее хранилище.

Включение горячего хранилища

По умолчанию сохранение в горячее хранилище отключено. Сервис findface-multi-file-mover запускается вместе с другими сервисами, но при этом не функционирует. Чтобы включить сервис горячего хранения, выполните следующие действия:

  1. Выделите SSD для горячего хранилища. Учитывайте объем SSD: он должен быть достаточно большим, чтобы хранить изображения при пиковой нагрузке до их перемещения в холодное хранилище. Создайте каталог для горячего хранилища на хосте (например, /home/username/fast).

    sudo mkdir ~/fast
    
  2. В файле /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'
    
  3. Откройте файл конфигурации /opt/findface-multi/docker-compose.yaml.

    1. Определите раздел 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}
      
    2. Найдите сервис 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']
      
    3. Настройте сервис 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']
      
    4. В сервисах 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']
      ...
      
    5. Выполните пересборку контейнеров 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. Для их запуска выполните следующие действия:

  1. В файле /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']
    
  2. Выполните пересборку контейнеров FindFace Multi из директории /opt/findface-multi.

    cd /opt/findface-multi
    
    sudo docker-compose down
    
    sudo docker-compose up -d
    

Примечание

Если включено сохранение в горячее хранилище, то миниатюры и полнокадровые изображения, которые не были перенесены в холодное хранилище, не будут сохранены при резервном копировании. Если вам нужно сохранить все изображения, скопируйте их из горячего хранилища в холодное с помощью утилиты rsync. См. Резервное копирование FindFace Multi.