Le terme « cloud-native » est trompeur. Il ne s’agit pas de cloud (ni fournisseur cloud ni services cloud) à proprement parler, mais plutôt d’une manière utilisée pour mettre en place des infrastructures et de concevoir, déployer et gérer des applications. Le cloud n’est que l’un des nombreux outils composant le paysage du cloud-native.
Dans ce guide, nous vous donnons une définition compréhensible du cloud-native, puis nous détaillons un peu en quoi consistent les outils et les pratiques cloud-native. Enfin, nous vous offrons un panorama du paysage cloud-native de la CNCF. Ces informations devraient vous aider à choisir le bon environnement cloud-native pour votre structure.
Le cloud-native est une méthode de développement pour améliorer la mise en production, en concevant, déployant et gérant des applications plus rapidement, mais aussi de manière prévisible et fiable. La prise en charge d’outils cloud-native dans l’infrastructure informatique et l’adoption des pratiques cloud-native sont des composantes essentielles pour qu’une organisation prétende être cloud-native.
Il faut cependant faire la distinction entre les outils et les pratiques. D’un côté, les outils du cloud-native sont les pièces technologiques spécifiques qui entrent dans la composition du cloud-native. De l’autre, les pratiques du cloud-native font référence à la dynamique culturelle sous-jacente de l’utilisation de ces outils.
Notez que ce type de développement des applications permet de migrer vers le cloud plus facilement, puisque ces applications tiennent déjà compte des principes de multi-tenancy (mutualisation), de l’évolutivité et de la gestion du cloud.
L’approche cloud-native est en constante évolution en fonction du développement de nouveaux outils et de l’adoption de nouvelles pratiques. Il est néanmoins possible d’identifier une base d’outils et de pratiques communes à la plupart des architectures cloud-native.
Le fait de placer les pratiques cloud-native avant les outils de ce concept, ou inversement, ne reflète pas leur importance relative ni un ordre quelconque de mise en place. Le cloud-native présente une qualité émergente des organisations lorsqu’elles mettent en œuvre un ensemble spécifique d’outils et adoptent les pratiques culturelles qui les accompagnent.
Le modèle de livraison cloud (provisionnement, consommation et gestion des ressources) est une partie capitale des architectures cloud-native. Outils et pratiques cloud-native ne peuvent être adoptés que dans un environnement prenant en charge le modèle de livraison cloud. Quel que soit le type de cloud (clouds privés, publics ou hybrides), les services de cloud-computing ont donc une grande importance.
Pierre angulaire des applications cloud-native, les conteneurs (containers) individuels regroupent le code d’application et toutes les ressources nécessaires pour exécuter ce code. Grâce à la conteneurisation :
Les conteneurs n’ont nul besoin d’un système d’exploitation ou d’une plate-forme cloud. Les systèmes cloud-native utilisent en revanche le PaaS et les services managés et traitent l’infrastructure sous-jacente comme jetable et remplaçable. Ce qui engendre une accélération globale de la vitesse de mise sur le marché des nouvelles fonctionnalités. Ceci permet aux entreprises de suivre l’évolution des demandes des clients.
Pour suivre la rapide évolution des besoins et des demandes, les applications sont dorénavant architecturées sous la forme d’un ensemble de petites unités individuelles (services). Chacune d’entre elles peut être déployée, gérée ou mise à niveau indépendamment. De ce fait, l’architecture de microservices s’intègre parfaitement à la pratique culturelle du cloud-native et des équipes autonomes pratiquant les préceptes des méthodes agiles et du DevOps.
La sectorisation des services d’une application permet aussi de déployer des mises à jour sans impacter l’ensemble de l’application, mais aussi de réduire les problèmes de production et les pannes à l’échelle de l’application. Les problèmes sont contenus, il est alors plus facile d’agir rapidement et la disponibilité des applications est sauvegardée.
Décomposer une application en différents services entraîne aussi une augmentation du volume de communication. En effet, les applications cloud-native se composent de centaines de microservices communiquant sur des sites internet complexes. Le stockage de données est assuré par les data-centers et le fonctionnement de l’infrastructure entraîne des charges de travail nécessitant une plus grande puissance de calcul.
Le service mesh permet la gestion de ce réseau complexe de communication rendant l’ensemble sécurisé, rapide et fiable. En utilisant cet outil du cloud-native, les frais généraux sont réduits et les développeurs peuvent se concentrer sur la création de nouvelles fonctionnalités.
Le CICD peut faire référence à un ensemble de pratiques, mais aussi aux outils soutenant ces pratiques. L’intégration continue (CI pour Continuous Integration) et la livraison continue (CD pour Continuous Delivery) visent à accélérer les cycles de développement des logiciels tout en les rendant plus robustes et fiables.
Les outils CICD servent notamment à automatiser les étapes importantes du cycle de publication des applications. Ils font partie intégrante des méthodes DevOps, DevSecOps et cloud-native.
Les orchestrateurs de conteneurs, comme Kubernetes, deviennent précieux dès lors qu’on déploie, exploite et fait évoluer des flottes de microservices conteneurisés. Tout ceci n’est pas facile à gérer et demanderait beaucoup d’énergie et de temps si les outils d’orchestration n’existaient pas. Kubernetes, mais aussi d’autres applicatifs de grandes entreprises comme AWS (Amazon Web Services) Fargate, Microsoft Azure Containers Instances ou Google Cloud Run par exemple, facilitent le provisionnement, le déploiement et la mise à l’échelle de flottes d’applications de microservices conteneurisées.
Kubernetes et consœurs deviennent un rouage indispensable dans les environnements cloud-native. En soi, ces outils ne sont pas considérés comme du cloud-native, mais il est très difficile de s’en passer pour développer en mode cloud-native.
Le concept de culture n’est pas facile à cerner et à comprendre. Philosophiquement, la culture c’est ce qui diffère de la nature. Pour les sociologues, la culture est ce qui est commun à des individus et qui peut être appris et transmis. Partant de cette définition, on peut comprendre que la culture cloud-native est le reflet des pratiques utilisées pour le développement d’applications hébergées exploitant les avantages du cloud-computing.
Les outils cloud-native sont relativement faciles à intégrer, certainement parce que leur intérêt est plus flagrant. En revanche, il est bien plus difficile d’adopter de nouvelles pratiques. Cela implique de changer les habitudes, de changer de culture. Or, pour obtenir un bon environnement cloud-native, il est primordial d’adopter une culture cloud-native. C’est-à-dire des pratiques centrées sur une manière de créer une infrastructure logicielle, de la publier et de l’exploiter.
Le changement culturel des services informatiques est donc le plus grand obstacle à l’adoption complète d’un environnement cloud-native. Certaines pratiques permettent de franchir graduellement le pas, comme la méthode agile en premier lieu et le DevOps.
La philosophie du DevOps est un des modèles de déploiement qui consiste à casser les silos séparant les équipes de travail. Les avantages de la solution DevOps sont de rassembler le développement et les opérations informatiques à la faveur d’un travail pleinement collaboratif et flexible. En adoptant le DevOps, les entreprises peuvent mieux participer à la transformation numérique et effectuer une migration des applications vers le cloud-native.
Avec la flexibilité de la méthode DevOps, les équipes sont mieux intégrées améliorant ainsi les innovations logicielles et accélérant les livraisons. Et pour aller plus loin, l’entreprise peut avoir tout intérêt à intégrer l’aspect sécurité des données dans le développement logiciel et d’appliquer les préceptes DevSecOps. La protection des données est d’autant plus importante depuis l’utilisation du cloud en masse.
Les applications cloud-native nécessitent la formation d’équipes interfonctionnelles, soudées et responsables des microservices (composants individuels). Pour gérer l’infrastructure, ces équipes doivent internaliser un large éventail de compétences.
D’un autre côté, l’automatisation, la responsabilité partagée et la préparation à la production à tout moment sont des pratiques CICD cruciales pour réussir un bon environnement cloud-native.
Après avoir défini les contours d’une architecture cloud-native, essayons de définir ce qu’est une application cloud-native.
Une application cloud-native est un ensemble de microservices conteneurisés faiblement couplés déployé, grâce à un moteur d’orchestration (comme Kubernetes), dans le cloud public, le cloud privé ou le cloud hybride. Loin d’être statique, une application cloud-native évolue en permanence pour répondre à des besoins et des changements externes.
Au-delà de cette définition, plusieurs points (fonctionnalités) permettent de distinguer une application cloud-native d’une application traditionnelle. Voici les fonctionnalités principales d’une application cloud-native.
L’évolutivité (scalabilité) est la caractéristique première d’une application cloud-native. Une partie de l’évolution peut être attribuée à l’évolution même des technologies (Kubernetes, services cloud) utilisées pour exécuter des applications.
La surveillance classique (monitoring) des états des logiciels ne permet pas de suivre la complexification liée au cloud computing. En effet, les serveurs physiques, les serveurs virtuels, les conteneurs et les données (Big Data) dans le cloud dont bien trop nombreux et agissent à des vitesses très élevées. L’observabilité, comparable à un anneau de satellites de surveillance interconnectés, remplace alors la simple surveillance. Elle permet de tout voir et partout à la fois. Les outils de l’observabilité enregistrent les « mouvements », ce qui permet de geler et zoomer sur les évènements passés et actuels. Ajoutée à l’intelligence artificielle (machine learning), elle peut même aider à prévoir.
Une autre caractéristique notable d’une application cloud-native est la résilience ; et avec elle, la fiabilité. Effectivement, les applications cloud-native étant composées de plusieurs services (microservices) faiblement couplés, elles sont rarement sujettes à des arrêts totaux. Un incident sur un service n’entraîne pas l’arrêt de toute l’application. Les problèmes sont contenus et la reprise après sinistre est relativement plus facile. Cela signifie une haute disponibilité de l’application.
Une application cloud-native profite également d’une bonne maniabilité. De nouvelles fonctionnalités peuvent facilement être intégrées sans devoir éteindre l’application.
Les architectures cloud-native sont réputées immuables. L’immuabilité étant la pratique consistant à remplacer les conteneurs au lieu de les mettre à jour sur place. La CNCF cite cette caractéristique comme étant déterminante dans les architectures et applications cloud-native.
Autre fonctionnalité citée par la CNCF, l’API déclarative (délivrée par les fournisseurs de services cloud) se concentre sur les résultats plutôt que sur la cartographie explicite d’un ensemble d’actions. Généralement, des API légères, comme le transfert d’état représentatif (REST), l’appel de procédure à distance open-source de Google (gRPC) ou NATS, sont utilisées pour les applications cloud-native.
La Cloud Native Computing Foundation (CNCF) propose une collection d’outils open-source. Ils couvrent la plupart des aspects des serveurs du cloud-native et ont pour objectif d’aider les entreprises à créer des piles technologiques pour développer, déployer, exploiter et surveiller des applications cloud-native.
Si vous êtes un professionnel en cloud native et que vous souhaitez participer à des projets passionnant au sein d’entreprises en pleine transformation digitale, contactez le service recrutement d’Ozitem !
© 2023 Groupe Ozitem Mentions légales Politique de confidentialité