Les architectures orientées microservices sont de plus en plus utilisées pour le développement de logiciels. La difficulté de maintenir de manière efficace des applications qui présentent une architecture monolithique est souvent mise en avant pour appuyer l’utilisation des architectures orientées microservices. Mais concrètement, que sont les microservices et leur écosystème ? Comment les utiliser au mieux ?
Le but de cette série d’articles est de comprendre ce qu’est une architecture orientée microservices, quels en sont ses avantages, quels en sont ses limites/défis et comment les concepts de Service Mesh et API-Gateway font partie de leur écosystème.
Cette série d’articles est définie comme suit :
Cet article se base sur les concepts décrits dans la Partie 1 : Comprendre ce qu’est une architecture microservice
Un Service Mesh est un système distribué qui cohabite avec l’application et qui permet d’assembler des microservices en interceptant leurs trafics (flux internes). Cette interception de trafic se fait en définissant des règles spécifiant comment un microservice doit communiquer avec un autre.
Le Service Mesh opère donc d’une manière transversale en spécifiant des règles non-fonctionnelles s’appliquant aux flux entre microservices et à des instances de microservices [1]. Le Service Mesh permet donc de modifier et d’optimiser les flux internes d’une application. Par exemple : définir une règle de routage/load balancing, définir une règle de sécurité ou encore récupérer des données d’observabilité.
Le Service Mesh aidera également à intégrer les outils nécessaires à la gestion de microservices (voir partie 1 : Avantage et défis), il s’agira notamment de la gestion de l’observabilité, de la sécurité ou encore des pipelines de déploiement continu.
Comment fonctionne un Service Mesh
Le Service Mesh est basé sur le patron de conception proxy.
Pour intercepter les flux internes de données, le Service Mesh déploie un proxy [2] devant chaque microservice. L’ensemble de tous ces proxies forment ce qu’on appelle le Data Plane du Service Mesh. Chaque proxy intercepte tous les flux entrants ou sortants d’un microservice. Il peut également appliquer des règles ou des politiques sur les flux (par exemple, des politiques de sécurité). Les politiques sont gérées globalement par le Control Plane. L’utilisateur définit donc des politiques dans le Control Plane et celui-ci se charge d’envoyer les configurations au Data Plane (ici proxies). Le Data Plane remonte également des métriques vers le Control Plane dans un but d’observabilité.
Les fonctionnalités d’un Service Mesh
Actuellement, les Services Mesh sont en pleine expansion. Beaucoup de projets voient le jour, certains ne sont pas encore matures, d’autres ne proposent qu’un nombre réduit de fonctionnalités.
Les fonctionnalités principales des Services Mesh peuvent être exposées comme suit :
Comme mentionné précédemment, il existe de nombreuses implémentations de Services Mesh. Durant la conférence KubeCon2021, 3 implémentations de Services Mesh ont été souvent citées :
Pour aller plus loin
Les articles suivants permettent d’en savoir plus sur les Services Mesh :
Suite suggérée : Partie 3 : Istio, un Service Mesh utilisé dans un de nos projets (article technique) (bientôt disponible)
Contact
Pour plus d’information veuillez contacter : Fabian Steels ou Valéry Ramon
Keywords : ServiceMesh, Microservice, architecture, Routing, load balancing, multimesh, mTLS, sécurité, SSO, observabilité
[1] en suivant une approche où les microservices sont conteneurisés, une instance de microservices correspond à la création d’un conteneur à partir d’une image Docker
[2] le proxy, bien que souvent utilisé, n’est pas la seule option pour intercepter les flux IN/OUT d’un microservice. Par exemple, les interfaces gRPC peuvent être une autre option.
[3] Load-balancing : technique utilisée pour répartir uniformément les charges de travail. Pour plus d’information : https://fr.wikipedia.org/wiki/Répartition_de_charge
[4] La scalabilité est généralement gérée via la conteneurisation des microservices. Lorsqu’un microservice est conteneurisé, il est possible de lancer X instances de ce microservice. Ces instances sont des conteneurs indépendants mais liés à une même image Docker (même microservice). Voir https://www.redhat.com/fr/topics/containers/what-is-docker.
[5] l’éviction d’instances est utilisée pour éviter qu’un conteneur défectueux n’impacte pas les performances globale de l’application
[6] Mtls : méthode d’authentification mutuelle via certificats et clés privée. Pour plus d’information : https://en.wikipedia.org/wiki/Mutual_authentication
[7] Identity and Access Management : service pouvant gérer les identités électroniques ou numériques (identification unique SSO, authentification multifacteur, gestion des accès)