Otimização da comunicação de dados: Milvus adopta o serviço de mensagens NATS
Na intrincada tapeçaria do processamento de dados, a comunicação sem falhas é o fio condutor que une as operações. Milvus, a inovadora base de dados vetorial de código aberto, embarcou numa viagem transformadora com a sua mais recente funcionalidade: Integração de mensagens NATS. Nesta publicação abrangente do blogue, vamos desvendar os meandros desta integração, explorando as suas principais funcionalidades, o processo de configuração, as vantagens da migração e a forma como se compara com o seu antecessor, o RocksMQ.
Compreender o papel das filas de mensagens no Milvus
Na arquitetura nativa da nuvem do Milvus, a fila de mensagens, ou Log Broker, tem uma importância fundamental. É a espinha dorsal que garante fluxos de dados persistentes, sincronização, notificações de eventos e integridade dos dados durante as recuperações do sistema. Tradicionalmente, o RocksMQ era a escolha mais direta no modo Milvus Standalone, especialmente quando comparado com o Pulsar e o Kafka, mas as suas limitações tornaram-se evidentes com dados extensos e cenários complexos.
O Milvus 2.3 apresenta o NATS, uma implementação de MQ de nó único, redefinindo a forma de gerenciar fluxos de dados. Ao contrário dos seus antecessores, o NATS liberta os utilizadores do Milvus das restrições de desempenho, proporcionando uma experiência perfeita no tratamento de volumes de dados substanciais.
O que é NATS?
NATS é uma tecnologia de conetividade de sistemas distribuídos implementada em Go. Suporta vários modos de comunicação como Request-Reply e Publish-Subscribe entre sistemas, fornece persistência de dados através do JetStream, e oferece capacidades distribuídas através do RAFT incorporado. Pode consultar o site oficial do NATS para uma compreensão mais detalhada do NATS.
No modo Milvus 2.3 Standalone, NATS, JetStream e PubSub fornecem ao Milvus capacidades robustas de MQ.
Habilitando o NATS
O Milvus 2.3 oferece uma nova opção de controlo, mq.type
, que permite aos utilizadores especificar o tipo de MQ que pretendem utilizar. Para habilitar o NATS, configure mq.type=natsmq
. Se você vir logs semelhantes aos abaixo depois de iniciar instâncias do Milvus, você habilitou com sucesso o NATS como a fila de mensagens.
[INFO] [dependency/factory.go:83] ["try to init mq"] [standalone=true] [mqType=natsmq]
Configurando o NATS para o Milvus
As opções de personalização do NATS incluem a especificação da porta de escuta, o diretório de armazenamento do JetStream, o tamanho máximo da carga útil e o tempo limite de inicialização. O ajuste fino dessas configurações garante desempenho e confiabilidade ideais.
natsmq:
server: # server side configuration for natsmq.
port: 4222 # 4222 by default, Port for nats server listening.
storeDir: /var/lib/milvus/nats # /var/lib/milvus/nats by default, directory to use for JetStream storage of nats.
maxFileStore: 17179869184 # (B) 16GB by default, Maximum size of the 'file' storage.
maxPayload: 8388608 # (B) 8MB by default, Maximum number of bytes in a message payload.
maxPending: 67108864 # (B) 64MB by default, Maximum number of bytes buffered for a connection Applies to client connections.
initializeTimeout: 4000 # (ms) 4s by default, waiting for initialization of natsmq finished.
monitor:
trace: false # false by default, If true enable protocol trace log messages.
debug: false # false by default, If true enable debug log messages.
logTime: true # true by default, If set to false, log without timestamps.
logFile: /tmp/milvus/logs/nats.log # /tmp/milvus/logs/nats.log by default, Log file path relative to .. of milvus binary if use relative path.
logSizeLimit: 536870912 # (B) 512MB by default, Size in bytes after the log file rolls over to a new one.
retention:
maxAge: 4320 # (min) 3 days by default, Maximum age of any message in the P-channel.
maxBytes: # (B) None by default, How many bytes the single P-channel may contain. Removing oldest messages if the P-channel exceeds this size.
maxMsgs: # None by default, How many message the single P-channel may contain. Removing oldest messages if the P-channel exceeds this limit.
Observação:
É necessário especificar
server.port
para a escuta do servidor NATS. Se houver um conflito de portas, o Milvus não poderá iniciar. Definaserver.port=-1
para selecionar aleatoriamente uma porta.storeDir
especifica o diretório para o armazenamento do JetStream. Recomendamos que o diretório seja armazenado em uma unidade de estado sólido (SSD) de alto desempenho para melhorar a taxa de transferência de leitura/gravação do Milvus.maxFileStore
define o limite superior do tamanho do armazenamento do JetStream. Exceder este limite impedirá a escrita de mais dados.maxPayload
limita o tamanho das mensagens individuais. Deve manter-se acima dos 5MB para evitar rejeições de escrita.initializeTimeout
controla o tempo limite de inicialização do servidor NATS.monitor
configura os registos independentes do NATS.retention
controla o mecanismo de retenção das mensagens NATS.
Para mais informações, consulte a documentação oficial do NATS.
Migrando do RocksMQ para o NATS
A migração do RocksMQ para o NATS é um processo contínuo que envolve etapas como a interrupção de operações de gravação, a descarga de dados, a modificação de configurações e a verificação da migração por meio dos logs do Milvus.
Antes de iniciar a migração, interrompa todas as operações de gravação no Milvus.
Executar a operação
FlushALL
no Milvus e aguardar a sua conclusão. Este passo assegura que todos os dados pendentes são eliminados e que o sistema está pronto para ser encerrado.Modifique o ficheiro de configuração do Milvus, definindo
mq.type=natsmq
e ajustando as opções relevantes na secçãonatsmq
.Inicie o Milvus 2.3.
Faça uma cópia de segurança e limpe os dados originais armazenados no diretório
rocksmq.path
. (Opcional)
NATS vs. RocksMQ: um confronto de desempenho
Teste de desempenho do Pub/Sub
Plataforma de teste: Chip M1 Pro / Memória: 16 GB
Cenário de teste: Assinatura e publicação de pacotes de dados aleatórios num tópico repetidamente até que o último resultado publicado seja recebido.
Resultados:
Para pacotes de dados menores (< 64kb), o RocksMQ supera o NATS em relação à memória, CPU e velocidade de resposta.
Para pacotes de dados maiores (> 64kb), o NATS supera o RocksMQ, oferecendo tempos de resposta muito mais rápidos.
Tipo de teste | MQ | contagem de operações | custo por operação | Custo de memória | Tempo total da CPU | Custo de armazenamento |
---|---|---|---|---|---|---|
5MB*100 Pub/Sub | NATS | 50 | 1.650328186 s/op | 4,29 GB | 85.58 | 25G |
5MB*100 Pub/Sub | RocksMQ | 50 | 2.475595131 s/op | 1,18 GB | 81.42 | 19G |
1MB*500 Pub/Sub | NATS | 50 | 2.248722593 s/op | 2,60 GB | 96.50 | 25G |
1MB*500 Pub/Sub | RocksMQ | 50 | 2.554614279 s/op | 614,9 MB | 80.19 | 19G |
64KB*10000 Pub/Sub | NATS | 50 | 2.133345262 s/op | 3,29 GB | 97.59 | 31G |
64KB*10000 Pub/Sub | RocksMQ | 50 | 3.253778195 s/op | 331,2 MB | 134.6 | 24G |
1KB*50000 Pub/Sub | NATS | 50 | 2.629391004 s/op | 635,1 MB | 179.67 | 2.6G |
1KB*50000 Pub/Sub | RocksMQ | 50 | 0.897638581 s/op | 232,3 MB | 60.42 | 521M |
Tabela 1: Resultados dos testes de desempenho Pub/Sub
Teste de integração Milvus
Tamanho dos dados: 100M
Resultado: Em testes extensivos com um conjunto de dados de 100 milhões de vectores, o NATS demonstrou uma menor latência de pesquisa e consulta de vectores.
Métricas | RocksMQ (ms) | NATS (ms) |
---|---|---|
Latência média de pesquisa vetorial | 23.55 | 20.17 |
Pedidos de pesquisa vetorial por segundo (RPS) | 2.95 | 3.07 |
Latência média de consulta | 7.2 | 6.74 |
Pedidos de consulta por segundo (RPS) | 1.47 | 1.54 |
Tabela 2: Resultados dos testes de integração do Milvus com o conjunto de dados 100m
Conjunto de dados: <100M
Resultado: Para conjuntos de dados menores que 100M, NATS e RocksMQ apresentam desempenho semelhante.
Conclusão: Capacitando o Milvus com mensagens NATS
A integração do NATS no Milvus marca um avanço significativo no processamento de dados. Quer se trate de análises em tempo real, de aplicações de aprendizagem automática ou de qualquer outro empreendimento com utilização intensiva de dados, o NATS confere aos seus projectos eficiência, fiabilidade e rapidez. À medida que o panorama dos dados evolui, dispor de um sistema de mensagens robusto como o NATS no Milvus garante uma comunicação de dados sem falhas, fiável e de elevado desempenho.
- Compreender o papel das filas de mensagens no Milvus
- O que é NATS?
- Habilitando o NATS
- Configurando o NATS para o Milvus
- Migrando do RocksMQ para o NATS
- NATS vs. RocksMQ: um confronto de desempenho
- Conclusão: Capacitando o Milvus com mensagens NATS
On This Page
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word