Padroes resiliencia sistemas: 9 tecnicas essenciais
Sistemas distribuidos falham. A resiliencia nao evita a falha, mas limita o dano. Estes 9 padroes ajudam a manter o sistema de pe quando algo da errado.
Sistemas distribuidos falham. A resiliencia nao evita a falha, mas limita o dano. Estes 9 padroes ajudam a manter o sistema de pe quando algo da errado.
Sistemas distribuidos falham. Rede instavel, servico lento, banco indisponivel: a lista de possibilidades e longa. Resiliencia nao significa evitar a falha, mas limitar o dano e voltar ao normal rapido. Estes 9 padroes, do mais urgente ao mais estrategico, ajudam a manter o sistema de pe quando algo da errado.
1. Retry
A tentativa repetida de uma operacao que falhou por motivo transitorio. Se um servico respondeu com timeout de 500ms, uma segunda tentativa pode funcionar. O cuidado e com o backoff: esperar um tempo crescente entre tentativas evita sobrecarregar o servico ja fragilizado. Sem backoff, o retry vira ataque de negacao de servico.
2. Circuit Breaker
Quando um servico falha repetidamente, o circuit breaker interrompe as chamadas por um periodo. Isso evita que o cliente fique esperando por um servico morto e que a falha se propague em cascata. O padrao tem tres estados: fechado, aberto e meio-aberto. A transicao entre eles depende de limiares de falha que voce define.
3. Timeout
Toda chamada remota precisa de um limite de tempo. Sem timeout, uma requisicao pode ficar pendente para sempre, consumindo thread e memoria. Um timeout curto demais, porem, descarta respostas lentas mas validas. O valor ideal varia com a latencia normal do servico e precisa ser testado em producao.
4. Bulkhead
O padrao bulkhead isola recursos por tipo de chamada. Se o servico de pagamento esta lento, as threads dedicadas a ele se esgotam, mas as do servico de catalogo continuam disponiveis. E como compartimentos separados em um navio: um buraco nao afunda o barco inteiro. Aplicar exige dimensionar pools de conexao ou threads por dependencia.
5. Fallback
Quando uma operacao falha, o fallback entrega uma resposta alternativa pre-definida. Um servico de recomendacao pode retornar uma lista padrao quando o modelo de ML esta indisponivel. O fallback nao esconde o erro, mas garante que o usuario receba algo util. Definir o que retornar exige pensar no impacto de cada resposta alternativa.
6. Cache
Guardar respostas frequentes em memoria reduz chamadas a servicos lentos ou instaveis. Se o cache esta quente, o sistema responde mesmo quando o servico de origem cai. O risco e servir dados desatualizados. Para dados que mudam pouco, o custo e aceitavel. Para dados criticos, combine cache com validacao periodica.
7. Fila
Em vez de processar uma requisicao de forma sincrona, a fila desacopla o produtor do consumidor. Se o consumidor esta lento, as mensagens se acumulam, mas o produtor nao trava. O padrao e util para tarefas que podem ser processadas em segundo plano. A contrapartida: a resposta ao usuario nao e imediata e exige um mecanismo de consulta posterior.
8. Health Check
Um endpoint de saude permite que o orquestrador saiba se uma instancia esta apta a receber trafego. Sem health check, o balanceador continua enviando requisicoes para uma instancia morta. O check precisa ser honesto: verificar dependencias reais, nao apenas responder 200. Um health check que ignora o banco indisponivel da uma falsa sensacao de seguranca.
9. Redundancia
Ter mais de uma instancia do mesmo servico em zonas de disponibilidade diferentes. Se uma zona cai, a outra assume. E o padrao mais simples de entender e o mais caro de implementar. Exige replicacao de dados e estrategia de failover. Para servicos criticos, o custo se justifica. Para servicos internos, talvez nao.
Qual escolher?
Comece pelos tres primeiros: retry, circuit breaker e timeout. Eles resolvem a maioria das falhas transitorias com baixo custo de implementacao. Depois, avalie bulkhead e fallback para isolar e mitigar falhas parciais. Cache e fila entram quando ha ganho claro de performance ou desacoplamento. Health check e redundancia sao obrigatorios em servicos que nao podem parar.
FAQ
O que e resiliencia em sistemas distribuidos?
Resiliencia e a capacidade de um sistema continuar operando, mesmo que de forma degradada, quando um componente falha. Nao se trata de evitar erros, mas de limitar o impacto deles no usuario final.
Qual a diferenca entre retry e circuit breaker?
Retry tenta a mesma operacao novamente, esperando que a falha seja transitoria. Circuit breaker interrompe as chamadas apos um limite de falhas, para dar tempo ao servico de se recuperar. Eles se complementam: retry cuida do curto prazo, circuit breaker do longo prazo.
Quando usar bulkhead?
Use bulkhead quando uma dependencia lenta pode esgotar recursos compartilhados e afetar outras funcionalidades. E essencial em sistemas com servicos de criticidade diferente, como pagamento e catalogo, onde a falha de um nao deve derrubar o outro.
Fallback substitui o erro?
Nao. Fallback entrega uma resposta alternativa para o usuario, mas o erro continua existindo e precisa ser registrado e monitorado. A resposta alternativa e uma medida de contingencia, nao uma solucao para a causa raiz.
Como medir o impacto dos padroes de resiliencia?
Monitore a taxa de sucesso, a latencia e a disponibilidade antes e depois de aplicar cada padrao. Uma reducao no tempo de resposta e no numero de timeouts indica que a tecnica esta funcionando. Sem medicao, a resiliencia vira achismo.
Qual padrao implementar primeiro?
Retry, circuit breaker e timeout. Eles atacam as falhas mais comuns em sistemas distribuidos e exigem menos mudanca na arquitetura. O custo de implementacao e baixo e o ganho imediato em estabilidade justifica comecar por eles.
Patrícia Lemos
Especialista em dados e analytics
Transforma painel cheio de número em decisão. Cuida de mensuração, dashboard e a métrica que de fato move o negócio.
Ver todos os artigos →