Em um sistema distribuído utilizando microsserviços, qual padrão de projeto é mais adequado para lidar com falhas temporárias de comunicação entre serviços?
- A)Circuit Breaker
Correta, porque o Circuit Breaker interrompe chamadas repetidas a um serviço instável e evita falhas em cascata.
- B)Singleton
Errada, porque Singleton controla instância única de uma classe, não comunicação entre serviços.
- C)Observer
Errada, porque Observer trata de notificações e atualização de estado, não de tolerância a falhas de rede.
- D)Factory Method
Errada, porque Factory Method é um padrão de criação de objetos, sem relação com falhas temporárias entre serviços.
- E)Proxy
Errada, porque Proxy intermedeia acesso a um recurso, mas não é o padrão mais específico para tratar indisponibilidade temporária de comunicação.
Gabarito: A
Em microsserviços, falhas de comunicação entre serviços são normais e, muitas vezes, temporárias. Em vez de deixar uma chamada em loop infinito ou sobrecarregar um serviço que já está instável, o sistema precisa “se proteger” e parar de insistir por um tempo. É exatamente isso que o padrão Circuit Breaker faz: ele funciona como um disjuntor elétrico, abrindo o circuito quando percebe muitas falhas e evitando que a falha se espalhe. Na prática, o Circuit Breaker monitora erros e timeouts. Se o número de falhas passa de um limite, ele bloqueia novas tentativas por um período e pode devolver uma resposta alternativa ou falha rápida. Depois, ele testa de novo de forma controlada para ver se o serviço voltou ao normal. Isso melhora a resiliência e evita que um serviço ruim derrube toda a cadeia de chamadas. Os outros padrões da lista não resolvem esse problema. Singleton trata de ter apenas uma instância de uma classe, Observer cuida de notificação entre objetos, Factory Method ajuda na criação de objetos e Proxy intermedia acesso a um objeto. Nada disso é voltado especificamente para tolerância a falhas de rede entre serviços. Então, o gabarito A está correto porque Circuit Breaker é o padrão clássico para lidar com falhas temporárias de comunicação em sistemas distribuídos e arquiteturas de microsserviços. Em contexto de provas, ele aparece muito associado a resiliência, timeouts, retries controlados e prevenção de cascata de falhas.