fbpx

Resiliência, o que é Bulkhead ?


Fala galera, hoje vamos falar um pouco sobre uma das técnicas de resiliência das nossas aplicações, o Bulkhead.

Essa técnica consiste basicamente em dividir a sua implementação em seções, para diminuir a possibilidade de incidência de um impacto generalizado seu ecossistema.

Bom, vamos conceituar um pouco.

Bulkhead se não me engano é um termo náutico, utilizado como um conceito de construção que traz resiliência a uma embarcação. Ele consiste em setorizar o navio para em caso de ruptura no casco, não acontecer uma inundação generalizada. Já li sobre esse termo na aviação também, mas acho que se deu início em barcos.

Mas afinal, estamos falando de sistemas e não de barcos.

Perfeito, então vamos voltar para o nosso mundo. Quando falamos de sistemas, assim como barcos, não queremos que nossa aplicação “afunde”.

Normalmente em uma aplicação orquestrada temos o seguinte modelo.

Nesse cenário, o microsserviço 1 abre apenas um pool de conexões com x threads.

Imaginando que o microsserviço 3 esteja com lentidão, ou quebre, o seu pool está comprometido, possivelmente sua aplicação como um todo vai parar. Mesmo que todos os demais microsserviços estejam íntegros e funcionais.

Quando utilizamos uma abordagem Bulkhead, mudamos a implementação para algo parecido com o desenho abaixo:

Nessa implementação, seu microsserviço orquestrador abre um pool para cada microsserviço. Caso ocorra uma falha em algum microsserviço, você ganha a possibilidade de tratativa, ou tomada de decisão no microsserviço 1, garantindo a continuidade do seu sistema, mesmo que de forma parcial.

Ou seja, o microsserviço 3 não gera um impacto “físico” no resto do sistema, gera apenas um possível impacto logico no caso de acoplamento logico da função.

Vamos aprofundar um pouco mais no assunto?

A Netflix possui uma implementação interessante desse padrão, conhecida como Hystrix.

O Hystrix, basicamente limita o número de requisições simultâneas em um pool, e possui duas abordagens.

1-) Faz o controle de numero de requisições, deixando uma fila fixa de trabalho.

2-) O chamador pede uma autorização de chamada, com o tempo de espera para a requisição, e caso não receba a resposta positiva da autorização, muda o fluxo.

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

Deixe uma resposta

Powered by WordPress.com. por Anders Noren

Acima ↑

%d blogueiros gostam disto: