Post

Service Mesh e Resiliência

Service Mesh e Resiliência

Você começou com 3 microserviços e era fácil. Agora você tem 50. As chamadas entre eles estão gerando timeouts aleatórios, erros em cascata e você não faz ideia de onde está o problema. Bem-vindo ao “Inferno dos Microserviços”. Vamos ver como o Service Mesh e estratégias de resiliência podem te salvar.

A Rede é Não Confiável

Em sistemas distribuídos, a rede vai falhar. O seu objetivo não é evitar a falha, mas sobreviver a ela sem que o sistema inteiro colapse.

1. Service Mesh (O Zelador da Rede)

Ferramentas como Istio ou Linkerd adicionam um “proxy” (Sidecar) ao lado de cada microserviço. Esse proxy cuida de toda a comunicação de rede para você.

  • Observabilidade: Você vê o mapa de quem chama quem e onde estão os gargalos.
  • Segurança: mTLS automático entre todos os serviços.
  • Controle de Tráfego: Implementa retries e circuit breakers a nível de rede, sem você precisar mudar uma linha de código Java.

2. Retries com Exponential Backoff

Se um serviço falha, tentar novamente imediatamente pode ser pior (você acaba dando um ataque de negação de serviço - DoS - em si mesmo).

  • Exponential Backoff: Espere 100ms, depois 200ms, 400ms, 800ms…
  • Jitter: Adicione um valor aleatório (ex: 412ms em vez de 400ms) para evitar que todas as instâncias tentem novamente exatamente ao mesmo tempo (Thundering Herd Problem).

3. Circuit Breaker (O Disjuntor)

Como vimos em posts anteriores, se o Serviço B está morto, o Serviço A deve parar de chamá-lo imediatamente para não travar suas próprias threads. O Service Mesh pode fazer isso de forma transparente.

4. Timeout Estratégico

Nunca use o timeout padrão (geralmente infinito ou muito longo). Cada chamada deve ter um timeout definido baseado no seu SLA. “Se o serviço de E-mail não responder em 2 segundos, eu desisto e sigo em frente”.

O Plano de Ação para 50 Microserviços

  1. Centralize Logs e Traces: Use ferramentas como Jaeger ou Zipkin para rastrear uma requisição desde o Gateway até o último banco de dados.
  2. Implemente Saúde (Health Checks): O Kubernetes precisa saber quando matar uma instância que parou de responder.
  3. Adote um Service Mesh: Se a complexidade de rede está te consumindo, deixe que a infraestrutura resolva o roteamento e a resiliência.

Conclusão: A Falha como Certeza

Como Werner Vogels, CTO da Amazon, famosamente disse: “Everything fails, all the time”. Em uma arquitetura de 50 ou 500 microserviços, a questão não é se um componente vai falhar, mas quão bem o restante do ecossistema vai isolar essa falha. Adotar Service Mesh e padrões de resiliência não é um luxo tecnológico, é a implementação prática da filosofia de que o design do sistema deve ser orientado à sobrevivência em um ambiente inerentemente hostil e imprevisível.

This post is licensed under CC BY 4.0 by the author.