- 1. Les microservices expliqués
- 2. De l'architecture orientée services aux microservices
- 3. Avantages des microservices
- 4. Quand utiliser les microservices ?
- 5. Construire et déployer des applications basées sur les microservices
- 6. Meilleures pratiques en matiĂšre de microservices
- 7. Adopter les microservices
- 8. Sécuriser les microservices
- 9. FAQ sur les microservices
- Les microservices expliqués
- De l'architecture orientée services aux microservices
- Avantages des microservices
- Quand utiliser les microservices ?
- Construire et déployer des applications basées sur les microservices
- Meilleures pratiques en matiĂšre de microservices
- Adopter les microservices
- Sécuriser les microservices
- FAQ sur les microservices
Que sont les microservices ?
- Les microservices expliqués
- De l'architecture orientée services aux microservices
- Avantages des microservices
- Quand utiliser les microservices ?
- Construire et déployer des applications basées sur les microservices
- Meilleures pratiques en matiĂšre de microservices
- Adopter les microservices
- Sécuriser les microservices
- FAQ sur les microservices
Les microservices décrivent une approche architecturale cloud-native du développement logiciel qui structure une application à partir de services faiblement couplés en communication les uns avec les autres via des API ou des protocoles de messagerie. Chaque service est autonome et indépendant et exécute un processus unique. Alors que les développeurs cherchent à créer des applications évolutives et résilientes, les microservices sont devenus de plus en plus populaires.
Les microservices expliqués
Les microservices, Ă©galement connus sous le nom d'architecture microservices, sont un type d'architecture logicielle utilisĂ© dans le dĂ©veloppement d'applications Cloud Native. Les applications conçues selon ce modĂšle comprennent de petits composants indĂ©pendants et faiblement couplĂ©s qui peuvent ĂȘtre dĂ©ployĂ©s et qui, ensemble, fournissent les capacitĂ©s de l'application.
Dans une architecture de microservices, chaque service exécute une fonction métier distincte et communique avec d'autres microservices par le biais d'interfaces bien définies, la plupart du temps à l'aide d'API RESTful.
S'éloignant de l'application monolithique développée en une seule unité, les microservices permettent aux développeurs de construire avec des modules qu'ils peuvent développer, tester et déployer de maniÚre indépendante, ce qui accélÚre la mise sur le marché. La nature découplée des microservices permet aux développeurs d'introduire de nouveaux codes et de nouvelles fonctionnalités plus fréquemment qu'ils ne le pourraient autrement, ce qui permet aux applications modernes de suivre l'évolution des besoins des clients.
Plus de développement d'applications Cloud Native, remplaçant leurs applications monolithiques hébergées par des serveurs web individuels par des applications conteneurisées, natives du cloud et réparties sur un cluster de serveurs hÎtes.
De l'architecture orientée services aux microservices
L'architecture orientée services (SOA) est apparue au début des années 2000 comme un moyen de construire de grands systÚmes distribués en les décomposant en services plus petits et faiblement couplés. L'architecture microservices est apparue comme une évolution naturelle de l'architecture SOA.
Le concept de microservices a été introduit par Fred George lors d'un atelier sur l'architecture logicielle en 2011. George avait essayé de résoudre des problÚmes d'évolutivité avec l'architecture SOA alors qu'il travaillait sur un site de commerce électronique et il a eu l'idée de construire de petits services autonomes.
L'architecture microservices a repris les principes SOA d'orientation des services et les a affinĂ©s pour les applications cloud-natives modernes. Les services Ă gros grain de la SOA sont devenus des "micro" services Ă grain fin et granulaire, ce qui les rend trĂšs efficaces et offre la flexibilitĂ© nĂ©cessaire pour adapter une pile technologique Ă un service donnĂ©. L'architecture microservices a mĂȘme rĂ©duit la charge de communication en remplaçant les API SOAP encombrantes par des options lĂ©gĂšres, telles que les API REST ou les files d'attente de messages.
Les microservices ont rapidement gagné en popularité parmi les architectes de logiciels, et des entreprises comme Netflix, Amazon, The Guardian et Spotify ont commencé à adopter cette architecture.
Figure 1 : L'architecture de microservices est à la base des avantages associés à l'application moderne et Cloud Native.
Avantages des microservices
Les microservices fournissent un framework pour construire des applications Cloud Native qui peuvent s'adapter à l'évolution des exigences de l'entreprise. Les innombrables avantages découlent de l'architecture de l'application.
Agilité
L'architecture microservices se prĂȘte Ă un dĂ©veloppement et Ă un dĂ©ploiement indĂ©pendants. Contrairement aux applications monolithiques, oĂč le changement d'une ligne de code implique la mise Ă jour de toute l'application, les dĂ©veloppeurs peuvent modifier ou remplacer des services sans affecter le systĂšme distribuĂ©. La possibilitĂ© de dĂ©ployer des services individuels facilite l'ajout de nouvelles fonctionnalitĂ©s ou le retour en arriĂšre des modifications apportĂ©es Ă une application.
ĂvolutivitĂ©
La mise à l'échelle d'une application entiÚre n'est pas optimale. Avec les microservices, seuls les composants qui nécessitent une mise à l'échelle sont mis à l'échelle. Les développeurs peuvent s'occuper d'un service individuel en fonction des besoins, ce qui permet en fin de compte d'améliorer les performances en cas de charge importante, d'utiliser efficacement les ressources et de réduire les coûts d'infrastructure.
Choix
Dans l'architecture microservices, l'application Cloud Native ne partage pas une pile et une base de données communes. Les développeurs peuvent choisir les outils qu'ils préfÚrent et les technologies pour répondre aux exigences distinctes des services individuels.
Intégration
Les développeurs peuvent écrire des microservices dans n'importe quel langage et les connecter à des microservices programmés dans n'importe quel langage. De plus, les microservices peuvent fonctionner sur n'importe quelle plateforme, ce qui permet de les intégrer aux systÚmes existants.
Réutilisation du code
L'architecture microservices permet aux développeurs de construire des services modulaires qu'ils peuvent réutiliser dans les applications. En travaillant avec des composants réutilisables, les programmeurs réduisent le temps de développement et améliorent la qualité du code, car ils investissent dans une culture "écrire une fois, réutiliser souvent".
Tolérance de panne
L'architecture microservices favorise la rĂ©silience. Les services Ă©tant conçus pour fonctionner de maniĂšre autonome, la dĂ©faillance d'un seul d'entre eux entraĂźne rarement l'arrĂȘt de l'application, comme c'est souvent le cas pour les applications monolithiques.
Collaboration
L'architecture microservices permet aux équipes de travailler simultanément sur différents services, ce qui se traduit par un délai de mise sur le marché plus rapide. Si les développeurs prennent des décisions sans avoir à se coordonner avec d'autres équipes, les microservices favorisent également la collaboration entre les équipes, puisque chacune d'entre elles est responsable du développement et de la maintenance d'une partie de l'ensemble. Cela peut conduire à un meilleur alignement sur les objectifs de l'entreprise et à une utilisation plus efficace des ressources.
Itération constante
L'application construite avec des microservices est faite pour Ă©voluer. Les dĂ©veloppeurs peuvent rapidement dĂ©ployer des microservices de base en tant que produit minimum viable et mettre Ă niveau l'application au fur et Ă mesure que les Ă©quipes complĂštent les services supplĂ©mentaires. Les nouvelles technologies peuvent ĂȘtre intĂ©grĂ©es dans la conception au fur et Ă mesure de leur apparition. L'application basĂ©e sur les microservices reste en cours, Ă©voluant constamment vers la perfection thĂ©orique.
Quand utiliser les microservices ?
Bien que les microservices basés sur des conteneurs offrent de nombreux avantages, ils ne constituent pas toujours la bonne architecture d'application à choisir. Lorsque vous prenez des décisions en matiÚre d'ingénierie logicielle, pensez à vos objectifs pour l'application, ainsi qu'aux obstacles au développement et aux besoins que vous prévoyez pour la durée de vie de l'application. Les microservices fonctionnent mieux avec les applications complexes. Les scénarios à envisager pour l'utilisation des microservices sont les suivants :
Grandes applications
Si vous construisez une application vaste et complexe, les microservices vous permettront de diviser l'application en morceaux gérables, ce qui facilitera son développement, son déploiement et sa maintenance.
Complexité du calendrier
L'architecture microservices peut accueillir des services indĂ©pendants avec des rythmes de dĂ©veloppement diffĂ©rents. MĂȘme si un service connaĂźt un retard inattendu, le projet peut se poursuivre sans incidence globale sur le calendrier de dĂ©veloppement de l'application.
Mises à jour fréquentes
L'architecture microservice est idéale pour les applications qui nécessiteront des mises à jour fréquentes, car les services indépendants permettent aux développeurs de modifier le module plutÎt que l'application.
Grande évolutivité
Si votre application doit gérer un volume de trafic important ou doit évoluer rapidement, les microservices sont indispensables. C'est notamment le cas si vous devez mettre à l'échelle des parties spécifiques de l'application, plutÎt que l'ensemble de l'application.
Ăquipes multiples
Si plusieurs Ă©quipes de dĂ©veloppement travaillent sur la mĂȘme application, les microservices vous aideront Ă conserver agilitĂ© et efficacitĂ©. Chaque Ă©quipe peut travailler sur son microservice, en utilisant la pile technologique qui lui convient, sans se soucier du reste de l'application.
Architecture décentralisée
Si vous souhaitez construire une application avec une architecture dĂ©centralisĂ©e, les microservices sont autonomes et peuvent ĂȘtre dĂ©ployĂ©s Ă diffĂ©rents endroits, mĂȘme parmi diffĂ©rents fournisseurs de services cloud.
Cloud hybride
Si vous prévoyez une architecture de cloud hybride, dans laquelle certains services continueront à fonctionner sur place et d'autres dans le cloud, les microservices vous aideront à gérer la complexité de l'application.
Figure 2 : Les appels API représentant les demandes des clients acheminées par API gateway vers les terminaux des microservices internes.
Construire et déployer des applications basées sur les microservices
L'architecture microservices exige une planification minutieuse. Certaines technologies et pratiques communes à l'environnement de production permettent aux développeurs de développer, de maintenir et d'exploiter efficacement des applications basées sur des microservices.
DevOps
Les pratiques DevOps, notamment CI/CD, sont essentielles à l'approche architecturale des microservices. Contrairement aux applications monolithiques, les microservices sont des systÚmes distribués intrinsÚquement complexes, avec de nombreuses piÚces mobiles et des piles technologiques indépendantes. Cette complexité exige une collaboration fréquente entre les équipes de développement et d'exploitation afin de garantir une intégration transparente des composants.
Les pratiques DevOps fournissent les outils de collaboration, de communication et d'automatisation nécessaires pour rassembler efficacement les équipes tout au long du cycle de vie du développement logiciel.
Livraison continue
La livraison continue va de pair avec les microservices, permettant aux développeurs de déployer des mises à jour logicielles fréquemment et de maniÚre fiable en faisant appel à des outils d'automatisation de l'infrastructure, tels que des serveurs d'intégration continue, des pipelines de déploiement et des cadres de tests automatisés pour rationaliser le processus CI/CD.
La livraison constante est particuliĂšrement importante pour garantir que chaque service peut ĂȘtre mis Ă jour et publiĂ© indĂ©pendamment des autres microservices.
REST
Les microservices communiquent entre eux - et la plupart le font au sein d'applications web - ce qui rend REST complémentaire. REST, ou Representational State Transfer, est un modÚle de conception architecturale pour construire des API RESTful, qui permettent aux services de communiquer via HTTP dans des formats standard, tels que XML, HTML et JSON. Mais les API REST sont essentielles pour les applications basées sur les microservices, et ce pour plusieurs raisons.
Les API REST sont lĂ©gĂšres et agnostiques en termes de plateforme, ce qui signifie qu'elles fournissent une interface standardisĂ©e qui permet aux microservices de communiquer, quelle que soit leur technologie sous-jacente. Ătant donnĂ© que les exigences contiennent les informations nĂ©cessaires pour complĂ©ter la demande, les API REST ne nĂ©cessitent pas de contexte stockĂ© sur le serveur. Ils peuvent traiter de gros volumes de demandes sans compromettre les performances, et les services d'une architecture microservices basĂ©e sur REST peuvent Ă©voluer de maniĂšre indĂ©pendante, en communiquant efficacement de maniĂšre apatride.
Conteneurs
Bien que les microservices permettent aux Ă©quipes de choisir le langage et le cadre de leur service, travailler avec diffĂ©rents langages dans le mĂȘme pipeline de CD pose des problĂšmes. Containers fait abstraction de la variance entre les services, car chaque microservice devient une unitĂ© autonome progicialisĂ©e avec sa base de code, sa base de donnĂ©es et ses dĂ©pendances. Le pipeline de CD, dĂ©sormais homogĂšne, peut effectuer des tests cohĂ©rents sur chaque conteneur.
Les services sont capables d'interagir sans interférer les uns avec les autres lorsqu'ils sont séparés par des conteneurs, et une fois déployés, les conteneurs fournissent un environnement d'exécution léger et portable qui permet aux services de fonctionner de maniÚre cohérente sur toutes les plateformes. Des outils comme Docker et Kubernetes sont largement utilisés pour gérer les microservices conteneurisés.
Orchestrateur Kubernetes
Un outil d'orchestration comme Kubernetes peut faire abstraction de l'infrastructure sous-jacente et automatiser la gestion, le déploiement et la mise à l'échelle des conteneurs sur plusieurs serveurs. Son extensibilité permet également aux développeurs et aux opérateurs d'utiliser leurs outils logiciels libres et commerciaux préférés, réduisant ainsi le travail manuel de gestion des conteneurs.
Sans serveur
L'informatique sans serveur est une autre option pour déployer des microservices. Les architectures sans serveur utilisent des plateformes de fonctions en tant que service (FaaS) pour créer des unités de déploiement encore plus petites et évoluer à la demande. Bien que les architectures sans serveur puissent augmenter les dépendances des fournisseurs, elles offrent une réduction des coûts opérationnels, de la complexité et des délais d'ingénierie.
Meilleures pratiques en matiĂšre de microservices
La conception d'une architecture de microservices exige une planification et une réflexion approfondies. Pour créer des applications basées sur les microservices réussies, les développeurs doivent observer les bonnes pratiques suivantes :
- Conception axée sur le domaine : La conception axée sur le domaine (DDD) est une approche de conception qui se concentre sur le domaine d'activité et le comportement de l'application. Il aide les développeurs à diviser l'application en composants plus petits et plus faciles à gérer, ce qui facilite la construction, le déploiement et la maintenance.
- Limites du service : Lors de la conception d'une architecture de microservices, il est essentiel de définir des limites de service claires. Chaque microservice doit avoir une responsabilité bien définie.
- Petits services : Gardez les services "micro", concentrés sur une seule responsabilité. Si vous perdez de vue ce principe fondamental, vous sacrifierez la facilité de gestion.
- Conception de l'API : Les microservices communiquent par le biais d'API. Utilisez donc des API cohérentes, évolutives et sécurisées qui limitent l'accÚs aux données aux applications, utilisateurs et serveurs autorisés.
- Gestion décentralisée des données : Les applications microservices nécessitent une variété d'options de stockage et de base de données. Chaque microservice doit disposer de son propre datastore. Cette approche vous aide à éviter les incohérences de données et vous permet de mettre à l'échelle chaque microservice de maniÚre autonome. Vous voulez que l'équipe de développement choisisse la base de données pour chaque service afin de s'assurer qu'elle convient le mieux à son projet.
- Pipelines CI/CD: La mise en Ćuvre de CI/CD vous aidera Ă trouver et Ă corriger les bogues rapidement, ce qui est particuliĂšrement prĂ©cieux avec plusieurs bases de code Ă gĂ©rer dans une architecture de microservices.
- RĂ©silience intentionnelle : ProtĂ©gez l'application contre les arrĂȘts dus Ă des dĂ©faillances de dĂ©pendances. N'utilisez pas d'appels de procĂ©dure Ă distance (RPC) entre les microservices, si possible, et intĂ©grez des fonctions telles que des disjoncteurs pour arrĂȘter les dĂ©faillances en cascade.
- SOP: Ălaborer des procĂ©dures opĂ©rationnelles normalisĂ©es qui dĂ©finissent les conventions de codage, les structures de rĂ©pertoire et les protocoles de communication. Le respect d'un ensemble de normes permet de crĂ©er des microservices cohĂ©rents et gĂ©rables.
Adopter les microservices
eBay, Etsy, Uber - d'innombrables entreprises ont démantelé leurs applications monolithiques et les ont refaçonnées en architectures basées sur les microservices pour capitaliser sur les avantages d'échelle, l'agilité de l'entreprise et les gains financiers.
Les organisations qui prévoient de passer aux microservices devraient d'abord adopter DevOps, ce qui vous mettra en condition pour gérer les complexités que vous rencontrerez. De maniÚre générale, anticipez les étapes décrites ci-dessous lors de l'élaboration de votre projet.
Identifier les capacités de l'entreprise
La premiĂšre Ă©tape de la migration vers l'architecture microservices consiste Ă identifier les capacitĂ©s ou les fonctionnalitĂ©s commerciales que votre application doit prendre en charge. Cela vous aidera Ă dĂ©finir le champ d'application de votre application et Ă prendre des dĂ©cisions sur les capacitĂ©s Ă dĂ©velopper en prioritĂ©, ainsi que sur la maniĂšre dont ces microservices doivent ĂȘtre conçus et intĂ©grĂ©s les uns aux autres.
Décomposer l'application monolithique
La plupart des organisations utilisent la conception pilotée par domaine ou la décomposition basée sur les fonctionnalités pour décomposer leurs applications monolithiques.
AprÚs avoir identifié les capacités commerciales de l'application, définissez les limites des services pour chaque microservice, en veillant à ce que chaque microservice ait une responsabilité distincte et bien définie. Vous voudrez cartographier les dépendances entre les capacités de l'entreprise, les datastores et les systÚmes externes. Sur la base des contextes délimités et des dépendances, définissez les microservices qui remplaceront l'application monolithique.
Chaque microservice, axé sur une seule capacité commerciale, doit avoir des interfaces claires. Examinez les modalités d'accÚs aux entités de données et, enfin, réfléchissez à la maniÚre de partitionner les données afin de réduire les dépendances entre les services.
Définir les interfaces de service
Mettez en Ćuvre les interfaces de service pour chaque microservice, en veillant Ă ce que l'interface reflĂšte la seule responsabilitĂ© du microservice. Vous pouvez utiliser diffĂ©rentes techniques, telles que les API RESTful ou les protocoles de messagerie, pour dĂ©finir les interfaces de service.
Mettre en Ćuvre et tester les services
En fonction de vos exigences et de votre expertise, choisissez les langages de programmation et les cadres pour mettre en Ćuvre les services. RĂ©pĂ©tez la conception si nĂ©cessaire, notamment en testant les nouvelles interfaces, les protocoles de communication et les datastores.
Conteneuriser les services
Une fois les services mis en Ćuvre et testĂ©s, vous voudrez les conteneuriser Ă l'aide de technologies de conteneurs, telles que Docker ou Kubernetes. La conteneurisation vous permettra de dĂ©ployer et de gĂ©rer les services de maniĂšre indĂ©pendante.
Automatiser le déploiement et l'orchestration
Automatisez l'orchestration des services Ă l'aide d'outils tels que Kubernetes ou Docker Swarm. En plus de rationaliser efficacement le dĂ©ploiement des services, l'automatisation via Kubernetes ou Docker amĂ©liorera la fiabilitĂ© et la disponibilitĂ© de l'application. L'une ou l'autre de ces plates-formes peut dĂ©tecter une dĂ©faillance ou une absence de rĂ©ponse d'une instance de service et prendre des mesures pour remĂ©dier au problĂšme. Kubernetes, par exemple, peut redĂ©marrer les instances dĂ©faillantes ou les reprogrammer sur d'autres nĆuds, tandis que Docker peut migrer automatiquement le conteneur dĂ©faillant vers un autre nĆud.
ContrÎler et gérer les services
La décomposition d'une application monolithique n'est pas un processus unique. Il nécessite une maintenance et des mises à jour au fur et à mesure de l'évolution des besoins de l'application et de ses utilisateurs. Surveillez les nouveaux microservices et suivez les indicateurs clés, tels que le temps de réponse et l'utilisation des ressources.
Sécuriser les microservices
Les applications microservices hautement distribuĂ©es et cloud-natives introduisent des complexitĂ©s en matiĂšre de sĂ©curitĂ©. Au lieu d'un seul point d'entrĂ©e, ils comportent des dizaines, voire des centaines, de points de vulnĂ©rabilitĂ© potentiels - et chacun d'entre eux doit ĂȘtre sĂ©curisĂ©. Les API et les dĂ©pendances du code ne reprĂ©sentent que deux sources de risque dans la surface d'attaque croissante de l'application moderne.
Sécurité des applications web et des API
Les applications modernes consomment des entrĂ©es provenant de diverses sources - requĂȘtes web standard, appels API d'appareils mobiles, Ă©vĂ©nements cloud, communication de tĂ©lĂ©mĂ©trie d'appareils IoT, stockage cloud, etc. Qui plus est, la demande web d'un seul client (c'est-Ă -dire le trafic nord-sud) peut engendrer des centaines d'appels API entre microservices internes (c'est-Ă -dire le trafic est-ouest).
La complexité des applications web centrées sur les API nécessite des stratégies évolutives, flexibles et multicouches qui fonctionnent pour tout type de charge de travail dans tout type d'environnement ou d'architecture cloud. Sécuriser l'interface web frontale de l'application Cloud Native ne suffit pas. Les exigences des applications Cloud Native nécessitent une protection de la couche applicative pour les API Cloud Native. La sécurité des applications web et des API (WAAS) est essentielle.
Dépendances du code et analyse de la composition des logiciels
Les composants logiciels libres représentent environ 70 % des applications Cloud Native. Bien que cela accélÚre le développement, de nombreux progiciels open-source et leurs dépendances contiennent des vulnérabilités. En outre, chaque version d'un progiciel de logiciel libre dépendant peut modifier des fonctionnalités essentielles. Sans une visibilité totale, les vulnérabilités ne sont pas détectées.
Les outils autonomes d'analyse de la composition des logiciels (SCA) mettent en Ă©vidence les risques liĂ©s aux logiciels libres trop tard dans le cycle de dĂ©veloppement, ce qui entraĂźne une accumulation de vulnĂ©rabilitĂ©s qui ne peuvent pas toujours ĂȘtre rĂ©solues. Des outils distincts pour le SCA et la sĂ©curitĂ© de l'IaC donnent lieu Ă des alertes bruyantes sans contexte et sans connaissance des risques interconnectĂ©s. Parce que les lacunes sont inĂ©vitables sans couverture de l'exĂ©cution et de la charge de travail, il est prĂ©fĂ©rable de sĂ©curiser les applications Cloud Native avec une sĂ©curitĂ© Cloud Native intĂ©grĂ©e.
Code-to-Cloud CNAPP
Identifiant et hiérarchisant les risques critiques de l'ensemble de l'application cloud-native, une cloud-native application protection platform (CNAPP) intÚgre plusieurs types de sécurité pour offrir une protection complÚte, de code à cloud - gestion de la posture de sécurité cloud (CSPM), protection de la charge de travail cloud, gestion des droits à l'infrastructure cloud (CIEM), gestion de la posture de sécurité Kubernetes (KSPM), sécurité de l'infrastructure en tant que code, WAAS, SCA et bien d'autres encore.
Les responsables de la sécurité du cloud qui explorent la meilleure façon de sécuriser les besoins de développement rapide des applications employant des technologies cloud-natives, telles que les conteneurs, les microservices et les fonctions sans serveur, devraient envisager d'adopter un CNAPP.