Neste artigo, será abordado sobre a tecnologia Netflix Eureka que facilita a comunicação e descoberta de serviços em uma arquitetura de microservices.
Hoje em dia, cada vez mais as empresas estão aderindo a arquitetura de microservices ao invés da tradicional arquitetura monolítica para construção de aplicações, pois os microservices oferecem muitos benefícios quanto a manutenção, escalabilidade, disponibilidade, entre outros. Mas também há alguns desafios que devem ser considerados quando se trabalha com esse tipo de arquitetura, como por exemplo, se um determinado microservice depende da chamada de outro, basta utilizarmos um RestTemplate por exemplo, passando o host e port e enviar uma requisição via REST para tal microservice. Mas imagine se esse microservice que receberá a chamada tiver escalonado horizontalmente com várias instancias, cada uma com sua porta e host específicos. Isso seria um grande problema, pois com toda essa dinamização seria muito difícil manter esses endereços individuais e a manutenção seria bem complicada.
Para resolver esse problema, em casos de aplicações escaláveis e distribuídas, pode-se utilizar de recursos em que se registram e descobrem serviços, a fim de controlar toda essa dinamização. O Netflix Eureka é um módulo do Netflix OSS, o qual permite com que serviços sejam registrados através do Eureka Server e descobertos através do Eureka Client, facilitando esse controle de aplicação distribuída.
Para exemplificar, imagine o seguinte cenário, em que há dois microservices, o primeiro sendo de Controle de Nota e o segundo, Controle de Aluno. O serviço de Controle de Nota precisa enviar uma requisição via REST para o serviço Controle de Aluno, a fim de obter os dados complementares de um determinado aluno como endereço e email por exemplo, e então, devolver a resposta para o cliente com as notas do aluno e também seus dados complementares.
Exemplo da requisição interna entre dois microservices
Para essa requisição interna entre os dois serviços, o serviço Controle de Nota terá que saber qual o endereço para enviar uma requisição ao serviço Controle de Aluno, ou seja, qual o host e porta desse microservice.
Para que o serviço Controle de Aluno seja descoberto pelo serviço Controle de Nota, é preciso criar uma aplicação Eureka Server que atua como um Service Registry e permite que outras aplicações (serviços) registrem todas suas instancias. Esse Eureka Server controla todas as instancias registradas, assim como seus respectivos endereços (host e porta), sempre mantendo atualizado as instancias em execução, monitorando quando um serviço registrado está disponível ou não.
Então, é preciso registrar os serviços Controle de Nota e Controle de Aluno na aplicação Eureka Server, para que ela monitore os endereços de suas instancias dinamicamente.
Serviços se registrando no Eureka Server
Para que o serviço Controle de Nota descubra outro serviço através do Eureka, este precisa se tornar um Eureka Client, ou seja, se registrar no Eureka Server para ter uma ligação onde irá buscar pelos serviços a serem descobertos. Assim, antes de enviar a requisição para o Controle de Aluno, o serviço Controle de Nota irá descobrir o serviço no Eureka Server informando apenas o nome desse serviço que deseja e então, o Eureka Server disponibilizará o endereço correto de uma instancia de Controle de Aluno disponível para que seja feito tal requisição.
Assim, independente do número de instancias de Controle de Aluno em execução, apenas informando o nome do serviço ao Eureka Server, o Eureka Client irá obter o endereço correto para enviar as requisições necessárias.
Exemplo do serviço Controle de Nota descobrindo o serviço Controle de Aluno através do Eureka Server
Dessa maneira, fica muito fácil trabalhar e monitorar os microservices, sem contar que em casos da alteração de endereço de algum serviço, tudo será feito dinamicamente, pois o Eureka Server monitora essa alteração e disponibiliza para seus Eureka Clients os endereços corretos, sem precisar refatorar códigos e alterar urls.
No próximo artigo, será abordado como utilizar o Eureka Netflix em aplicações Spring Boot, utilizando o Spring Cloud Netflix, biblioteca que oferece integrações do Netflix OSS para aplicações Spring.
Parabéns pela matéria Michelli! Estou muito focado em aprender como usar Java nesse novo mundo de microservices.
Eu tenho uma sugestão de postagem, o novo framework desenvolvido pela Red Hat, o Quarkus, ele nasceu para ser nativo da nuvem, kubernetes e microservices, ler uma matéria dele aqui seria incrível!
https://quarkus.io/