Olá, Marcel! Espero que esteja bem!
Desculpe a demora em dar um retorno
Vamos dar uma passeada sobre Service Discovery
A característica de um microservice, é baseada na decomposição de serviços, onde cada serviço pode ser considerado micro, pois cada pequeno recurso que trabalha em conjunto oferece uma ótima característica.
Tudo isso é muito baseado em domain driven design(DDD), interfaces bem definidas, princípios de single responsibility e SOA.
Toda esta decomposição dá agilidade, flexibilidade, escalabilidade e ajuda o negócio a evoluir de acordo com suas necessidades.
Então, em vez de ter um único serviço, agora temos muitos serviços pequenos e provavelmente vamos replicar esses serviços.
Características de Microservices:
Domain Driven Design
Single Responsibility Principle
Interface Pública e Explícita
Deploy Independente
Light-weight Communication
Algumas vantagens de Microservices:
Mais fácil de desenvolver, compreender e manter
Começa mais rápido do que um monolito
Mudanças locais podem ser facilmente implantadas
Escalar de forma independente
Melhora o isolamento de falhas
Quando temos um ou dois serviços, é fácil identificar, mas se temos 20 ou 30 em muitas máquinas, como saberemos se eles estão disponíveis ou não?
Ao trabalhar com microservices, começamos a ter inúmeros problemas que não tínhamos antes.
Portanto, houve alguns padrões que começamos a ter que prestar atenção, o que é o caso de Service Discovery, Service Register e Circuit Breaker, isso deixa mais fáceis algumas tarefas.
O que é o Service Discovery?
O Service Discovery é um dos principais se tratando da arquitetura baseada em microservices. Tentando configurar a mão para cada cliente ou alguma forma de convenção, pode ser muito difícil de fazer e muito frágil.
O Eureka é o Service Discovery do Netflix que é usado no Server e no Cliente.
O servidor pode ser configurado e implantado para estar altamente disponível, com cada servidor replicando o estado sobre os serviços registrados para os outros.
Vamos imaginar que temos muitos serviços dinamicamente distribuídos na rede, onde as instâncias de serviços mudam dinamicamente devido a escala automática, falhas, atualizações e não temos controle de endereços IP e nem o nome da instância.
O ideal nessa situação seria que o serviço comunicasse ao servidor ou até mesmo a algum serviço que poderia chamá-lo e que estará disponível para ser requisitado.
É assim que o Service Discovery funciona. O serviço se junta à rede e se registra em um servidor para disponibilizar para o uso de algum outro serviço, onde os clientes sabem onde é o servidor e enviam para o servidor que está disponível.
E esse Service Register?
Quando um cliente se registra no Eureka, fornece metadados sobre si próprio, como host e porta,health check , URL indicador, página inicial, etc.
O Eureka recebe mensagens de heartbeat de cada instância que pertencente a um serviço. Se o heartbeat falhar ao longo de um cronograma configurável, a instância normalmente é removida do registro.
A localização da rede de uma instância de serviço é registrada no registry service quando ele é iniciado.
Quando uma instância ou o serviço não está mais disponível o registry service é removido.
Esse mecanismo de saber se um serviço está disponível ou não é chamado de heartbeat.
Por padrão, a Eureka usa os heartbeat do cliente para determinar se um cliente está ausente. A menos que especificado de outra forma, o Discovery Client não irá propagar o status de verificação de estado atual do aplicativo pelo Spring Boot Actuator. O que significa que após o registro bem sucedido, a Eureka sempre anunciará que o aplicativo está no estado 'UP'. A habilitação do health check do Eureka pode alterar esse comportamento, o que resulta na propagação do status do aplicativo para a Eureka. Como conseqüência, qualquer outra aplicação não enviará tráfego para o aplicação em outros estados 'UP'.