Qual é a diferença entre o RabbitMQ e o Redis?
O RabbitMQ é um agente de mensagens, enquanto o Remote Dictionary Server (Redis) é um armazenamento de dados de chaves/valores na memória. No entanto, é possível comparar as duas tecnologias, porque você pode usar ambas para criar um sistema de publicação/assinatura (pub/sub) de mensagens. Na arquitetura de nuvem moderna, as aplicações são desacopladas em blocos de construção menores e independentes chamados de serviços. As mensagens pub/sub fornecem notificações instantâneas de eventos para esses sistemas distribuídos. O RabbitMQ é um agente de mensagens distribuído que coleta dados de streaming de várias fontes e os roteia para diferentes destinos para processamento. O Redis é compatível com um sistema baseado em push em que o publicador distribui mensagens para todos os assinantes quando ocorre um evento.
Como funcionam: RabbitMQ vs. Redis
Tanto o RabbitMQ quanto o Redis permitem que aplicações, microsserviços e componentes de software troquem mensagens de maneiras diferentes.
Fluxo de trabalho do RabbitMQ
O RabbitMQ usa o Advanced Message Queuing Protocol (AMQP) para enviar mensagens com segurança por meio de agentes de mensagens. Um agente de mensagens consiste em trocas e filas. O processo funciona assim:
- O produtor de dados envia mensagens ao RabbitMQ
- Uma troca recebe dados e os encaminha para a respectiva fila de acordo com um conjunto de regras chamadas de associações
- A mensagem permanece na fila até que um consumidor do RabbitMQ a receba
Quando a fila atinge a capacidade máxima, o RabbitMQ impede que os produtores publiquem mensagens até que os consumidores lidem com as mensagens não lidas. O RabbitMQ também pode restaurar mensagens se a troca falhar antes que os consumidores as leiam.
Fluxo de trabalho do Redis
O Redis foi projetado como um servidor de estrutura de dados que aceita várias estruturas de dados, como listas, conjuntos, hashes e bitmaps. Ele permite que as aplicações clientes armazenem, recuperem e processem praticamente qualquer tipo de dados. O Redis organiza os dados armazenados em pares de valores-chave, o que fornece um arranjo estruturado para a assinatura de aplicações clientes.
Por exemplo, você pode separar os dados de comércio eletrônico em nome do cliente, e-mail, itens comprados e chaves de feedback. Depois disso, você publica os dados relevantes para cada chave.
O Redis permite a troca em tempo real de mensagens curtas de retenção. Ele funciona assim:
- O produtor de dados envia mensagens ao Redis
- O nó do Redis verifica a chave da mensagem para identificar assinantes interessados
- O Redis entrega a mensagem a todos os assinantes conectados
Tratamento de mensagens: RabbitMQ vs. do Redis
Tanto o Redis quanto o RabbitMQ fornecem mecanismos de publicação/assinatura (pub/sub) para que as aplicações distribuam mensagens em todo o ambiente de nuvem. No entanto, o tratamento das mensagens difere significativamente.
Leia sobre sistema de publicação e assinatura de mensagens »
Entrega de mensagens
O RabbitMQ usa o Advanced Message Queuing Protocol (AMQP) para oferecer suporte à lógica de roteamento complexa. Ele pode entregar mensagens ponto a ponto ou de um produtor para muitos consumidores. Independentemente dos métodos, todos os consumidores enviam confirmações de mensagem ao produtor para confirmar uma leitura bem-sucedida. Se o produtor não receber uma confirmação, ele fará várias novas tentativas em intervalos diferentes.
Enquanto isso, o Redis simplesmente envia mensagens para todos os assinantes conectados; isso não garante a entrega das mensagens. Um assinante deve estar conectado ao servidor Redis para receber as mensagens. Se o Redis for desconectado, talvez ele não consiga recuperar todas as mensagens.
Tamanho da mensagem
O RabbitMQ pode entregar mensagens maiores sem sofrer uma queda substancial na performance. Ele foi projetado inicialmente para lidar com mensagens de até 2 GB, mas depois o limite foi reduzido para 128 MB.
Por outro lado, o Redis não define um limite para mensagens armazenadas, mas apresenta uma latência notável para mensagens maiores que 1 MB. Portanto, os desenvolvedores geralmente usam o Redis como um cache para processar conjuntos de dados como strings, hashes, listas e conjuntos.
Persistência de mensagens
O RabbitMQ oferece suporte a mensagens persistentes e transitórias. Ao enviar mensagens para a fila persistente, ele grava os dados no armazenamento permanente assim que chegam. O RabbitMQ também grava mensagens transitórias no disco, mas somente se elas excederem a capacidade da memória.
Por outro lado, o Redis não oferece suporte a mensagens persistentes por padrão. Os desenvolvedores devem habilitar um atributo chamado Redis Database (RDB) para tirar snapshots periódicos da RAM e armazená-los em disco. Habilitar a persistência de dados no Redis aumenta a sobrecarga às operações de dados, o que diminui a entrega de mensagens. Outra alternativa é usar técnicas de recuperação, como replicação assíncrona.
Criptografia de mensagens
O RabbitMQ usa SSL para criptografar dados em trânsito entre produtores, agentes e consumidores. A criptografia de mensagens ajuda as organizações a proteger informações confidenciais e reduzir os riscos de dados.
O Redis, por sua vez, não oferece suporte nativo ao SSL. Somente a versão 6.0 e posterior do Redis fornece suporte a SSL. Para habilitar o SSL, os desenvolvedores devem obter certificados SSL do cluster Redis e criar um certificado de cliente para seu banco de dados.
Performance: RabbitMQ vs. do Redis
As diferenças no tratamento de mensagens afetam a performance do RabbitMQ e do Redis em diferentes cenários.
Velocidade
O Redis é muito mais rápido que o RabbitMQ, pois processa mensagens principalmente na memória. No entanto, existe o risco de perder mensagens não lidas se o servidor Redis falhar.
Por outro lado, ao operar no modo persistente, o RabbitMQ aguarda as confirmações de cada consumidor antes de enviar a próxima mensagem. O RabbitMQ também demora mais para armazenar as mensagens no disco, o que diminui a velocidade média de troca de mensagens.
Como comparação, o Redis pode enviar até dezenas de milhões de mensagens por segundo, enquanto o RabbitMQ lida com até dezenas de milhares de mensagens por segundo.
Disponibilidade
O agrupamento, que permite que os sistemas de agentes de mensagens repliquem nós, é tratado de forma diferente no RabbitMQ e no Redis.
Com o RabbitMQ, vários nós que contêm dados e funções relevantes são replicados em um cluster. No entanto, as filas de mensagens não são replicadas nesses nós, que compartilham um relacionamento entre pares. Para fazer isso, os desenvolvedores usam uma fila de mensagens especial que oferece suporte à replicação.
Enquanto isso, o Redis Cluster é um atributo introduzido em versões posteriores do Redis. Ele copia os dados de cada nó líder para um ou vários seguidores. Quando um nó líder falha, o seguidor assume o comando para fornecer entrega de mensagens de alta disponibilidade.
Quando usar: RabbitMQ vs. do Redis
O RabbitMQ supera o Redis em muitas áreas, mas isso não significa que o RabbitMQ seja o melhor sistema de distribuição de mensagens para todas as aplicações.
O Redis funciona melhor em aplicações corporativas que exigem processamento de dados em tempo real e cache de baixa latência. Com seu datastore na memória e suporte para diversas estruturas de dados, o Redis é adequado para realizar computação de dados de baixo nível. Por exemplo, instituições financeiras usam o Redis para armazenar dados transacionais em cache para permitir a detecção de fraudes em tempo real.
Enquanto isso, escolha o RabbitMQ se precisar de um agente de mensagens de microsserviços dedicado com mecanismos de comunicação assíncronos para dar suporte à construção de código e sistema. O RabbitMQ também é mais adequado que o Redis para transferir arquivos grandes entre aplicações. Por exemplo, um sistema que precisa enviar dados de forma confiável entre vários microsserviços pode escolher o RabbitMQ. O sistema se beneficiará da tolerância a falhas do RabbitMQ, da maior capacidade de tratamento de arquivos e dos mecanismos garantidos de entrega de mensagens.
Resumo das diferenças: RabbitMQ vs. do Redis
RabbitMQ |
Redis |
|
Entrega de mensagens |
Entrega de mensagens garantida. Suporta para lógica complexa. |
Não garante a entrega de mensagens. Requer conexão ativa dos assinantes. |
Tamanho da mensagem |
Tamanho da mensagem limitado a 128 MB. Pode lidar com mensagens grandes. |
Não há limite de mensagens, mas a performance diminui para mensagens grandes (maiores que 1 MB). |
Persistência de mensagens |
Oferece suporte a mensagens persistentes e transitórias. Grava mensagens persistentes no disco. |
Por padrão, não oferece suporte a mensagens persistentes. |
Criptografia de mensagens |
Oferece suporte à criptografia SSL. |
Criptografia SSL disponível no Redis 6.0 e versões superiores. |
Velocidade |
Até dezenas de milhares de mensagens por segundo. |
Até milhões de mensagens por segundo. |
Disponibilidade |
Cria vários nós ponto a ponto em um cluster. |
Usa o modelo de líder/seguidor no agrupamento em cluster. |
Como a AWS pode ajudar com seus requisitos de RabbitMQ e Redis?
A Amazon Web Services (AWS) fornece serviços gerenciados para executar seus sistemas de agente de mensagens de código aberto em grande escala. Você pode configurar seus serviços de publicação/assinatura (pub/sub) com facilidade e integrá-los a outros serviços da AWS.
Aqui estão as ofertas da AWS que você pode usar com o Redis e o RabbitMQ:
- Com o Amazon MemoryDB, você pode aumentar a durabilidade ao entregar mensagens no Redis. Você pode executar feeds de dados de transmissão de alta simultaneidade para ingerir atividade do usuário e dar suporte a milhões de solicitações por dia para aplicações de mídia e entretenimento.
- Com o Amazon MQ, você pode provisionar seus agentes RabbitMQ sem configurações demoradas. Ele criptografa as mensagens do RabbitMQ em trânsito e em repouso, o que ajuda a garantir pipelines de dados de alta disponibilidade nas zonas de disponibilidade da AWS.
Em vez do Redis ou do RabbitMQ, também é possível usar o Amazon Simple Notification Service (Amazon SNS) para criar um sistema de publicação/assinatura de mensagens. Você pode enviar mensagens das suas aplicações diretamente para clientes ou outras aplicações de maneira escalável e econômica.
O Amazon SNS oferece vários recursos:
- Mensagens de alta throughput com base em push e de muitos para muitos entre sistemas distribuídos, microsserviços e aplicações sem servidor orientadas por eventos
- Criptografia de mensagens e privacidade de tráfego
- Recursos de fanout em todas as categorias da AWS, como análise, computação, contêineres, bancos de dados, Internet das Coisas (IoT), machine learning, segurança e armazenamento
Comece a usar pub/sub, Redis e RabbitMQ na AWS criando uma conta hoje mesmo.