Qu’est-ce que le développement logiciel « Cloud Native » ?
Le développement natif en cloud est un ensemble de méthodologies de développement logiciel qui tire pleinement parti du modèle de cloud computing pour créer et exécuter des applications, en gérant la complexité de l’architecture requise et en permettant une livraison plus rapide des fonctionnalités et des mises à jour.
L’approche Cloud Native se concentre sur la décomposition d’un grand problème en petits problèmes et sur l’automatisation de chaque processus des opérations nécessaires, réduisant ainsi les temps d’arrêt, rendant un système plus productif et efficace, tout en nous donnant un plus grand contrôle sur la mise en œuvre dans les différents environnements de notre application. Il nous fournit également des outils qui nous informent de l’état de santé de notre application, accélérant le débogage en cas d’erreurs, ce qui nous permet de résoudre les problèmes rapidement et efficacement, ainsi que l’audit des performances de notre logiciel avec les différents services en cloud.
Il faut également tenir compte du fait que les différents fournisseurs de services en cloud ont pour priorité absolue la sécurité de l’application et de ses données, ainsi que la garantie que celles-ci sont accessibles avec la latence la plus faible, et qu’ils fournissent différents outils grâce auxquels le développeur peut garantir la sécurité de son application et être en mesure de la déployer dans n’importe quel pays ou région de manière très simple.
L’enquête annuelle 2022 de la communauté Stack Overflow sur le pourcentage de développeurs professionnels utilisant les différents fournisseurs de plateformes en cloud montre leur tendance d’utilisation dans l’image suivante :
Ilustration 1: Survey 2022 Stack Overflow – Cloud platforms
[https://survey.stackoverflow.co/2022/#most-popular-technologies-platform-prof]
Pourquoi nous appuyons-nous sur Python pour le développement « cloud-native » ?
Python est l’un des langages de programmation les plus populaires à ce jour et, depuis sa création, il a conservé une philosophie qui met l’accent sur une syntaxe lisible, propre et facile à apprendre. Contrairement à d’autres langages de programmation qui se concentrent davantage sur les parenthèses, les crochets, les deux-points et les virgules, Python utilise des sauts de ligne et les regroupe avec des tabulations (4 espaces), ce qui permet aux développeurs de se concentrer davantage sur la programmation et moins sur le débogage de la syntaxe.
Son mode interactif nous aide à déboguer le code directement depuis le Shell et à tester chaque fragment du code de manière rapide et fluide.
Il dispose d’une variété de bibliothèques qui peuvent être facilement étendues en fonction des besoins de votre application et qui sont soutenues par une grande communauté active qui collabore chaque jour à la création de ces bibliothèques.
Il est évolutif, et constitue donc une meilleure structure pour la gestion des grands programmes de manière plus systématique.
Python est un langage très polyvalent car il peut être utilisé dans différents domaines tels que le développement web, le Big Data, l’apprentissage automatique, le scripting, le développement d’applications de bureau, les jeux vidéo, entre autres. Il faut également noter que c’est un langage open source et multiplateforme (Linux, Windows et Mac).
L’indicateur de popularité des langages de programmation de la communauté des programmeurs TIOBE place Python à la première place en juillet 2022. Cet indice est mis à jour mensuellement et indique le nombre d’ingénieurs en logiciels formés pour effectuer des développements au niveau global, des cours et des fournisseurs disponibles.
Ilustration 3 TIOBE Index for July 2022
[https://www.tiobe.com/tiobe-index/]
Si nous comparons la tendance des recherches effectuées en Espagne à l’aide du moteur de recherche Google pour les langages de programmation Python, Java et .Net, nous pouvons voir le graphique suivant
Ilustration 4 Google trends – Python, Java, .Net
[https://trends.google.es/trends/explore?date=2022-01-01%202022-12-31&geo=ES&q=python,java,.net]
Tout cela permet d’établir que tant le langage que la communauté de professionnels qui le soutiennent appuient la décision de l’utiliser pour le développement Cloud Native.
Retour à Cloud Native : exemple de services et d’architecture
Le guide « The Twelve-factor App » ou « 12-factor » (https://12factor.net/es/) est un manifeste que les développeurs doivent suivre pour créer des applications web modernes ou des applications basées sur les services (SaaS).
Il se concentre sur le développement, le déploiement, la vitesse, le coût, la sécurité et l’évolutivité impliqués dans la création d’une nouvelle application, en mettant l’accent sur la configuration déclarative de celle-ci.
Une façon d’expliquer le « facteur 12 » sans avoir à aborder chacun de ses points est d’imaginer un puzzle divisé en différentes pièces (qui seraient chacun de nos services) qui sont indépendantes les unes des autres et qui, une fois connectées (dans notre cas, la communication entre chaque service), constituent notre application.
Chaque environnement défini pour un projet, comme les environnements de développement, QA et de production, doivent être identiques, ce qui garantit que nous obtenons des résultats similaires dans chacun d’entre eux, ce qui nous permettra une livraison continue du développement jusqu’à la production.
Créer une architecture avec les éléments ci-dessus sans utiliser de services cloud est très compliqué et augmenterait à la fois le taux d’erreurs et le temps de mise en œuvre. Sans parler de la surveillance en temps réel des journaux et des performances, que ce soit au niveau de la plateforme ou de l’application, ce qui rendrait notre écosystème très complexe, mais très facile à mettre en œuvre en utilisant Cloud Native.
L’architecture Cloud Native avec Python peut être construite de différentes manières en fonction des exigences du projet et de l’objectif que les affaires veulent atteindre.
L’une des alternatives pour la conception de l’architecture est la création de microservices, où une application est divisée en petits services indépendants, mais qui communiquent entre eux, soit via des API REST, des événements ou gRPC (une implémentation Open Source des appels de procédure à distance RPC conçue à l’origine par Google). Dans un cas typique, les outils ou services Cloud qui peuvent être utilisés chez les principaux fournisseurs seraient :
- Amazon Web Service : EC2 Container Registry (ECR), EC2 Container Service (ECS), Elastic Container Service for Kubernetes (EKS)
- Microsoft Azure : Azure Container Registry, Azure Kubernetes Service (AKS)
- Google Cloud : Container Registry, Container Registry
Bien qu’une approche serverless (sans serveur) puisse également être utilisée, pour laquelle des services tels que Cloud Foundry, Heroku, Amazon Beanstalk, Amazon Lambda, Azure Functions, etc. seraient disponibles.
Il est important de noter que tous les services cloud ne sont pas nécessaires à la fois pour une architecture basée sur les microservices ainsi que pour une architecture serverless, puisqu’une application nécessite également une base de données, un espace de stockage, une gestion des files d’attente, une gestion du caché, parmi beaucoup d’autres, où chaque fournisseur de cloud offre différentes alternatives.
Pour comprendre un peu mieux le cloud native, nous allons créer une petite architecture de microservices sans serveur pour une application de librairie en ligne (qui est un exemple d’application que presque tout le monde connaît). L’architecture, à titre d’exemple, ne comportera qu’un panier d’achat, un catalogue de livres et un service de recommandation, alors qu’une boutique en ligne est constituée de bien d’autres services.
Nous veillerons à ce que notre architecture soit solide et facile à mettre en œuvre pour les développeurs.
Mais commençons par mettre en place le scénario suivant : nous avons une équipe de 10 développeurs et chacun d’entre eux ajoute une nouvelle fonctionnalité au projet, comme la gestion du panier d’achat, l’ajout de nouveaux champs au modèle de livre, l’ajout d’une vue de recommandation.
Dans ce scénario, nous devons nous poser les questions suivantes afin de choisir la meilleure solution :
- Voulons-nous que tout ce code soit dans une seule application (monolithique) ?
- Sera-t-il possible de maintenir facilement le code et les schémas de base de données lorsqu’on essaiera d’intégrer de nouvelles fonctionnalités ?
- Quel serait le coût du maintien d’une infrastructure stable pour soutenir nos applications, comme les serveurs, la base de données, les communications, la gestion du stockage, les mises à jour, la sécurité et la surveillance de tous les environnements nécessaires ?
- Sera-t-il facile de conserver le talent humain nécessaire pour maintenir le stack technologique requise tout au long du cycle de vie de notre application ?
Pour assurer la meilleure réponse à ces questions, une architecture d’exemple basée sur des microservices avec un accent sur le serverless et supportée dans le Cloud sera proposée ; ce sont les services qui seraient utilisés pour cet exemple :
Ilustration 5 – Architecture
Dans cette architecture présentée, nous nous concentrerons sur le fournisseur de services AWS. Comme nous pouvons le voir, nous disposons de :
- Une passerelle API qui aidera à créer, publier et maintenir l’API Rest de la boutique en ligne.
- Le service Amazon Cognito, qui intègre l’enregistrement, la connexion et le contrôle d’accès des utilisateurs de notre application, déléguant la sécurité des données sensibles à notre fournisseur de services Cloud.
- CloudFormation crée un modèle décrivant les ressources et les dépendances requises pour chacun de nos microservices, ce qui permettra de les déployer de manière simple, automatisée et fiable.
- Dans AWS Lambda, chaque fonction de notre code sera exécutée et la logique métier nécessaire sera appliquée sans nécessiter de serveur.
- Amazon DynamoDB est utilisé comme base de données, qui est une base de données NoSql sans serveur et entièrement gérée par le fournisseur de services cloud, où nous stockerons les données pour chaque microservice.
- Amazon Neptune est un service de base de données graphique rapide et fiable pour la modélisation des recommandations de livres.
- Enfin, nous avons Amazon CloudWatch comme service de surveillance et d’observabilité pour tout ce qui se passe avec nos services.
Avec cette architecture, nous pourrions disposer d’une boutique en ligne, où il suffirait de se préoccuper du développement de nouvelles fonctionnalités et du maintien de la qualité de notre logiciel, en minimisant les coûts de fonctionnement de l’infrastructure et tout ce que cela implique.
Bien qu’il s’agisse d’un exemple simplifié de ce que peut être une application métier, nous n’avons pas détaillé les nombreux types de services dont disposent les fournisseurs de Cloud pour réaliser nativement dans le Cloud tout type d’architecture prenant en charge les différents besoins métier existants.
Au Groupe SATEC, nous avons passé des années à concevoir, gérer, migrer et déployer des architectures complexes pour nos clients, ainsi qu’à contribuer au support, à l’exploitation, à la maintenance et à l’évaluation de celles-ci, dans des environnements de Cloud pur et hybride.
Tout cela fait de nous un allié idéal pour la transformation numérique de tous les processus d’affaires de toute entreprise vers le cloud natif, en étant capables de personnaliser une infrastructure en fonction de l’exigence de chaque projet et du développement de différents services de manière rapide, efficace et en garantissant la haute qualité des applications, qui sont fiables et efficaces, avec des livraisons continues dans le cadre de méthodologies agiles.
Si vous souhaitez plus d’informations sur Satec, veuillez nous contacter ici 👈