VapVup👤
← Voltar
🛡️

Tolerância a Falhas

Tolerância a falhas é a capacidade de um sistema continuar funcionando mesmo quando partes dele falham. O objetivo não é evitar falhas, mas lidar com elas de forma elegante.

Analogia

O Disjuntor Elétrico

Quando há sobrecarga na rede elétrica, o disjuntor desarma para proteger toda a casa. Sem ele, um curto em um aparelho queimaria tudo. O Circuit Breaker faz o mesmo: quando um serviço está falhando, ele 'desarma' e para de fazer chamadas, protegendo o resto do sistema.

💡Conceito

Circuit Breaker

O Circuit Breaker monitora falhas em chamadas externas. Após um número de falhas consecutivas, ele abre o circuito e retorna erro imediatamente sem tentar a chamada. Periodicamente, permite uma tentativa para verificar se o serviço voltou.

💡Conceito

Retry com Exponential Backoff

Ao invés de tentar novamente imediatamente (e sobrecarregar o serviço), cada retry espera mais tempo: 1s, 2s, 4s, 8s. Isso dá tempo ao serviço para se recuperar sem ser bombardeado.

🔧Exemplo

Chamada HTTP com Retry e Backoff

Implementação simples de retry com backoff exponencial para uma chamada que pode falhar temporariamente.

async function fetchComRetry(url: string, tentativas = 3): Promise<Response> {
  for (let i = 0; i < tentativas; i++) {
    try {
      const response = await fetch(url);
      if (response.ok) return response;
      throw new Error(`Status ${response.status}`);
    } catch (erro) {
      if (i === tentativas - 1) throw erro;
      const espera = Math.pow(2, i) * 1000; // 1s, 2s, 4s
      console.log(`Tentativa ${i + 1} falhou. Retry em ${espera}ms...`);
      await new Promise(r => setTimeout(r, espera));
    }
  }
}
💡Conceito

Bulkhead (Antepara)

Assim como um navio tem compartimentos isolados para que um furo não afunde tudo, o padrão Bulkhead isola recursos entre serviços. Se um serviço travar, ele não consome todas as threads/conexões dos outros.

🗺️Analogia

Plano B: O Fallback

Quando a internet cai, o GPS do celular usa os mapas offline. Ele não para de funcionar — oferece uma alternativa degradada. Fallback é ter um plano B: se o serviço principal falha, retorne dados do cache, um valor padrão ou uma resposta simplificada.