Applications monolithiquesMonolithic applications

Dans ce scénario, vous créez un service ou une application web unique et monolithique et le/la déployer en tant que conteneur.In this scenario, you're building a single and monolithic web application or service and deploying it as a container. Au sein de l’application, la structure peut ne pas être monolithique ; elle peut être constituée de plusieurs bibliothèques, de plusieurs composants ou même de plusieurs couches (couche d’application, couche de domaine, couche d’accès aux données, etc.).Within the application, the structure might not be monolithic; it might comprise several libraries, components, or even layers (application layer, domain layer, data access layer, etc.). D’un point de vue externe, l’application est considérée comme un conteneur unique, de la même façon qu’un processus, une application web ou un service unique.Externally, it's a single container, like a single process, single web application, or single service.

Pour gérer ce modèle, vous déployez un seul conteneur pour représenter l’application.To manage this model, you deploy a single container to represent the application. Pour le mettre à l’échelle, ajoutez simplement quelques copies supplémentaires avec un équilibreur de charge en frontal.To scale it, just add a few more copies with a load balancer in front. Cette simplicité est liée au fait qu’un même déploiement est géré dans un seul conteneur ou une seule machine virtuelle.The simplicity comes from managing a single deployment in a single container or virtual machine (VM).

En suivant le principe selon lequel un conteneur fait une seule chose à la fois et dans un processus unique, le modèle monolithique est en conflit.Following the principal that a container does one thing only, and does it in one process, the monolithic pattern is in conflict. Vous pouvez inclure plusieurs composants/bibliothèques ou couches internes dans chaque conteneur, comme illustré dans la figure 4-1.You can include multiple components/libraries or internal layers within each container, as illustrated in Figure 4-1.

Diagramme montrant une application monolithique qui s’évolue en clonant l’application.

Figure 4-1.Figure 4-1. Exemple d’architecture d’application monolithiqueAn example of monolithic application architecture

La plupart sinon la totalité des fonctionnalités d’une application monolithique se trouvent dans un processus ou un conteneur unique et sont organisées en composants dans des couches ou des bibliothèques internes.A monolithic app has all or most of its functionality within a single process or container and it's componentized in internal layers or libraries. L’inconvénient de cette approche se manifeste si ou quand l’application grandit, ce qui nécessite une mise à l’échelle.The downside to this approach comes if or when the application grows, requiring it to scale. Si l’application entière est mise à l’échelle, ce n’est pas vraiment un problème.If the entire application scaled, it's not really a problem. Or, dans la plupart des cas, seules quelques parties de l’application formant les goulots d’étranglement ont besoin d’être mises à l’échelle, alors que les autres composants sont moins utilisés.However, in most cases, a few parts of the application are the choke points that require scaling, whereas other components are used less.

Dans l’exemple type du commerce électronique, c’est probablement le composant des informations produit qui aurait le plus besoin d’être mis à l’échelle.Using the typical e-commerce example, what you likely need is to scale the product information component. Les clients qui recherchent des produits sont beaucoup plus nombreux que ceux qui en achètent.Many more customers browse products than purchase them. Plus de clients utilisent leur panier d’achat que ceux qui utilisent le pipeline de paiement.More customers use their basket than use the payment pipeline. Moins de clients ajoutent des commentaires ou consultent leur historique d’achat.Fewer customers add comments or view their purchase history. De même, seule une poignée d’employés, dans une même région, doivent généralement gérer le contenu et les campagnes marketing.And you likely have only a handful of employees, in a single region, that need to manage the content and marketing campaigns. En mettant à l’échelle la conception monolithique, l’ensemble du code est déployé plusieurs fois.By scaling the monolithic design, all of the code is deployed multiple times.

Outre le problème de la mise à l’échelle globale, quand des modifications sont apportées à un seul composant, il faut refaire un test complet de l’application entière, mais aussi redéployer intégralement toutes les instances.In addition to the "scale-everything" problem, changes to a single component require complete retesting of the entire application as well as a complete redeployment of all the instances.

L’approche monolithique est courante, et nombreuses sont les organisations qui développent avec cette méthode architecturale.The monolithic approach is common, and many organizations are developing with this architectural method. Si la plupart d’entre elles obtiennent des résultats satisfaisants, d’autres rencontrent des limites.Many enjoy good enough results, whereas others encounter limits. Les organisations ont souvent conçu leurs applications selon ce modèle, car les outils et l’infrastructure étaient trop complexes pour concevoir des architectures orientées services (SOA). Par ailleurs, elles ne voyaient pas la nécessité de changer de modèle tant que leur application ne grossissait pas trop.Many designed their applications in this model because the tools and infrastructure were too difficult to build SOAs, and they didn't see the need—until the app grew.

Du point de vue de l’infrastructure, chaque serveur peut exécuter de nombreuses applications dans le même hôte et offrir un ratio d’efficacité acceptable dans l’utilisation des ressources, comme le montre la figure 4-2.From an infrastructure perspective, each server can run many applications within the same host and have an acceptable ratio of efficiency in your resources usage, as shown in Figure 4-2.

Un diagramme montrant un hôte avec plusieurs applications dans des conteneurs séparés.

Figure 4-2.Figure 4-2. Hôte exécutant plusieurs applications/conteneursA host running multiple apps/containers

Enfin, du point de vue de la disponibilité, les applications monolithiques doivent être déployées dans leur intégralité ; autrement dit, si vous devez les arrêter et démarrer, toutes les fonctionnalités et tous les utilisateurs seront affectés pendant la fenêtre de déploiement.Finally, from an availability perspective, monolithic applications must be deployed as a whole; that means that in case you must stop and start, all functionality and all users will be affected during the deployment window. Dans certaines situations, l’utilisation d’Azure et de conteneurs peut en limiter les effets et réduire la probabilité que votre application subisse des temps d’arrêt, comme le montre la figure 4-3.In certain situations, the use of Azure and containers can minimize these situations and reduce the probability of downtime of your application, as you can see in Figure 4-3.

Vous pouvez déployer les applications monolithiques dans Azure en utilisant des machines virtuelles dédiées pour chaque instance.You can deploy monolithic applications in Azure by using dedicated VMs for each instance. En utilisant Azure Virtual Machine Scale Sets, vous pouvez facilement mettre à l’échelle les machines virtuelles.Using Azure VM Scale Sets, you can scale the VMs easily.

Vous pouvez aussi utiliser Azure App Services pour exécuter des applications monolithiques et mettre facilement à l’échelle les instances sans avoir à gérer les machines virtuelles.You can also use Azure App Services to run monolithic applications and easily scale instances without having to manage the VMs. Azure App Services peut également exécuter des instances uniques de conteneurs Docker, ce qui simplifie le déploiement.Azure App Services can run single instances of Docker containers, as well, simplifying the deployment.

Vous pouvez déployer plusieurs machines virtuelles en tant qu’hôtes Docker et exécuter n’importe quel nombre de conteneurs par machine virtuelle.You can deploy multiple VMs as Docker hosts and run any number of containers per VM. Ensuite, en utilisant Azure Load Balancer, comme illustré dans la Figure 4-3, vous pouvez gérer la mise à l’échelle.Then, by using an Azure Load Balancer, as illustrated in the Figure 4-3, you can manage scaling.

Un diagramme montrant une application monolithique à l’échelle de différents hôtes.

Figure 4-3.Figure 4-3. Plusieurs hôtes à l’échelle d’une seule application DockerMultiple hosts scaling out a single Docker application

Vous pouvez gérer le déploiement des hôtes proprement dits via des techniques de déploiement classiques.You can manage the deployment of the hosts themselves via traditional deployment techniques.

Vous pouvez assurer la gestion des conteneurs Docker depuis la ligne de commande en utilisant des commandes comme docker run et docker-compose up, et vous pouvez aussi l’automatiser dans des pipelines de livraison continue et effectuer un déploiement sur des hôtes Docker à partir d’Azure DevOps Services, par exemple.You can manage Docker containers from the command line by using commands like docker run and docker-compose up, and you can also automate it in Continuous Delivery (CD) pipelines and deploy to Docker hosts from Azure DevOps Services, for instance.

Application monolithique déployée comme conteneurMonolithic application deployed as a container

L’utilisation de conteneurs pour gérer les déploiements monolithiques présente des avantages.There are benefits to using containers to manage monolithic deployments. La mise à l’échelle des instances des conteneurs est beaucoup plus rapide et facile que le déploiement de machines virtuelles supplémentaires.Scaling the instances of containers is far faster and easier than deploying additional VMs.

Le déploiement de mises à jour comme images Docker est beaucoup plus rapide et efficace du point de vue du réseau.Deploying updates as Docker images is far faster and network efficient. Les conteneurs Docker démarrent généralement en quelques secondes, ce qui accélère les lancements.Docker containers typically start in seconds, speeding rollouts. La suppression d’un conteneur Docker se fait simplement en appelant la commande docker stop. Cette opération prend généralement moins d’une seconde.Tearing down a Docker container is as easy as invoking the docker stop command, typically completing in less than a second.

Les conteneurs étant immuables par conception, vous n’avez jamais à vous soucier d’un endommagement de machines virtuelles à cause d’un script de mise à jour qui aurait oublié de prendre en compte une configuration spécifique ou un fichier laissé sur le disque.Because containers are inherently immutable, by design, you never need to worry about corrupted VMs because an update script forgot to account for some specific configuration or file left on disk.

Bien que les applications monolithiques puissent tirer parti de Docker, nous n’en évoquons que les avantages les plus évidents.Although monolithic apps can benefit from Docker, we're touching on only the tips of the benefits. Les principaux avantages de la gestion des conteneurs viennent de la possibilité de déployer avec des orchestrateurs de conteneurs qui gèrent les différentes instances et le cycle de vie de chaque instance de conteneur.The larger benefits of managing containers come from deploying with container orchestrators that manage the various instances and life cycle of each container instance. La décomposition de l’application monolithique en sous-systèmes qui peuvent être mis à l’échelle, développés et déployés individuellement est votre point d’entrée dans le domaine des microservices.Breaking up the monolithic application into subsystems that can be scaled, developed, and deployed individually is your entry point into the realm of microservices.

Pour en savoir plus sur la façon de "lift and shift" applications monolithiques avec des conteneurs et comment vous pouvez moderniser vos applications, vous pouvez lire ce guide Microsoft supplémentaire, moderniser les applications .NET existantes avec le cloud Azure et Windows Containers, que vous pouvez également télécharger en PDF à partir de https://aka.ms/LiftAndShiftWithContainersEbook.To learn about how to "lift and shift" monolithic applications with containers and how you can modernize your applications, you can read this additional Microsoft guide, Modernize existing .NET applications with Azure cloud and Windows Containers, which you can also download as PDF from https://aka.ms/LiftAndShiftWithContainersEbook.

Publier une application conteneur Docker unique sur Azure App ServicePublish a single Docker container app to Azure App Service

Que vous vouliez obtenir une validation rapide d’un conteneur déployé sur Azure ou que vous disposiez d’une application à un seul conteneur, Azure App Services offre un excellent moyen de fournir des services scalables à conteneur unique.Either because you want to get a quick validation of a container deployed to Azure or because the app is simply a single-container app, Azure App Services provides a great way to provide scalable single-container services.

L’utilisation d’Azure App Service s’avère intuitive et vous permet d’être rapidement opérationnel. En effet, grâce à sa parfaite intégration de Git, votre code est généré dans Microsoft Visual Studio et directement déployé dans Azure.Using Azure App Service is intuitive and you can get up and running quickly because it provides great Git integration to take your code, build it in Microsoft Visual Studio, and directly deploy it to Azure. En revanche, par le passé (avant Docker), si vous aviez besoin d’autres fonctionnalités, frameworks ou dépendances qui n’étaient pas prises en charge dans App Services, vous deviez attendre que l’équipe Azure mette à jour ces dépendances dans App Service ou vous tourner vers d’autres services comme Service Fabric, Cloud Services, voire de simples machines virtuelles, que vous pouviez mieux contrôler et sur lesquelles vous pouviez installer le composant ou le framework dont avait besoin votre application.But, traditionally (with no Docker), if you needed other capabilities, frameworks, or dependencies that aren't supported in App Services, you needed to wait for it until the Azure team updates those dependencies in App Service or switched to other services like Service Fabric, Cloud Services, or even plain VMs, for which you have further control and can install a required component or framework for your application.

Désormais, comme le montre la figure 4-4, quand vous utilisez Visual Studio 2017, la prise en charge des conteneurs dans Azure App Service vous offre la possibilité d’inclure tout ce que vous voulez dans l’environnement de votre application.Now, as shown in Figure 4-4, when using Visual Studio 2017, container support in Azure App Service gives you the ability to include whatever you want in your app environment. Si vous avez ajouté une dépendance à votre application, parce que vous l’exécutez dans un conteneur, vous avez la possibilité d’inclure ces dépendances dans votre fichier Dockerfile ou image Docker.If you added a dependency to your app, because you're running it in a container, you get the capability of including those dependencies in your Dockerfile or Docker image.

Capture d’écran du dialogue Create App Service montrant un registre des conteneurs.

Figure 4-4.Figure 4-4. Publication d’un conteneur dans Azure App Service à partir d’applications/conteneurs Visual StudioPublishing a container to Azure App Service from Visual Studio apps/containers

La figure 4-4 montre aussi que le flux de publication pousse (push) une image via un registre de conteneurs, qui peut être Azure Container Registry (registre proche de vos déploiements dans Azure et sécurisé par des comptes et des groupes Azure Active Directory) ou tout autre registre Docker, comme Docker Hub ou des registres locaux.Figure 4-4 also shows that the publish flow pushes an image through a Container Registry, which can be the Azure Container Registry (a registry near to your deployments in Azure and secured by Azure Active Directory groups and accounts) or any other Docker Registry like Docker Hub or on-premises registries.