Architecture de microservicesMicroservices architecture

Comme son nom l’indique, une architecture en microservices est une approche de la création d’une application serveur sous la forme d’un ensemble de petits services.As the name implies, a microservices architecture is an approach to building a server application as a set of small services. Cela signifie qu’une architecture de microservices est principalement orientée vers le back-end, même si l’approche est également utilisée pour le front-end.That means a microservices architecture is mainly oriented to the back-end, although the approach is also being used for the front end. Chaque service s’exécute dans son propre processus et communique avec d’autres processus avec des protocoles comme HTTP/HTTPS, WebSockets ou AMQP.Each service runs in its own process and communicates with other processes using protocols such as HTTP/HTTPS, WebSockets, or AMQP. Chaque microservice implémente une fonctionnalité métier ou de domaine spécifique de bout en bout dans une certaine limite de contexte, et chacun doit être développé de manière autonome et pouvoir être déployé indépendamment.Each microservice implements a specific end-to-end domain or business capability within a certain context boundary, and each must be developed autonomously and be deployable independently. Enfin, chaque microservice doit avoir son modèle de données de domaine et sa logique de domaine associés (souveraineté et gestion des données décentralisée). Il peut être basé sur différentes technologies de stockage de données (SQL, NoSQL) et sur différents langages de programmation.Finally, each microservice should own its related domain data model and domain logic (sovereignty and decentralized data management) and could be based on different data storage technologies (SQL, NoSQL) and different programming languages.

De quelle taille doit être un microservice ?What size should a microservice be? Quand vous développez un microservice, la taille ne doit pas être le point important.When developing a microservice, size shouldn't be the important point. Le point important doit plutôt être de créer des services faiblement couplés, afin que le développement, le déploiement et la mise à l’échelle soient autonomes pour chaque service.Instead, the important point should be to create loosely coupled services so you have autonomy of development, deployment, and scale, for each service. Bien sûr, quand vous identifiez et concevez des microservices, vous devez essayer de les rendre les plus petits possible, tant que vous n’avez pas trop de dépendances directes avec d’autres microservices.Of course, when identifying and designing microservices, you should try to make them as small as possible as long as you don't have too many direct dependencies with other microservices. Deux éléments sont plus importants que la taille du microservice : sa cohésion interne et son indépendance vis-à-vis d’autres services.More important than the size of the microservice is the internal cohesion it must have and its independence from other services.

Pourquoi une architecture en microservices ?Why a microservices architecture? Pour faire court, disons qu’elle offre une agilité à long terme.In short, it provides long-term agility. Les microservices permettent une meilleure maintenabilité dans les grands systèmes complexes et hautement scalables, en vous permettant de créer des applications basées sur de nombreux services qui peuvent être déployés indépendamment, chacun ayant des cycles de vie granulaires et autonomes.Microservices enable better maintainability in complex, large, and highly-scalable systems by letting you create applications based on many independently deployable services that each have granular and autonomous lifecycles.

Un autre avantage est que les microservices peuvent monter en charge (scale out) de façon indépendante.As an additional benefit, microservices can scale out independently. Au lieu d’avoir une seule application monolithique que vous devez faire monter en charge en totalité, vous pouvez faire monter en charge des microservices spécifiques.Instead of having a single monolithic application that you must scale out as a unit, you can instead scale out specific microservices. Ainsi, vous pouvez effectuer un scale-out ciblé de la zone fonctionnelle qui nécessite plus de puissance de traitement ou plus de bande passante réseau pour satisfaire la demande, au lieu d’effectuer un scale-out d’autres zones de l’application qui n’en ont pas besoin.That way, you can scale just the functional area that needs more processing power or network bandwidth to support demand, rather than scaling out other areas of the application that don't need to be scaled. Cela signifie des frais réduits, car vous avez besoin de moins de matériel.That means cost savings because you need less hardware.

Diagramme des différences entre les deux méthodes de déploiement.

Figure 4-6.Figure 4-6. Déploiement monolithique comparé à l’approche par microservicesMonolithic deployment versus the microservices approach

Comme le montre la figure 4-6, dans l’approche monolithique traditionnelle, l’application s’évolue en clonant l’ensemble de l’application dans plusieurs serveurs/VM.As Figure 4-6 shows, in the traditional monolithic approach, the application scales by cloning the whole app in several servers/VM. Dans l’approche liée aux microservices, les fonctionnalités sont séparées en services plus petits, pour permettre à chaque service d’être scalable indépendamment.In the microservices approach, functionality is segregated in smaller services, so each service can scale independently. L’approche des microservices permet des changements agiles et une itération rapide de chaque microservice, car vous pouvez modifier des zones spécifiques, petites d’applications complexes, grandes et évolutives.The microservices approach allows agile changes and rapid iteration of each microservice, because you can change specific, small areas of complex, large, and scalable applications.

Le fait d’architecturer des applications basées sur des microservices à granularité fine permet des pratiques d’intégration continue et de livraison continue.Architecting fine-grained microservices-based applications enables continuous integration and continuous delivery practices. Il accélère également l’ajout de nouvelles fonctions dans l’application.It also accelerates delivery of new functions into the application. La composition d’applications avec une granularité fine vous permet également d’exécuter et de tester des microservices de façon isolée, et de les faire évoluer de façon autonome tout en maintenant des contrats clairs entre eux.Fine-grained composition of applications also allows you to run and test microservices in isolation, and to evolve them autonomously while maintaining clear contracts between them. Tant que vous ne changez pas les contrats ou les interfaces, vous pouvez changer l’implémentation interne de n’importe quel microservice ou ajouter de nouvelles fonctionnalités sans perturber le fonctionnement des autres microservices.As long as you don't change the interfaces or contracts, you can change the internal implementation of any microservice or add new functionality without breaking other microservices.

Voici des aspects importants pour réussir à passer en production avec un système basé sur des microservices :The following are important aspects to enable success in going into production with a microservices-based system:

  • Surveillance et vérification de l’intégrité des services et de l’infrastructure.Monitoring and health checks of the services and infrastructure.

  • Infrastructure évolutive pour les services (c’est-à-dire le cloud et des orchestrateurs).Scalable infrastructure for the services (that is, cloud and orchestrators).

  • Conception et implémentation de la sécurité à plusieurs niveaux : authentification, autorisation, gestion des secrets, communication sécurisée, etc.Security design and implementation at multiple levels: authentication, authorization, secrets management, secure communication, etc.

  • Livraison rapide des applications, généralement avec différentes équipes s’occupant des différents microservices.Rapid application delivery, usually with different teams focusing on different microservices.

  • Pratiques et infrastructure DevOps et Intégration continue/livraison continue.DevOps and CI/CD practices and infrastructure.

Parmi ces aspects, seuls les trois premiers sont couverts ou présentés dans ce guide.Of these, only the first three are covered or introduced in this guide. Les deux derniers points, qui sont liés au cycle de vie des applications, sont traités dans un autre livre électronique, Cycle de vie des applications Docker en conteneur avec la plateforme et les outils Microsoft.The last two points, which are related to application lifecycle, are covered in the additional Containerized Docker Application Lifecycle with Microsoft Platform and Tools e-book.

Ressources supplémentairesAdditional resources