Compreendendo o conceito de Circuit Breaker e sua aplicação em arquitetura de microsserviços

Itaú Tech
ItauTech
Published in
5 min readNov 7, 2023

por Michael Douglas Barbosa Araujo, Subject Matter Expert na Comunidade de Soluções de Investimentos no Itaú

A imagem mostra a frase “Circuit Breaker: entenda como aplica o conceito na prática e quais os seus ganhos para a arquitetura de tecnologia”, sobre um fundo azul escuro. Do lado direito, há a foto da mão de uma pessoa branca sobre um tablet, com a ilustração de grafismos que representam tecnologia.

O Itaú Unibanco caminha para completar um século de história e sempre busca evolução constante em cada passo de sua trajetória. Esse caminhar está baseado em uma cultura que permite um olhar de melhoria contínua, em que se entende os pontos para evoluir e traçar objetivos de curto, médio e longo prazo, mantendo assim sempre o foco da centralidade no cliente.

A transformação digital converge por essa necessidade de mudança visando uma entrega da melhor experiência e satisfação dos clientes. A inovação se tornou um importante aliado nessa trajetória e neste artigo trazemos um pouco sobre como o desenvolvimento de microsserviços — que compõem o aplicativo íon — contribui pela experiência positiva do cliente ao experenciar serviços de investimento de modo eficiente e confiável.

Vamos falar sobre ‘Circuit Breaker’?

Imagine que você tenha o seguinte desafio: construir um sistema de microsserviços distribuídos, onde várias partes do seu sistema serão divididos em serviços menores e independentes. E que cada um deles é responsável por uma funcionalidade específica, que pode se comunicar com outros serviços para obter ou até mesmo fornecer alguma informação.

Agora adicionando um pouco de dificuldade ao desafio, imagine que um desses serviços do qual dependemos, começa a apresentar falhas ou sobrecarga. Por se tratar de uma camada dependente, ou seja, se um serviço estiver fora podemos ter um impacto negativo no sistema como um todo, há um grande risco de essa situação gerar atrasos ou até mesmo falhas completas nos serviços.

E é neste momento que o Circuit Breaker, ou mais conhecido em português como “Circuito Fechado”, entra como uma solução!

O que é o Circuit Breaker?

O “Circuit Breaker” é um padrão de projeto utilizado em arquitetura de softwares que nos ajuda a lidar com possíveis falhas de serviços dependentes. Talvez se você fizer uma breve pesquisa na internet sobre o termo acabará encontrando uma imagem semelhante a essa:

A imagem representa um circuito elétrico para a ilustração do nosso exemplo onde é destacado o disjuntor. A foto foi tirada por Markus Spiske em Unsplash.

A imagem traz um exemplo de circuito elétrico, e para fins didáticos, podemos destacar o disjuntor DR, que atua como um bom guia de entendimento do padrão, pois, de maneira semelhante, protege o circuito elétrico de falhas na alimentação, principalmente devido a situações de sobrecorrentes, causadas por exemplo por excesso de carga ou curto-circuito.

Ou seja, quando uma falha for detectada, o Circuit Breaker interrompe temporariamente a comunicação com o nosso serviço que está falhando, evitando assim que essa falha se propague e afete os outros componentes.

Por que usar Circuit Breaker?

A utilização do Circuit Breaker aumenta a resiliência de microsserviços, reduzindo tempos de resposta lentos, evitando que falhas se propaguem e que problemas isolados se tornem problemas em cascata e provoquem um impacto global dos nossos sistemas.

Além disso, também oferece a capacidade de lidar com falhas de forma mais controlada, interrompendo temporariamente a comunicação com os serviços problemáticos e dando espaço para que aconteça uma recuperação automática.

Os três estados do Circuit Breaker

Para ilustrar o funcionamento, devemos falar de três estados: Fechado, Aberto e Meio-Aberto.

Imagem com a representação do funcionamento dos estados: Fechado, Aberto e meio-aberto.
  1. Estado Fechado (Closed): quando estamos neste estado, o “Circuit Breaker” permite que todas as solicitações fluam normalmente para os nossos serviços. Nessa etapa, monitoramos as respostas recebidas e caso seja identificado um número grande de falhas ou se o tempo de reposta estiver lento, pode-se abrir um circuito e mudar para o próximo estado, o aberto.
Alt: Imagem com a representação do estado fechado do circuito onde é permitido que todas as solicitações fluam normalmente.

2. Estado Aberto (Open): quando entramos neste estado, ele interrompe totalmente as nossas solicitações. Logo, retornamos uma resposta alternativa predefinida, que pode ser uma mensagem de erro ou até mesmo uma resposta em cache. Para que assim, possamos evitar a sobrecarga do nosso serviço que se encontra em falha.

Imagem com a representação do estado aberto do circuito onde é interrompido totalmente as solicitações caso tenha algum problema.

3. Estado Meio-Aberto (Half-Open): quando entramos neste estado é porque depois de um período especificado — que veremos em nosso exemplo de código, — o Circuit Braker entende que devemos entrar no estado meio-aberto. Aqui, ele permite um número limitado de solicitações para o nosso serviço e irá monitorar nossas respostas, ou seja, se forem bem-sucedidas, o Circuit Breaker irá considerar que o serviço se recuperou e então poderá retornar para o estado fechado. Caso contrário, ele irá entender que deverá voltar para o estado aberto, isso porque considera que o serviço voltou a ter falhas.

Imagem com a representação do estado meio aberto do circuito onde é verificado se tudo está funcionando corretamente, caso não ele muda o estado para fechado e caso tudo volte ao normal ele muda o estado para aberto.

Vale ressaltar que o estado inicial para o nosso circuito é o “fechado — (closed)”. Isso se dá porque o contador irá verificar a quantidade de falhas produzidas durante as nossas chamadas, e se o total exceder o especificado em nossa configuração do circuito, automaticamente ele modifica o estado para aberto (open) para que o cronômetro seja iniciado.

Quando ele verificar no temporizador que configurarmos que o ciclo terminou, o estado então é alterado para Meio-Aberto (Half-open) — e se tudo estiver funcionando, então o estado será fechado (closed).

Conclusão e próximos passos

Com base nas considerações podemos conhecer neste artigo um pouco mais sobre a parte conceitual do Circuit Breaker — em que sua função de desarmar comportamentos de uma aplicação em que elementos envolvidos apresentam muitas falhas e/ou indisponibilidade.

Agora, quer entender um pouco mais na prática? Então siga a nossa página para não perder o nosso próximo artigo, em que compartilharemos um hands-on da ferramenta para demonstrarmos na step by step os pontos que abordamos aqui!

--

--