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.

1325

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.

4534

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.

4617

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.

1330