Introduction aux microservices avec le framework Spring Boot.
Qu’est ce que le framework Spring Boot ?

- Spring Boot est un framework moderne pour la création d’applications Web basées sur Java.
- Spring Boot facilite la créations d’applications autonomes avec des fonctionnalités prêtes pour la production sans avoir besoin d’écrire du code supplémentaire.
- Configuration externalisée, centralisée et automatique sans aucun besoin d’écrire la configuration XML (tout de même possible).
- Apache Tomcat (serveur Web) est intégré, donc pas besoin de déployer le WAR, il suffit donc de créer un JAR et de l’exécuter.
Plus d’informations sur le site officiel
Qu’est ce que l’architecture microservices ?
C’est un morceau de code, d’application, modularisé dans un ensemble de modules, indépendant des autres microservices, isolé dans des environnements autonomes.
L’architecture microservices permet aux développeurs de créer des applications puissantes, autonomes, modulaires et complètement indépendantes.

Pourquoi utiliser l’architecture microservices ?
- Les services peuvent être “branchés / débranchés” au fur et à mesure des besoins.
- Hautement évolutif, “scalable“, robuste et dynamique.
- Si un service tombe en panne, un autre service continue de répondre aux demandes.
- Dans le cas d’un environnement en “cluster“, les services individuels peuvent être informés de leurs instances pour assurer une plus grande disponibilité.
- Dans l’ensemble, offre une disponibilité supérieure à celle d’une application “monolithe“.
- En utilisant Docker ou Kubernetes pour des microservices indépendants, il devient facile de prendre en charge les déploiements automatisés et conteneurisés.
Premier pas avec les microservices
Pour “activer” les microservices à l’aide du framework Spring Boot, il fournit des bibliothèques Spring Cloud qui activent un ensemble de fonctionnalités par défaut.
Cet ensemble de fonctionnalités comprend la découverte de services (Service Discovery), le disjoncteur (Circuit Breaker), la passerelle API (API Gateway), le Load Balancer et la gestion de la configuration.
En utilisant cela, il devient très facile de passer à l’architecture microservices.
Il est important de prendre en compte certaines choses par défaut, notamment la modularisation et l’isolation.
Voici certaines fonctionnalités qui sont nécessaires à la plupart des applications en architecture microservices :
Serveur de découverte, Discovery Server (Eureka)
Le serveur de découverte (Discovery Server) Eureka est un microservice et une bibliothèque fournie par Spring Boot qui se chargent de “découvrir” tous les microservices de l’environnement et permet la communication entre eux pour faire le travail.
Tous les microservices clients envoient leur “battement de cœur” au serveur Eureka pour le rendre conscient de leurs instances.
Plus d’informations sur le serveur Eureka
Passerelle API, API Gateway (Zuul)
Zuul API Gateway est une autre bibliothèque fournie par le framework Spring Boot qui permet le routage API pour tous les microservices internes avec une configuration mineure.
Sans cela, l’utilisation du numéro de port direct des microservices indépendants devient difficile à maintenir. Il résout ce problème en utilisant le mappage du service au contexte.
Un seul numéro de port peut être utilisé avec un contexte d’URL spécifique aux services pour appeler des microservices sans avoir à gérer ces numéros.
Avec certaines configurations, Zuul fournit également des fonctionnalités plus courantes de la plupart des passerelles API telles que le routage et le filtrage des demandes.
Service de configuration, Config Service
Le framework Spring Cloud fournit également la gestion de la configuration.
En utilisant le service de configuration Spring, il peut récupérer la configuration à partir de Git, Database, Vault, ou fichier local.
Ceux-ci peuvent être personnalisés pour servir la configuration à d’autres microservices dans le même “cluster“.
Service de sécurité, Spring Tools Security (STS)
Spring Framework fournit déjà la sécurité “prête à l’emploi”. Ce cadre fournit l’authentification et l’autorisation.
L’authentification prend en charge toutes sortes de méthodes couramment utilisées telles que l’authentification de base, basée sur un formulaire ou des informations d’identification, SSO avec OAuth, SSO avec SAML.
Dans le cas des microservices, l’autorisation est un peu délicate car un service ne peut faire confiance à aucun appel provenant d’un autre service.
Ainsi, l’utilisation de STS dans tous les services en créant une autorisation de configuration peut être activée dans tous les services.
Service de cache, Cache Service
La prise en charge du cache peut être ajoutée à n’importe quel service en utilisant simplement la bibliothèque de cache de Spring.
Il prend également en charge le cache externalisé tel que Redis et quelques autres. C’est toujours une bonne idée d’avoir un service séparé pour le cache qui stockera toutes les données au même endroit.
Le reste de tous les autres services peut stocker / récupérer les données au fur et à mesure des besoins.
Service de persistance, Persistence Service
Les données de Spring fournissent la connexion à la base de données.
Un service qui effectue un appel à la base de données au nom de tous les microservices facilite la maintenance du schéma et de la configuration pour le regroupement de connexions.
Reste que tous les autres services peuvent appeler le service de persistance au lieu de “parler” directement à la base de données.
Cela ajoute de la maintenabilité au service de persistance.
Il existe de nombreuses options disponibles avec les données Spring pour se connecter à une base de données.
JPA & Hibernate est l’un des framework les plus puissants. Il suit ORM (Object Relation Mapping).
Il simplifie les requêtes, et avec la prise en charge d’une énorme liste de dialectes, il permet de basculer rapidement et efficacement entre les bases de données.
Ping : Documenter une API Spring Boot avec Swagger
Ping : Spring Initializr et CLI
Ping : Les annotations de base du Framework Spring