Middleware de mensagens é uma tecnologia de middleware composta por um mecanismo de transmissão de mensagens ou modo fila de mensagens, que utiliza um mecanismo de mensagens eficiente e confiável para troca de dados independente da plataforma e integra sistemas distribuídos baseados na comunicação de dados. Atualmente, existem muitos produtos MQ na indústria, como RabbitMQ, ActiveMQ, ZeroMQ, etc., que são excelentes middleware de mensagens, mas qual deles devemos escolher no projeto? Este artigo avalia e compara os seguintes produtos de fila de mensagens: RabbitMQ, ZeroMQ, ActiveMQ, MSMQ, Redis e memcacheQ
Digressão: Aqui podemos primeiro pensar em uma pequena pergunta: "Por que precisamos de serviços de fila de mensagens em aplicações web?" ” Por exemplo, um grande número de solicitações de inserção, atualização e outras chegam ao MySQL ao mesmo tempo, levando diretamente a inúmeros bloqueios de linha e tabela, e até mesmo em muitos pedidos no final, disparando assim muitos erros de conexão. Ao usar filas de mensagens, podemos processar requisições de forma assíncrona, aliviando a pressão sobre o sistema.
RabbitMQ É uma fila de mensagens de código aberto escrita em Erlang, que suporta muitos protocolos: AMQP, XMPP, SMTP, STOMP, o que a torna muito pesada e mais adequada para desenvolvimento em nível empresarial. É uma implementação líder do protocolo AMQP, que implementa uma arquitetura de corretor, o que significa que as mensagens podem ser enfileiradas em um nó central antes de serem enviadas ao cliente. Há bom suporte para roteamento, balanceamento de carga ou persistência de dados. Esse recurso torna o RabbitMQ fácil de usar e implantar, adequado para muitos cenários como roteamento, balanceamento de carga ou persistência de mensagens, e pode ser feito com apenas algumas linhas de código em filas de mensagens. No entanto, isso torna o nó menos escalável e mais lento porque o nó central aumenta a latência e é maior após o encapsulamento da mensagem. Para configurar o RabbitMQ, você precisa instalar o ambiente Erlang na máquina de destino. Clique para ver esta imagem em uma nova janela
? MQ(ZeroMQ) É conhecido como o sistema de fila de mensagens mais rápido, especialmente para cenários de demanda de alta produtividade. É um sistema de mensagens muito leve desenvolvido especificamente para cenários de alta taxa e baixa latência, e frequentemente pode ser encontrado em aplicações no mundo financeiro. Comparado ao RabbitMQ, o ZeroMQ suporta muitos cenários avançados de mensagens, mas você precisa implementar blocos individuais no framework ZeroMQ (como sockets ou dispositivos, etc.).
? O MQ (ZeroMQ) pode implementar filas avançadas/complexas que o RabbitMQ não é bom em fazer, mas os desenvolvedores precisam combinar múltiplos frameworks técnicos por conta própria, e a complexidade técnica é um desafio para a aplicação bem-sucedida desse MQ. O ZeroMQ tem um modelo único sem middleware, onde você não precisa instalar e rodar um servidor de mensagens ou middleware porque sua aplicação desempenha esse papel de serviço. Tudo o que você precisa fazer é simplesmente consultar a biblioteca ZeroMQ, que pode ser instalada usando NuGet, e você pode enviar mensagens entre aplicativos com prazer. No entanto, o ZeroMQ fornece apenas filas não persistentes, o que significa que, se a máquina cair, os dados serão perdidos. Entre elas, o Storm do Twitter usa o ZeroMQ como transmissão de fluxos de dados. ZeroMQ é muito flexível, mas você precisa aprender seu manual de 80 páginas (se você está escrevendo sobre um sistema distribuído, não deixe de ler).
ZeroMQ não possui arquitetura de middleware e não requer processos ou execuções de serviço. Na verdade, o endpoint da sua aplicação desempenha esse papel de serviço. Isso torna muito simples implantar, mas a preocupação é que você não tem onde observar se algo der errado. Até onde sabemos, o ZeroMQ oferece apenas filas não persistentes. Você pode implementar suas próprias capacidades de auditoria e recuperação de dados onde precisar. Clique para ver esta imagem em uma nova janela
MSMQ Essa é a única coisa no produto da Microsoft que é considerada valiosa. Se o MSMQ conseguir provar que consegue lidar com esse tipo de tarefa, eles vão optar por usá-lo. O ponto é que isso não é complicado, nada além de receber e enviar; Ele possui algumas limitações rígidas, como o tamanho máximo da mensagem de 4MB. No entanto, pode resolver esses problemas conectando-se a softwares como MassTransit ou NServiceBus. Clique para ver esta imagem em uma nova janela
Jafka/Kafka Kafka (que distribui mensagens entre diferentes nós) é um sistema MQ distribuído desenvolvido e de código aberto pelo LinkedIn em dezembro de 2010, e agora é um projeto de incubação do Apache, um sistema de enfileiramento de mensagens distribuído de alto desempenho multi-idiomas para publicar/assinar, e Jafka está incubado sobre Kafka, que é uma versão atualizada do Kafka. Possui as seguintes características: persistência rápida, que pode persistir mensagens sob a sobrecarga do sistema de O(1); alta taxa de throughput, que pode atingir uma taxa de 10W/s em um servidor comum; Sistema totalmente distribuído, corretor, produtor e consumidor suportam nativamente o sistema distribuído e alcançam automaticamente o equilíbrio complexo. Suporta carregamento paralelo de dados Hadoop, que é uma solução viável para dados de log e sistemas de análise offline como o Hadoop, mas com as limitações do processamento em tempo real. Kafka unifica o processamento de mensagens online e offline por meio do mecanismo de carregamento paralelo do Hadoop, que também é importante para o sistema estudado neste tema. Apache Kafka é um sistema de mensagens muito leve em relação ao ActiveMQ e, além de ter um desempenho muito bom, também é um sistema distribuído que funciona bem. Clique para ver esta imagem em uma nova janela
Apache ActiveMQ ActiveMQ está em algum lugar entre os dois (RabbitMQ e ZeroMQ), semelhante ao ZemoMQ, e pode ser implantado tanto em modos proxy quanto P2P. Semelhante ao RabbitMQ, é fácil implementar cenários avançados e requer baixo consumo. O ActiveMQ é conhecido como a espinha dorsal do mundo Java. Tem uma longa história e é amplamente utilizada. Também é multiplataforma, oferecendo um ponto de acesso natural para integração para produtos que não estão na plataforma da Microsoft. No entanto, só é possível ser considerado se já tiver passado do MSMQ. Para configurar o ActiveMQ, você precisa instalar o ambiente Java na máquina de destino. Clique para ver esta imagem em uma nova janela É importante notar que o produto de próxima geração da ActiveMQ é o Apollo, que é baseado no protótipo ActiveMQ e é uma ferramenta de corredor de mensagens mais rápida, confiável e fácil de manter. A Apache chama o Apollo de servidor STOMP (Protocolo de Mensagens Orientadas a Texto em Streaming) mais rápido e robusto. As características do Apollo são as seguintes: Os protocolos Stomp 1.0 e Stomp 1.1 são suportados Tópicos e filas Navegador de Fila Assinaturas persistentes de temas Fila espelhada Mensagens confiáveis Expiração e troca de mensagens Seletor de mensagens JAAS verificado Autorização baseada em ACL Suporte a SSL/TLS e validação de certificados API de Gerenciamento REST Clique para ver esta imagem em uma nova janela
Redis É um banco de dados NoSQL Chave-Valor, que é ativamente desenvolvido e mantido, embora seja um sistema de armazenamento de banco de dados Chave-Valor, mas suporta funções MQ, podendo ser usado como um serviço de fila leve. Para as operações de onboarding e out-queue do RabbitMQ e do Redis, 1 milhão de vezes cada, e o tempo de execução é registrado a cada 100.000 vezes. Os dados do teste são divididos em quatro tamanhos diferentes: 128Bytes, 512Bytes, 1K e 10K. Experimentos mostram que, ao entrar na equipe, o desempenho do Redis é maior do que o do RabbitMQ quando a comparação de dados é pequena, e se o tamanho dos dados ultrapassar 10K, o Redis é insuportavelmente lento. Ao sair da equipe, Redis apresentou desempenho muito bom independentemente do tamanho dos dados, enquanto o desempenho do RabbitMQ foi muito menor que o do Redis.
MemcacheQ Fila de mensagens persistentes Memcacheq (MCQ, para abreviar) é uma fila de mensagens leve, com recursos do MemcacheQ: 1 Simples e fácil de usar 2 Processamento rápido 3 Filas múltiplas 4 Bom desempenho em concorrência 5 Compatível com o protocolo Memcache. Isso significa que basta instalar a extensão memcache, sem necessidade de plugins adicionais. 6 Também é conveniente de usar no framework Zend.
No fim das contas, estes produtos: 1. Ambos possuem suas próprias APIs de cliente ou suportam múltiplas linguagens de programação; 2. Há muita documentação; 3. Apoio positivo foi oferecido. 4. ActiveMQ, RabbitMQ, MSMQ, Redis precisam iniciar processos de serviço, que podem ser monitorados e configurados, e os outros são problemáticos 5. Todos eles oferecem confiabilidade (consistência) relativamente boa, escalabilidade e balanceamento de carga, e claro, desempenho
Não vou falar bobagem aqui, abaixo está um conjunto de resultados de testes interceptados da Internet. O número de mensagens enviadas e recebidas por segundo é exibido. Todo o processo gerou um total de 1 milhão de mensagens de 1K. O teste foi realizado em uma máquina independente com Windows Vista.
Como você pode ver, ZeroMQ não é um nível como nenhum outro. Seu desempenho é surpreendentemente alto. Apesar disso, este produto não oferece persistência de mensagens, não consegue armazenar e monitorar facilmente processos intermediários, e requer autoauditoria e recuperação de dados, portanto não é satisfatório em termos de facilidade de uso e HA. A conclusão é clara: se você quer que um aplicativo envie mensagens o mais rápido possível, você escolhe ZeroMQ. É mais valioso quando você não se importa muito em perder certas mensagens por acaso.
O blogueiro neste artigo espera (e não espera muito) usar o Rabbit, o Rabbitmq tem um sistema embutido, se você formar um cluster, não há necessidade de se preocupar com problemas como balanceamento de carga, e você pode configurar um espelho de fila. Mas esse tipo de coisa é que deveria haver mais testes, e você acaba com um favorito, e tudo que ouvi e li sobre o Rabbit me faz sentir que deveria ser a melhor escolha.
|