Em sistemas distribuídos, chamadas HTTP vão falhar. Resilience não é opcional — é requisito. O .NET 8 integra Polly v8 via Microsoft.Extensions.Http.Resilience.

Por que Resilience?

Chamadas HTTP entre microserviços são inerentemente instáveis. Rede, DNS, deploy, GC pause — qualquer coisa pode causar falha transitória. Sem resilience, uma falha em cascata pode derrubar todo o sistema.

closedHTTP RequestHttpClientRetryexp. backoffCircuit Breakerfail-fastTimeoutper-tryBulkheadconcurrencyExternal APIdownstreamPipeline executa de fora para dentroRetry envolve Circuit Breaker que envolve Timeout

Pipeline de Resilience

No Polly v8, estratégias são compostas em um pipeline. A ordem importa — cada camada envolve a próxima:

EstratégiaO que fazQuando usar
RetryRepete a chamada N vezes com backoffFalhas transitórias (503, timeout, network error)
Circuit BreakerAbre o circuito após muitas falhas consecutivasProteger contra serviço externo degradado
TimeoutCancela a chamada após tempo limiteEvitar threads bloqueadas indefinidamente
BulkheadLimita chamadas concorrentes ao serviçoIsolar recursos entre consumidores
FallbackRetorna valor alternativo em caso de falhaDegradação graciosa (cache, default)
HedgingEnvia request paralelo se o primeiro demoraLatência crítica (P99 optimization)
❓ Qual a diferença entre Polly v7 e Polly v8?
Polly v8 é uma reescrita completa. Usa ResiliencePipeline em vez de Policy. Estratégias são compostas via builder pattern (new ResiliencePipelineBuilder()). É thread-safe por design, suporta CancellationToken nativamente, e se integra com Microsoft.Extensions.Http.Resilience para HttpClient.