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.
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.
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.
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.
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));
}
}
}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.
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.