For the complete documentation index, see llms.txt. This page is also available as Markdown.

Guia de desempenho e escalabilidade

O sistema Oz consiste em muitos componentes interconectados.

Componentes Oz

A maioria dos componentes requer escalonamento para garantir a funcionalidade durante um aumento em APM. O esquema abaixo representa como o sistema processa uma análise usando software de suporte.

Representação aproximada do fluxo de análise

Este guia explica como escalonar componentes e melhorar o desempenho tanto em implantações Docker quanto Kubernetes.

Para implantações em K8s, use HPA. Nos valores do chart, você encontrará o use_hpa parâmetro para cada componente que suporta HPA.

Escalonamento de Oz BIO e Celery-TFSS

BIO é o componente que mais consome recursos, pois executa o processamento de análise de mídia.

  • O componente BIO pode levar até 10 minutos para iniciar (aplicável para versões <1.2).

  • Escalonar nós BIO pode ser desafiador durante um aumento rápido em APM.

  • Para instalações Docker, planeje o número necessário de componentes para lidar com picos de carga.

  • Para instalações Kubernetes, agende a criação de pods BIO adicionais para gerenciar a demanda usando cronjobHpaUpdater em values.yaml.

Requisitos de nó

  • A CPU deve oferecer suporte a avx, avx2, fma, sse4.1 e sse4.2.

  • Se a CPU oferecer suporte a avx512f instruções: para aumentar ligeiramente o desempenho, você pode usar uma imagem BIO específica.

  • Recomenda-se usar CPU Intel. CPUs AMD também são suportadas, mas exigem configuração adicional.

  • Para melhor desempenho, cada BIO deve residir em um nó dedicado com recursos reservados.

Escalonamento

Cada instância BIO pode lidar com um número ilimitado de solicitações simultâneas. No entanto, à medida que o número aumenta, o tempo de execução de cada solicitação cresce.

A atribuição de análises às instâncias BIO é gerenciada por celery-tfss workers. Cada celery-tfss instância é configurada para lidar com 2 análises simultaneamente, pois isso proporciona desempenho e tempo de análise ideais.

Para instalações Kubernetes, esse comportamento pode ser ajustado usando o parâmetro concurrency em values.yaml. Na configuração padrão, o número de celery-tfss instâncias deve corresponder ao número de BIOs.

O número necessário de BIOs pode ser calculado usando a fórmula abaixo, com base no tempo médio de análise e no número esperado de análises:

Aqui,

  • N(BIO) é o número necessário de nós BIO

  • n(APM) é o número esperado de APM,

  • t(análise) é a duração média medida de uma única análise (3 segundos por padrão),

  • C é a concorrência (2 por padrão).

Para um grande número de solicitações envolvendo arquivos .zip (por exemplo, se você usa Web SDK), pode ser necessário um escalonamento adicional do celery-preview_convert serviço.

Banco de dados

Oz API não foi projetada para ser um sistema de armazenamento de análises de longo prazo, portanto você pode encontrar um tempo de resposta da API mais longo após 10–30 milhões de pastas armazenadas no banco de dados (dependendo do desempenho do banco de dados). Assim, recomendamos arquivar ou excluir dados da API após um ano de armazenamento.

Para o banco de dados autogerenciado, serão necessários os seguintes recursos:

API

  • CPU: 4 núcleos (até 8),

  • RAM: 8 GB (até 16),

  • armazenamento SSD.

1:N (Collection)

  • CPU: 4 núcleos (até 8),

  • RAM: igual ao tamanho do banco de dados,

  • armazenamento SSD.

Parâmetros do banco de dados PostgreSQL
  • idle_in_transaction_session_timeout: 60s,

  • max_connections: 2000 (pode variar dependendo do número de chamadas da API),

  • shared_buffers: 2 GB (quantidade de RAM dividida por 2),

  • effective_cache_size: 6 GB (RAM – 2 GB),

  • maintenance_work_mem: 512 MB,

  • checkpoint_completion_target: 0.9,

  • wal_buffers: 16 MB,

  • default_statistics_target: 100,

  • random_page_cost: 1.1,

  • effective_io_concurrency: 200,

  • work_mem: 16 MB,

  • min_wal_size: 1 GB,

  • max_wal_size: 4 GB,

  • max_worker_processes: 4 (igual ao número de CPUs),

  • max_parallel_workers_per_gather: 2 (número de CPUs dividido por 2),

  • max_parallel_workers: 4 (igual ao número de CPUs),

  • max_parallel_maintenance_workers: 2 (número de CPUs dividido por 2),

  • Se o banco de dados estiver em Docker, defina shm_size: '1gb'.

Para aumentar o desempenho da API, considere usar esta lista de índices:

Índices do Gateway

Para ambientes com alta carga, alcançar o melhor desempenho exige ajuste preciso do banco de dados. Entre em contato com nosso suporte para assistência.

Desempenho dos gestos

A duração da análise depende do gesto usado para Liveness. Liveness passiva gestos geralmente são analisados mais rapidamente, enquanto Liveness ativa gestos oferecem maior precisão, mas levam mais tempo. Quanto mais tempo o gesto levar, mais tempo levará a análise.

Esta tabela representa a duração da análise para diferentes gestos.

Gesto

Tempo médio de análise

50º percentil

[video_selfie_blank]

5.491

4.984

[video_selfie_down]

11.051

8.052

[video_selfie_eyes]

9.953

7.399

[video_selfie_high]

10.937

8.112

[video_selfie_left]

9.713

7.558

[video_selfie_right]

9.95

7.446

[video_selfie_scan]

9.425

7.29

[video_selfie_smile]

10.25

7.621

Desempenho dos métodos da API

O desempenho da API depende principalmente de banco de dados e armazenamento desempenho. A maioria dos métodos da API usa um banco de dados para retornar resultados. Assim, para manter baixo o tempo de resposta da API, recomendamos usar um banco de dados de alto desempenho. Além disso, para reduzir o número de solicitações por resultados de análise via /api/foldersmétodos, considere o uso de callback webhook.

Se você usar S3, verifique também seu desempenho. Execute POST api/folders com uma única mídia de ~3 MB. Depois disso, verifique o tempo de upload nos logs, “Files saved to storage for X seconds”. X deve ser 0,5 ou menos; se for 2 ou mais, algumas operações da API podem levar a timeouts.

Abaixo está uma lista de práticas recomendadas e não recomendadas para o uso dos métodos da Oz API.

/authorize

Não

  • Atualize o token expirado quando possível.

  • Monitore a expiração do token.

  • Use o service token apenas quando apropriado.

Evite

  • Fazer solicitações com um token expirado.

  • Criar um novo token em vez de atualizar um que está expirando.

  • Solicitar um novo token em cada chamada da API.

/api/companies

Não

  • Crie uma nova company nomeada para sua implantação.

Evite

  • Usar o padrão system_company.

/api/users

Não

  • Crie contas nomeadas para os usuários.

  • Crie uma conta de serviço nomeada separada para cada processo de negócio.

Evite

  • Compartilhar contas entre usuários.

  • Criar um novo usuário para cada solicitação de análise.

/api/healthcheck

Evite

  • Usar healthcheck com muita frequência, pois isso pode sobrecarregar o sistema com verificações internas.

GET /api/folders

Não

  • Sempre use os parâmetros de consulta com limite de tempo: time.created.min e time.created.max.

  • Use o total_omit=true parâmetro de consulta.

  • Use o folder_id parâmetro de consulta quando o ID da pasta for conhecido.

  • Use o technical_meta_data parâmetro de consulta no caso de você ter meta_data definido.

  • Use o limit parâmetro de consulta quando possível.

Evite

  • Usando o with_analyzes=true parâmetro de consulta quando ele for desnecessário, em solicitações envolvendo longos períodos de tempo ou durações não especificadas.

  • Usando o technical_meta_data parâmetro de consulta com parâmetros adicionais não especificados ou período de tempo.

POST /api/folders

Evite

  • Colocar dados demais no payload meta_data.

Atualizado

Isto foi útil?