image

Unlimited bootcamps and 750+ courses forever

70
%OFF
Article image
Roni Carvalho
Roni Carvalho03/09/2026 09:27
Share
IBM Bob: IA de Nível Empresarial para Desenvolvedores e Tech LeadersRecommended for youIBM Bob: IA de Nível Empresarial para Desenvolvedores e Tech Leaders

A Saga do Ingresso Perfeito: Parte 2 (Microserviços e Comunicação Assíncrona)

    Dividir para Conquistar

    O que são Microserviços e como a Comunicação Assíncrona salva o Lucas de ficar esperando?

    No episódio anterior, deixamos o Lucas frustrado, encarando uma tela de erro porque o servidor único e gigante (o monolito) do site de ingressos desmoronou sob o peso de milhares de acessos simultâneos. Para evitar que essa tragédia se repita, a equipe de engenharia decidiu adotar uma estratégia clássica: dividir para conquistar.

    O Nascimento dos Especialistas: O que são Microserviços?

    A primeira atitude da equipe foi quebrar o grande monolito em pequenos pedaços independentes chamados Microserviços. Cada microservice é uma aplicação autônoma, focada em realizar uma única função de negócios muito bem realizada.

    Para o nosso sistema de vendas de ingressos, criamos três especialistas:

    1. Serviço de Ingressos (Tickets): Cuida do mapa de assentos e reserva o bilhete.
    2. Serviço de Pagamentos: Comunica-se com o banco ou operadora de cartão para processar a cobrança.
    3. Serviço de Notificação: Envia o e-mail ou mensagem com o QR Code do ingresso.

    Para que essa divisão funcione de verdade e garanta a flexibilidade do sistema, a equipe seguiu duas regras de ouro do design de microserviços:

    • Shared-Nothing (Banco de Dados Isolado): Os microserviços não compartilham o mesmo banco de dados. O Serviço de Ingressos tem seu próprio banco, e o de Pagamentos tem outro. Compartilhar tabelas geraria um acoplamento severo e gargalos de travamento, destruindo a independência deles.
    • Execução Independente: Cada serviço roda em seu próprio ambiente (como containers Docker gerenciados no Kubernetes). Se o Serviço de Notificação cair temporariamente, Lucas ainda conseguirá reservar seu ingresso e pagar por ele; a notificação apenas esperará o serviço voltar para ser enviada.

    O Perigo das Chamadas Bloqueantes (Engavetamento de Requisições)

    Agora que temos serviços separados, eles precisam conversar entre si. A primeira ideia que surge na mente de desenvolvedores iniciantes é fazer com que um serviço chame o outro diretamente usando protocolos síncronos (como uma requisição REST/HTTP comum).

    Nesse cenário, quando Lucas clica em "Comprar":

    1. O Serviço de Ingressos recebe o pedido e bloqueia a tela do Lucas enquanto faz uma chamada HTTP para o Serviço de Pagamento.
    2. O Serviço de Pagamento recebe a chamada e, por sua vez, faz outra chamada HTTP bloqueante para a operadora de cartão de crédito externa.
    3. O cartão demora para responder. Enquanto isso, o servidor de Ingressos e o de Pagamento ficam com suas conexões e threads travadas, gastando memória e processamento precioso apenas esperando.

    Se milhares de fãs fizerem isso ao mesmo tempo, o sistema sofrerá um "engavetamento" — o que na arquitetura de software chamamos de cascata de falhas (cascading failures) ou desastre de integração (integration train wreck). Como cada chamada síncrona prende uma thread do sistema operacional, as máquinas esgotam seus recursos rapidamente e o site inteiro cai.

    image

    Figura 2: Gargalo sistêmico provocado por chamadas síncronas bloqueantes em cadeia.

    A Solução: Desacoplamento Temporal e Mensageria Assíncrona

    Para proteger o sistema desse efeito dominó, a equipe substituiu a comunicação direta e síncrona pela comunicação assíncrona baseada em eventos.

    Em vez de os microserviços ligarem diretamente uns para os outros, nós introduzimos um intermediário neutro: o Message Broker (como o RabbitMQ ou o Apache Kafka). O Broker gerencia canais de comunicação chamados Tópicos (ou filas).

    A mágica acontece através do padrão de Produtores e Consumidores:

    • Produtor: O serviço que gera uma informação importante (um evento) envia essa mensagem ao Broker e segue sua vida imediatamente, sem esperar ninguém responder.
    • Consumidor: Os serviços interessados assinam aquele Tópico. O Broker se encarrega de entregar uma cópia da mensagem para cada um processar no seu próprio ritmo.

    image

    Figura 3: Comunicação assíncrona baseada em eventos via Message Broker.

    Como isso ajuda o Lucas?

    Ao adotar essa arquitetura, a experiência do Lucas muda completamente. Quando ele clica em "Comprar":

    O Serviço de Ingressos valida rapidamente o assento no banco de dados local, faz a reserva temporária e publica um evento chamado ReservaCriada no Broker.

    1. Em vez de fazer o Lucas esperar todo o processamento financeiro, o site retorna imediatamente para o celular dele uma resposta HTTP com o status 202 (Accepted). Isso significa: "Lucas, recebemos seu pedido com sucesso e estamos processando. Pode relaxar!".

    Em segundo plano, de forma totalmente assíncrona, o Serviço de Pagamento consome o evento ReservaCriada e inicia a cobrança sem atrapalhar a navegação do Lucas.

    Essa quebra da dependência de tempo entre os serviços é chamada de desacoplamento temporal. Graças a ela, o sistema ganha uma resiliência incrível: se o processador de pagamentos do banco ficar lento por 10 segundos, as mensagens de compra se acumularão com segurança na fila do Broker. Assim que o banco normalizar, o Serviço de Pagamento processará a fila acumulada sem que o Lucas sequer perceba que houve um problema sistêmico.

    Mas dividir o sistema em vários bancos de dados independentes e usar comunicação assíncrona traz um novo e intrigante mistério. Se os bancos estão separados e as mensagens demoram alguns segundos para viajar de um lado ao outro, como garantimos que o dinheiro do Lucas não seja cobrado sem que ele ganhe o ingresso?

    No próximo episódio, desvendaremos o maior pesadelo dos sistemas distribuídos: O Desafio da Consistência de Dados.

    Share
    Recommended for you
    CI&T - Java AI Copilot
    Itaú - Java com Inteligência Artificial
    Nublify - Primeiros passos em IA e Cloud
    Comments (0)
    Recommended for youIBM Bob: IA de Nível Empresarial para Desenvolvedores e Tech Leaders