Circuit Breaker
stable
Em cenários ideais, assim que um evento ocorre, uma mensagem é gerada e disparada ao parceiro via webhook (desde que o parceiro tenha realizado as configurações dos webhooks).
Contudo, se o endpoint do parceiro se encontrar indisponível ou apresentar lentidão, é preciso utilizar o endpoint de reprocessamento de mensagens para recuperar todas as notificações que não foram entregues no período de falha.
Para que o sistema do parceiro não seja impactado nesses casos, o Bankly desenvolveu o Circuit Breaker.
O Circuit Breaker é um fluxo que identifica esses cenários e retém as mensagens que não puderam ser entregues para que elas sejam enviadas assim que o sistema do parceiro retornar à normalidade, sem a necessidade de reprocessamento de mensagens.
Como o Circuit Breaker funciona
O Circuit Breaker possui uma política de timeout de dez segundos e apresenta os estados descritos a seguir.
Estado aberto
Se o endpoint do parceiro apresentar falhas ou demorar mais de dez segundos para responder após o envio de cinco mensagens consecutivas via webhook, o Circuit Breaker entrará no estado aberto.
Nesse estado, nenhuma mensagem será disparada para esse endpoint por dez segundos, e os payloads das mensagens que haviam sido enviadas ficarão retidos.
Estado semiaberto
Após dez segundos sem disparo de mensagens para o endpoint do parceiro, o Circuit Breaker passará para o estado semiaberto.
Esse é um estado intermediário, no qual as mensagens ficam retidas até que um novo evento dispare uma nova mensagem para o endpoint do parceiro.
O diagrama a seguir demonstra a tentativa de envio de mensagem de um novo evento com resultado negativo. O endpoint do parceiro ainda apresenta indisponibilidade ou lentidão e essa mensagem ficará retida no Circuit Breaker junto com as anteriores por mais dez segundos.
Nesse caso, o estado do Circuit Breaker será alterado novamente para aberto, repetindo o ciclo descrito anteriormente.
Já o diagrama abaixo demonstra a tentativa de envio de mensagem de um novo evento com resultado positivo, pois o endpoint do parceiro já retornou à normalidade.
Nesse caso, o estado do Circuit Breaker será alterado para fechado.
Estado fechado
Se o endpoint responder a essa nova mensagem enviada via webhook com sucesso sem exceder o tempo limite (dez segundos) e nem falhar apresentando um código de status de erro interno no servidor, o estado do Circuit Breaker será alterado para fechado.
Então, as mensagens de eventos serão enviadas novamente via webhook seguindo seu fluxo normal e todas aquelas que estavam sendo retidas serão disparadas automaticamente para o endpoint do parceiro, sem a necessidade de fazer um reprocessamento.
Updated about 2 months ago