Académique Documents
Professionnel Documents
Culture Documents
▪ Les Edge Microservices les plus populaires sont ceux publiés et utilisés par Netflix pour sa plateforme puis par la communauté de spring cloud.
▪ Ils sont en grande partie regroupés sous Spring Cloud, et disposent de fonctionnalités pour fonctionner nativement ensemble.
▪ Ci-après les principaux Edge Services que nous allons détailler dans les prochains chapitres:
4.Spring Ribbons
5.Spring Actuator
6.Spring ZipKin
EDGE MICROSERVICES
▪ Les microservices et leurs différentes instances reposent sur des fichiers de configuration tels que
application.properties.
▪ Quelques problématiques : Changement des propriétés et déploiement à chaud/froid ? Blocage lors des mises à
▪ La solution Spring Cloud Config permet de centraliser tous les fichiers de configuration dans un dépôt GIT, et se
▪ Quand un fichier de configuration est mis à jour dans le dépôt GIT, Spring Cloud Config se met à servir cette
▪ En cas de grande charge sur l’application, on va ajouter plusieurs instances d'un microservice.
▪ Comment garder la trace des URL des différentes instances disponibles, ainsi que leurs états ?
▪ Grâce à une annotation de Eureka, toute nouvelle instance du microservice va être enregistrée auprès
d'Eureka : @EnableDiscoveryClient
▪ Le client va consulter ce registre pour trouver les instances disponibles d'un microservice donné.
▪ Eureka s'occupe également de vérifier régulièrement si chaque instance enregistrée est toujours
disponible, afin de mettre à jour son registre en éliminant celles qui n'existent plus.
EDGE MICROSERVICES ZUUL
4. API Gateway/Proxy ZUUL
▪ L'affichage d'une fiche produit repose sur des dizaines de microservices. Il y aura des microservices pour : les images, le
pricing, les recommandations, les textes et caractéristiques des produits, un comparateur, la livraison, etc.
▪ Quand le client voudra afficher cette fiche produit, il devra faire appel à tous ces microservices.
▪ Cela implique de les identifier, de repérer leurs instances, de s'authentifier auprès de chacun d'entre eux pour accéder aux
ressources, de transformer le résultat reçu pour qu'il soit adapté au type d'appareil, etc.
▪ La solution est d'installer un point d'entrée unique vers les microservices : L’API Gateway ou Proxy
▪ L'API Gateway proposée s'appelle ZUUL : plusieurs avantages tels que la sécurité (plus besoin de sécuriser
▪ Zuul peut être considéré comme un proxy inverse (Reverse Proxy) qui sert de point d’entrée à tous les
▪ Les microservices sont découplés et autonomes. Quand on a plusieurs instances d'un microservice, il faut
▪ On ne peut pas utiliser un équilibreur de charge central classique, car celui-ci limiterait la résilience de l’application
▪ Comment permettre à chaque microservice de faire appel à un autre directement, sans être dépendant d'un Load
Balancer central ?
▪ La solution est Ribbon : ce load Balancer côté client est capable d'indiquer directement, depuis le microservice,
▪ Zuul utilise Ribbon en interne pour appeler les URL distantes et les clients Ribbon sont par défaut chargés de
▪ Spring Boot Actuator ajoute à chaque microservice un ensemble de fonctionnalités permettant de les
▪ Spring Boot Actuator n'est pas un Edge Microservice en soi, mais une dépendance à ajouter au
▪ Actuator expose des endpoints/API qui fournissent des données sur des aspects du microservice
EDGE MICROSERVICES ACTUATOR
management.endpoints.web.exposure.include=*
EDGE MICROSERVICES ACTUATOR
▪ management.endpoints.web.exposure.include=refresh
▪ Utilisé dans la surveillance en temps réel des instances en cours d'exécution des microservices
▪ Cet endpoint fonctionne en analysant le retour de toutes les classes qui héritent
de HealthIndicator,
▪ Chacune de ces classes doit effectuer ses tests, et dire si le service est UP ou DOWN.
▪ Il est possible de créer son propre indicateur afin de tester si le microservice fonctionne
produit
EDGE MICROSERVICES ZIPKIN
▪ Dans une architecture microservice, la requête doit traverser plusieurs microservices avant d'aboutir.
▪ Par exemple dans une application m-commerce, dans laquelle la requête de demande de paiement envoyée par le client
déclenche dans le Microservice-produits une autre requête vers le Microservice-commandes, afin de mettre à jour le statut de la
commande.
▪ Si une erreur est retournée, il est difficile de savoir si elle s'est produite au niveau du Microservice-produits ou au niveau du
Microservice-commandes.
▪ Zipkin permet de suivre les requêtes de microservice en microservice, et consulte les différentes réponses et
mes-configs.limitDeProduits= 4
▪ Veiller à ce que tous les noms des propriétés soient précédés d'un
préfixe afin qu'elles soient identifiables: Dans notre cas, le préfixe est
mes-configs
▪ appProperties.getLimitDeProduits() va retourner le
chiffre 4 défini dans le fichier de configuration.
▪ Placer tous les fichiers de configuration dans un dépôt GIT. Grâce à des conventions de nommage de fichiers, Spring Cloud
Config est capable de savoir quel fichier va servir à quel microservice, en se basant sur le nom du microservice.
▪ Pour modifier plus tard la configuration d'un microservice, il suffira de pousser les changements dans le GIT. Spring Cloud
Config se mettra à servir la nouvelle version. Pas besoin d'arrêter les microservice !
SPRING CLOUD CONFIG : CONFIGURATION EXTERNALISÉE
▪ Architecture :
SPRING CLOUD CONFIG : CONFIGURATION EXTERNALISÉE
microservice-produits.properties
• https://github.com/xxxx69/mcommerce-config-repo.git
spring.cloud.compatibility-verifier.enabled=false
spring.application.name=config-server
server.port:9101
spring.cloud.config.server.git.uri=https://github.com/xxxx69/mcommerce-config-repo.git
spring.cloud.config.server.git.default-label=master
• Convention : Tous les Edge Microservices seront sur des ports commençant par 91.
• Celui de config-server est donc 9101. N'oubliez pas de renseigner également son nom (config-server).
SPRING CLOUD CONFIG : CONFIGURATION EXTERNALISÉE
• Ajouter l’annotation @EnableConfigServer pour indiquer que ce microservice comme étant un serveur de
configuration
• http://localhost:9101/microservice-produits/default
• Si ça ne marche pas : procéder par les changements suivants
SPRING CLOUD CONFIG : CONFIGURATION EXTERNALISÉE
• Changer la brache git par défaut de main à master (si besoin)
• http://localhost:9101/microservice-produits/default/master
SPRING CLOUD CONFIG : CONFIGURATION EXTERNALISÉE
• Le serveur de configuration Spring Cloud Config est allé chercher le fichier de configuration dans le GIT, et
• Il fournit ensuite sous format JSON toutes les configurations présentes dans le fichier.
SPRING CLOUD CONFIG : CONFIGURATION EXTERNALISÉE
{
"name": "microservice-produits",
"profiles": [
"default"
],
"label": "master",
"version": "bab20a2dba3c077a8e0c96914908ee9d2018a9fb",
"state": null,
"propertySources": [
{
"name": "https://github.com/xxxx69/mcommerce-config-repo.git/microservice-produits.properties",
"source": {
"server.port": "9001",
"spring.jpa.show-sql": "true",
"spring.h2.console.enabled": "true",
"spring.datasource.sql-script-encoding": "UTF-8",
"management.endpoints.web.expose": "info, health, refresh",
"mes-configs.limitDeProduits": "3"
}
}
]
}
SPRING CLOUD CONFIG : CONFIGURATION EXTERNALISÉE
• Démarrage Microservice-produit
http://localhost:9001/Produits
SPRING CLOUD CONFIG : CONFIGURATION EXTERNALISÉE
• http://localhost:9001/Produits
• On obtient une liste de 3 produits uniquement et qui correspond à la configuration du microservice
SPRING CLOUD CONFIG : CONFIGURATION EXTERNALISÉE
• On obtient toujours la même liste de 3 produits uniquement et qui correspond à la configuration initiale du
• Réponse : La configuration est chargée une seule fois au démarrage du microservice, pour des raisons de
performance.
• Spring Cloud Config offre la possibilité de demander au microservice de s'actualiser et de recharger le fichier
• Ajouter Spring Actuator au microservice, qui expose un URI /refresh permettant de forcer la réactualisation des
valeurs de configuration.
SPRING CLOUD CONFIG : CONFIGURATION EXTERNALISÉE
• Actualisation la configuration du microservice : Spring Actuator
• Ajoutez Spring Actuator dans le pom.xml de Microservice-produits :
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
▪ En résumé :
▪ « application.properties » peut être utilisé pour stocker des constantes auxquelles on peut accéder
▪ Config-Server permet de récupérer les fichiers de configuration dans un dépôt, et de les servir aux
▪ Pour actualiser à la volée la configuration d’un microservice en l’obligeant à récupérer une version
fraîche du fichier .properties, il suffit d’envoyer un POST vers l'endpoint /refresh exposé par Spring
Actuator.