Définition du Cloud NativeDefining cloud native

Arrêtez ce que vous êtes en train de faire et du texte dix de vos collègues.Stop what you're doing and text ten of your colleagues. Demandez-lui de définir le terme « cloud native ».Ask them to define the term "Cloud Native". Bonne chance vous obtiendrez dix réponses différentes.Good chance you'll get ten different answers.

Cloud Native concerne la modification de la façon dont vous pensez créer des systèmes d’entreprise essentiels.Cloud native is all about changing the way you think about constructing critical business systems.

Les systèmes Cloud natifs sont conçus pour adopter un changement rapide, une grande échelle et une résilience.Cloud-native systems are designed to embrace rapid change, large scale, and resilience.

La Fondation Cloud Native Computing fournit une définition officielle:The Cloud Native Computing Foundation provides an official definition:

Les technologies Cloud-natives permettent aux organisations de créer et d’exécuter des applications évolutives dans des environnements dynamiques et modernes, tels que des clouds publics, privés et hybrides. Les conteneurs, les maillages de service, les microservices, l’infrastructure immuable et les API déclaratives illustrent cette approche.Cloud-native technologies empower organizations to build and run scalable applications in modern, dynamic environments such as public, private, and hybrid clouds. Containers, service meshes, microservices, immutable infrastructure, and declarative APIs exemplify this approach.

Ces techniques permettent aux systèmes faiblement couplés qui sont résilients, gérables et observables. Combinée à une automatisation robuste, elle permet aux ingénieurs d’apporter des modifications très importantes et prévisibles avec un acharnement minimal.These techniques enable loosely coupled systems that are resilient, manageable, and observable. Combined with robust automation, they allow engineers to make high-impact changes frequently and predictably with minimal toil.

Les applications sont devenues de plus en plus complexes avec les utilisateurs qui demandent de plus en plus.Applications have become increasingly complex with users demanding more and more. Les utilisateurs attendent une réactivité rapide, des fonctionnalités novatrices et des temps d’arrêt nuls.Users expect rapid responsiveness, innovative features, and zero downtime. Les problèmes de performances, les erreurs récurrentes et l’incapacité à se déplacer rapidement ne sont plus acceptables.Performance problems, recurring errors, and the inability to move fast are no longer acceptable. Ils seront facilement déplacés vers votre concurrent.They'll easily move to your competitor.

Cloud Native concerne la Vitesse et l' agilité.Cloud native is about speed and agility. Les systèmes d’entreprise évoluent de l’activation des fonctionnalités métier aux armes de transformation stratégique qui accélèrent la rapidité et la croissance de l’entreprise.Business systems are evolving from enabling business capabilities to being weapons of strategic transformation that accelerate business velocity and growth. Il est impératif de mettre les idées sur le marché immédiatement.It's imperative to get ideas to market immediately.

Voici quelques sociétés qui ont implémenté ces techniques.Here are some companies who have implemented these techniques. Réfléchissez à la vitesse, à l’agilité et à l’évolutivité qu’ils ont atteints.Think about the speed, agility, and scalability they've achieved.

CompanyCompany ExpérienceExperience
NetflixNetflix A plus de 600 services en production.Has 600+ services in production. Déploie cent fois par jour.Deploys hundred times per day.
UberUber A plus de 1 000 services en production.Has 1,000+ services in production. Déploie plusieurs milliers de fois par semaine.Deploys several thousand times each week.
WeChatWeChat A plus de 3 000 services en production.Has 3,000+ services in production. Déploie 1 000 fois par jour.Deploys 1,000 times a day.

Comme vous pouvez le voir, Netflix, uber et WeChat exposent des systèmes qui se composent de centaines de microservices indépendants.As you can see, Netflix, Uber, and WeChat expose systems that consist of hundreds of independent microservices. Ce style architectural leur permet de répondre rapidement aux conditions du marché.This architectural style enables them to rapidly respond to market conditions. Ils peuvent mettre à jour instantanément de petites zones d’une application en temps réel et complexes, et mettre à l’échelle individuellement ces zones en fonction des besoins.They can instantaneously update small areas of a live, complex application, and individually scale those areas as needed.

La vitesse et l’agilité du Cloud Native proviennent d’un certain nombre de facteurs.The speed and agility of cloud native come about from a number of factors. Le plus important est l’infrastructure cloud.Foremost is cloud infrastructure. Cinq piliers fondamentaux supplémentaires, illustrés à la figure 1-3, fournissent également socle pour les systèmes natifs du Cloud.Five additional foundational pillars shown in Figure 1-3 also provide the bedrock for cloud-native systems.

Piliers natifs du Cloud

Figure 1-3.Figure 1-3. Piliers natifs du CloudCloud-native foundational pillars

Prenons un certain temps pour mieux comprendre l’importance de chaque pilier.Let's take some time to better understand the significance of each pillar.

Le Cloud...The cloud…

Les systèmes Cloud natifs tirent pleinement parti du modèle de service Cloud.Cloud-native systems take full advantage of the cloud service model.

Conçu pour prospérer dans un environnement Cloud dynamique et virtualisé, ces systèmes font largement appel à l’infrastructure de calcul PaaS (Platform as a service) et aux services gérés.Designed to thrive in a dynamic, virtualized cloud environment, these systems make extensive use of Platform as a Service (PaaS) compute infrastructure and managed services. Ils considèrent l’infrastructure sous-jacente comme étant approvisionnée en quelques minutes et redimensionnée, mise à l’échelle, déplacée ou détruite à la demande, via l’automatisation.They treat the underlying infrastructure as disposable - provisioned in minutes and resized, scaled, moved, or destroyed on demand – via automation.

Considérez le concept DevOps largement accepté des animaux et des bovins.Consider the widely accepted DevOps concept of Pets vs. Cattle. Dans un centre de données traditionnel, les serveurs sont traités comme des animaux familiers: un ordinateur physique, avec un nom explicite et un soignent pour.In a traditional data center, servers are treated as Pets: a physical machine, given a meaningful name, and cared for. Vous mettez à l’échelle en ajoutant des ressources supplémentaires sur le même ordinateur (montée en puissance).You scale by adding more resources to the same machine (scaling up). Si le serveur devient malade, vous devez le remettre en état d’intégrité.If the server becomes sick, you nurse it back to health. Si le serveur devient indisponible, tout le monde le remarque.Should the server become unavailable, everyone notices.

Le modèle de service des bovins est différent.The Cattle service model is different. Vous configurez chaque instance comme un ordinateur virtuel ou un conteneur.You provision each instance as a virtual machine or container. Ils sont identiques et reçoivent un identificateur système tel que service-01, service-02, etc.They're identical and assigned a system identifier such as Service-01, Service-02, and so on. Vous pouvez mettre à l’échelle en créant davantage d’entre elles (montée en charge).You scale by creating more of them (scaling out). Lorsque l’un d’eux devient indisponible, personne ne le remarque.When one becomes unavailable, nobody notices.

Le modèle bovins intègre l' infrastructure immuable.The cattle model embraces immutable infrastructure. Les serveurs ne sont pas réparés ni modifiés.Servers aren't repaired or modified. En cas de défaillance ou de mise à jour, il est détruit et un nouveau est approvisionné, le tout à l’aide de l’automatisation.If one fails or requires updating, it's destroyed and a new one is provisioned – all done via automation.

Les systèmes Cloud natifs adoptent le modèle de service des bovins.Cloud-native systems embrace the Cattle service model. Ils continuent à s’exécuter au fur et à mesure que l’infrastructure est mise à l’échelle, sans tenir compte des machines sur lesquelles elles sont exécutées.They continue to run as the infrastructure scales in or out with no regard to the machines upon which they're running.

La plateforme Cloud Azure prend en charge ce type d’infrastructure hautement élastique avec des fonctionnalités de mise à l’échelle automatique, de réparation automatique et de surveillance.The Azure cloud platform supports this type of highly elastic infrastructure with automatic scaling, self-healing, and monitoring capabilities.

Conception moderneModern design

Comment conceviez-vous une application Cloud Native ?How would you design a cloud-native app? À quoi ressemble votre architecture ?What would your architecture look like? Quels sont les principes, les modèles et les meilleures pratiques que vous respectez ?To what principles, patterns, and best practices would you adhere? Quelles sont les préoccupations en matière d’infrastructure et de fonctionnement ?What infrastructure and operational concerns would be important?

Application à 12 facteursThe Twelve-Factor Application

L' application à 12 facteursest une méthodologie largement acceptée pour la construction d’applications basées sur le Cloud.A widely accepted methodology for constructing cloud-based applications is the Twelve-Factor Application. Il décrit un ensemble de principes et de pratiques que les développeurs suivent pour créer des applications optimisées pour les environnements Cloud modernes.It describes a set of principles and practices that developers follow to construct applications optimized for modern cloud environments. Une attention particulière est accordée à la portabilité entre les environnements et l’automatisation déclarative.Special attention is given to portability across environments and declarative automation.

Bien qu’applicables à n’importe quelle application basée sur le Web, de nombreux praticiens considèrent le plus de douze facteurs comme une base solide pour la création d’applications Cloud natives.While applicable to any web-based application, many practitioners consider Twelve-Factor as a solid foundation for building cloud-native apps. Les systèmes basés sur ces principes peuvent être déployés et mis à l’échelle rapidement et ajouter des fonctionnalités pour réagir rapidement aux changements de marché.Systems built upon these principles can deploy and scale rapidly and add features to react quickly to market changes.

Le tableau suivant met en évidence la méthodologie à douze facteurs :The following table highlights the Twelve-Factor methodology:

FacteurFactor ExplicationExplanation
11 Base de codeCode Base Une seule base de code pour chaque microservice, stockée dans son propre référentiel.A single code base for each microservice, stored in its own repository. Suivi avec le contrôle de version, il peut être déployé dans plusieurs environnements (AQ, intermédiaire, production).Tracked with version control, it can deploy to multiple environments (QA, Staging, Production).
22 Les dépendancesDependencies Chaque microservice isole et conditionne ses propres dépendances, en adoptant des modifications sans affecter l’ensemble du système.Each microservice isolates and packages its own dependencies, embracing changes without impacting the entire system.
33 ConfigurationsConfigurations Les informations de configuration sont déplacées hors du microservice et sont externalisées à l’aide d’un outil de gestion de la configuration en dehors du code.Configuration information is moved out of the microservice and externalized through a configuration management tool outside of the code. Le même déploiement peut se propager dans les environnements avec la configuration correcte appliquée.The same deployment can propagate across environments with the correct configuration applied.
44 Services de stockageBacking Services Les ressources auxiliaires (magasins de données, caches, courtiers de messages) doivent être exposées via une URL adressable.Ancillary resources (data stores, caches, message brokers) should be exposed via an addressable URL. Cela découple la ressource de l’application, ce qui lui permet d’être interchangeable.Doing so decouples the resource from the application, enabling it to be interchangeable.
55 Build, Release, exécuterBuild, Release, Run Chaque version doit appliquer une séparation stricte entre les étapes de génération, de mise en œuvre et d’exécution.Each release must enforce a strict separation across the build, release, and run stages. Chaque doit être marqué d’un ID unique et prendre en charge la possibilité d’effectuer une restauration.Each should be tagged with a unique ID and support the ability to roll back. Les systèmes d’intégration continue et de CD modernes aident à respecter ce principe.Modern CI/CD systems help fulfill this principle.
66 ProcessusProcesses Chaque microservice doit s’exécuter dans son propre processus, isolé des autres services en cours d’exécution.Each microservice should execute in its own process, isolated from other running services. Externaliser l’État requis sur un service de sauvegarde, tel qu’un cache distribué ou un magasin de données.Externalize required state to a backing service such as a distributed cache or data store.
77 Liaison de portPort Binding Chaque microservice doit être autonome avec ses interfaces et fonctionnalités exposées sur son propre port.Each microservice should be self-contained with its interfaces and functionality exposed on its own port. Cela permet d’isoler les autres microservices.Doing so provides isolation from other microservices.
88 Accès concurrentielConcurrency Les services sont mis à l’échelle sur un grand nombre de petits processus identiques (copies) au lieu de mettre à l’échelle une seule grande instance sur la machine la plus puissante disponible.Services scale out across a large number of small identical processes (copies) as opposed to scaling-up a single large instance on the most powerful machine available.
99 DisposabilityDisposability Les instances de service doivent être jetables, favorisant des Démarrages rapides pour augmenter les possibilités d’évolutivité et les arrêts progressifs pour que le système reste dans un état correct.Service instances should be disposable, favoring fast startups to increase scalability opportunities and graceful shutdowns to leave the system in a correct state. Les conteneurs de l’arrimeur avec un orchestrateur répondent fondamentalement à cette exigence.Docker containers along with an orchestrator inherently satisfy this requirement.
1010 Parité dev/prodDev/Prod Parity Conservez les environnements tout au long du cycle de vie des applications comme possible, en évitant les raccourcis coûteux.Keep environments across the application lifecycle as similar as possible, avoiding costly shortcuts. Ici, l’adoption de conteneurs peut contribuer de façon considérable en promouvant le même environnement d’exécution.Here, the adoption of containers can greatly contribute by promoting the same execution environment.
1111 JournalisationLogging Traitez les journaux générés par les microservices en tant que flux d’événements.Treat logs generated by microservices as event streams. Traitez-les avec une agrégation d’événements et Propagez les données aux outils de gestion des journaux et de l’exploration de données, comme Azure Monitor ou Splunk, et enfin un archivage à long terme.Process them with an event aggregator and propagate the data to data-mining/log management tools like Azure Monitor or Splunk and eventually long-term archival.
1212 Processus d’administrationAdmin Processes Exécuter des tâches d’administration/de gestion en tant que processus unique.Run administrative/management tasks as one-off processes. Les tâches peuvent inclure le nettoyage des données et l’extraction des analytiques pour un rapport.Tasks can include data cleanup and pulling analytics for a report. Les outils qui exécutent ces tâches doivent être appelés à partir de l’environnement de production, mais séparément de l’application.Tools executing these tasks should be invoked from the production environment, but separately from the application.

Dans le livre, au-delà de l’application à douze facteurs, l’auteur Kevin Hoffman détaille chacun des 12 facteurs originaux (écrit en 2011).In the book, Beyond the Twelve-Factor App, author Kevin Hoffman details each of the original 12 factors (written in 2011). En outre, il aborde trois facteurs supplémentaires qui reflètent la conception d’applications Cloud modernes actuelles.Additionally, he discusses three additional factors that reflect today's modern cloud application design.

Nouveau facteurNew Factor ExplicationExplanation
1313 Priorité aux APIAPI First Faites de tout un service.Make everything a service. Supposons que votre code sera consommé par un client frontal, une passerelle ou un autre service.Assume your code will be consumed by a front-end client, gateway, or another service.
1414 TélémétrieTelemetry Sur une station de travail, vous bénéficiez d’une visibilité détaillée de votre application et de son comportement.On a workstation, you have deep visibility into your application and its behavior. Dans le Cloud, vous ne le pouvez pas.In the cloud, you don't. Assurez-vous que votre conception comprend la collecte des données de surveillance, spécifiques à un domaine et à l’intégrité/au système.Make sure your design includes the collection of monitoring, domain-specific, and health/system data.
1515 Authentification/autorisationAuthentication/ Authorization Implémentez l’identité à partir du début.Implement identity from the start. Envisagez les fonctionnalités RBAC (contrôle d’accès en fonction du rôle) disponibles dans les clouds publics.Consider RBAC (role-based access control) features available in public clouds.

Nous allons nous référer à la plupart des plus de 12 facteurs dans ce chapitre et dans le livre.We'll refer to many of the 12+ factors in this chapter and throughout the book.

Considérations relatives à la conception critiqueCritical Design Considerations

Outre les conseils fournis dans le cadre de la méthodologie de douze facteurs, vous devez prendre plusieurs décisions de conception critiques lors de la construction de systèmes distribués.Beyond the guidance provided from the twelve-factor methodology, there are several critical design decisions you must make when constructing distributed systems.

CommunicationCommunication

Comment les applications clientes frontales communiquent-elles avec les services principaux back-end ?How will front-end client applications communicate with backed-end core services? Autorisez-vous la communication directe ?Will you allow direct communication? Ou pouvez-vous faire abstraction des services principaux avec une façade de passerelle qui assure la flexibilité, le contrôle et la sécurité ?Or, might you abstract the back-end services with a gateway façade that provides flexibility, control, and security?

Comment les services centraux principaux communiquent-ils entre eux ?How will back-end core services communicate with each other? Autorisez-vous les appels HTTP directs qui mènent au couplage et à l’impact sur les performances et l’agilité ?Will you allow direct HTTP calls that lead to coupling and impact performance and agility? Ou peut-être envisagez-vous une messagerie découplée avec des technologies de file d’attente et de rubrique ?Or might you consider decoupled messaging with queue and topic technologies?

La communication est traitée en détail dans le chapitre 4, modèles de communication natifs du Cloud.Communication is covered in detail Chapter 4, Cloud-Native Communication Patterns.

RésilienceResiliency

Une architecture de microservices déplace votre système du processus in-process vers la communication réseau hors processus.A microservices architecture moves your system from in-process to out-of-process network communication. Dans une architecture distribuée, que se passe-t-il quand le service B ne répond pas à un appel réseau du service A ?In a distributed architecture, what happens when Service B isn't responding to a network call from Service A? Ou bien, que se passe-t-il lorsque le service C devient temporairement indisponible et que les autres services qui l’appellent sont bloqués ?Or, what happens when Service C becomes temporarily unavailable and other services calling it are blocked?

La résilience est traitée en détail dans le chapitre 6, résilience Cloud-Native.Resiliency is covered in detail Chapter 6, Cloud-Native Resiliency.

Données distribuéesDistributed Data

Par défaut, chaque microservice encapsule ses propres données, exposant les opérations via son interface publique.By design, each microservice encapsulates its own data, exposing operations via its public interface. Si c’est le cas, comment interroger les données ou implémenter une transaction sur plusieurs services ?If so, how do you query data or implement a transaction across multiple services?

Les données distribuées sont traitées en détail dans le chapitre 5, modèles de données natifs du Cloud.Distributed data is covered in detail Chapter 5, Cloud-Native Data Patterns.

IdentitéIdentity

Comment votre service identifie-t-il les personnes qui y accèdent et les autorisations dont il dispose ?How will your service identify who is accessing it and what permissions they have?

L’identité est traitée en détail dans le chapitre 8, identité.Identity is covered in detail Chapter 8, Identity.

MicroservicesMicroservices

Les systèmes Cloud natifs intègrent des microservices, un style architectural populaire pour la construction d’applications modernes.Cloud-native systems embrace microservices, a popular architectural style for constructing modern applications.

Créé comme un ensemble distribué de petits services indépendants qui interagissent via une infrastructure partagée, les microservices partagent les caractéristiques suivantes :Built as a distributed set of small, independent services that interact through a shared fabric, microservices share the following characteristics:

  • Chaque implémente une fonctionnalité métier spécifique dans un contexte de domaine plus large.Each implements a specific business capability within a larger domain context.

  • Chaque est développé de façon autonome et peut être déployé indépendamment.Each is developed autonomously and can be deployed independently.

  • Chaque est autonome et incorpore sa propre technologie de stockage de données (SQL, NoSQL) et la plateforme de programmation.Each is self-contained encapsulating its own data storage technology (SQL, NoSQL) and programming platform.

  • Chaque s’exécute dans son propre processus et communique avec d’autres personnes à l’aide de protocoles de communication standard tels que HTTP/HTTPs, WebSockets ou AMQP.Each runs in its own process and communicates with others using standard communication protocols such as HTTP/HTTPS, WebSockets, or AMQP.

  • Elles se composent ensemble pour former une application.They compose together to form an application.

La figure 1-4 compare une approche d’application monolithique avec une approche de microservices.Figure 1-4 contrasts a monolithic application approach with a microservices approach. Notez comment le monolithe se compose d’une architecture en couches, qui s’exécute dans un processus unique.Note how the monolith is composed of a layered architecture, which executes in a single process. Il utilise généralement une base de données relationnelle.It typically consumes a relational database. Toutefois, l’approche de microservices sépare les fonctionnalités en services indépendants qui incluent la logique et les données.The microservice approach, however, segregates functionality into independent services that include logic and data. Chaque microservice héberge son propre magasin de banques.Each microservice hosts its own datastore.

Déploiement monolithique et microservices

Figure 1-4.Figure 1-4. Déploiement monolithique et microservicesMonolithic deployment versus microservices

Notez comment les microservices favorisent le principe « une base de code, une application » de l' application à 12 facteurs, abordé plus haut dans le chapitre.Note how microservices promote the "One Codebase, One Application" principle from the Twelve-Factor Application, discussed earlier in the chapter.

#Le facteur 1 spécifie «un code base unique pour chaque microservice, stocké dans son propre référentiel. Suivi avec le contrôle de version, il peut être déployé dans plusieurs environnements.Factor #1 specifies "A single codebase for each microservice, stored in its own repository. Tracked with version control, it can deploy to multiple environments."

Intérêt des microservicesWhy microservices?

Les microservices offrent de l’agilité.Microservices provide agility.

Plus haut dans ce chapitre, nous avons comparé une application de commerce électronique créée comme un monolithe à celle-ci avec des microservices.Earlier in the chapter, we compared an eCommerce application built as a monolith to that with microservices. Dans l’exemple, nous avons vu des avantages clairs :In the example, we saw some clear benefits:

  • Chaque microservice a un cycle de vie autonome et peut évoluer indépendamment et le déployer fréquemment.Each microservice has an autonomous lifecycle and can evolve independently and deploy frequently. Vous n’avez pas besoin d’attendre une version trimestrielle pour déployer une nouvelle fonctionnalité ou une mise à jour.You don't have to wait for a quarterly release to deploy a new features or update. Vous pouvez mettre à jour une petite zone d’une application complexe avec moins de risques de perturber l’ensemble du système.You can update a small area of a complex application with less risk of disrupting the entire system.

  • Chaque microservice peut être mis à l’échelle indépendamment.Each microservice can scale independently. Au lieu de mettre à l’échelle l’application entière en tant qu’unité unique, vous augmentez la charge des services qui requièrent davantage de puissance de traitement ou de bande passante réseau.Instead of scaling the entire application as a single unit, you scale out only those services that require more processing power or network bandwidth. Cette approche fine de la mise à l’échelle offre un meilleur contrôle de votre système et permet de réduire les coûts globaux lorsque vous mettez à l’échelle des parties de votre système, et non pas de tout.This fine-grained approach to scaling provides for greater control of your system and helps to reduce overall costs as you scale portions of your system, not everything.

Les microservices .net sont un excellent guide de référence pour comprendre les microservices : architecture pour les applications .net en conteneur.An excellent reference guide for understanding microservices is .NET Microservices: Architecture for Containerized .NET Applications. Le livre explore en profondeur la conception et l’architecture de microservices.The book deep dives into microservices design and architecture. Il s’agit d’un complément pour une architecture de référence de microservice à pile complète , disponible en téléchargement gratuit à partir de Microsoft.It's a companion for a full-stack microservice reference architecture available as a free download from Microsoft.

Développement de microservicesDeveloping microservices

Les microservices peuvent être créés avec n’importe quelle plateforme de développement moderne.Microservices can be created with any modern development platform.

La plateforme Microsoft .NET Core est un excellent choix.The Microsoft .NET Core platform is an excellent choice. Gratuit et open source, il dispose de nombreuses fonctionnalités intégrées pour simplifier le développement de microservices.Free and open source, it has many built-in features to simplify microservice development. .NET Core est multiplateforme..NET Core is cross-platform. Les applications peuvent être générées et exécutées sur Windows, macOS et la plupart des versions de Linux.Applications can be built and run on Windows, macOS, and most flavors of Linux.

.NET Core est très performant et a bien été évalué par rapport à Node.js et à d’autres plateformes concurrentes..NET Core is highly performant and has scored well in comparison to Node.js and other competing platforms. Il est intéressant de faire en sorte que TechEmpower ait mené un ensemble complet de tests de performances sur de nombreuses plateformes et infrastructures d’application Web.Interestingly, TechEmpower conducted an extensive set of performance benchmarks across many web application platforms and frameworks. .NET Core est évalué dans les 10 premiers Node.js et les autres plateformes concurrentes..NET Core scored in the top 10 - well above Node.js and other competing platforms.

.NET Core est géré par Microsoft et la communauté .NET sur GitHub..NET Core is maintained by Microsoft and the .NET community on GitHub.

ConteneursContainers

De nos jours, il est naturel d’entendre le terme conteneur mentionné dans toute conversation concernant le Cloud Native.Nowadays, it's natural to hear the term container mentioned in any conversation concerning cloud native. Dans le livre, le Cloud Native patterns, auteur Cornelia Davis observe cela, « les conteneurs sont un excellent activateur des logiciels natifs du Cloud ».In the book, Cloud Native Patterns, author Cornelia Davis observes that, "Containers are a great enabler of cloud-native software." Le Cloud Native Computing Foundation place le conteneur de microservices en tant que première étape de leur carte de piste Cloud Native pour les entreprises qui commencent leur parcours Cloud-native.The Cloud Native Computing Foundation places microservice containerization as the first step in their Cloud-Native Trail Map - guidance for enterprises beginning their cloud-native journey.

Le conteneur d’un microservice est simple et simple.Containerizing a microservice is simple and straightforward. Le code, ses dépendances et le runtime sont empaquetés dans un fichier binaire appelé image de conteneur.The code, its dependencies, and runtime are packaged into a binary called a container image. Les images sont stockées dans un Registre de conteneurs, qui agit en tant que référentiel ou bibliothèque pour les images.Images are stored in a container registry, which acts as a repository or library for images. Un registre peut être situé sur votre ordinateur de développement, dans votre centre de données ou dans un cloud public.A registry can be located on your development computer, in your data center, or in a public cloud. L’arrimeur gère lui-même un registre public par le biais de l' ancrage Hub.Docker itself maintains a public registry via Docker Hub. Le Cloud Azure dispose d’un Registre de conteneurs pour stocker des images de conteneur à proximité des applications Cloud qui les exécuteront.The Azure cloud features a container registry to store container images close to the cloud applications that will run them.

Si nécessaire, vous transformez l’image en instance de conteneur en cours d’exécution.When needed, you transform the image into a running container instance. L’instance s’exécute sur tout ordinateur sur lequel est installé un moteur d' exécution de conteneur .The instance runs on any computer that has a container runtime engine installed. Vous pouvez avoir autant d’instances du service en conteneur que nécessaire.You can have as many instances of the containerized service as needed.

La figure 1-5 montre trois microservices différents, chacun dans son propre conteneur, s’exécutant sur un seul hôte.Figure 1-5 shows three different microservices, each in its own container, running on a single host.

plusieurs conteneurs s’exécutant sur un hôte de conteneurs

Figure 1-5.Figure 1-5. plusieurs conteneurs s’exécutant sur un hôte de conteneursMultiple containers running on a container host

Notez que chaque conteneur gère son propre ensemble de dépendances et d’exécution, ce qui peut être différent.Note how each container maintains its own set of dependencies and runtime, which can be different. Ici, nous voyons différentes versions du microservice du produit qui s’exécutent sur le même hôte.Here, we see different versions of the Product microservice running on the same host. Chaque conteneur partage une partie du système d’exploitation, de la mémoire et du processeur de l’hôte sous-jacent, mais est isolée les unes des autres.Each container shares a slice of the underlying host operating system, memory, and processor, but is isolated from one another.

Notez la manière dont le modèle de conteneur adopte le principe de « dépendances » de l' application à douze facteurs.Note how well the container model embraces the "Dependencies" principle from the Twelve-Factor Application.

Le facteur # 2 spécifie que chaque microservice isole et conditionne ses propres dépendances, en adoptant des modifications sans affecter l’ensemble du système.»Factor #2 specifies that "Each microservice isolates and packages its own dependencies, embracing changes without impacting the entire system."

Les conteneurs prennent en charge les charges de travail Linux et Windows.Containers support both Linux and Windows workloads. Azure Cloud adopte les deux.The Azure cloud openly embraces both. Ce qui est intéressant, c’est qu’il s’agit de Linux, et non de Windows Server, qui est devenu le système d’exploitation le plus populaire dans Azure.Interestingly, it's Linux, not Windows Server, that has become the most popular operating system in Azure.

Bien qu’il existe plusieurs fournisseurs de conteneurs, l’arrimeur a capturé la part du marché de lion.While several container vendors exist, Docker has captured the lion's share of the market. L’entreprise a mis en place le déplacement du conteneur logiciel.The company has been driving the software container movement. Elle est devenue la norme de facto pour l’empaquetage, le déploiement et l’exécution d’applications Cloud natives.It has become the de facto standard for packaging, deploying, and running cloud-native applications.

Pourquoi les conteneurs ?Why containers?

Les conteneurs assurent la portabilité et garantissent la cohérence entre les environnements.Containers provide portability and guarantee consistency across environments. En encapsulant tout dans un package unique, vous isolez le microservice et ses dépendances de l’infrastructure sous-jacente.By encapsulating everything into a single package, you isolate the microservice and its dependencies from the underlying infrastructure.

Vous pouvez déployer ce même conteneur dans n’importe quel environnement ayant le moteur d’exécution de l’ancrage.You can deploy that same container in any environment that has the Docker runtime engine. Les charges de travail en conteneur éliminent également les dépenses liées à la préconfiguration de chaque environnement avec des infrastructures, des bibliothèques logicielles et des moteurs d’exécution.Containerized workloads also eliminate the expense of pre-configuring each environment with frameworks, software libraries, and runtime engines.

En partageant le système d’exploitation sous-jacent et les ressources de l’hôte, les conteneurs ont un encombrement bien plus faible qu’une machine virtuelle complète.By sharing the underlying operating system and host resources, containers have a much smaller footprint than a full virtual machine. La taille plus petite augmente la densité, ou le nombre de microservices, qu’un hôte donné peut exécuter en même temps.The smaller size increases the density, or number of microservices, that a given host can run at one time.

Orchestration de conteneursContainer orchestration

Tandis que les outils tels que l’amarrage créent des images et exécutent des conteneurs, vous avez également besoin d’outils pour les gérer.While tools such as Docker create images and run containers, you also need tools to manage them. La gestion des conteneurs s’effectue à l’aide d’un programme logiciel spécial appelé Orchestrator de conteneur.Container management is done with a special software program called a container orchestrator. En cas de fonctionnement à l’échelle, l’orchestration de conteneur est essentielle.When operating at scale, container orchestration is essential.

La figure 1-6 montre les tâches de gestion fournies par les orchestrateurs de conteneurs.Figure 1-6 shows management tasks that container orchestrators provide.

Ce que font les orchestrateurs de conteneurs

Figure 1-6.Figure 1-6. Ce que font les orchestrateurs de conteneursWhat container orchestrators do

Le tableau suivant décrit les tâches d’orchestration courantes.The following table describes common orchestration tasks.

TâchesTasks ExplicationExplanation
PlanificationScheduling Approvisionner automatiquement des instances de conteneur.Automatically provision container instances.
Affinité/anti-affinitéAffinity/anti-affinity Approvisionner des conteneurs à proximité ou éloignés les uns des autres, ce qui contribue à la disponibilité et aux performances.Provision containers nearby or far apart from each other, helping availability and performance.
Surveillance de l’intégritéHealth monitoring Détectez et corrigez automatiquement les défaillances.Automatically detect and correct failures.
BasculementFailover Reconfigurer automatiquement l’instance défaillante sur des machines saines.Automatically reprovision failed instance to healthy machines.
Mise à l'échelleScaling Ajoutez ou supprimez automatiquement l’instance de conteneur pour répondre à la demande.Automatically add or remove container instance to meet demand.
Mise en réseauNetworking Gérez une superposition de mise en réseau pour la communication de conteneur.Manage a networking overlay for container communication.
Découverte de serviceService Discovery Activez les conteneurs pour les localiser.Enable containers to locate each other.
Mises à niveau propagéesRolling Upgrades Coordonner les mises à niveau incrémentielles avec un déploiement sans temps d’arrêt.Coordinate incremental upgrades with zero downtime deployment. Annule automatiquement les modifications problématiques.Automatically roll back problematic changes.

Notez comment les orchestrateurs adoptent les principes de disposability et d’accès concurrentiel de l' application à 12 facteurs, abordés plus haut dans ce chapitre.Note how orchestrators embrace the disposability and concurrency principles from the Twelve-Factor Application, discussed earlier in the chapter.

Le facteur # 9 spécifie que les instances de service doivent être jetables, favorisant ainsi les Démarrages rapides afin d’augmenter les possibilités d’évolutivité et les arrêts progressifs pour que le système reste dans un état correct. Les conteneurs de l’arrimeur avec un orchestrateur répondent fondamentalement à cette exigence.»Factor #9 specifies that "Service instances should be disposable, favoring fast startups to increase scalability opportunities and graceful shutdowns to leave the system in a correct state. Docker containers along with an orchestrator inherently satisfy this requirement."

Factor # 8 spécifie que les services sont mis à l’échelle sur un grand nombre de petits processus identiques (copies) au lieu de mettre à l’échelle une seule grande instance sur la machine la plus puissante disponible.»Factor #8 specifies that "Services scale out across a large number of small identical processes (copies) as opposed to scaling-up a single large instance on the most powerful machine available."

Bien que plusieurs orchestrateurs de conteneurs existent, Kubernetes est devenu la norme de facto pour le monde Cloud-native.While several container orchestrators exist, Kubernetes has become the de facto standard for the cloud-native world. Il s’agit d’une plate-forme portable, extensible et open source pour la gestion des charges de travail en conteneur.It's a portable, extensible, open-source platform for managing containerized workloads.

Vous pouvez héberger votre propre instance de Kubernetes, mais vous serez alors responsable de l’approvisionnement et de la gestion de ses ressources, ce qui peut être complexe.You could host your own instance of Kubernetes, but then you'd be responsible for provisioning and managing its resources - which can be complex. Le Cloud Azure offre Kubernetes en tant que service managé, service Kubernetes Azure (AKS).The Azure cloud features Kubernetes as a managed service, Azure Kubernetes Service (AKS). Un service géré vous permet de tirer pleinement parti de ses fonctionnalités, sans avoir à l’installer ni à le maintenir à jour.A managed service allows you to fully leverage its features, without having to install and maintain it.

Azure Kubernetes services est abordé en détail dans le chapitre 2, mise à l’échelle des applications Cloud natives.Azure Kubernetes Services is covered in detail Chapter 2, Scaling Cloud-Native Applications.

Services de stockageBacking services

Les systèmes Cloud natifs dépendent de nombreuses ressources accessoires différentes, telles que les magasins de données, les courtiers de messages, la surveillance et les services d’identité.Cloud-native systems depend upon many different ancillary resources, such as data stores, message brokers, monitoring, and identity services. Ces services sont appelés services de stockage.These services are known as backing services.

La figure 1-7 illustre de nombreux services de stockage courants consommés par les systèmes Cloud natifs.Figure 1-7 shows many common backing services that cloud-native systems consume.

Services de stockage courants

Figure 1-7.Figure 1-7. Services de stockage courantsCommon backing services

Les services de sauvegarde promeuvent le principe « abandon » de l' application à 12 facteurs, décrite plus haut dans le chapitre.Backing services promote the "Statelessness" principle from the Twelve-Factor Application, discussed earlier in the chapter.

Le facteur # 6 spécifie que chaque microservice doit s’exécuter dans son propre processus, isolé des autres services en cours d’exécution.Factor #6 specifies that, "Each microservice should execute in its own process, isolated from other running services. Externaliser l’État requis sur un service de sauvegarde, tel qu’un cache distribué ou un magasin de données.»Externalize required state to a backing service such as a distributed cache or data store."

Vous pouvez héberger vos propres services de stockage, mais vous serez alors responsable de la gestion des licences, de l’approvisionnement et de la gestion de ces ressources.You could host your own backing services, but then you'd be responsible for licensing, provisioning, and managing those resources.

Les fournisseurs de Cloud offrent un large éventail de services de stockage gérés.Cloud providers offer a rich assortment of managed backing services. Au lieu de détenir le service, il vous suffit de l’utiliser.Instead of owning the service, you simply consume it. Le fournisseur opère la ressource à l’échelle et assume la responsabilité des performances, de la sécurité et de la maintenance.The provider operates the resource at scale and bears the responsibility for performance, security, and maintenance. La surveillance, la redondance et la disponibilité sont intégrées au service.Monitoring, redundancy, and availability are built into the service. Les fournisseurs prennent entièrement en charge leurs services gérés : ouvrez un ticket pour résoudre votre problème.Providers fully support their managed services - open a ticket and they fix your issue.

Les systèmes Cloud natifs favorisent les services de stockage gérés des fournisseurs de Cloud.Cloud-native systems favor managed backing services from cloud vendors. Les économies en temps et en main-d’œuvre sont très intéressantes.The savings in time and labor are great. Le risque opérationnel lié à l’hébergement de vos propres problèmes peut être rapidement coûteux.The operational risk of hosting your own and experiencing trouble can get expensive fast.

Une meilleure pratique consiste à traiter un service de sauvegarde en tant que ressource attachée, liée de manière dynamique à un microservice avec des informations (URL et informations d’identification) stockées dans une configuration externe.A best practice is to treat a backing service as an attached resource, dynamically bound to a microservice with information (a URL and credentials) stored in an external configuration. Ce guide est écrit dans l’application à 12 facteurs, décrite plus haut dans le chapitre.This guidance is spelled out in the Twelve-Factor Application, discussed earlier in the chapter.

Factor # 4 spécifie que les services de stockage doivent être exposés via une URL adressable.Factor #4 specifies that backing services "should be exposed via an addressable URL. Cela découple la ressource de l’application, ce qui lui permet d’être interchangeable.»Doing so decouples the resource from the application, enabling it to be interchangeable."

Factor # 3 spécifie que les informations de configuration sont déplacées hors du microservice et externalisées via un outil de gestion de la configuration en dehors du code.»Factor #3 specifies that "Configuration information is moved out of the microservice and externalized through a configuration management tool outside of the code."

Avec ce modèle, un service de sauvegarde peut être attaché et détaché sans modification du code.With this pattern, a backing service can be attached and detached without code changes. Vous pouvez promouvoir un microservice de l’AQ en un environnement intermédiaire.You might promote a microservice from QA to a staging environment. Vous mettez à jour la configuration du microservice pour pointer vers les services de stockage dans un environnement intermédiaire et injectez les paramètres dans votre conteneur par le biais d’une variable d’environnement.You update the microservice configuration to point to the backing services in staging and inject the settings into your container through an environment variable.

Les fournisseurs de Cloud fournissent des API qui vous permettent de communiquer avec leurs services de stockage propriétaires.Cloud vendors provide APIs for you to communicate with their proprietary backing services. Ces bibliothèques encapsulent la plomberie et la complexité.These libraries encapsulate the plumbing and complexity. En communiquant directement avec ces API, vous associez étroitement votre code au service de sauvegarde.Communicating directly with these APIs will tightly couple your code to the backing service. Il est recommandé d’isoler les détails d’implémentation de l’API du fournisseur.It's a better practice to insulate the implementation details of the vendor API. Introduisez une couche d’intermédiation ou une API intermédiaire qui expose des opérations génériques à votre code de service.Introduce an intermediation layer, or intermediate API, exposing generic operations to your service code. Ce couplage faible vous permet de permuter un service de sauvegarde pour un autre ou de déplacer votre code vers un cloud public différent sans avoir à apporter de modifications au code du service principal.This loose coupling enables you to swap out one backing service for another or move your code to a different public cloud without having to make changes to the mainline service code.

Les services de stockage sont présentés en détail dans le chapitre 5, les modèles de données natifs du Cloudet le chapitre 4, modèles de communication natifs dans le Cloud.Backing services are discussed in detail Chapter 5, Cloud-Native Data Patterns, and Chapter 4, Cloud-Native Communication Patterns.

AutomatisationAutomation

Comme vous l’avez vu, les systèmes Cloud natifs intègrent des microservices, des conteneurs et une conception de système moderne pour obtenir une vitesse et une agilité.As you've seen, cloud-native systems embrace microservices, containers, and modern system design to achieve speed and agility. Mais ce n’est qu’une partie de l’histoire.But, that's only part of the story. Comment approvisionner les environnements Cloud sur lesquels ces systèmes s’exécutent ?How do you provision the cloud environments upon which these systems run? Comment déployez-vous rapidement des fonctionnalités et des mises à jour d’application ?How do you rapidly deploy app features and updates? Comment faire pour arrondir l’image complète ?How do you round out the full picture?

Entrez la pratique d' infrastructure en tant que codeou IaC.Enter the widely accepted practice of Infrastructure as Code, or IaC.

Avec IaC, vous automatisez l’approvisionnement de la plateforme et le déploiement d’applications.With IaC, you automate platform provisioning and application deployment. Vous appliquez essentiellement des pratiques de conception de logiciels, telles que le test et la gestion des versions, à vos pratiques DevOps.You essentially apply software engineering practices such as testing and versioning to your DevOps practices. Votre infrastructure et vos déploiements sont automatisés, cohérents et reproductibles.Your infrastructure and deployments are automated, consistent, and repeatable.

Automatisation de l’infrastructureAutomating infrastructure

Des outils comme Azure Resource Manager, Terraform et Azure CLI, vous permettent de générer un script de façon déclarative de l’infrastructure cloud dont vous avez besoin.Tools like Azure Resource Manager, Terraform, and the Azure CLI, enable you to declaratively script the cloud infrastructure you require. Les noms de ressources, les emplacements, les capacités et les secrets sont paramétrables et dynamiques.Resource names, locations, capacities, and secrets are parameterized and dynamic. Le script est géré et archivé dans le contrôle de code source en tant qu’artefact de votre projet.The script is versioned and checked into source control as an artifact of your project. Vous appelez le script pour approvisionner une infrastructure cohérente et reproductible dans des environnements système, comme l’assurance qualité, la mise en lots et la production.You invoke the script to provision a consistent and repeatable infrastructure across system environments, such as QA, staging, and production.

En coulisses, IaC est idempotent, ce qui signifie que vous pouvez exécuter le même script sur et sans effets secondaires.Under the hood, IaC is idempotent, meaning that you can run the same script over and over without side effects. Si l’équipe doit apporter une modification, elle modifie et réexécute le script.If the team needs to make a change, they edit and rerun the script. Seules les ressources mises à jour sont affectées.Only the updated resources are affected.

Dans l’article qu’est-ce que l’infrastructure en tant que code, l’auteur Sam Guckenheimer décrit comment, les équipes qui implémentent IaC peuvent fournir rapidement et à grande échelle des environnements stables.In the article, What is Infrastructure as Code, Author Sam Guckenheimer describes how, "Teams who implement IaC can deliver stable environments rapidly and at scale. Les équipes évitent la configuration manuelle des environnements et appliquent la cohérence en représentant l’état souhaité de leurs environnements via du code.Teams avoid manual configuration of environments and enforce consistency by representing the desired state of their environments via code. Les déploiements d’infrastructure avec IaC sont reproductibles et évitent les problèmes d’exécution dus à une dérive de la configuration ou à des dépendances manquantes.Infrastructure deployments with IaC are repeatable and prevent runtime issues caused by configuration drift or missing dependencies. Les équipes DevOps peuvent collaborer avec un ensemble unifié de pratiques et d’outils pour fournir des applications et leur infrastructure de prise en charge rapidement, de manière fiable et à grande échelle.»DevOps teams can work together with a unified set of practices and tools to deliver applications and their supporting infrastructure rapidly, reliably, and at scale."

Automatisation des déploiementsAutomating deployments

L' application à 12 facteurs, abordée précédemment, appelle des étapes distinctes lors de la transformation du code complet en une application en cours d’exécution.The Twelve-Factor Application, discussed earlier, calls for separate steps when transforming completed code into a running application.

Facteur # 5 spécifie que chaque version doit appliquer une séparation stricte entre les étapes de la build, de la mise en œuvre et de l’exécution.Factor #5 specifies that "Each release must enforce a strict separation across the build, release and run stages. Chaque doit être marqué d’un ID unique et prendre en charge la possibilité d’effectuer une restauration.»Each should be tagged with a unique ID and support the ability to roll back."

Les systèmes d’intégration continue et de CD modernes aident à respecter ce principe.Modern CI/CD systems help fulfill this principle. Ils fournissent des étapes de déploiement distinctes et permettent de garantir un code cohérent et de qualité accessible aux utilisateurs.They provide separate deployment steps and help ensure consistent and quality code that's readily available to users.

La figure 1-8 illustre la séparation au sein du processus de déploiement.Figure 1-8 shows the separation across the deployment process.

Étapes de déploiement dans un pipeline CI/CD

Figure 1-8.Figure 1-8. Étapes de déploiement dans un pipeline CI/CDDeployment steps in a CI/CD Pipeline

Dans l’illustration précédente, portez une attention particulière à la séparation des tâches.In the previous figure, pay special attention to separation of tasks.

Le développeur construit une fonctionnalité dans son environnement de développement, en itérant au sein de ce que l’on appelle la « boucle interne » de code, d’exécution et de débogage.The developer constructs a feature in their development environment, iterating through what is called the "inner loop" of code, run, and debug. Une fois terminé, ce code fait l’objet d’un Push dans un référentiel de code, tel que GitHub, Azure DevOps ou bitbucket.When complete, that code is pushed into a code repository, such as GitHub, Azure DevOps, or BitBucket.

L’envoi (push) déclenche une étape de génération qui transforme le code en artefact binaire.The push triggers a build stage that transforms the code into a binary artifact. Le travail est implémenté avec un pipeline d' intégration continue (ci) .The work is implemented with a Continuous Integration (CI) pipeline. Il génère, teste et empaquette automatiquement l’application.It automatically builds, tests, and packages the application.

L’étape de mise en production récupère l’artefact binaire, applique les informations de configuration de l’environnement et de l’application externes et produit une version immuable.The release stage picks up the binary artifact, applies external application and environment configuration information, and produces an immutable release. La version est déployée dans un environnement spécifié.The release is deployed to a specified environment. Le travail est implémenté avec un pipeline de livraison continue (CD) .The work is implemented with a Continuous Delivery(CD) pipeline. Chaque version doit être identifiable.Each release should be identifiable. Vous pouvez indiquer « ce déploiement exécute la version 2.1.1 de l’application ».You can say, "This deployment is running Release 2.1.1 of the application."

Enfin, la fonctionnalité publiée est exécutée dans l’environnement d’exécution cible.Finally, the released feature is run in the target execution environment. Les mises en production sont immuables, ce qui signifie que toute modification doit créer une nouvelle mise en production.Releases are immutable meaning that any change must create a new release.

En appliquant ces pratiques, les organisations ont radicalement évolué la manière dont elles accompagnent les logiciels.Applying these practices, organizations have radically evolved how they ship software. De nombreuses versions trimestrielles ont été déplacées vers des mises à jour à la demande.Many have moved from quarterly releases to on-demand updates. L’objectif est de détecter les problèmes au début du cycle de développement lorsqu’ils sont moins coûteux à résoudre.The goal is to catch problems early in the development cycle when they're less expensive to fix. Plus la durée entre les intégrations est longue, plus les problèmes de résolution sont élevés.The longer the duration between integrations, the more expensive problems become to resolve. Avec la cohérence dans le processus d’intégration, les équipes peuvent valider les modifications de code plus fréquemment, ce qui permet une meilleure collaboration et une meilleure qualité des logiciels.With consistency in the integration process, teams can commit code changes more frequently, leading to better collaboration and software quality.

Azure PipelinesAzure Pipelines

Le Cloud Azure comprend un nouveau service CI/CD, intitulé Azure pipelines, qui fait partie de l’offre Azure DevOps présentée dans la figure 1-9.The Azure cloud includes a new CI/CD service entitled Azure Pipelines, which is part of the Azure DevOps offering shown in Figure 1-9.

Azure Pipelines dans DevOps

Figure 1-9.Figure 1-9. Offres Azure DevOpsAzure DevOps offerings

Azure Pipelines est un service Cloud qui combine l’intégration continue (CI) et la livraison continue (CD).Azure Pipelines is a cloud service that combines continuous integration (CI) and continuous delivery (CD). Vous pouvez tester, générer et envoyer automatiquement votre code à n’importe quelle cible.You can automatically test, build, and ship your code to any target.

Vous définissez votre pipeline dans le code d’un fichier YAML avec le reste du code de votre application.You define your pipeline in code in a YAML file alongside the rest of the code for your app.

  • La version du pipeline est gérée avec votre code et suit la même structure de branchement.The pipeline is versioned with your code and follows the same branching structure.
  • Vous obtenez la validation de vos modifications via des revues du code dans les demandes d’extraction et les stratégies de build de branche.You get validation of your changes through code reviews in pull requests and branch build policies.
  • Chaque branche que vous utilisez peut personnaliser la stratégie de génération en modifiant le fichier Azure-pipelines. yml.Every branch you use can customize the build policy by modifying the azure-pipelines.yml file.
  • Le fichier de pipeline est archivé dans le contrôle de version et peut être examiné en cas de problème.The pipeline file is checked into version control and can be investigated if there's a problem.

Le service Azure Pipelines prend en charge la plupart des fournisseurs GIT et peut générer des pipelines de déploiement pour les applications écrites sur les plateformes Linux, macOS ou Windows.The Azure Pipelines service supports most Git providers and can generate deployment pipelines for applications written on the Linux, macOS, or Windows platforms. Il prend en charge Java, .NET, JavaScript, Python, PHP, Go, XCode et C++.It includes support for Java, .NET, JavaScript, Python, PHP, Go, XCode, and C++.