🚀 Experimente o Zilliz Cloud, o Milvus totalmente gerenciado, gratuitamente—experimente um desempenho 10x mais rápido! Experimente Agora>>

milvus-logo
LFAI
  • Home
  • Blog
  • Otimização da comunicação de dados: Milvus adopta o serviço de mensagens NATS

Otimização da comunicação de dados: Milvus adopta o serviço de mensagens NATS

  • Engineering
November 24, 2023
Zhen Ye

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. Defina server.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.

  • initializeTimeoutcontrola 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.

  1. Antes de iniciar a migração, interrompa todas as operações de gravação no Milvus.

  2. 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.

  3. Modifique o ficheiro de configuração do Milvus, definindo mq.type=natsmq e ajustando as opções relevantes na secção natsmq.

  4. Inicie o Milvus 2.3.

  5. 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 testeMQcontagem de operaçõescusto por operaçãoCusto de memóriaTempo total da CPUCusto de armazenamento
5MB*100 Pub/SubNATS501.650328186 s/op4,29 GB85.5825G
5MB*100 Pub/SubRocksMQ502.475595131 s/op1,18 GB81.4219G
1MB*500 Pub/SubNATS502.248722593 s/op2,60 GB96.5025G
1MB*500 Pub/SubRocksMQ502.554614279 s/op614,9 MB80.1919G
64KB*10000 Pub/SubNATS502.133345262 s/op3,29 GB97.5931G
64KB*10000 Pub/SubRocksMQ503.253778195 s/op331,2 MB134.624G
1KB*50000 Pub/SubNATS502.629391004 s/op635,1 MB179.672.6G
1KB*50000 Pub/SubRocksMQ500.897638581 s/op232,3 MB60.42521M

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étricasRocksMQ (ms)NATS (ms)
Latência média de pesquisa vetorial23.5520.17
Pedidos de pesquisa vetorial por segundo (RPS)2.953.07
Latência média de consulta7.26.74
Pedidos de consulta por segundo (RPS)1.471.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.

Like the article? Spread the word

Continue Lendo