Microsserviços

Seus microsserviços estão prontos para falhar?

Quando estamos trabalhando com microsserviços ou qualquer sistema distribuído, uma coisa é certa: falhas vão acontecer.

Redes instáveis, serviços sobrecarregados ou até mesmo falhas inesperadas em um servidor…

A questão não é se vai falhar, mas quando vai falhar.

É aí que entram os patterns de resiliência, que ajudam a manter seu sistema funcionando mesmo em situações como essas.

Vamos explorar um pouco sobre dois dos mais importantes padrões: Circuit Breaker Pattern e Retry Pattern.

Circuit Breaker Pattern

Imagine que um dos seus microsserviços está tentando se comunicar com outro serviço, mas esse segundo serviço está sobrecarregado ou fora do ar.

O serviço que faz a chamada (upstream) continua enviando requisições repetidamente, sem receber resposta.

Isso gera um acúmulo de tentativas falhas e consome recursos como threads, CPU e memória no upstream, resultando em latência elevada e timeouts neste serviço.

Embora o problema original esteja no serviço de destino (downstream), o upstream também começa a sofrer com o acúmulo de tentativas, o que pode sobrecarregar todo o sistema e gerar um efeito cascata.

O serviço upstream começa a falhar, afetando outros serviços que dependem dele, potencialmente levando a uma indisponibilidade generalizada.

O Circuit Breaker Pattern entra em ação para prevenir esse cenário, evitando falhas em cascata e mantendo o sistema resiliente.

Quando uma série de falhas consecutivas é detectada, uma espécie de “disjuntor” é aberto no serviço upstream, impedindo que novas requisições sejam enviadas temporariamente ao serviço downstream.

Isso protege o serviço upstream de sobrecarga e também dá tempo para que o serviço downstream se recupere.

Sem essa pausa, o serviço downstream continuaria a ser bombardeado por requisições, agravando ainda mais o problema.

O circuito passa por três estados:

  • Fechado: o sistema opera normalmente, enviando requisições.
  • Aberto: após várias falhas consecutivas, o circuito “abre” e bloqueia novas requisições.
  • Meio-aberto: depois de um período de tempo, o sistema tenta uma nova requisição para verificar se o serviço downstream está disponível novamente.

Retry Pattern

O Retry Pattern é exatamente o que parece: ele faz uma nova tentativa quando uma requisição falha.

Se uma requisição falha devido a um problema temporário, como uma pequena instabilidade na rede, o Retry Pattern faz com que a aplicação tente repetir a operação após um curto intervalo.

Ele é muito útil em situações em que a falha pode ser transitória, ou seja, algo que pode se resolver em questão de segundos.

Funciona assim:

Quando ocorre uma falha (exemplo: uma exceção de timeout), o sistema aguarda um intervalo de tempo (que pode ser progressivo) e tenta novamente.

Isso pode ser feito um número limitado de vezes (com contagem de tentativas) para evitar requisições infinitas.

Uma combinação bem comum é o uso do Retry Pattern junto com o Circuit Breaker Pattern. 

Primeiro, o sistema tenta algumas vezes (Retry). Se o problema persistir, o Circuit Breaker intervém para parar as tentativas e proteger o sistema.

Legal, né?

Esses são apenas dois dos padrões mais utilizados para garantir a resiliência dos seus microsserviços. Implementando esses padrões, você pode reduzir significativamente o impacto de falhas inesperadas no seu sistema.

E aí, você já implementou esses padrões nos seus microsserviços?

Na nova formação Especialista Microsserviços nós vamos abordar estes e diversos outros patterns de resiliência.

Em breve vou compartilhar mais detalhes para quem estiver na lista de espera. Faça seu cadastro agora para não perder.

Um abraço.

Fundador da AlgaWorks, uma das principais escolas de desenvolvimento Java e front-end do Brasil. Autor de diversos livros e cursos de Java e front-end. Palestrante no JavaOne San Francisco em 2016, a maior conferência de Java do mundo. Programador desde os 14 anos de idade (1995), quando desenvolveu o primeiro jogo de truco online e multiplayer (que ficou bem famoso na época).

Olá,

o que você achou deste conteúdo? Conte nos comentários.

Junte-se a mais de 100.000 pessoas

Entre para nossa lista e receba conteúdos exclusivos e com prioridade

Você se Inscreveu com Sucesso!