fbpx

Circuit Breaker


Fala galera, voltando um pouco a falar de resiliência, hoje vamos de Circuit Breaker mais um pattern de Microsserviços.

Sempre que desenhamos um sistema, pensamos em fazê-lo da melhor forma para que ele nunca falhe, mas lembre-se, essa á uma ilusão, mais cedo ou mais tarde ele vai falhar. Não se sinta culpado, quando falamos de sistemas temos muitos fatores externos que podem, e vão gerar complicações.

Por esse motivo, a comunidade tem criado ao longo do tempo diversas abordagens para lidar com as falhas, e o Circuit Breaker é mais uma delas.

Tal como o nome diz, nada mais é que um disjuntor, e possui um funcionamento muito parecido com o que temos em nossas casas, para proteger nossa rede elétrica.

Uma rede elétrica pode ser sobrecarregada com a utilização acima do que ela foi preparada para suportar, e quando isso acontece o disjuntor “desarma”.

E como funciona nos nossos serviços?

Bom de forma simples, o Circuit Breaker opera em seu estado normal “Closed” que significa que tudo está OK, sua aplicação está funcionando normalmente. Caso algo de errado, a latência aumentou de mais, seu banco de dados apresentou problemas, ou o microsserviço está falhando, o Circuit muda seu estado para “Open”, tirando o acesso a esse serviço da jogada, dessa forma sua aplicação sobrevive, mas sem essa função. Após um tempo determinado, o Circuit volta a fazer algumas requisições no serviço, mudando para o estado “Half Open”, caso as coisas estejam normais ele volta ao estado “Closed”, mas caso o erro persista ele volta ao estado “Open”.

Bom, de forma geral o Circuit é montado para tirar de jogo serviços com mau funcionamento, diminuindo a possibilidade de um erro em cascata e indisponibilização de todo um sistema.

Aqui vai um desenho para ilustrar:

Armadilha:

Algumas pessoas caem na armadilha de utilizar Circuit Breaker para implementação de regras de negócio. Não seja uma delas, isso pode e vai trazer uma complexidade gigante para alterações futuras.

Algumas dicas importantes:

1-) Como sempre digo, log, log e mais um pouquinho de log. Ao implementar o Circuit Breaker, é importantíssimo ter um padrão de geração de log para as falhas, você vai precisar entender o que aconteceu para garantir a integridade da sua aplicação. Mas não esqueça de logar o sucesso também, será importante no futuro, acredite.

2-) No texto falo muito da utilização do temporizador para verificar se o serviço quebrado voltou, mas existe a possibilidade de um caminho alternativo de ping apenas para verificar se o serviço está disponível. Eu gosto mais dessa abordagem, mas para isso seu microsserviço deve estar preparado.

3-) Bom, vale lembrar que o Circuit Breaker não serve para grandes coisas caso você não prepare o resto do sistema para trabalhar sem o serviço quebrado, portanto veja bem como você implementou a resiliência nos demais.

4-) Entenda os tipos de exceção, alguns podem ser mais complexos do que outros. E isso pode determinar o tempo de retorno em cada situação de falha.

Essa é uma forma de implementação de Circuit Breaker, porém se olharmos o conceito, podemos aplicá-lo de diversas outras formas. Já utilizou esse conceito? Conhece outra abordagem? Deixe um comentário ao final do post.

Quer ver ainda mais conteúdo? Me siga no insta @natanpf.

Um comentário em “Circuit Breaker

Adicione o seu

  1. Boa Natan. Com a analogia aos sistemas elétricos, ficou ainda mais didático. Me fez lembrar os bons tempos que estudei eletrônica também rsrs
    Parabéns, jovem!!!

Deixe uma resposta

Powered by WordPress.com. por Anders Noren

Acima ↑

%d blogueiros gostam disto: