Comparando Message Brokers

Anderson Magalhaes
4 min readApr 24, 2022

--

Quando estamos usando comunicação assíncrona é comum usarmos um message broker. O broker garante comunicação entre diferentes micro-serviços é confiável e estável, que as mensagens são gerenciadas e monitoradas com um sistema que não deixa mensagens se perderem. São muitos message broker para você escolher, variando de acordo com a escala e a capacidade de dados. Por isso, compararemos os principais: RabbitMQ, Kafka e Redis.

Comunicação de Micro-serviços: Síncrono e Assíncrono

Tem dois caminhos possíveis no desenvolvimento de micro-serviços: síncrono e assíncrono. Em uma comunicação síncrona, o requisitante espera uma resposta antes de enviar uma mensagem de resposta, e isso opera como um REST utilizando o processo HTTP. Ao contrário do assíncrono, em que as mensagens são enviadas sem esperar por uma resposta, que, por sua vez, é adequada para um sistema distribuído e normalmente requer um message broker para gerenciar as mensagens.

O tipo de comunicação escolhido deve considerar diferentes parâmetros, tal como a estrutura do micro-serviço, qual o local que está sua infraestrutura, latência, escala, dependências e o propósito daquela comunicação. Comunicação assíncrona pode ser mais complicada para estabelecer e requer adição de mais componentes na stack, mas as vantagens da comunicação assíncrona se sobressai as desvantagens.

Vantagens da comunicação assíncrona

  • Primeiro e mais importante, a comunicação assíncrona é não-bloqueante por definição.
  • Escala melhor que uma comunicação síncrona.
  • Caso o micro-serviço falhe, possui mecanismos variáveis para recuperação de dados e de modo geral melhora a verificação de erros.
  • Quando usa broker voltado para um protocolo REST, ela não precisa saber como ele funciona, podendo ser adicionada em um serviço que já existe.

Escolhendo o message broker

Comunicação assíncrona é normalmente gerenciada passando por um message broker. Tem outros caminhos, mas dificilmente serão tão escaláveis e normalmente serão mais escassos e limitados.

Ao escolher uma comunicação assíncrona você deve ter em mente:

  • Escala do broker: o número de mensagens enviados por segundo em um sistema.
  • Persistência de dados: a habilidade de recuperar mensagens.
  • Capacidade de consumo: se o broker é capaz de gerenciar o consumo de one-to-one e/ou one-to-many.

One-to-one

O message broker recebe a mensagem de uma aplicação e essa mensagem se destina apenas a uma aplicação.

One-to-many

O message broker recebe a mensagem de uma aplicação e essa mensagem deve ser distribuída para diversas aplicações.

RabbitMQ (AMQP)

Escala: baseado em configurações e recursos, consegue lidar com cerca de 50 mil mensagens por segundo.
Persistência: persistência e transmissão de mensagens são suportados.
Capacidade de consumo: one-to-one e one-to-many

Detalhes:

  • Primeiro message broker
  • Criado em 2007
  • Open-source
  • Envia mensagem ponto-a-ponto e com métodos pub-sub por implementação AMPQ, protocolo avançado de fila de mensagens.
  • Suportado por diversas linguagens (Python, Java, .NET, JavaScript, Go…)

Observação:

  • É esperado algum problema no modo de persistência

Kafka

Escala: pode enviar milhões de mensagens por segundo.
Persistência: sim.
Capacidade de consumo: apenas one-to-many

Detalhes:

  • Criado pelo LinkedIn em 2011.
  • Alta taxa de transferência (throughput).
  • Baixa latência.
  • Replica um serviço de pub-sub.
  • Alta qualidade na troca de mensagens.
  • Possui gerenciamento em SaaS como o Azure, AWS e Confluent.
  • Suportado por diversas linguagens (Python, Java, .NET, JavaScript, Go…).

Redis

Escala: pode enviar milhões de mensagens por segundo.
Persistência: basicamente, não (feita em memória).
Capacidade de consumo: one-to-one e one-to-many
Detalhes:

  • Um pouco diferente do RabbitMQ e do Kafka.
  • Gravação de dados em memória.
  • Considerado um banco noSQL de chave-valor
  • Bem performático para processamento de dados em real-time.
  • Inicialmente não tinha suporte pub-sub. Implementada na v5.

Message broker por casos de usos

RabbitMQ, Kafka e Redis são muito bons no que fazem, mas cada um deles tem suas característica e o melhor modo de utilização. Então há algumas recomendações de uso abaixo.

Mensagens curtas ao vivo

Alternativa: Redis

Por conta do Redis é um banco em memória, perfeito para envio de mensagens curtas e que não precisam de persistência. Inclusive, após a versão 5.0, podemos utilizar também o potencial do pub-sub.

Grande quantidade de dados

Alternativa: Kafka

O ideal para soluções que precisem garantir o armazenamento das mensagens por um tempo e tenha uma grande quantidade de dados, o ideal é utilizar o Kafka. E isso pode acarretar em um custo maior que as outras soluções levando em consideração os recursos utilizados.

Roteamento complexo

Alternativa: RabbitMQ

O ideal para caso de roteamento complexo onde a quantidade de mensagens não é acima de dezenas de milhares de requisições por segundo.

Considere sua Stack

Se você está procurando uma integração fácil e não quer manter diferentes brokers, verifique qual deles se aplica melhor à sua solução.

Por exemplo, se usa o Celery como Fila de Tarefas, seria interessante utilizar o RabbitMQ ou o Redis.

--

--

Anderson Magalhaes
Anderson Magalhaes

Written by Anderson Magalhaes

Software Engineer | Python | NodeJS | FastAPI | Django | React | Typescript | AWS CLF-C02 | Fullstack Developer

No responses yet