Exemplo de arquitetura de microserviços utilizando Spring Cloud e Netflix OSS
- Spring Boot - Responsável por criar o microserviço e realizar o seu processamento e persistência.
- Maven - Ferramenta de build automático.
- Junit - Ferramenta utilizar para criação dos testes unitários.
- Mockito - Ferramenta utilizada para realizar mock de objetos referente a limitação de ambiente(dev,teste e produção).
- Docker - Ferramenta utilizada para simular o ambiente de testes de forma íntegra.
- Insominia - Ferramenta utilizada para realizar testes de chamadas via rest.
- Swagger - Ferramenta utilizada para documentação da API construída neste projeto.
- Jenkins - Ferramenta responsável pela execução da automatização de testes e integração contínua.
- Spring Netflix Eureka - Service Discovery responsável por unificar o registros dos microserviços.
- Spring Feign - Reponsável por executar o Load Balance através do Ribbon na chamada de intgração dos microserviços.
- Spring Sleuth - Responsável por realizar o trace de log através de um identificador único(Trace ID).
- Zuul-Gateway - Responsável por se conectar com o eureka e expor via gateway os microserviços registrados.
- Montei o fluxograma abaixo para representar de maneira ilustrativa como foi aplicado cada tecnologia e como se relacionam.
- http://localhost:8761/ - Eureka-Server - Service Discovery responsável por registar os microserviços
- http://localhost:5555/ - Zuul-Gateway - Responsável por centralizar as chamadas externas
- http://localhost:8088/ - Authenticator - Responsável por realizar autenticação e autorização utilizando OAuth2
- http://localhost:8089/ - Spring Admin Monitor - Monitora os microserviços
- http://localhost:8082/ - Cycling - Responsável por disponbilizar o serviço de pesquisa de bicicletas
- http://localhost:8080/ - UserApi - Responsável por disponbilizar o serviço do usuário
Spring Cloud components | Resources |
---|---|
Service Discovery | Eureka server |
API Gateway | Zuul reverse proxy and [Routing configuration] |
Circuit Breaker | Hystrix fallback method |
-
Responsável por facilitar a comunicação entre 1 ou mais microserviços. Os microserviços se registram no Eureka e passam a ser chamado pelos demais através de sua alias. Este ponto ajuda bastante quando temos vários microserviços na solução e bem como mais de uma instância.
-
No exemplo abaixo é possível identificar os serviços registrados no Eureka. Com a arquitetura proposta é possível duplicar o serviços de (search-user-api e search-client-api, ...), caracterizando uma escalabilidade horizontal
-
Atualmente a ferramenta mais utilizada por grande empresas para monitoramento de microserviços é o Splunk. Neste caso aqui fiz a utilização de um projeto chamado Spring Admin. A sua configuração é bem simples e sua interface é bastante amigável.
-
Visualização de Dashboard apresentando o tempos de disponibilidade atual e número de instâncias.
- Detalhes de consumo e uso de memória
-
Deverá executar o projeto conforme as informações abaixo:
-
(1) search-eureka-server
-
(2) search-zuul-gateway
-
(3) search-auth-server
-
(4) search-monitor
-
(5) search-cycling-api
-
(6) search-user-api
-
A arquitetura de microserviços tem sido bastante popular após o uso de sistemas através da cloud. Este tipo de arquitetura é caracterizado pela abordagem de desmembrar o software através de comoponentes mínimos e independentes. Essa abordagem valoriza a granularidade, leveza e capacidade de compartilhamento de processos entre várias aplicações. Este ponto é indispensável para otimização do desenvolvimento de aplicações quando pensamos em um modelo nativo em nuvem.
-
A solução a apresentada aqui não tem fins de utilização comercial e sim apresentação de técnicas disponíveis no mercado para monitoramento, escalabilidade e independência da solução como um todo.