Microservices pour débutants

En regardant le passé il y a environ cinq ans, vous pouvez voir combien a changé depuis lors l'attitude envers l'architecture des microservices. Au début, ils étaient extrêmement populaires. Suite au succès de Netflix, Amazon et Gilt.com, les développeurs ont décidé que le développement de facto des microservices n'était pas différent du développement d'applications. Maintenant, tout le monde a compris que les microservices sont un nouveau style architectural qui est efficace pour résoudre certains problèmes, a ses avantages et ses inconvénients.

Pour comprendre ce que sont les microservices et dans quels cas ils doivent être utilisés, nous nous sommes tournés vers Jaime Buelta, auteur de Hands-On Docker pour Microservices avec Python. Il a parlé des avantages de cette architecture et a également partagé des recommandations pour les développeurs qui envisagent de passer de monolithes à celle-ci.

image

Avantages et risques


Une application monolithique traditionnelle combine toutes ses capacités dans un seul module connecté. Dans le cas des microservices, l'inverse est vrai. L'application est divisée en services autonomes plus petits qui peuvent être déployés, mis à jour et remplacés indépendamment. Chaque microservice est créé dans un but commercial et peut interagir avec d'autres microservices à l'aide de mécanismes simples.

Buelta explique: «Une architecture de microservice est un moyen de structurer un système dans lequel plusieurs services indépendants communiquent entre eux d'une certaine manière (cela se produit généralement avec les services Web RESTful). Une caractéristique clé est que chaque microservice est capable de se mettre à jour et de se déployer indépendamment des autres. »
L'architecture de microservices définit non seulement la façon dont vous créez votre application, mais également l'organisation de votre équipe.

«Une équipe indépendante peut être entièrement responsable du microservice. Cela permet aux organisations de croître sans rapprocher les développeurs », explique Buelt.
L'un des principaux avantages des microservices est qu'ils vous permettent d'introduire des innovations sans impact particulier sur le système dans son ensemble. À l'aide de microservices, vous pouvez effectuer une mise à l'échelle horizontale, définir des limites claires pour les modules, utiliser une variété de technologies et effectuer un développement parallèle.

Interrogée sur les risques associés aux microservices, Buelta a répondu: «La principale difficulté dans la mise en œuvre de l'architecture (en particulier lors du passage d'un monolithe) est de créer une conception dans laquelle les services seront vraiment indépendants. Si cela n'est pas possible, les communications interservices deviendront plus difficiles, ce qui entraînera des coûts supplémentaires. Les microservices ont besoin de professionnels qui façonneront la direction du développement à long terme. Je recommande aux organisations qui souhaitent passer à une telle architecture de désigner une personne responsable de la «vue d'ensemble». Nous devons examiner les microservices plus largement », a déclaré Jaime.

Transition du monolithe aux microservices


Martin Fowler, auteur et consultant en logiciels bien connu, conseille d'adhérer au principe du «premier est un monolithe». Cela est dû au fait que l'utilisation d'une architecture de microservice dès le début du développement est risquée, car dans la plupart des cas, elle ne convient qu'aux systèmes complexes et aux grandes équipes de développement.
«Le principal critère qui devrait vous inciter à passer à une nouvelle architecture est la taille de votre équipe. Les petits groupes ne devraient pas faire cela. Dans de telles conditions, les développeurs comprennent déjà tout ce qui se passe avec l'application et peuvent toujours poser une question de clarification à un collègue. Le monolithe fonctionne parfaitement dans ces situations, et donc presque tous les systèmes commencent avec lui », a déclaré Jaime. Cela confirme la «règle des deux pizzas» d'Amazon, selon laquelle l'équipe responsable d'un microservice peut être alimentée avec deux pizzas - sinon c'est trop gros.

«À mesure que l'entreprise se développe et que les équipes de développement augmentent, une meilleure coordination peut être nécessaire. Les programmeurs commencent souvent à interférer les uns avec les autres. Comprendre le but d'un morceau de code particulier devient de plus en plus difficile. Dans de tels cas, la transition vers les microservices est logique - cela aidera à partager les responsabilités et à clarifier l'image globale du système. Chaque équipe peut définir ses propres objectifs et travailler principalement de manière indépendante, donnant une interface externe claire. Cependant, pour qu'une telle transition ait un sens, il doit y avoir de nombreux développeurs », ajoute Buelt.

Recommandations pour la migration vers des microservices


Répondant à une question sur les recommandations pratiques que les développeurs peuvent utiliser lors du passage aux microservices, Buelta a déclaré: "La clé d'une architecture de microservices réussie est que chaque service doit être aussi indépendant que possible."
La question se pose: "Comment pouvez-vous rendre les services indépendants?" La meilleure façon de découvrir l'interdépendance d'un système est de penser à de nouvelles possibilités: «Si vous voulez ajouter une nouvelle fonction, peut-elle être implémentée en changeant un seul service? Quels types de fonctions nécessiteront la coordination de plusieurs microservices? Seront-ils utilisés souvent ou rarement? Il est impossible de créer le design parfait, mais au moins vous pouvez l’utiliser pour prendre les bonnes décisions en toute connaissance de cause », explique Buelt.

Jaime conseille de passer à l'architecture correctement afin de ne pas avoir à tout refaire plus tard. «Une fois la transition terminée, il sera plus difficile de modifier les limites des microservices. Cela vaut la peine de consacrer plus de temps à la phase initiale du projet », ajoute-t-il.
Passer d'un modèle de conception à un autre est une étape sérieuse. Nous avons demandé quels étaient les problèmes rencontrés par Jaime et son équipe lors de la migration vers les microservices, auxquels il a répondu:

«En fait, les principales difficultés sont liées aux personnes. Ces problèmes sont généralement sous-estimés, mais le passage aux microservices modifie en fait la façon dont les développeurs travaillent. La tâche n'est pas facile! » Il ajoute: «J'ai personnellement rencontré des problèmes similaires. Par exemple, j'ai dû former et donner des conseils aux développeurs. Il est particulièrement important d'expliquer pourquoi certains changements sont nécessaires. Cela aide les gens à comprendre les raisons de l'introduction de toutes les innovations qu'ils pourraient ne pas aimer.

Lors du passage d'une architecture monolithique, de nombreuses difficultés peuvent survenir lors du déploiement d'une application précédemment publiée en tant que module unique. Il nécessite une analyse plus approfondie pour garantir la compatibilité descendante et minimiser les risques. Faire face à cette tâche est parfois très difficile. "

Raisons de choisir Docker, Kubernetes et Python comme pile technologique


Nous avons demandé à Buelt quelle technologie il préfère pour la mise en œuvre des microservices. Concernant le choix de la langue, la réponse était simple: «Python est la meilleure option pour moi. C'est mon langage de programmation préféré! .. Ce langage est bien adapté aux microservices. Il est pratique à lire et facile à utiliser. En outre, Python dispose de fonctionnalités étendues pour le développement Web et d'un écosystème dynamique de modules tiers pour tous les besoins. Ces besoins incluent la connexion à d'autres systèmes, tels que des bases de données, des API externes, etc. »

Docker est souvent présenté comme l'un des outils les plus importants pour les microservices. Buelta a expliqué pourquoi:

«Docker vous permet d'encapsuler et de copier l'application dans des packages standardisés pratiques. Cela réduit l'incertitude et la complexité de l'environnement. Il simplifie également considérablement la transition du développement à la production d'applications. De plus, le temps d'utilisation de l'équipement est réduit. Vous pouvez placer plusieurs conteneurs dans différents environnements (même sur différents systèmes d'exploitation) dans une boîte physique ou une machine virtuelle. »

À propos de Kubernetes:

«Kubernetes vous permet de déployer plusieurs conteneurs Docker de manière coordonnée. Cela amène les développeurs à penser de manière groupée, en se souvenant de l'environnement de production. Il vous permet également de définir un cluster à l'aide de code afin que de nouveaux déploiements ou modifications de configuration soient définis dans des fichiers. Tout cela rend possible des méthodes comme GitOps (j'ai écrit à leur sujet dans mon livre), tout en conservant la configuration complète dans le système de contrôle de version. Chaque modification est effectuée de manière spécifique et réversible, car il s'agit d'une fusion Git régulière. Grâce à cela, il est très facile de restaurer ou de dupliquer l'infrastructure. »

«Vous devez passer du temps à apprendre Docker et Kubernetes, mais cela en vaut la peine. Les deux outils sont très puissants. De plus, ils vous encouragent à travailler de manière à éviter les problèmes pendant la production », explique Buelt.

Microservices multilingues


Lors du développement de microservices, vous pouvez utiliser une variété de technologies, car idéalement, une équipe indépendante est responsable de chacune d'entre elles. Buelta a partagé son opinion sur les microservices multilingues: «Les microservices multilingues sont excellents! C'est l'un des principaux avantages de l'architecture. Un exemple typique d'un microservice multilingue est le transfert de code hérité écrit dans une langue vers une nouvelle. Un microservice peut remplacer tout autre qui fournit la même interface externe. Cependant, son code sera complètement différent. Par exemple, je suis passé d'anciennes applications PHP, en les remplaçant par des analogues écrits en Python. " Jaime a ajouté: "Travailler avec deux ou plusieurs plates-formes en même temps aidera à mieux les comprendre et à comprendre dans quels cas il est préférable de les utiliser."

Bien que la possibilité d'utiliser des microservices multilingues soit un grand avantage architectural, elle peut également augmenter les coûts de transaction. Buelta conseille: «Nous devons connaître la mesure. Cela n'a aucun sens d'utiliser un nouvel outil à chaque fois et de priver l'équipe de la possibilité de partager ses connaissances. Des chiffres spécifiques peuvent dépendre de la taille de l'entreprise, mais en règle générale, cela n'a aucun sens d'utiliser plus de deux ou trois langues différentes sans raison valable. Vous n'avez pas besoin de gonfler la pile technologique - les développeurs pourront alors partager leurs connaissances et commencer à utiliser les outils disponibles de la manière la plus efficace.

À propos de l'auteur


Jaime Buelta est un programmeur professionnel et développeur Python qui, au cours des années de sa carrière, a rencontré de nombreuses technologies différentes. Il a développé des logiciels pour divers domaines et industries, y compris l'aérospatiale, les réseaux et les communications, ainsi que des systèmes SCADA industriels, des services de jeux vidéo en ligne et des services financiers.

Au sein de diverses entreprises, il a traité des domaines fonctionnels tels que le marketing, la gestion, les ventes et la conception de jeux. Jaime est un fervent partisan de l'automatisation et veut que les ordinateurs fassent tout le travail acharné, permettant aux gens de se concentrer sur des choses plus importantes. Il vit actuellement à Dublin et intervient régulièrement lors des conférences PyCon en Irlande.

Source: https://habr.com/ru/post/fr480914/


All Articles