Neste exemplo teremos um sistema com a seguinte arquitetura:
-
Backend Service:
- API REST
- implementado em Node.JS
- retorna uma profissão fictícia de um possível usuário
- deployado em duas replicas:
- node-1 funciona normalmente
- node-2 sempre retorna erro 500
-
Reverse Proxy:
- HAProxy
- Proxy reverso na frente das replicas do backend service:
${reverse proxy}/backend
mapeia para${backend service}/
- faz load balancing round robin entre as replicas
- protege as chamadas http com
circuit breaker
-
Client Service:
- API REST
- implementado em Node.JS
- chama o backend service através do reverse proxy
O sistema é deployado localmente utilizando docker e docker-compose.
O exemplo utiliza make
como task manager.
Os targets estão definidos no Makefile.
# builda todas as imagens e sobe os serviços dentro de uma mesma rede
make start
# gera carga de requisições ao client service com curl
make test
# abre a página de status do HAProxy no browser
make stats/haproxy
# derruba toda a infraestrutura
make stop
- https://martinfowler.com/bliki/CircuitBreaker.html
- https://docs.microsoft.com/en-us/azure/architecture/patterns/circuit-breaker
- https://www.haproxy.com/blog/circuit-breaking-haproxy/
Rodrigo Botti |