Que sont les microservices ?
Les microservices, également connus sous le nom de architecture microservices, font référence à une méthode de développement de logiciel qui structure une application comme une collection de services combinés. Essentiellement, cette suite d'applications est déployée comme une application complète à part entière et ces services fonctionnent ensemble pour constituer l'application en elle-même. Les microservices suivent tous ces modèles : ils sont organisés autour des capacités de l'entreprise, ils sont faiblement couplés, ils peuvent être déployés indépendamment et ils peuvent être testés. Comme ils sont faiblement couplés, les microservices peuvent être construits, déployés et mis à l'échelle de manière indépendante.
Chaque service communique avec d'autres services par le biais d'Application Programming Interfaces (API) normalisées, ce qui permet aux services d'être écrits dans différents langages ou d'être basés sur différentes technologies. Cela diffère complètement des systèmes construits comme des structures monolithiques où les services sont inextricablement liés et ne peuvent être mis à l'échelle qu'ensemble.
Étant donné que chaque service a une fonctionnalité limitée et généralement unique, il est beaucoup plus petit en taille et en complexité. Le terme « microservice » vient de cette conception de fonctionnalité discrète.
En décomposant l'application en services distincts qui mettent en œuvre des fonctions commerciales spécifiques, les microservices offrent aux développeurs modernes un moyen de concevoir des applications hautement évolutives et flexibles.
Pourquoi des microservices ?
Les microservices ont gagné en popularité parce que leurs caractéristiques modulaires sont synonymes de flexibilité, d'évolutivité et de réduction des efforts de développement. Leur souplesse de déploiement et l'essor des options de déploiement cloud native serverless et function-as-a-service (telles que AWS Lambda et Microsoft Azure Cloud Functions) ont créé l'environnement idéal pour l'épanouissement des microservices dans le paysage informatique actuel. Ces plateformes en nuage permettent de faire passer les microservices et les fonctions de l'inactivité à un volume élevé et inversement, tandis que les clients ne paient que pour la capacité de calcul qu'ils utilisent.
Les entreprises cherchant continuellement à être plus agiles, à réduire les goulets d'étranglement et à améliorer les délais de livraison des applications, l'architecture microservices continue de gagner en popularité.
Dans le passé, les entreprises développaient des applications d'entreprise spécialisées qui comportaient trois composants principaux :
- Une interface orientée client, généralement des pages HTML exécutées sur la machine de l'utilisateur
- Une base de données, généralement de nombreuses tables dans un système de gestion de base de données relationnelle
- Une application côté serveur qui traitait toutes les demandes telles que l'extraction de données, les requêtes HTTP et l'alimentation des navigateurs HTML.
Pour l'utilisateur, tout semblait passer par un point de contact unique. Le développement, les tests et le déploiement utilisaient un pipeline de déploiement, et vous pouviez évoluer horizontalement en exécutant plusieurs instances.
Cependant, leur développement était assez coûteux, toute modification nécessitait une nouvelle conception, une reconstruction et un redéploiement complets du système, il était difficile de conserver une structure propre et modulaire au fur et à mesure que l'organisation grandissait et changeait, et la mise à l'échelle nécessitait de tester à nouveau l'application complète, de la mettre à l'échelle et de la redéployer pour tout changement, aussi minime soit-il. Tous ces problèmes ont abouti à un système coûteux et non agile que l'évolution rapide du paysage technologique a rapidement dépassé.
Nous pourrions considérer ces systèmes monolithiques traditionnels comme des maisons de poupées toutes prêtes. Bien que la modification de la structure ou de la disposition soit possible, elle n'est pas facile et vous devez respecter les limites de taille, à moins d'acheter une autre maison de poupée et de la joindre à la maison de poupée héritée.
Avec les microservices, il n'est pas nécessaire de redéployer l'ensemble de l'application, mais uniquement les services qui en ont besoin. Au lieu d'une entité structurelle singulière, comme une maison de poupée, voyez les microservices comme des Lego. Techniquement, ils sont tous indépendants, mais lorsqu'ils sont assemblés, ils forment une application structurelle entière. Si vous souhaitez ajouter un compartiment ou mettre fin à quelque chose, il est facile de le retirer, de l'ajouter, de le mettre à l'échelle et de le modifier pour l'adapter à l'évolution des besoins, rapidement et efficacement, sans avoir à fermer l'ensemble de l'application.

Les avantages d'une architecture microservices
Les entreprises qui cherchent à adopter les microservices et à les intégrer dans leurs offres bénéficient d'un certain nombre d'avantages importants, qui seront examinés plus en détail ci-dessous.
Mise sur le marché plus rapide
La possibilité d'ajouter et de supprimer rapidement des fonctions signifie que l'entreprise peut devenir incroyablement agile. L'ajout de nouvelles fonctionnalités peut se faire à grande vitesse, au rythme de la croissance de l'entreprise. Contrairement aux logiciels monolithiques traditionnels, les modifications apportées au code d'une partie du système n'affectent pas les autres modules. Il n'est donc pas nécessaire de procéder à des tests supplémentaires, de fermer l'ensemble de l'application ou de tout redéployer.
Fonctionnalité accrue et coûts opérationnels réduits
Les modules des microservices étant tous distincts, le risque que des bogues ou des erreurs potentielles entraînent la défaillance de l'ensemble de l'application est bien moindre. Contrairement aux systèmes logiciels traditionnels, où une modification d'une partie de la fonctionnalité peut entraîner un défaut ou un bogue dans une autre partie, l'isolation et le couplage souple permettent la mise en œuvre de mises à niveau et d'améliorations compartimentées. Les microservices permettent également d'utiliser des options de déploiement de type « cloud native function as a service », ce qui peut réduire considérablement les coûts d'exploitation.
Applications facilement extensibles
Les décisions de mise à l'échelle des microservices sont prises à un niveau granulaire, ce qui permet de prendre les décisions les plus efficaces pour optimiser le système. En adoptant les microservices, lorsque le moment est venu de passer à l'échelle supérieure, les organisations sont en mesure de faire les choix qui leur conviennent le mieux, sur le moment.
Intégration continue
Les microservices sont développés à l'aide de flux individuels de développement et de déploiement continus. Ces flux peuvent être maintenus de sorte qu'il n'y a pas d'interruption d'un autre service lorsqu'une équipe met en œuvre un changement basé sur le retour d'information du client, ce qui signifie une plus grande satisfaction de l'utilisateur final.
Équipes de développeurs dédiés
Contrairement aux systèmes monolithiques, qui ne peuvent pas accueillir plusieurs équipes de développement, les microservices ont la capacité de prendre en charge des équipes dédiées à certaines parties spécifiques du système. Comme les modules logiciels n'interagissent pas entre eux, il n'y a pas de risque de bogues ou de chevauchement des tâches entre les équipes. Les équipes de microservices peuvent donc compter sur des développeurs de logiciels spécialisés, ainsi que sur des équipes travaillant avec des horaires ou dans des lieux géographiques différents.
Tous ces avantages s'ajoutent à celui qui est peut-être le plus important : l'agilité de l'entreprise. Des changements simples et de faible ampleur peuvent être apportés rapidement, ce qui permet d'expérimenter les processus. La possibilité de faire un grand bond en avant dans l'entreprise, ou du moins de réagir rapidement et en temps réel en cas de défaillance, devient possible avec les microservices. En outre, des études ont montré que dans les mois qui suivent le déploiement d'une architecture de microservices, un tiers des organisations commencent à en tirer des avantages. Cela signifie que les délais de développement sont réduits, et avec moins d'erreurs dans le code et des capacités accrues, l'impact positif sur les opérations commerciales peut se ressentir presque immédiatement.
Caractéristiques des microservices
- Couplage lâche
- Composants pouvant être déployés de manière indépendante
- Déploiement automatisé
- Contrôle décentralisé des données et de la langue
- Maintenance hautement facilitée
- Facilement testable
- Organisés autour des besoins et des capacités de l'entreprise ou de l'organisation
- Chaque service est généralement détenu par une petite équipe
Les défis des microservices
Si les microservices permettent de résoudre un certain nombre de problèmes, il existe encore quelques difficultés et problèmes que l'on peut rencontrer avec l'architecture, ainsi qu'avec l'adoption initiale.
Data management décentralisé
Contrairement aux systèmes monolithiques, les microservices ne reposent généralement pas sur une base de données unique qui fait office de source de vérité unique pour les données de l'entreprise. Les données des clients peuvent se trouver quelque part, tandis que celles des fournisseurs se trouvent à un autre endroit. Les informations d'inventaire peuvent être stockées sur le portail de vente en ligne, tandis que le système de commande est conservé dans une base de données distincte. Cela peut créer des problèmes au niveau de la data quality et de la cohérence de vos données, à moins que vous ne fassiez un effort particulier de planification à cet égard.
Défis liés à la culture d'entreprise et à l'organisation interne
Il peut être difficile d'amener les entreprises à accepter et à s'adapter à de nouveaux systèmes logiciels. Il arrive souvent que la direction soit réticente à céder le contrôle, ou qu'un service souhaite défendre ses silos. Quelle que soit la raison de la réticence des équipes à accepter de nouveaux systèmes, il faut comprendre que les intervenants n'apprécient pas toujours le changement.
Pour faire adopter les microservices à l'échelle de l'entreprise, il est essentiel de reconnaître que l'introduction de nouveaux systèmes et processus peut être perturbante, mais il est tout aussi important de se rappeler que les avantages en valent la peine. Lorsque vous entamez la transition vers les microservices, il est préférable d'impliquer les équipes concernées dans la planification de l'architecture. Prévoyez un plan pour évaluer les solutions disponibles et veillez à choisir celle qui répond le mieux aux besoins de l'entreprise.
Les microservices peuvent entraîner une certaine complexité dans votre architecture
Alors que les services individuels qui composent les microservices peuvent être petits et simples en eux-mêmes, lorsqu'ils sont combinés, l'application globale peut finir par avoir beaucoup de pièces mobiles qui peuvent devenir difficiles à gérer. Avec des centaines ou des milliers d'interconnexions, les microservices peuvent rapidement gagner en complexité.
Il est recommandé, lors de la mise en œuvre des microservices, d'accorder une grande importance à la réflexion et à la planification dans la conception et la mise en œuvre de base. De nombreuses complexités peuvent être évitées en mettant en œuvre une bonne conception de l'architecture de base qui permette la croissance et l'application de changements dans le futur.
Exemples de cas d'utilisation de l'architecture des microservices
Adoptez des options de déploiement natives du nuage : tirez parti des technologies sans serveur et des fonctions en tant que service pour permettre des opérations plus efficaces et plus évolutives.
Migrer les fonctionnalités des applications existantes : décomposer les services des grandes applications monolithiques afin qu'ils puissent être maintenus et mis à l'échelle de manière indépendante.
Tirer parti de l'architecture d'application moderne : adoptez des modèles d'application de microservices axés sur les événements et faiblement couplés, avec la possibilité de tirer parti de différents langages de programmation en fonction des besoins du cas d'utilisation. Par exemple, go pour les fonctions lourdes en termes de calcul, Node.js pour les applications Web rapides, etc.
En quoi consiste le DevOps et pourquoi est-il souvent associé aux microservices ?
DevOps peut être expliqué comme une idéologie centrée sur les outils. Il s'agit essentiellement d'un ensemble de pratiques qui combine outils et technologies pour simplifier le travail des développeurs. Outre l'amélioration des outils, la coopération entre les équipes d'exploitation et de développement permet de mener les projets à terme plus rapidement et plus efficacement.
Par exemple, disons que vous créez une application qui permet aux utilisateurs de vérifier le solde de leurs comptes. Souvent, dans le passé, le cycle de développement de l'application était tel que les développeurs construisaient l'application puis la remettaient à l'équipe d'exploitation sans être responsables du résultat final. C'était à l'équipe des opérations de faire fonctionner l'application. Dans un environnement DevOps plus cohésif, les deux parties travaillent ensemble. Un développeur est responsable du cycle de vie de l'application du début à la fin, ce qui signifie qu'il est de garde pendant la mise en ligne. Une communication constante entre les deux groupes est nécessaire pour s'assurer que tout se passe bien et pour bénéficier de tous les avantages de DevOps, tels que la rapidité de mise sur le marché, la simplification du cycle de développement et une plus grande responsabilisation.
Le nouveau modèle de flux de travail DevOps crée un changement culturel majeur. La simple utilisation de nouveaux outils ne suffit pas à assurer la réussite d'un plan DevOps. Au contraire, les nouveaux outils peuvent nuire au succès s'ils vous amènent à croire sans aucun doute que tout sera mis en œuvre de manière appropriée.
En raison de la nature des microservices, il est souvent nécessaire de disposer de solides processus DevOps pour le déploiement. L'utilisation accrue d'outils et le renforcement des pratiques partagées évitent aux équipes d'être submergées par toutes les petites pièces mobiles. Vous réduisez les perturbations ou le fardeau de ce changement tout en continuant à bénéficier de ses avantages.

L'avenir : les microservices pilotés par les événements, l'informatique sans serveur et les FaaS
Lorsque les utilisateurs commencent à expérimenter les microservices, ils utilisent souvent par défaut des techniques familières, comme les API RESTful. REST fonctionne sur un mode de communication de type demande-réponse. Le problème de cette approche synchrone est que, puisqu'il faut attendre une réponse, les services deviennent dépendants les uns des autres. Cela signifie que si un service fonctionne plus lentement ou ne répond pas, le service qui l'a appelé fonctionnera plus lentement ou échouera. Ce couplage peut signifier la perte de certains des avantages de l'architecture de microservices, créant une structure plus interdépendante qui s'apparente à un style d'architecture orientée sur les services (SOA).
Si vous concevez vos services en utilisant Beyond-REST ou un modèle événementiel, vous pouvez faire en sorte que certaines parties de votre application continuent de fonctionner, tandis que d'autres ne sont pas concernées, par opposition à l'application entière qui ne répond plus. Le fonctionnement de Netflix en est un parfait exemple. Parfois, vous pouvez remarquer que le bouton « continuer à regarder » n'apparaît pas. C'est parce que ce service spécifique n'est pas disponible. Cependant, cela ne signifie pas que l'ensemble de Netflix s'arrête. Les utilisateurs peuvent toujours rechercher des séries et regarder des avant-premières. Les autres aspects du service Netflix sont donc toujours fonctionnels et disponibles, même si un service individuel ne l'est pas.
Les développeurs qui adoptent pleinement l'approche des microservices réalisent qu'une véritable évolutivité est possible grâce à un couplage lâche et à l'event-driven architecture. Un service peut être asynchrone, c'est-à-dire effectuer une action, diffuser un message et poursuivre sa fonction principale sans avoir à attendre la réponse d'un autre service.
Comment fonctionnent les microservices ?
Les microservices ne sont pas une idée nouvelle. Il y a plus de trente ans, Unix a développé une SOA qui utilisait un principe de conception similaire, mais qui était coûteuse à mettre en œuvre et échouait trop souvent pour être considérée comme une bonne option pour les entreprises. Vingt ans plus tard, les microservices ont atteint une bien meilleure cohérence entre les services et leur adoption s'est avérée un gage de réussite.
Pour ce qui est du fonctionnement réel des microservices, la fonctionnalité du logiciel est tout d'abord décomposée en petits modules isolés. Ces modules ont des tâches définies et autonomes. Ensuite, le système fonctionne en reliant ces petits morceaux de logiciel à l'aide d'Application Programming Interface (API).
Les API sont des segments de code qui permettent à deux programmes non liés de « dialoguer » entre eux. Un exemple d'API en action serait une application ou un site Web intégrant Google Maps. Une API se trouve entre Google Maps et l'application et envoie des informations dans les deux sens. Elle permet ainsi aux utilisateurs de voir leur carte en temps réel, de donner des instructions au conducteur et d'avertir leurs contacts de votre position. Si Google Maps reste une entité distincte, l'API permet la communication entre la carte et l'application. Ainsi, plutôt qu'une maison de poupée préfabriquée, où tout est planifié, rigide et difficile à modifier, vous avez ces petites pièces de Lego utiles qui s'assemblent en utilisant les API comme connecteurs. Les plateformes technologiques normalisées peuvent être contraignantes, mais tous les problèmes ne sont pas des clous et toutes les solutions ne sont pas des marteaux. Les microservices permettent d'utiliser l'outil adéquat pour la tâche.
Les microservices présentent certains avantages et les entreprises qui les ont adoptés avec succès comme modèle d'architecture ont récolté les fruits de structures informatiques d'entreprise plus rapides et plus agiles. Cependant, certaines organisations ont trouvé que le système était un tueur de productivité et un fardeau à exploiter. La différence entre le succès et l'échec réside dans deux éléments : la culture de l'organisation et sa volonté d'accepter et d'utiliser les microservices, et la planification et la prévoyance mises en œuvre dans la carte des microservices.
Souvent, les véritables avantages ou coûts d'un nouveau système ne sont pas réalisés avant plusieurs années. Une architecture monolithique sera parfois déjà dépassée ou aura commencé à se dégrader au cours de ces années. Les microservices offrent moins de possibilités de dégradation et les problèmes qui y sont associés sont beaucoup plus simple à résoudre.
Une solution à plusieurs de ces problèmes potentiels consiste à commencer par un monolithe. Cela permet de disposer d'un logiciel de base sur lequel il est possible de boulonner d'autres éléments au fur et à mesure que l'on évolue, en créant ainsi une sorte de maison de poupée avec des extensions Lego. Même si cette approche n'est pas la plus élégante, c'est une façon pour une entreprise de procéder, surtout avec une base de données ou un programme existant au cœur des opérations.