Circuit Breaker em .NET 8: Guia de Resiliência Digital

Em sistemas distribuídos modernos, especialmente em arquiteturas de microsserviços🚀 Kubernetes: Orquestração de Microservices na Nuvem!🚀 Kubernetes: Orquestração de Microservices na Nuvem!Descubra como Kubernetes revoluciona o gerenciamento de microsserviços na nuvem, garantindo escalabilidade, automação e alta disponibilidade., uma única falha pode desencadear um colapso em cascata. Imagine um serviço de pagamento sobrecarregado que derruba todo o e📊 Behavior-Driven Development: Testes que Todo Mundo Entende!📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades.-commerce! O Circuit Breaker é o seu "disjuntor digital" que isola falhas automaticamente, garantindo que seu sistema continue funcionando mesmo diante de imprevistos. Vamos explorar como implementar esse padrão em .NET 8+ com exemplos reais e📊 Behavior-Driven Development: Testes que Todo Mundo Entende!📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. estratégias profissionais.

📜 Tabela de Conteúdo🔗

1. O que é Circuit Breaker?

2. Como o Circuit Breaker funciona?

3. Implementação com Polly

4. Configurações Chave🗂️ Dicionários: Acesse Dados por Chaves como um Mestre dos HashMaps!🗂️ Dicionários: Acesse Dados por Chaves como um Mestre dos HashMaps!Aprenda a usar dicionários em C# de modo prático e eficiente. Nosso tutorial mostra criação, acesso e otimização para manipular dados com segurança.

5. Cenários📊 Behavior-Driven Development: Testes que Todo Mundo Entende!📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. Reais

6. Monitoramento🚀 Kubernetes: Orquestração de Microservices na Nuvem!🚀 Kubernetes: Orquestração de Microservices na Nuvem!Descubra como Kubernetes revoluciona o gerenciamento de microsserviços na nuvem, garantindo escalabilidade, automação e alta disponibilidade. e Métricas

7. Cloud e📊 Behavior-Driven Development: Testes que Todo Mundo Entende!📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. .NET 8+

8. Armadilhas Comuns🔏 Criptografia Assimétrica: Domine RSA e Troca de Chaves!🔏 Criptografia Assimétrica: Domine RSA e Troca de Chaves!Descubra como a criptografia assimétrica protege a troca de chaves e garante segurança em sistemas digitais usando RSA, C# e práticas recomendadas.

9. Hands-On: Criando um Circuit Breaker Resiliente

10. Boas Práticas🔢 Operadores Aritméticos: Faça Cálculos como uma Calculadora Humana!🔢 Operadores Aritméticos: Faça Cálculos como uma Calculadora Humana!Aprenda a dominar operadores aritméticos em C# com exemplos práticos, técnicas de cálculo e dicas para evitar erros e maximizar resultados. e Cuidados

11. Conclusão

O que é Circuit Breaker?🔗

O Circuit Breaker é um padrão de design que monitora as chamadas a um serviço ou recurso📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!Descubra os fundamentos do REST e boas práticas para criar APIs simples, escaláveis e eficientes. Domine métodos HTTP e status codes com exemplos práticos. externo. Se o número de falhas exceder um limite pré-definido, o Circuit Breaker "abre" o circuito, bloqueando novas chamadas por um período de tempo. Isso permite que o serviço problemático se recupere, evitando que falhas se propaguem por toda a aplicação.

Funciona como um disjuntor elétrico para microservices🚀 Kubernetes: Orquestração de Microservices na Nuvem!🚀 Kubernetes: Orquestração de Microservices na Nuvem!Descubra como Kubernetes revoluciona o gerenciamento de microsserviços na nuvem, garantindo escalabilidade, automação e alta disponibilidade.:

1. Closed: Fluxo normal (requests passam)

2. Open: Circuito aberto (requests bloqueados)

3. Half-Open: Testa recuperação do serviço

Exemplo Prático📝 Logging com Serilog: Registre Tudo como um Detetive de Bugs!📝 Logging com Serilog: Registre Tudo como um Detetive de Bugs!Aprenda a usar Serilog em .NET para registrar logs estruturados, identificar erros e enriquecer informações, transformando seu código num enigma solucionável.:

// Analogia com disjuntores residenciais
public class SistemaPagamento {
    private CircuitBreaker _circuitBreaker;
    public async Task ProcessarPagamento() {
        if (_circuitBreaker.IsOpen) {
            throw new CircuitBreakerOpenException();
        }
        // ... lógica de pagamento
    }
}

Como o Circuit Breaker funciona?🔗

O Circuit Breaker opera em três estados principais:

1. Fechado (Closed):

2. Aberto (Open):

3. Meio-Aberto (Half-Open):

Implementação com Polly🔗

A biblioteca🎮 Projeto: Sistema de Gerenciamento de Biblioteca com OOP Puro!🎮 Projeto: Sistema de Gerenciamento de Biblioteca com OOP Puro!Descubra como desenvolver um sistema de biblioteca eficiente utilizando conceitos de Orientação a Objetos em C#. Mergulhe neste tutorial prático e desafiador! Polly é o padrão ouro para🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! resiliência em .NET. Ela facilita a implementação do Circuit Breaker com configurações avançadas.

Configuração Básica📝 Logging com Serilog: Registre Tudo como um Detetive de Bugs!📝 Logging com Serilog: Registre Tudo como um Detetive de Bugs!Aprenda a usar Serilog em .NET para registrar logs estruturados, identificar erros e enriquecer informações, transformando seu código num enigma solucionável.:

var circuitBreakerPolicy = Policy
    .Handle<HttpRequestException>()
    .CircuitBreakerAsync(
        exceptionsAllowedBeforeBreaking: 3, // Número de falhas antes de abrir o circuito
        durationOfBreak: TimeSpan.FromSeconds(30) // Tempo que o circuito fica aberto
    );

Uso em HttpClient:

// HttpClient com Circuit Breaker
services.AddHttpClient("PaymentService")
    .AddPolicyHandler(circuitBreakerPolicy);

Configurações Chave🔗

ParâmetroDescriçãoValor Recomendado
FailureThreshold% de falhas para abrir circuito70%
SamplingDurationJanela de análise de falhas30 segundos
MinimumThroughputMínimo de requests para ativar10 requests
BreakDurationTempo em estado aberto1-5 minutos

Exemplo Avançado:

var advancedPolicy = Policy
    .Handle<TimeoutException>()
    .AdvancedCircuitBreakerAsync(
        failureThreshold: 0.7,
        samplingDuration: TimeSpan.FromSeconds(60),
        minimumThroughput: 10,
        durationOfBreak: TimeSpan.FromMinutes(2)
    );

Cenários Reais🔗

Caso 1 - E📊 Behavior-Driven Development: Testes que Todo Mundo Entende!📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades.-commerce:

Caso 2 - Sistema Bancário:

  • Gateway de Pagamentos lento → Bloqueia novas transações por 1 minuto → Retoma gradualmente

Fluxo de Decisão:

[Request] → [Circuit Closed?] → Sim → Executa
                      ↓
                     Não → [Half-Open?] → Testa com 1 request
                                      ↓
                                   [Sucesso?] → Fecha Circuito
                                      ↓
                                   [Falha] → Mantém Aberto

Monitoramento e Métricas🔗

Essencial para🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! Product Managers:

// Logging de estados
circuitBreakerPolicy.OnCircuitOpened += (ex, breakDelay) => {
    _logger.LogWarning($"Circuito ABERTO! Retomando em {breakDelay.TotalSeconds}s");
};

Integração com Application Insights:

// appsettings.json
"ApplicationInsights": {
    "EnablePerformanceCounterCollection": true,
    "EnableDependencyTracking": true
}

Cloud e .NET 8🔗

Azure🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!Aprenda a construir uma API robusta para e-commerce com ASP.NET Core, EF Core, JWT e Swagger, validando suas habilidades em um projeto prático real. Best Practices:

1. Use Azure Service🚀 Kubernetes: Orquestração de Microservices na Nuvem!🚀 Kubernetes: Orquestração de Microservices na Nuvem!Descubra como Kubernetes revoluciona o gerenciamento de microsserviços na nuvem, garantindo escalabilidade, automação e alta disponibilidade. Health para🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! detectar outages regionais

2. Combine com Azure🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!Aprenda a construir uma API robusta para e-commerce com ASP.NET Core, EF Core, JWT e Swagger, validando suas habilidades em um projeto prático real. API Management para🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! políticas globais

3. Kubernetes🚀 Kubernetes: Orquestração de Microservices na Nuvem!🚀 Kubernetes: Orquestração de Microservices na Nuvem!Descubra como Kubernetes revoluciona o gerenciamento de microsserviços na nuvem, garantindo escalabilidade, automação e alta disponibilidade.: Configure probes de saúde alinhados ao Circuit Breaker

Exemplo com .NET 8 Minimal API🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!Aprenda a construir uma API robusta para e-commerce com ASP.NET Core, EF Core, JWT e Swagger, validando suas habilidades em um projeto prático real.:

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddHttpClient("ResilientClient")
    .AddPolicyHandler(Policy.TimeoutAsync<HttpResponseMessage>(10));
var app = builder.Build();
app.MapGet("/pagamentos", async (IHttpClientFactory factory) => {
    var client = factory.CreateClient("ResilientClient");
    return await client.GetAsync("https://payment-service");
});

Armadilhas Comuns🔗

Configurações Erradas:
  • BreakDuration muito curto → Flood de retries
  • FailureThreshold muito baixo → Falsos positivos
Ignorar Fallbacks:
// SEM FALLBACK (PERIGO!)
var result = await circuitBreakerPolicy.ExecuteAsync(() => service.Call());
// COM FALLBACK (CORRETO)
var result = await Policy
    .WrapAsync(fallbackPolicy, circuitBreakerPolicy)
    .ExecuteAsync(() => service.Call());

Hands-On: Criando um Circuit Breaker Resiliente🔗

Passo 1 - Simule Falhas:

public class UnreliableService : IUnreliableService {
    private static int _counter = 0;
    public async Task<string> GetData() {
        if (++_counter % 5 == 0) throw new Exception("Falha simulada");
        return await Task.FromResult("Dados válidos");
    }
}

Passo 2 - Configure Políticas:

var policy = Policy
    .Handle<Exception>()
    .CircuitBreakerAsync(2, TimeSpan.FromSeconds(10));

Passo 3 - Execute🔍 Comandos: Desacople Ações dos Botões!🔍 Comandos: Desacople Ações dos Botões!Aprenda a implementar comandos em C# para desacoplar lógica e interface usando MVVM, com exemplos práticos e dicas para melhor testabilidade e manutenção. e Monitore:

for (int i = 0; i < 10; i++) {
    try {
        await policy.ExecuteAsync(async () => {
            Console.WriteLine(await service.GetData());
        });
    } catch (Exception ex) {
        Console.WriteLine($"Falha tratada: {ex.Message}");
    }
    await Task.Delay(1000);
}

Saída Esperada:

Dados válidos
Dados válidos
Falha tratada: Falha simulada
Circuit Breaker aberto!
Circuit Breaker aberto!
... (após 10s)
Dados válidos

Boas Práticas e Cuidados🔗

1. Defina Limiares Adequados: Configure o número de falhas e📊 Behavior-Driven Development: Testes que Todo Mundo Entende!📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. o tempo de espera com base no comportamento do serviço.

2. Monitore e📊 Behavior-Driven Development: Testes que Todo Mundo Entende!📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. Logue os Eventos: Use métricas📊 Monitoramento com Prometheus: Métricas em Tempo Real!📊 Monitoramento com Prometheus: Métricas em Tempo Real!Descubra como implementar o Prometheus para monitoramento em sistemas .NET, com métricas em tempo real e dashboards inteligentes. e logs para acompanhar quando o circuito abre e fecha.

3. Combine com Outras Políticas: Use o Circuit Breaker junto com políticas de retry e fallback para🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! uma resiliência completa.

4. Teste em Ambiente Controlado: Simule falhas para🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! garantir que o Circuit Breaker funcione como esperado.

Conclusão🔗

O Circuit Breaker é uma ferramenta poderosa para construir sistemas resilientes. Com ele, você não só protege sua aplicação de falhas externas, mas também garante que ela se recupere de maneira elegante. Implemente essas práticas no seu projeto🤝 GitHub Básico: Versionamento para Iniciantes!🤝 GitHub Básico: Versionamento para Iniciantes!Descubra como o GitHub facilita colaboração, versionamento e organização de código com este tutorial prático e essencial para desenvolvedores iniciantes. e observe como sua arquitetura se torna mais saudável e confiável. Boa codificação!

Autor: Marcelo V. Souza - Engenheiro de Sistemas e Entusiasta em IoT e Desenvolvimento de Software, com foco em inovação tecnológica.

Referências🔗

Compartilhar artigo

Artigos Relacionados