Milvus — busca vetorial no laboratório¶
O Milvus guarda vetores e encontra os mais próximos de uma consulta. As aplicações podem usar essa busca para recuperar conteúdo semelhante. A geração dos vetores e a resposta ao usuário pertencem à aplicação; o banco não substitui essas etapas.
Esta instalação é de laboratório, gerenciada pelo Coolify do laboratório. O nome production do ambiente no painel não transforma o serviço em produção de cliente.
Acesso¶
| Recurso | Endereço ou orientação |
|---|---|
| API REST e SDK gRPC | https://milvus.bravonix.ia.br:443 |
| Autenticação | Obrigatória; solicite credencial à equipe responsável |
| Interface de administração web | Não há painel web publicado para o Milvus |
| Administração do serviço | Coolify do laboratório, projeto Lab POCs, serviço milvus |
O acesso público usa HTTPS. Não desative a verificação do certificado para contornar um erro. A página inicial do domínio não é um teste suficiente: confira uma operação da API com autenticação.
Não coloque a credencial no frontend, no repositório ou em exemplos compartilhados. Para aplicações, solicite uma conta com as permissões necessárias; não presuma que a conta administrativa de instalação seja adequada.
Como a aplicação consulta¶
flowchart LR
A["Aplicação"]
E["Modelo de vetores<br/>configurado pela aplicação"]
M["Milvus<br/>Busca por proximidade"]
R["Resultados<br/>para a aplicação"]
A -->|"Texto da consulta"| E
E -->|"Vetor da consulta"| A
A -->|"Vetor e filtros<br/>HTTPS autenticado"| M
M --> R
A aplicação precisa definir a coleção, o campo vetorial, a dimensão e a métrica de busca. O vetor da consulta deve ser compatível com os vetores armazenados. Mudar o modelo de geração pode exigir reconstruir a base; apenas manter a mesma dimensão não garante compatibilidade.
O diagrama descreve o uso do serviço. Não confirma que todos os produtos Bravonix estejam integrados a este Milvus; algumas aplicações usam PostgreSQL com pgvector.
Componentes e armazenamento¶
flowchart LR
A["Aplicação<br/>REST ou SDK gRPC"]
T["Traefik<br/>Recebe HTTPS"]
M["Milvus Standalone"]
E[("etcd<br/>Metadados")]
S[("MinIO<br/>Armazenamento de objetos")]
A -->|"Porta 443"| T
T -->|"Rede interna"| M
M --> E
M --> S
Milvus, etcd e MinIO mantêm dados persistentes no servidor. Recriar um container não deve apagar esses dados. A recuperação depende do conjunto consistente, não somente de uma pasta ou da imagem Docker.
Os três componentes não têm portas publicadas diretamente no host, conforme a inspeção de 05/10/2026. A entrada pública passa pelo Traefik. etcd e MinIO não são endereços de integração das aplicações.
Versões e limites conferidos em 05/10/2026¶
| Componente | Versão | Limite de CPU | Limite de memória |
|---|---|---|---|
| Milvus Standalone | 2.6.23 | 3 CPUs | 12 GiB |
| etcd | 3.5.25 | 0,5 CPU | 1 GiB |
| MinIO | RELEASE.2024-12-18T13-15-44Z | 0,5 CPU | 2 GiB |
O total configurado é de 4 CPUs e 15 GiB. São limites máximos, não reserva de capacidade nem garantia para qualquer tamanho de base. Antes de uma carga grande, conferir espaço em disco, memória, tamanho dos índices e concorrência com outros serviços do laboratório.
Primeiro teste de integração¶
Comece com uma leitura: listar as coleções acessíveis. Esse teste verifica conexão e autenticação sem criar ou apagar dados.
Exemplo Python com pymilvus compatível com a versão 2.6 do servidor. Forneça MILVUS_TOKEN pelo mecanismo de segredos da aplicação, no formato usuario:senha:
import os
from pymilvus import MilvusClient
client = MilvusClient(
uri="https://milvus.bravonix.ia.br:443",
token=os.environ["MILVUS_TOKEN"],
)
try:
collections = client.list_collections()
print(f"Coleções acessíveis: {len(collections)}")
finally:
client.close()
A conexão segue o contrato do SDK Milvus. Este exemplo não foi executado nesta revisão; o teste atual foi feito pela API REST. Listar coleções não comprova qualidade da busca, dimensão correta dos vetores nem desempenho sob carga.
Estado conferido em 05/10/2026¶
- Milvus, etcd e MinIO estavam em execução, com verificações de saúde aprovadas.
- A configuração do Milvus mantinha autenticação habilitada.
- A API pública recusou uma consulta sem credencial.
- A consulta autenticada de listagem retornou sucesso e uma coleção; nomes e conteúdo não foram expostos nesta documentação.
- O último registro de backup bem-sucedido era de 05/10, às 04h45 de Fortaleza, com 23.330.922 bytes e indicadores de download conferido e serviço saudável.
A revisão foi somente de leitura. Não foram criadas coleções, inseridos vetores, executados backups manuais ou reiniciados serviços. O teste anterior de setembro incluiu escrita e busca com dados descartáveis; ele não equivale a uma nova validação dessas operações hoje.
Backup diário e indisponibilidade¶
A rotina está agendada para 04h45 de Fortaleza, todos os dias (07h45 UTC). É um backup com parada: o Milvus e suas dependências ficam indisponíveis durante a criação da cópia local e a retomada.
flowchart TD
A["Início do backup diário"]
P["Parar Milvus<br/>e depois suas dependências"]
C["Criar cópia local<br/>dos dados e da configuração"]
R["Religar os componentes"]
E["Enviar cópia ao<br/>armazenamento externo"]
V["Baixar novamente<br/>e comparar SHA-256"]
S["Conferir saúde do Milvus<br/>e registrar sucesso"]
A --> P --> C --> R --> E --> V --> S
A sequência foi conferida no script operacional versionado. O envio externo ocorre após o comando de retomada. O tempo de indisponibilidade depende do volume de dados e da inicialização; não há duração fixa validada.
O SHA-256 compara os bytes enviados e recebidos. Isso detecta diferença na cópia, mas não comprova que uma restauração completa funcione. O arquivo contém configuração sensível e exige acesso restrito.
Limites ainda sem validação¶
- Restauração completa em ambiente isolado.
- Política efetiva de retenção dessas cópias no armazenamento externo.
- Entrega de alerta externo quando o backup falha ou deixa de executar.
O arquivo de último sucesso permanece com a data anterior quando uma tentativa falha. Por isso, conferir sua idade e os registros de execução, não apenas a existência do arquivo. O registro de hoje foi inspecionado; o objeto remoto não foi baixado novamente durante esta revisão.
Recuperação¶
A sequência abaixo é um roteiro a ensaiar, não uma restauração já comprovada:
- Escolher uma cópia e conferir sua integridade em destino isolado.
- Preservar os dados atuais antes de qualquer substituição.
- Preparar as mesmas versões dos três componentes e a configuração necessária.
- Restaurar o conjunto persistente de Milvus, etcd e MinIO com os serviços parados.
- Recuperar as credenciais e a configuração do painel quando necessário.
- Iniciar os componentes e testar autenticação, coleções e uma busca conhecida.
- Somente após validação, decidir a substituição do serviço ativo.
Nunca extrair a cópia sobre dados de um serviço em execução. Não remover volumes como tentativa de corrigir indisponibilidade.
Quando falha¶
| Sintoma | O que conferir |
|---|---|
| Acesso recusado | Credencial, permissões e formato de autenticação |
| Erro de certificado ou conexão | Domínio, HTTPS na porta 443 e rota do Traefik |
| Serviço indisponível perto de 04h45 | Execução do backup e retomada dos três componentes |
| Container saudável, mas consulta falha | Operação real da API, autenticação, coleção e logs |
| Busca rejeitada | Campo vetorial, dimensão, índice e parâmetros da coleção |
| Resultado sem relevância | Modelo dos vetores, conteúdo indexado, filtros e métrica de busca |
| Último backup antigo | Registros da rotina, espaço local e acesso ao armazenamento externo |
Use também o roteiro de telemetria para investigar recursos do servidor. Métricas saudáveis não substituem uma consulta funcional ao Milvus.