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

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

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

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

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

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

  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. В файле /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.1.3
        logging: {driver: journald}
        network_mode: service:pause
        restart: always
        volumes: ['./configs/findface-multi-file-mover/findface-multi-file-mover.yaml:/etc/config.yml:ro',
          './data/findface-multi-legacy/uploads:/mnt/slow_storage/uploads']
      
    2. Настройте сервис findface-multi-file-mover. В томах (volumes) укажите 'ssd-path:/mnt/fast_storage/uploads' – директорию горячего хранилища, из которой файлы впоследствии будут перекладываться в холодное хранилище.

      Примечание

      ssd-path в приведенном ниже примере – это путь (директория) к вашему SSD, который будет использоваться для горячего хранения данных. Здесь и далее заменяйте ssd-path на директорию вашего SSD.

      findface-multi-file-mover:
        ...
        volumes: ['./configs/findface-multi-file-mover/findface-multi-file-mover.yaml:/etc/config.yml:ro',
              './data/findface-multi-legacy/uploads:/mnt/slow_storage/uploads', 'ssd-path:/mnt/fast_storage/uploads']
      
    3. В сервисах findface-multi-legacy и findface-multi-ui в томах (volumes) укажите директорию горячего хранилища 'ssd-path:/var/lib/fast-storage/uploads'. Это необходимо сделать для того, чтобы сервис findface-multi-legacy сохранял изображения событий в указанную директорию горячего хранилища. Также, это необходимо для сервиса findface-multi-ui: до того, как сервис findface-multi-file-mover переместит миниатюру и полнокадровое изображение события в холодное хранилище, сервис findface-multi-ui будет отображать их пользователю из указанного каталога горячего хранилища.

      ...
        findface-multi-legacy:
          depends_on:
            findface-multi-identity-provider: {condition: service_started}
            findface-multi-legacy-migrate: {condition: service_completed_successfully}
          healthcheck: {interval: 5s, retries: 3, start_period: 60s, test: 'curl -f http://localhost:8002/healthcheck
              || exit 1', timeout: 3s}
          image: docker.int.ntl/ntech/multi/multi/legacy:ffmulti-2.1.3
          logging: {driver: journald}
          network_mode: service:pause
          restart: always
          volumes: ['./configs/findface-multi-legacy/findface-multi-legacy.py:/etc/findface-security/config.py:ro',
            './data/findface-multi-legacy/uploads:/var/lib/findface-security/uploads', 'ssd-path:/var/lib/fast-storage/uploads']
      ...
        findface-multi-ui:
          depends_on: [findface-multi-legacy]
          image: docker.int.ntl/ntech/multi/multi/ui:ffmulti-2.1.3
          logging: {driver: journald}
          network_mode: service:pause
          restart: always
          volumes: ['./configs/findface-multi-ui/nginx-site.conf:/etc/nginx/conf.d/default.conf:ro',
            './data/findface-multi-legacy/uploads:/var/lib/findface-security/uploads', 'ssd-path:/var/lib/fast-storage/uploads']
      ...
      
    4. Выполните пересборку контейнеров 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.1.3
      logging: {driver: journald}
      network_mode: service:pause
      restart: always
      volumes: ['./configs/findface-multi-file-mover/findface-multi-file-mover.yaml:/etc/config.yml:ro',
        './data/findface-multi-legacy/uploads:/mnt/slow_storage/uploads', 'ssd-path:/mnt/fast_storage/uploads']
    findface-multi-file-mover2:
      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.1.3
      logging: {driver: journald}
      network_mode: service:pause
      restart: always
      volumes: ['./configs/findface-multi-file-mover/findface-multi-file-mover.yaml:/etc/config.yml:ro',
        './data/findface-multi-legacy/uploads:/mnt/slow_storage/uploads', 'ssd-path:/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.