Dans un monde où l’on attend de l’instantanéité et de la fluidité, ce qui était acceptable il y a encore 20 ans ne l’est plus pour cette nouvelle génération outillée et habituée à avoir tout,  tout de suite. Les niveaux d’exigence ne cessent de croître et pour satisfaire ces exigences, les applications sont de plus en plus complexes et rivalisent d’ingéniosité dans les fonctionnalités. Dans ce contexte, le développement d’applications natives pour le Cloud est devenu un sujet très actuel, à l’instar de l’agilité et du DevOps. Mais se pourrait-il qu’il soit l’outil tant attendu, le sésame pour accélérer l’innovation et la croissance de l’entreprise ?

Dans cet article,  nous verrons :

  1. Qu’est-ce qu’une application Cloud Native ?
  2. Quels sont les avantages ?
  3. Quelles sont les caractéristiques du Cloud Native ?
  4. Cloud Native : êtes-vous prêt ?

Qu’est-ce qu’une application Cloud Native ?

La notion de Cloud Native sous-entend qu’une application a été conçue pour tirer le meilleur parti des fonctionnalités offertes par le Cloud. Une application ‘Cloud Native’ est donc une application conçue et pensée pour le Cloud.

L’objectif est d’avoir :

– une application scalable rapidement avec une haute disponibilité,
– une forte capacité à monter en charge sur des pics d’activité,
– la capacité à profiter des fonctionnalités de calcul distribué ou encore
– l’interopérabilité du logiciel avec d’autres services Cloud natifs (Azure active directory, BDD) ou avec des solutions tierces ( que ce soit au travers d’appels directs ou encore l’utilisation d’un bus de services).

Architecturée éventuellement sous forme de Microservices, l’application Cloud Native peut être intégrée et déployée par de petites équipes de développement dédiées à une plate-forme, et permet de créer et livrer rapidement des fonctionnalités en phase avec les besoins des clients.

Les applications ‘Cloud Native’ sont écrites dans des technologies centrées Web comme HTML, CSS, JavaScript/TypeScript (et bientôt Blazor client côté Front),  .NET,  Go,  Node.js, PHP,  Python ou Ruby côté serveur.

Quels sont les avantages ?

Une application Cloud Native peut bénéficier de toutes les capacités du Cloud et des bénéfices associés. Par exemple, les services Cloud permettent plus facilement de concevoir des applications hautement disponibles : en cas de panne d’un équipement du DataCenter du fournisseur de Cloud, un autre équipement de ce même DataCenter  peut prendre le relais automatiquement, voire la charge peut être immédiatement transférée vers un DataCenter d’une autre région.

ailleurs, en cas de pic d’utilisation, une application Cloud Native peut bénéficier de l’élasticité offerte par le Cloud et utiliser davantage de ressources qui pourront être désactivées dès la fin du pic et un retour à la normale de l’utilisation.

Enfin, avec une approche Cloud Native de type CaaS (Container as a Service), les entreprises peuvent créer des applications qui s’exécutent sur n’importe quel Cloud (public ou privé) sans modification.

Cela demande de mettre au point une architecture solide :

  • Capable de supporter les charges de travail en continu et en pic
  • En raisonnant Microservices et déploiement extensible
  • Intégrant, le cas échéant, les infrastructures déjà en place en mode Hybride

Dans le développement traditionnel, le code a un accès direct à toutes les ressources dont il a besoin. Cela peut donner une base de code monolithique, peu flexible, qui reste difficile à découper. Dans une application Cloud Native, le code doit être plus découpé. Ces couches d’abstraction rendent plus gérables l’infrastructure et les équipes dédiées et permettent aussi de réduire les coûts : moins de ressources, moins d’équipes et moins de risques. Toutefois, il ne faut pas perdre de vue que ces applications Cloud Native comportent également leur lot de difficultés notamment l’intégration de tous les composants ou encore la sécurité de l’ensemble des applications.

Quelles sont les caractéristiques du Cloud Native?

Pour tirer parti des possibilités de l’approche Cloud Native, il convient de :

  • Opter pour un modèle de développement qui repose sur l’utilisation de PaaS, une plateforme en tant que service. Une PaaS offre aux développeurs un environnement d’exécution complet : le système d’exploitation, le stockage, l’accès réseau, les logiciels serveur comme par exemple le système de gestion de base de données, et les runtimes d’exécution des composants logiciels
  • Intégrer les concepts de DevOps, notamment de livraison et déploiement en continu de microservices , voire de conteneurs

La culture DevOps

Le DevOps, c’est la collaboration entre les développeurs de logiciels et les administrateurs systèmes dans le but de fournir des logiciels de haute qualité qui répondent aux défis des clients. Cette démarche crée un environnement de développement dans lequel les tests et la mise en production sont plus rapides, plus fréquents et plus cohérents.

Le déploiement en continu

Il permet de répondre aux enjeux de rapidité, agilité et évolutivité en automatisant l’envoi de Release des composants logiciels à la production. En automatisant les opérations manuelles, les entreprises peuvent se recentrer sur leur business tout en éliminant les risques liés aux erreurs humaines. La livraison continue permet également d’obtenir des retours plus rapides des utilisateurs finaux.

L’architecture Microservices et conteneurs

L’architecture Microservices a pour objectif de diviser une application en fonctionnalités encapsulées au sein de services autonomes. Chacun de ces services est géré et évolue indépendamment des autres services et peut être déployé, amélioré, mis à l’échelle et être redémarré indépendamment des autres services de l’application. Dans le cadre d’un système de déploiement automatisé, les mises à jour peuvent être fréquentes sans impact sur les clients finaux.

Les principes structurels des microservices sont rendus possibles par un modèle d’architecture Cloud qui s’appuie sur :

  • des services,
  • des composants indépendants appelés via des appels externes,
  • une gestion de données massivement décentralisée.

Ces pratiques peuvent être soutenues par les Conteneurs ou des services ServerLess, qui offrent une unité de déploiement d’applications et un environnement d’exécution autonome parfaitement adapté.

En effet, une approche à base de conteneurs, comme Docker, répond également à ces besoins en permettant d’exécuter une application indépendamment de son infrastructure sous-jacente. Nous avons ainsi la garantie d’un déploiement identique, permettant de réduire les problèmes causés par les différences entre les environnements (développement, qualification ou production). Cette indépendance vis-à-vis de l’environnement permet d’obtenir une application aux comportements plus prévisibles.

Des services d’orchestration fournissent, notamment, la capacité à superviser les services, de manière à détecter automatiquement la nécessité de relancer un service ou d’étendre son nombre d’instances pour répondre à la charge.

Une architecture de type PaaS (Platform as a Service) et/ou CaaS (Container as a Service), couplée à une approche Infrastructure As Code (provisionnement des ressources et déploiement automatisés)  parait être un bon point de départ pour mettre un pied dans le monde des Cloud Native Applications. Cela pose les bases d’une conception susceptible de profiter pleinement des avantages du Cloud, quels qu’ils soient.

Contrairement aux applications migrées vers le cloud, les applications nativement conçues pour celui-ci sont capables d’exploiter tous les avantages d’une telle architecture tout en étant moins coûteuses et plus flexibles.

Cloud Native : êtes-vous prêt ?

Si vous souhaitez développer une application native pour le cloud, il faut la concevoir et la déployer de façon à bénéficier de tous les avantages du cloud, en termes de performance, flexibilité, qualité et facilité de déploiement, c’est le cas des applications Cloud Native.

Cependant, le développement d’applications Cloud Native suppose quelques prérequis et notamment :

  • La mise en place de méthodes agiles alignées sur les principes de DevOps, notamment la livraison et le déploiement continus
  • Une architecture orientée services et modulaire
  • Une réduction de la complexité via l’utilisation d’APIs
  • La mise en place de conteneurs, pour faciliter la portabilité vers différents environnements dans le cas d’un besoin ‘Multi-Cloud’

Ces 4 fondamentaux constituent les piliers d’une application Cloud Native. Une fois ces bases posées, il s’agit de tout faire pour les mettre en œuvre de manière satisfaisante

Faire évoluer la culture et les mentalités pour aller vers DevOps

Au-delà de la mise en place d’outils, l’enjeu est surtout de convaincre les collaborateurs du bien-fondé de cette démarche. L’adoption de la démarche DevOps nécessite de repenser totalement l’organisation de l’entreprise et de casser les silos de l’organisation vers une approche plus intégrée et collaborative.

Commencer petit (moderniser une application monolithique existante par exemple)

Commencez par un petit projet visible de tous avec un objectif atteignable. Cette approche de type ‘fast monolith’ consiste à refondre une application monolithique pour

  • la rendre plus modulaire
  • bénéficier de meilleures performances liées au cloud
  • se familiariser avec les grands principes du cloud
  • créer des émules

Utiliser des services applicatifs dans le cloud pour accélérer le développement

C’est quelque chose que vous faites déjà comme par exemple

  • la diffusion d’un questionnaire interne via la plateforme Google Drive,
  • l’utilisation de messagerie en ligne
  • l’emploi d’outils de communication/collaboration comme Skype.

De nombreux services prêts à l’emploi sont disponibles dans le cloud, que ce soit en SaaS ou sur des PaaS/IaaS : cache, moteur de workflow, connecteurs, API de mobilité, virtualisation de données, etc.

Opter pour une infrastructure à la demande

Les développeurs doivent pouvoir accéder à l’infrastructure dont ils ont besoin au moment où ils en ont besoin.

Les plateformes IaaS ou CaaS offrent des ressources hautement scalables, pouvant être ajustées sur demande en fonction des besoins de l’utilisateur. Il suffit d’une connexion internet pour accéder à une ressource depuis n’importe quel endroit. De plus, ces environnements incluent l’automatisation des tâches administratives, le scaling dynamique, la virtualisation de bureau …

Automatiser pour accélérer la livraison des applications

En automatisant vous gagnerez en efficacité et en rapidité. L’enjeu est également de réduire l’intervention humaine sur les tâches répétitives pour limiter les risques d’erreurs et, surtout, de permettre aux développeurs de se focaliser sur des tâches à plus haute valeur ajoutée.

Des outils d’automatisation permettent de déployer des processus répétables, afin de décharger les collaborateurs de tâches récurrentes et d’aller plus vite.

Mettre en œuvre la livraison continue et des techniques de déploiement avancées

Livrer fréquemment permet d’éprouver, fiabiliser la procédure, mais surtout de vous donner un feedback plus tôt et réduire, autant que possible, les coûts d’ajustement et les frustrations éventuelles (aussi bien celles des développeurs obligés de retravailler leur code et celles des utilisateurs obligés de patienter).

L’automatisation permet de rendre le processus de déploiement fiable et réplicable (sans risque d’erreur humaine).

Évoluer vers des architectures plus modulaires

Il peut s’agir d’architectures basées sur les microservices, dans lesquelles les applications sont découpées en composants les plus petits possibles, afin d’avoir une granularité fine et des processus partagés par plusieurs applications. Évoluer d’une application monolithique vers une architecture Microservices propose ainsi de nombreux avantages.