Neste exemplo teremos um sistema com a seguinte arquitetura:
-
User Service:
- API REST
- implementado em Node.JS
- retorna dados pessoais fictícios de um possível usuário
-
Address Service:
- API REST
- implementado em Node.JS
- retorna um endereço fictício de um possível usuário
-
BFF Service:
- API GraphQL
- implementado em Node.JS
- usando Apollo Server
- retorna um perfil fictício de um usuário que consiste dos dados pessoas e endereço que são buscados no user service e address service respectivamente
- chamadas http aos serviços são protegidas por
circuit breakers
utilizando a lib Opossum
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
# reinicia cada serviço
make start/address
make start/bff
make start/user
# derruba cada serviço
make stop/address
make stop/user
# tail do log de cada serviço
make logs/address
make logs/bff
make logs/user
# gera carga de requisições ao bff utilizando apache benchmark
make test
# mostra o consumo de recursos do container do BFF
make resources
# derruba toda a infraestrutura
make stop
No docker-compose.yml podemos alterar as variáveis de ambiente de cada serviço.
- Address Service
FORCED_DELAY
: tempo em milisegundos que serviço espera para retornar uma resposta a requisições http
- User Service
FORCED_DELAY
: tempo em milisegundos que serviço espera para retornar uma resposta a requisições http
- BFF Service
CIRCUIT_BREAKER_ENABLED
:true
oufalse
- habilita ou desabilita o uso de circuit breaker nas chamadas aos outros serviçosADDRESS_SERVICE_URL
: URL do address serviceUSER_SERVICE_URL
: URL do user service
- https://martinfowler.com/bliki/CircuitBreaker.html
- https://docs.microsoft.com/en-us/azure/architecture/patterns/circuit-breaker
- https://nodeshift.dev/opossum/
- https://graphql.org/
- https://www.apollographql.com/docs/apollo-server/
Rodrigo Botti |