Sistemas de Mensageria e Eventos
Aprenda como arquiteturas orientadas a mensagens e a eventos permitem uma comunicação de backend desacoplada e escalável.
Por que os Sistemas de Mensageria Existem
Sistemas de mensageria reduzem o acoplamento ao permitir que serviços se comuniquem de forma assíncrona por meio de um broker, em vez de chamadas diretas.
- Chamadas diretas entre serviços criam dependências fortes entre sistemas.
- A mensageria introduz um broker que desacopla produtores e consumidores.
- Os serviços podem se comunicar de forma assíncrona sem esperar uns pelos outros.
Detalhes
Em sistemas tradicionais, um serviço chama diretamente outro para concluir uma tarefa. Isso cria um acoplamento forte — se um serviço estiver lento, indisponível ou sobrecarregado, isso afeta diretamente quem fez a chamada.
Os sistemas de mensageria resolvem isso introduzindo um message broker entre os serviços. Em vez de chamar outro serviço diretamente, um serviço envia uma mensagem para o broker, e o serviço receptor a processa de forma independente.
Isso permite comunicação assíncrona. O remetente não precisa esperar o receptor terminar o processamento, o que melhora a responsividade e a resiliência do sistema.
Ao desacoplar os serviços, os sistemas de mensageria facilitam escalar, manter e evoluir componentes individuais sem quebrar o sistema inteiro.
Filas de Mensagens
Uma fila de mensagens permite comunicação assíncrona ao armazenar tarefas até que os consumidores estejam prontos para processá-las.
- Produtores enviam mensagens para uma fila em vez de chamar diretamente outro serviço.
- A fila mantém as mensagens até que os consumidores as processem.
- Isso permite processamento assíncrono e desacopla os componentes do sistema.
Detalhes
Uma fila de mensagens atua como um buffer entre produtores e consumidores. Em vez de exigir processamento imediato, as mensagens são armazenadas na fila até que um consumidor esteja disponível para tratá-las.
Isso permite que os sistemas processem tarefas de forma assíncrona. Por exemplo, uma requisição web pode enfileirar rapidamente uma tarefa (como enviar um e-mail) sem esperar que a tarefa seja concluída.
As filas também melhoram a confiabilidade. Se um consumidor falhar ou estiver temporariamente indisponível, as mensagens permanecem na fila e podem ser processadas depois.
Ao separar produtores e consumidores, as filas de mensagens reduzem as dependências do sistema e permitem que cada componente escale de forma independente.
Publicar / Assinar (Pub/Sub)
Pub/Sub permite que um evento seja distribuído para vários consumidores sem conexões diretas entre eles.
- Os publishers enviam mensagens para um topic em vez de direcioná-las a consumidores específicos.
- Vários subscribers recebem o mesmo evento simultaneamente.
- Esse padrão suporta broadcast de eventos e baixo acoplamento.
Detalhes
No modelo publish/subscribe, um publisher envia mensagens para um topic em vez de diretamente para um consumidor específico.
Os consumers se inscrevem nesse topic e recebem automaticamente quaisquer mensagens publicadas nele. Isso permite que um único evento acione várias ações independentes em todo o sistema.
Por exemplo, quando um usuário se cadastra, um único evento pode notificar vários serviços — como email, analytics, billing e notifications — sem que o publisher precise saber sobre eles.
Esse modelo desacopla producers de consumers e torna os sistemas mais fáceis de विस्तार. Novos subscribers podem ser adicionados ou removidos sem alterar o publisher, o que melhora a flexibilidade e a escalabilidade.
Pub/Sub é amplamente usado em arquiteturas orientadas a eventos, nas quais os sistemas reagem a eventos em vez de depender de comunicação direta e síncrona.
Sistemas Orientados a Eventos
Sistemas orientados a eventos permitem que serviços se comuniquem emitindo e reagindo a eventos, reduzindo dependências diretas entre componentes.
- Os serviços emitem eventos (por exemplo, "User Created") em vez de chamar diretamente outros serviços.
- Vários serviços independentes podem reagir ao mesmo evento sem coordenação.
- Isso desacopla os sistemas, permitindo que cada serviço escale e evolua de forma independente.
Detalhes
Em um sistema orientado a eventos, as ações são disparadas por eventos em vez de chamadas diretas entre serviços. Quando algo acontece — como um novo usuário se cadastrando — o sistema emite um evento descrevendo essa mudança.
Esse evento é enviado por meio de um message broker, onde vários serviços podem se inscrever e reagir a ele. Por exemplo, um único evento "User Created" pode acionar o serviço de e-mail para enviar uma mensagem de boas-vindas, o serviço de analytics para acompanhar o crescimento de usuários e o serviço de billing para inicializar uma conta.
Ao contrário dos sistemas tradicionais de request-response, o produtor do evento não precisa saber quais serviços irão consumi-lo. Isso elimina o acoplamento forte e permite que serviços sejam adicionados, removidos ou modificados sem afetar os outros.
Essa arquitetura melhora a escalabilidade porque cada serviço pode processar eventos no seu próprio ritmo. Ela também melhora a resiliência — se um serviço falhar, os outros podem continuar operando sem serem bloqueados.
No entanto, sistemas orientados a eventos introduzem complexidade, como lidar com a ordem dos eventos, duplicação e consistência eventual entre serviços.
Event Sourcing
Event sourcing armazena cada alteração como um evento, permitindo que o estado do sistema seja reconstruído em qualquer momento no tempo.
- Em vez de armazenar apenas o estado atual, os sistemas armazenam uma sequência de eventos.
- O estado atual é derivado reproduzindo os eventos em ordem.
- Isso permite auditabilidade, rastreamento de histórico e um estado do sistema reproduzível.
Detalhes
Em sistemas tradicionais, os bancos de dados armazenam apenas o estado mais recente dos dados. Event sourcing adota uma abordagem diferente, armazenando cada alteração como um evento em um log somente de acréscimo.
Por exemplo, em vez de armazenar apenas o perfil atual do usuário, o sistema registra eventos como "UserCreated", "EmailUpdated" e "PasswordChanged". Esses eventos representam o histórico completo de alterações.
O estado atual é reconstruído reproduzindo esses eventos em ordem. Isso permite que o sistema reconstrua o estado em qualquer momento no tempo, o que é útil para depuração, auditoria e analytics.
Essa abordagem oferece forte rastreabilidade e torna possível entender exatamente como um sistema chegou ao seu estado atual, mas também introduz complexidade adicional em armazenamento e processamento.
Brokers de Mensagens
Brokers de mensagens atuam como intermediários que gerenciam como as mensagens são armazenadas, roteadas e entregues entre serviços.
- Brokers de mensagens recebem mensagens de produtores e as entregam aos consumidores.
- Eles fornecem garantias como entrega confiável e persistência de mensagens.
- Eles lidam com a lógica de roteamento para garantir que as mensagens cheguem aos consumidores corretos.
Detalhes
Um broker de mensagens fica entre produtores e consumidores, atuando como o sistema central que gerencia o fluxo de mensagens.
Quando um produtor envia uma mensagem, o broker a armazena e garante que ela seja entregue aos consumidores apropriados. Isso elimina a necessidade de os serviços se comunicarem diretamente entre si.
Brokers de mensagens também fornecem garantias de entrega. Dependendo do sistema, as mensagens podem ser persistidas em disco para evitar perda de dados e reenviadas se a entrega falhar.
Eles também lidam com o roteamento, determinando quais consumidores devem receber quais mensagens. Isso pode incluir entrega simples baseada em fila ou padrões mais complexos como tópicos pub/sub.
Ao centralizar essas responsabilidades, brokers de mensagens simplificam a comunicação e tornam os sistemas distribuídos mais confiáveis e escaláveis.
Tecnologias Comuns de Mensageria
Diferentes sistemas de mensageria são projetados para diferentes necessidades de desempenho, confiabilidade e arquitetura.
- Kafka foi criado para streaming de eventos de alta taxa de transferência e logs persistentes.
- RabbitMQ foca na entrega confiável de mensagens e no roteamento flexível.
- NATS é otimizado para comunicação de baixa latência em microservices.
Detalhes
Kafka é uma plataforma distribuída de streaming de eventos projetada para lidar com enormes volumes de dados. Ela armazena mensagens em logs persistentes e permite que consumidores reproduzam eventos, tornando-a adequada para pipelines de analytics e sistemas orientados a eventos.
RabbitMQ é um message broker tradicional que suporta filas e padrões complexos de roteamento. Ele foca na entrega confiável e é comumente usado para processamento de jobs em segundo plano e filas de tarefas.
NATS é um sistema de mensageria leve, projetado para simplicidade e velocidade. Ele oferece comunicação com latência muito baixa e é frequentemente usado em arquiteturas de microservices onde a entrega rápida de mensagens é crítica.
Cada sistema tem diferentes trade-offs. Kafka prioriza throughput e durabilidade, RabbitMQ enfatiza flexibilidade e confiabilidade, e NATS foca em velocidade e simplicidade. Escolher a ferramenta certa depende dos requisitos do sistema.
Mensageria em Sistemas Distribuídos
Sistemas de mensageria coordenam a comunicação entre serviços distribuídos, mantendo-os independentes e escaláveis.
- Os serviços se comunicam por meio de um broker em vez de conexões diretas.
- A mensageria melhora a tolerância a falhas ao armazenar em buffer e tentar reenviar mensagens.
- Ela מאפשר comunicação escalável entre muitos serviços independentes.
Detalhes
Em sistemas distribuídos, vários serviços executam de forma independente e, muitas vezes, em máquinas diferentes. Coordenar a comunicação entre eles se torna um grande desafio.
Os sistemas de mensageria resolvem isso ao introduzir um message broker como uma camada central de comunicação. Os serviços enviam e recebem eventos por meio do broker em vez de chamar uns aos outros diretamente.
Esse desacoplamento melhora a tolerância a falhas. Se um serviço estiver temporariamente indisponível, as mensagens podem permanecer no sistema e ser processadas depois, sem bloquear outros serviços.
Isso também melhora a escalabilidade. Novos serviços podem ser adicionados para consumir eventos sem modificar os existentes, permitindo que o sistema cresça sem dependências rígidas.
Como resultado, os sistemas de mensageria são um componente fundamental nas arquiteturas distribuídas modernas, permitindo um design de sistema flexível, resiliente e escalável.
Seção de Perguntas
1 / 5
Esta lição faz parte do conteúdo premium
Faça upgrade para o plano premium para remover o desfoque e liberar a leitura completa.