Service Discovery… Eureka !

Vous avez une infrastructure dans le Cloud ou c’est en projet ? 

Les micro-services ou les services stateless commencent à vous envahir ?

Cet article est fait pour vous !

 

L’un des avantages majeurs du Cloud est la facilité et la rapidité de déploiement de nouveaux services, et de mise en place d’instances supplémentaires de ces services en cas de besoin.

En contrepartie, il faut maintenir cet ensemble de services.
Au départ avec 3 services et leurs 3 instances, il est possible pour un être humain de mettre à jour leurs dépendances et leur localisation (on parle ici de noms de machines et de ports).

Puis, on se retrouve rapidement avec une dizaine de services ayant une vingtaine d’instances chacun.  La maintenance de cet ensemble de services devient une vraie souffrance d’autant plus que toutes les adresses IP et hostnames sont dynamiques.

Bienvenue dans le monde du cloud !

Depuis quelques temps, les acteurs du Cloud tel que Netflix se sont tournés vers du “service registry” aka “enregistrement de services”.

Le “service registry” va d’une part, permettre aux services déployés de s’enregistrer sur un serveur, et d’autre part permettre à d’autres services ou applications de découvrir les services existants et disponibles.

 

Eureka Server and Client Interactions

 

Vous l’aurez compris, le service registry auquel on s’intéresse aujourd’hui est Eureka.

Eureka ?

C’est un service développé en Java par Netflix, dont le rôle est de gérer l’enregistrement et la localisation de services à des fins de load balancing et de failover. Il est particulièrement adapté aux services middle-tier “Stateless”. Sa très bonne intégration avec Spring Boot fait de lui un très bon choix de Service Registry dans le monde des micro-services Java.

 

Eurekaça se passe comment la mise en œuvre ?

Si vous avez déjà eu le plaisir de jouer avec des load balancers et des serveurs DNS, je vous laisse quelques quelques secondes pour vour rappeler vos tâches fastidieuses de configuration …

Oubliez les ! En utilisant Spring Boot, la création et la mise en route d’un serveur Eureka prend moins de trois minutes. Admirez :

Une simple annotation @EnableEurekaServer dans un projet Spring Boot classique permet de démarrer le serveur Eureka, sur lequel chaque instance de service pourra s’enregistrer.

Les quelques configurations suivantes sont également nécessaires :

La définition d’une zone, ici nommée defaultZone, permet de désactiver la réplication entre serveurs.

 

Eurekamon service avec spring cloud ?

Créer un service capable de se déclarer auprès d’un serveur Eureka est très simple avec Spring Boot et Spring Cloud.

L’annotation @EnableEurekaClient suffit à activer le mécanisme d’enregistrement sur une application Spring Boot :

Une fois encore, seules quelques configurations sont nécessaires :

Eureka, il se consomme comment mon service?

Eureka s’apparente à un DNS interne pour vos micro-services : chaque service a un « nom virtuel » (qu’il déclare lorsqu’il s’enregistre sur Eureka).
Ce nom virtuel est supporté par le composant RestTemplate de Spring, il est automatiquement résolu.

En effet, en utilisant une url simple de la forme http://myservice/api/prices, l’application appelante atteindra l’une des instances déclarée pour le service.

 

Eureka, un nouveau SPOF ?

Non, car Eureka supporte la réplication. Avec un cluster d’instances Eureka, vous ne craignez rien. Il a été créé pour être résistant à la panne et distribué.
De plus, chaque client enregistré sur Eureka maintient en local une liste des services disponibles, on est donc tolérant à une panne du serveur Eureka (beaucoup plus qu’à une panne de load balancer).

 

Eureka, quelle maturité ? 

Eureka est très utilisé depuis longtemps chez Netflix, il a donc une maturité incontestable.
Une version 2 est prévue pour bientôt, et il est prévu de pouvoir faire la transition la plus en douceur possible.
Il sera notamment toujours possible d’avoir des clients V1 sur un serveur V2.

 

Eureka, des petits plus ?

C’est du REST !

C’est adapté à un Cloud comme AWS.

Pas d’intermédiaire, on s’adresse directement au service

Eureka assure la fourniture de l’adresse du service à celui qui doit l’appeler, et ce dernier l’appelle directement. On diminue donc le nombre de briques dans l’infrastructure.

Les nouvelles possibilités apportées

Il est possible d’utiliser un « Circuit Breaker » (Coupe Circuit) comme Hystrix, qui s’intègre très facilement avec Eureka, et qui offre un Dashboard de monitoring.

On peut également récupérer via Eureka des statistiques sur les services utilisés, afin d’avoir un monitoring fin des appels de services.

On ouvre la porte à n’importe quel usage qui nécessite un déploiement dynamique de services sans se préoccuper de l’endroit où ils sont déployés.

Leave a Reply

Your email address will not be published. Required fields are marked *