0% ont trouvé ce document utile (0 vote)
98 vues149 pages

Guide de création d'applications Cloud Native

Le document présente un module de formation sur la création d'applications Cloud Native, incluant des sujets tels que la définition du cloud, la création d'APIs REST, et le déploiement sur Azure. Il décrit également les caractéristiques essentielles du cloud, les différences entre cloud public, privé et hybride, ainsi que les modèles de services IaaS, PaaS et SaaS. Enfin, il aborde l'approche Cloud Native, ses avantages et son fonctionnement basé sur les microservices, les conteneurs et la culture DevOps.

Transféré par

aoutmanidbella
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
98 vues149 pages

Guide de création d'applications Cloud Native

Le document présente un module de formation sur la création d'applications Cloud Native, incluant des sujets tels que la définition du cloud, la création d'APIs REST, et le déploiement sur Azure. Il décrit également les caractéristiques essentielles du cloud, les différences entre cloud public, privé et hybride, ainsi que les modèles de services IaaS, PaaS et SaaS. Enfin, il aborde l'approche Cloud Native, ses avantages et son fonctionnement basé sur les microservices, les conteneurs et la culture DevOps.

Transféré par

aoutmanidbella
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Création d’une application Cloud native

Formatrice: Mme. Hasna BOUISSKRANE


Email: [email protected]

Année de formation: 2024/2025


PLAN DE MODULE

1. Introduction de cloud native.


2. Création des APIs REST simples en Node JS et Express Js.
3. Création d’une application microservices.
4. Manipulation des conteneurs.
5. Déploiement d’une application cloud native en Azure Cloud.

1
Partie 1: Introduction de cloud native

 Définir le cloud
 Définir l’approche cloud native

2
Chapitre 1: Définir le cloud
1. Concept du cloud et ses avantages

• Le terme « cloud » désigne les serveurs accessibles sur Internet, ainsi que les logiciels et bases de données
qui fonctionnent sur ces serveurs.

• Les serveurs situés dans le cloud sont hébergés au sein de datacenters répartis dans le monde entier.

• Grâce au cloud computing(informatique cloud) , utilisateurs et entreprises n'ont plus besoin de gérer eux-
mêmes des serveurs physiques ou d'installer des applications sur leurs propres équipements.

3
• Le cloud permet aux utilisateurs d'accéder aux mêmes fichiers et aux mêmes applications à partir de
presque n'importe quel appareil, car les processus informatiques et le stockage ont lieu sur des serveurs
dans un datacenter et non localement sur la machine utilisateur.

• C'est pourquoi vous pouvez vous connecter votre compte Instagram à partir de n’importe quel appareil,
avec toutes vos photos, vidéos et l'historique de vos conversations. Il en va de même avec les
fournisseurs de messagerie cloud comme Gmail ou Microsoft Office 365 et les fournisseurs de stockage
cloud comme Dropbox ou Google Drive.

• Pour les entreprises, le passage au cloud computing supprime certains coûts et frais informatiques : par
exemple, les sociétés n'ont plus besoin de mettre à jour et d'entretenir leurs propres serveurs, c'est le
fournisseur de cloud qui s'en charge.

4
Serveur informatique vs cloud : quelle solution de stockage de données choisir pour une entreprise ?

Le choix du stockage des données est crucial pour les entreprises face à l'augmentation continue des volumes
d'informations. Une gestion efficace des documents et des données est essentielle pour rester compétitif.

Un serveur est un ordinateur puissant installé dans vos locaux, conçu pour gérer et stocker les données de
votre entreprise. Il connecte les postes des employés (ordinateurs clients) et leur fournit différents services :

– L’accès à Internet,
– Le partage de fichiers,
– Le partage d’imprimantes,
– Le stockage en base de données ,
– La mise à disposition d’applications, etc.

5
Les limites du serveur informatique:

 Accès et partage de documents

• Le client se connecte au réseau interne de l’entreprise pour accéder à ses documents.


• Le partage de documents est possible entre les membres d’une équipe, mais uniquement sur les
postes installés en interne.

 Sécurité des données


L’utilisation d’un serveur expose les entreprises à des risques comme :
• Pannes matérielles : Rendant les systèmes de gestion inaccessibles.
• Infestation des données : Introduction de malwares ou virus dans le système informatique.
• Piratage : Vol ou altération des données sensibles.

 Capacité de stockage limitée


• Les serveurs ont une capacité de stockage fixe, ce qui peut devenir insuffisant si le volume de
données augmente rapidement.

 Coûts élevés
• Achat initial du serveur et des équipements réseau.
• Coûts de maintenance régulière et mise à jour des systèmes.
• Besoin d’une équipe spécialisée pour gérer le serveur.

6
Le cloud computing doit posséder 4 caractéristiques essentielles :

• Le service doit être en libre-service à la demande : Cela signifie que les utilisateurs ont la possibilité
d'accéder au service quand ils en ont besoin, sans nécessiter l'intervention humaine d'un fournisseur de
service.
Exemple: Un étudiant utilise Google Drive pour enregistrer ses fichiers. Il peut créer un dossier ou
ajouter un nouveau document à tout moment, simplement en se connectant à son compte, sans avoir
besoin de demander de l’aide à un technicien ou à Google.

• Le service doit être mesurable (mesure et affichage de paramètres de consommation) : Il s'agit de la


capacité à mesurer et à surveiller les ressources utilisées par le service, ainsi que les performances du
service lui-même.

Exemple : Sur Google Cloud, une entreprise peut suivre combien d’espace de stockage ou de temps
de calcul elle a utilisé pour son projet. Elle reçoit une facture détaillée chaque mois basée sur ces
paramètres mesurés.

• Il doit y avoir une mutualisation des ressources : Cela signifie que les ressources (comme les
serveurs, les réseaux, ou les bases de données) sont partagées entre plusieurs utilisateurs ou applications,
permettant une utilisation efficace et économique.

• Il doit être rapidement élastique (adaptation rapide à une variation du besoin) :Le service peut
augmenter ou réduire ses ressources rapidement pour répondre à la demande ou des besoins des
utilisateurs.

7
• Les avantages du Cloud

8
2. Exemple des fournisseurs cloud

Les 10 premiers fournisseurs mondiaux de cloud en termes de revenus totaux pour le trimestre fiscal se
terminant le 31 mars 2021 (en milliards de dollars américains).

9
3. Différence entre cloud privé, public et hybride

Cloud public

• Les clouds publics sont généralement des environnements cloud créés à partir d'une infrastructure
informatique qui n'appartient pas à l'utilisateur final.

• Alibaba Cloud, Microsoft Azure, Google Cloud, Amazon Web Services (AWS) et IBM Cloud sont les
principaux fournisseurs de cloud public.

• Les clouds publics étaient habituellement exécutés hors site, où les ressources comme les serveurs et
le stockage sont gérés par des fournisseurs externes(c‘est comme louer de l'espace sur Internet pour
faire fonctionner vos logiciels et stocker vos fichiers, sans avoir à gérer vous-même les infrastructures
physiques.)

10
Cloud privé

• Les clouds privés sont généralement définis comme des environnements cloud spécifiques à un
utilisateur final ou à un groupe, et sont habituellement exécutés derrière le pare-feu de l'utilisateur ou
du groupe, ce qui signifie que l'accès aux ressources du cloud privé est limité et sécurisé.

• Tous les clouds deviennent des clouds privés lorsque l'infrastructure informatique sous-jacente est
spécifique à un client unique, avec un accès entièrement isolé.

11
Caractéristiques clés du Cloud Privé :

• Les ressources (serveurs, stockage) ne sont pas partagées avec d'autres utilisateurs.
• L'infrastructure est généralement protégée par un pare-feu pour empêcher tout accès non autorisé.
Et les utilisateurs autorisés (par exemple, les employés d'une entreprise) peuvent accéder à ces
ressources via des connexions sécurisées.

Exemple
Une entreprise ayant des données sensibles (par exemple, des informations financières) peut choisir
d'utiliser un cloud privé pour héberger ces données.
L'entreprise peut utiliser des serveurs spécifiquement pour elle. Ces serveurs sont protégés par des
systèmes de sécurité avancés, et seul le personnel autorisé peut y accéder via des connexions
sécurisées..

12
Cloud hybride

Le cloud hybride est une combinaison de cloud public et de cloud privé, où une organisation utilise à la fois
des ressources dans le cloud public et dans le cloud privé, tout en permettant la communication et le partage
de données entre les deux environnements.

En d'autres termes, une entreprise peut garder certaines données ou applications dans un cloud privé pour des
raisons de sécurité et de contrôle, tout en utilisant un cloud public pour d'autres besoins moins sensibles,
comme le stockage de fichiers non confidentiels ou l'hébergement d'applications.

13
4. Services du cloud (IAAS, PAAS, SAAS)

As-a-Service : définition

Le concept "As-a-Service" désigne les services cloud fournis à la demande, souvent facturés selon une
utilisation réelle. Ce modèle permet de déléguer la gestion de l’infrastructure, afin que les entreprises
puissent se concentrer sur leurs activités principales, telles que :

• Développement de produits (comme du code ou des applications).


• Relations avec les clients et stratégie commerciale

Il existe trois principaux types de cloud computing


« as-a-Service », chacun offrant un certain degré de gestion :

- IaaS (Infrastructure-as-a-Service)
- PaaS (Platform-as-a-Service)
- SaaS (Software-as-a-Service).

14
IaaS : Infrastructure as a Service

• Dans le modèle Infrastructure as a Service (IaaS), le fournisseur de


solution met à disposition des ressources matérielles comme les
serveurs, les réseaux, les systèmes de stockage et les technologies de
virtualisation. Ces ressources sont accessibles en fonction des
besoins de l’utilisateur, qui n’a pas à se préoccuper de la
maintenance ou des mises à jour des infrastructures physiques sous-
jacentes.
• Le fournisseur est responsable de la gestion et de l’entretien de ces
composants matériels. Cependant, l’utilisateur conserve le contrôle
sur le système d’exploitation, les données, les applications, les
solutions middleware et les environnements d’exécution qu’il doit
installer, configurer et gérer.

Exemple
Hébergement d’applications : Une entreprise de développement de
logiciels utilise Amazon Web Services (AWS) pour héberger ses
applications, plutôt que d'acheter des serveurs physiques.
Stockage et sauvegarde : Une entreprise sauvegarde ses données
critiques sur Microsoft Azure pour éviter les risques liés aux pannes
matérielles.

15
• Test et développement :Les développeurs utilisent des machines virtuelles sur Google Cloud Platform
pour tester de nouvelles applications sans investir dans des équipements coûteux.

L'IaaS est le modèle Cloud « as a Service » le plus flexible et libre, il apporte aux utilisateurs tous les
avantages des ressources informatiques sur site, sans les actions et frais de gestion de l’infrastructure

En effet, il facilite la mise à l'échelle, la mise à niveau et permet d'ajouter des ressources, par exemple le
stockage dans le Cloud

Exemples de fournisseurs IaaS :

• Amazon Web Services (AWS)


• Microsoft Azure
• Google Cloud Platform (GCP)
• IBM Cloud
• Oracle Cloud Infrastructure

16
PaaS : Platform as a Service

• Le modèle de service Platform as a Service (PaaS) est similaire à


l'IaaS, mais avec une différence majeure : le fournisseur de services
cloud prend également en charge le système d'exploitation et les
environnements d'exécution nécessaires.

• Cela signifie que l'utilisateur n'a pas à se soucier de la gestion ou de


la maintenance de l'infrastructure sous-jacente, comme les serveurs,
les réseaux, les systèmes d'exploitation ou le stockage.

• Toutefois, l'utilisateur conserve le contrôle sur le déploiement et la


configuration des applications. Ces applications peuvent être
développées à l'aide de langages de programmation, de
bibliothèques, de services et d'outils que le fournisseur met à
disposition.
• Ce modèle est idéal pour les développeurs souhaitant se concentrer
sur la création d'applications sans se préoccuper de l'administration
des systèmes ou des mises à jour de l'infrastructure.

Exemple :
• Développer une application en utilisant Google App Engine ou
Heroku, où le développeur se concentre uniquement sur le code.

17
• Idéalement destiné aux développeurs et aux programmeurs, le PaaS fournit une plateforme simple et
évolutive permettant aux utilisateurs d’exécuter et gérer leurs propres applications, sans avoir à créer ni
entretenir l'infrastructure ou la plateforme généralement associée au processus
 Environnement de développement simplifié.
 Gestion automatique de l'infrastructure.
 Réduction des tâches d'administration.

Exemples de fournisseurs PaaS :

18
SaaS : Software as a Service

• Le SaaS (ou services d'applications Cloud, est le type le plus complet


qui utilise le plus des services sur le marché du Cloud

• Pour ce type de service le fournisseur fournit et gère une application


complète accessible par les utilisateurs via un navigateur Web ou un
client lourd

• Ainsi, l’utilisateur ne contrôle pas la plateforme Cloud sous jacente et


il n'a pas à s'inquiéter des mises à jour logicielles ou l'application des
correctifs et les autres tâches de maintenance logicielle

Exemple :
• Google Workspace: Fournit des applications comme Gmail, Google
Drive, Google Docs, et Google Meet, accessibles via un navigateur.
• Microsoft 365 : Offre des outils comme Word, Excel, et Teams,
accessibles depuis le cloud

19
SaaS : Software as a Service

Le SaaS constitue une option intéressante pour les PME qui n'ont pas les ressources humaines pour gérer
l'installation et le suivi de l’installation des mises à jour de sécurité et logiciels.

Par ailleurs, il est à noter que le modèle SaaS réduit le niveau de contrôle et peut nuire à la sécurité et
aux performances
=> Il convient donc de choisir soigneusement votre fournisseur Cloud

Exemples de fournisseurs SaaS :

20
Chapitre 2: Définir l’approche cloud native

1. Définition

Cloud Native : le Cloud Native décrit une approche de développement


logiciel dans laquelle les applications sont dès le début conçues pour une
utilisation sur le Cloud.

Il en résulte des applications Cloud Native (NCA) capables de


pleinement exploiter les atouts de l’architecture du Cloud Computing.

Les applications cloud natives sont construites pour fonctionner de


manière optimale dans un environnement cloud, en utilisant des
architectures modernes telles que les microservices et les conteneurs.

21
Fonctionnement

L’approche Cloud Native repose sur quatre piliers qui sont liés.

• Microservices: Les applications sont découpées en petites unités indépendantes appelées


microservices, chaque service ayant une responsabilité spécifique. Ces services communiquent entre
eux via des API légères (par exemple REST).

• Les conteneurs : (comme Docker) permettent d’emballer une application avec toutes ses dépendances
dans un format portable. Ils garantissent que l'application fonctionne de manière cohérente dans tous
les environnements (développement, test, production).

• DevOps: La culture DevOps intègre les équipes de développement et d’exploitation pour accélérer les
livraisons et améliorer la qualité des logiciels.

• Continuous Delivery (CD) : Les processus de Continuous Delivery permettent l’automatisation des
étapes de build, test, et déploiement. Cela garantit une livraison fréquente et rapide des nouvelles
fonctionnalités sans interruption de service.

22
2. Avantages

Flexibilité: Chaque service fonctionne indépendamment des autres et de l'environnement.


Les développeurs peuvent modifier ou mettre à jour une partie du code sans impacter le
reste de l'application.

Évolutivité: Les applications peuvent facilement s'adapter à une augmentation de la


demande sans nécessiter des mises à niveau coûteuses du matériel.

Réduction des erreurs grâce à l’automatisation: L'automatisation consiste à utiliser des


outils et des processus pour exécuter automatiquement des tâches répétitives ou complexes,
sans intervention humaine

23
• Netflix, Uber et WeChat exposent des systèmes natifs Cloud qui se composent de nombreux services
indépendants. Ce style architectural leur permet de répondre rapidement aux conditions du marché.
Elles mettent instantanément à jour de petites zones d’une application complexe en service, sans
redéploiement complet. Elles mettent à l’échelle individuellement les services en fonction des besoins.

24
3. Vue générale sur les caractéristiques du cloud natif

L'approche Cloud Native repose sur une combinaison de microservices, conteneurs et livraison continue .
Cela permet de créer des applications flexibles, scalables et résilientes tout en facilitant leur déploiement et
gestion à travers la culture DevOps. Ces pratiques assurent une réactivité et une efficacité accrues dans un
environnement cloud dynamique

25
Automatisation des processus du développement et de déploiement:

• Comme l’approche DevOps, le Cloud Native cherche à rassembler les équipes Dev et Ops autour d’un
objectif commun long terme : celui de la création de valeur business par les applications.

• L’approche DevOps permet de converger vers une approche Cloud Native avec l’automatisation des
processus et des technologies entre les équipes, de façon à intégrer plus rapidement les innovations
dans les cycles de développement et de déploiement d’une application Cloud Native.

• En parallèle du Cloud Native, l’adoption des méthodes Agiles va permettre d’intégrer les équipes
métier dans cette collaboration avec les équipes techniques et de développement. L’idée est de
collaborer pour délivrer une itération en améliorant le produit à chaque livraison de façon continue.

26
Les microservices

• Les microservices désignent à la fois une architecture et une approche de développement logiciel qui
consiste à décomposer les applications en éléments les plus simples, indépendants les uns des autres.
Contrairement à une approche monolithique classique, selon laquelle tous les composants forment une
entité indissociable, les microservices fonctionnent en synergie pour accomplir les mêmes tâches, tout
en étant séparés.

• Pour communiquer entre eux, les microservices d'une application utilisent le modèle de
communication requête-réponse. L'implémentation typique utilise des appels API REST basés sur le
protocole HTTP. Les procédures internes (appels de fonctions) facilitent la communication entre les
composants de l'application.

27
Les Conteneurs

• Tout comme le secteur du transport utilise des conteneurs pour


isoler les différentes marchandises à transporter à bord des
navires, des trains, des camions et des avions, le développement
logiciel a de plus en plus recours au concept de
conteneurisation.

• Un package logiciel unique, appelé « conteneur », regroupe le


code d’une application avec les fichiers de configuration, les
bibliothèques et les dépendances requises pour que l’application
puisse s’exécuter. Ceci permet aux développeurs et aux
professionnels de l’informatique de déployer les applications de
façon transparente dans tous les environnements.

28
Partie 2: Création des APIs REST simple en
node js et express js

 Introduire Express et Node js


 Créer des APIs REST
 Authentifier et autoriser une API REST avec JWT

29
Chapitre 1:Introduire Express et Node js

1. Rappel du concept des APIs REST

Une API (Interface de Programmation d'Application) est un outil qui permet à deux systèmes
informatiques différents de communiquer automatiquement, sans intervention humaine.

Elle agit comme un pont, facilitant l'échange d'informations entre un fournisseur (qui donne les
données) et un utilisateur (qui les utilise). On peut la voir comme un contrat précisant ce que
l'utilisateur demande (appel) et ce que le fournisseur répond (réponse).

30
Avantages des APIs

 Simplicité d'interaction : Les APIs permettent d'interagir avec un système sans avoir à
comprendre sa complexité ou son fonctionnement interne. Par exemple, tu peux afficher une
carte Google Maps sur ton site web sans savoir comment Google construit ses cartes.

 Spécialisation et simplicité d'utilisation : Chaque API est souvent conçue pour un cas d'usage
précis, ce qui la rend facile à comprendre, à utiliser et à sécuriser. Par exemple, une API météo
te permet d'afficher uniquement la température et les prévisions pour une ville donnée.

 Partage de données : Les APIs facilitent le partage sécurisé de vos données avec vos clients et
d'autres utilisateurs externes. Par exemple, une banque utilise une API pour permettre à ses
clients de consulter leur solde via une application mobile ou un site tiers, tout en garantissant la
sécurité des données partagées.

31
l'API REST ?

• Roy Fielding a créé REST (Representational State Transfer), un style architectural très utilisé pour
développer des services web.

• API REST permet à différents systèmes informatiques de communiquer entre eux via le protocole
HTTP de manière simple et efficace.

• API REST expose un ensemble d'URLs (endpoints) représentant différentes ressources, ainsi que
des méthodes HTTP standard comme GET, POST, PUT, DELETE pour effectuer des opérations sur
ces ressources. Par exemple, en utilisant une API REST, vous pouvez envoyer une requête HTTP
GET à une URL spécifique pour récupérer des données, ou une requête POST pour créer de
nouvelles données sur le serveur.

• Les données renvoyées peuvent être en JSON, XML, ou HTML.

• Exemple: Une requête GET sur https://api.exemple.com/utilisateurs pourrait renvoyer la liste des
utilisateurs au format JSON.

32
Comment fonctionne une API REST?

• REST détermine comment organiser et structurer les URLs (endpoints) pour représenter des
ressources.

• Chaque URL est connue sous le nom de demande (request), tandis que les données renvoyées sont
appelées réponse (response).

• Une API REST exploite les méthodes HTTP pour effectuer différentes actions sur les ressources

33
2. Rappel des méthodes du protocole http

HTTP (Hypertext Transfer Protocol) est créé pour fournir la communication entre les clients et le
serveur. Il fonctionne en tant qu’une requête et une réponse. Il existe deux méthodes HTTP
principalement utilisées: GET et POST

La méthode GET

La méthode GET de HTTP demande des données d’une source spécifiée. Les demandes GET peuvent
être mises en cache et rester dans l'historique du navigateur. Il ne doit jamais être utilisé lorsque vous
travaillez sur des données sensibles.
La méthode POST

La méthode POST envoie les données à traiter à une source spécifiée. Contrairement à la méthode
GET, les requêtes POST ne sont jamais paramétrées, elles ne restent pas dans l'historique du navigateur
et il est plus sécurisé pour des données sensibles.

34
Comparaison des méthodes GET et POST

GET POST
But principal Récupérer des données. Envoyer des données pour traitement.
Les paramètres sont visibles dans Les paramètres sont dans le corps de la
Visibilité dans l'URL
l'URL. requête.
Reste dans l’historique de Ne reste pas dans l’historique de
Historique
navigateur. navigateur.

Cacheable Oui, peut être mis en cache. Non, n'est pas mis en cache.

Le POST est un peu plus sûr que GET car


Il est moins sécurisé que le POST
il ne reste pas dans l’historique du
Sécurité car les données envoyées font partie
navigateur ni dans les journaux du serveur
de l'URL.
Web.

35
Outre les méthodes GET et POST, il existe d'autres méthodes.

Méthodes Descriptions
PUT Remplacer ou modifier une ressource existante

DELETE Supprimer une ressource spécifique.

PATCH Modifier partiellement une ressource existante.

Similaire à GET, mais elle ne récupère que les en-têtes HTTP de la


HEAD
réponse, sans le corps.

Permet de demander au serveur quelles sont les méthodes HTTP autorisées


OPTIONS
pour une ressource spécifiée.

36
3. Définition de l’écosystème Node JS

 Au cours de ses 20 premières années, JavaScript a été utilisé principalement pour les scripts côté client.
Étant donné que JavaScript ne pouvait être utilisé qu’à l’intérieur de la balise <script>, les développeurs
devaient travailler dans plusieurs langages et frameworks entre les composants frontend et backend. Plus
tard est apparu Node.js, qui est un environnement d’exécution comprenant tout ce qui est nécessaire pour
exécuter un programme écrit en JavaScript.

 Node.js est un environnement pour développer et déployer des applications web à base du Javascript.

 Node.js est un environnement d’exécution single-thread, open-source et multi-plateforme permettant de


créer des applications rapides et évolutives côté serveur.

 Il fonctionne avec le moteur d’exécution JavaScript V8 et utilise une architecture d’E / S non bloquante et
pilotée par les événements, ce qui le rend efficace et adapté aux applications en temps réel.

37
• Environnement d'exécution single-thread :

Lorsque l'on dit que Node.js est single-thread, cela signifie qu'il utilise un seul thread (fil d'exécution)
pour traiter les requêtes et exécuter le code. Contrairement à certains environnements d'exécution,
comme les serveurs traditionnels qui utilisent un modèle multi-thread pour gérer les connexions,
Node.js utilise un seul thread pour gérer toutes les opérations.

• Open-source et multi-plateforme :

Node.js est open-source, ce qui signifie que son code source est disponible publiquement et que toute
personne peut contribuer à son développement et l'améliorer.
Il est également multi-plateforme, ce qui signifie qu'il peut fonctionner sur différentes plates-formes
matérielles et logicielles, telles que Windows, macOS et Linux.

• Applications rapides et évolutives côté serveur:

Node.js est utilisé pour développer des applications côté serveur, ce qui signifie qu'il gère les requêtes
provenant des clients (comme les navigateurs web) et fournit des réponses appropriées..

38
• Moteur d'exécution JavaScript V8 :

V8 est le moteur d'exécution JavaScript développé par Google et utilisé par Node.js pour exécuter du code
JavaScript. Il convertit le code JavaScript en code machine exécutable par l'ordinateur.

• Architecture d'E/S non bloquante et pilotée par les événements :

L'E/S (Entrée/Sortie) se réfère aux opérations de lecture et d'écriture de données depuis ou vers un
périphérique, tel qu'un disque dur ou un réseau. Dans Node.js, ces opérations sont gérées de manière non
bloquante, ce qui signifie que le thread principal peut continuer à exécuter d'autres tâches pendant que les
opérations d'E/S sont en cours.
De plus, Node.js utilise une architecture pilotée par les événements, où les opérations sont déclenchées par
des événements, tels que les requêtes HTTP entrantes. Cette approche permet à Node.js de réagir
rapidement aux événements et de traiter de multiples requêtes simultanément sans bloquer le thread
principal.

39
• Node.js utilise l’architecture « Single Threaded Event Loop » pour gérer plusieurs clients
en même temps.( c-a-d dans ce modèle, il y a un seul thread (le thread principal) qui gère
toutes les requêtes entrantes et les événements, et le serveur utilise une boucle
d'événements (Event Loop) pour traiter les requêtes de manière asynchrone et non
bloquante.

40
Caractéristiques de Node.js

Node.js a connu une croissance rapide au cours des dernières années. Cela est dû à la vaste liste de
fonctionnalités qu’il offre :

 Facile : Node.js est assez facile à prendre en main.


 Évolutif : Il offre une grande évolutivité aux applications. Node.js, étant single-thread, est capable
de gérer un grand nombre de connexions simultanées avec un débit élevé
 Vitesse : L’exécution non bloquante des threads rend Node.js encore plus rapide et plus efficace.
 Paquets : Un vaste ensemble de paquets Node.js open source est disponible et peut simplifier votre
travail. Aujourd’hui, il y a plus d’un million de paquets dans l’écosystème NPM.
 Backend solide : Node.js est écrit en C et C++, ce qui le rend rapide.
 Multi-plateforme : La prise en charge multi-plateforme vous permet de créer des sites web SaaS,
des applications de bureau et même des applications mobiles, le tout en utilisant Node.js.
 Maintenable – Node.js est un choix facile pour les développeurs, car le frontend et le backend
peuvent être gérés avec JavaScript comme un seul langage

41
Quelques entreprises des plus populaires qui utilisent Node.js aujourd’hui :
 Twitter, Spotify , eBay, LinkedIn

Applications de Node.js

Node.js est utilisé pour une grande variété d’applications. Explorons quelques cas d’utilisation
populaires où Node.js est un bon choix :

 Applications Web en Temps Réel


Exemples : Chat en direct, collaborations en ligne, jeux multijoueurs.

 Applications de Streaming
Exemples : Services de streaming vidéo ou audio (comme Netflix ou Spotify).

 Plateformes de Commerce Électronique


Exemples : Sites de vente en ligne, systèmes de paiement.

 Applications de Big Data


Exemples : Analyse de données en temps réel.

42
Qu’est-ce qu’Express.js ?

Express.js, parfois aussi appelé « Express », est un framework backend Node.js minimaliste et rapide
qui offre des fonctionnalités et des outils robustes pour développer des applications backend
évolutives. Il vous offre le système de routage et des fonctionnalités simplifiées pour étendre le
framework en développant des composants et des parties plus puissants en fonction des cas
d’utilisation de votre application.

43
4. Configuration de l’environnement de développement

Installation de Node.js

Tout d’abord, nous devons télécharger le fichier Windows Installer (.msi) depuis le site officiel de Node.js.

Ce fichier d’installation MSI contient une collection de fichiers d’installation essentiels pour installer,
mettre à jour ou modifier la version existante de Node.js.

Le programme d’installation contient également le gestionnaire de paquets Node.js (npm). Cela signifie
que vous n’avez pas besoin d’installer npm séparément.

Visiter le site officiel : https://nodejs.org/en/

44
Installation de Node.js

Commencer le processus d’installation: Une fois que vous avez ouvert et exécuté le fichier.msi, le
processus d’installation commence.

Node.js vous offre des options pour installer des outils pour les modules natifs. Si vous êtes intéressé par
ces derniers, cliquez sur la case à cocher pour marquer vos préférences, ou cliquez sur Suivant pour
continuer avec la valeur par défaut :

45
Installation de Node.js

Le système terminera l’installation en quelques secondes ou minutes et vous montrera un


message de réussite. Cliquez sur le bouton Terminer pour fermer le programme d’installation de
Node.js.

46
Installation de Node.js

Vérifier l’installation de Node.js

Pour vérifier l’installation et confirmer que la bonne version a été installée, ouvrez l’invite de commande
votre PC et saisissez la commande suivante :

node –v

Avec Node, le gestionnaire de paquet NPM sera automatiquement installé

npm –v

npm permet de gérer vos dépendances et de lancer vos scripts

47
Généralement vous aurez besoin des commandes suivantes :

 npm install : installe le projet sur votre machine.


 npm start : démarre le projet.
 npm test : lance les tests du projet.
 npm run dev : lancer un environnement de développement.

48
Etape 1 : Création du fichier package.json

1- Commencer par créer un nouveau répertoire qui sera le nom du projet


2- Taper la commande npm init
3- Créer un fichier index.js

A la fin de cette étape, nous aurons Un fichier package.json contant les paramètres du projet ainsi
que les dépendances future.

49
Etape 2 : Installation du serveur Express

Pour installer le framework Express dans le projet, il faut exécuter la commande suivante :

npm install Express


Cette commande a pour but de télécharger depuis NPM remote repository la librairie Express ainsi que
l’ensemble des librairies dont Express a besoin pour fonctionner dans votre répertoire de travail, dans le
répertoire node_modules.

50
Pourquoi est ce qu’on a besoin d’ajouter la dépendance dans package.json?

Le fichier package.json répertorie toutes les dépendances (bibliothèques) utilisées dans le projet, ainsi que
leurs versions spécifiques. Cela permet à d'autres développeurs de savoir quelles dépendances sont
nécessaires pour faire fonctionner l'application. Aussi, en spécifiant les dépendances dans package.json,
vous assurez la répétabilité de l'environnement de développement. Cela signifie qu'un autre développeur
(ou vous-même sur un autre système) peut installer exactement les mêmes versions des dépendances, ce
qui garantit un comportement cohérent de l'application.

51
Etape 3 : Lancement du serveur Express

=> Dans cette étape, la librairie est installée dans notre


projet, l’étape suivante consiste à appeler Express dans
le fichier index.js (Une fois que le module Express est
importé, vous pouvez créer une nouvelle instance
d'application en appelant simplement la fonction
express(), en créant une nouvelle instance d'une
application Express et l'assigne à la variable app. Cette
instance représente votre application et sera utilisée pour
configurer les routes, les middleware, et écouter les
requêtes HTTP).

Pour cela on va utiliser l’éditeur Visual Studio Code


=>L’étape suivante consiste à lancer le serveur et le
mettre à l’écoute sur un port donné. Ajoutons le bout de
code suivant:

Pour lancer le Serveur, taper sur


Un terminal la Commande :
node index.js
52
5. L’essentiel du Node js

En Node.js, un module est simplement un fichier JavaScript contenant des fonctions, des objets ou des
variables que vous souhaitez partager entre plusieurs fichiers. Les modules vous permettent de
modulariser votre code, de le rendre plus facile à comprendre et de le réutiliser facilement.

Les fichiers de module sont fondamentaux pour organiser et structurer une application Node.js en
modules réutilisables et autonomes.

Pour créer un module en Node.js, voici les étapes à suivre :


Etape 1 : Créer un fichier JavaScript : Vous devez créer un fichier JavaScript contenant le code que
vous souhaitez exporter en tant que module. Par exemple, si vous souhaitez créer un module pour
calculer la somme de deux nombres, vous pouvez créer un fichier nommé "sum.js".
Etape 2: Définir les fonctions, les objets ou les variables que vous souhaitez exporter : Dans votre
fichier JavaScript, définissez les fonctions, les objets ou les variables que vous souhaitez exporter en
utilisant la syntaxe module.exports. Par exemple, voici un exemple de module qui exporte une fonction
de somme :

53
Etape 3: Importer le module : Pour utiliser le module dans un autre fichier JavaScript, vous devez
l'importer en utilisant la syntaxe require. Par exemple, pour utiliser le module "sum.js" que nous avons
créé ci-dessus, vous pouvez l'importer dans un autre fichier JavaScript en écrivant :

Dans cet exemple, nous avons importé le module "sum.js" à l'aide de l'instruction require en passant le
chemin relatif vers le fichier "sum.js". Nous avons ensuite utilisé la fonction sum exportée par le module
pour calculer la somme de deux nombres.

En résumé, pour créer un module en Node.js, vous devez définir les fonctions, les objets ou les variables
que vous souhaitez exporter dans un fichier JavaScript, utiliser la syntaxe module.exports pour exporter
le code, puis importer le module dans d'autres fichiers JavaScript à l'aide de l'instruction require.

54
Depuis l'arrivée de la norme ES6 du langage, une nouvelle directive est apparue : il s'agit de la directive
"import". Cette directive apporte de nouveaux avantages mais nécessite que le module que vous importiez
la prenne en charge.

La directive "require" indique à JavaScript d'importer la totalité du module demandée. Si le module en


question est lourd, cela peut allonger le délai d'affichage d'une page. La directive "import" permet de
n'importer qu'une partie spécifique d'un module. On gagne ainsi en légèreté et en rapidité de traitement.
De plus, la directive import peut être utilisée de manière asynchrone. On peut continuer à exécuter du
code ou à effectuer d'autres imports en parallèle de votre import initial. Ce n'est pas le cas de "require",
qui fonctionne de manière synchrone et doit attendre la fin de l'import précédent avant de s'exécuter.

55
Dans NodeJS, il peut y avoir une confusion entre les deux directives. Par exemple, pour la plateforme
Express JS, on trouve sur internet des morceaux de code avec les deux directives.

// Import avec require


const express = require("express");
//Import avec import
import express from "express";

Pourtant, la plateforme Express ne gère pas la directive "import". Si vous essayez cette directive sans
avoir installé d'autres modules, vous obtiendrez le message d'erreur "express has no default export". La
raison pour laquelle la directive "import" va fonctionner dans certains codes est la présence d'une autre
librairie, Babel.

Utilisation de Babel :

Babel est un transcompilateur JavaScript qui permet de convertir du code écrit dans des versions plus
récentes de JavaScript (comme ES6/ES2015 et au-delà) en code JavaScript compatible avec des
environnements plus anciens ou des environnements qui ne prennent pas encore en charge ces
fonctionnalités.

L'une des fonctionnalités de Babel est la capacité à transformer automatiquement les instructions
"import" en instructions "require" lorsque vous utilisez ES6 dans votre code et que vous exécutez votre
application Node.js.

56
Les bibliothèques standard Node.js : Voici la liste des bibliothèques contenues dans Node.js
considérées comme stables:

 assert : pour faire des tests.


 console : utilisée pour afficher des messages dans la console..
 debugger : Pour ajouter des points d'arrêt et exécuter le code pas à pas....
 dns : les noms de domaines.
 event : tout sur la gestion des événements.
 fs : tout sur le système de fichiers.
 global : Accéder à des variables globales.
 http : Pour créer des serveurs HTTP et des clients HTTP.
 path : gestion des chemins sur un système de fichier.

57
Suite des bibliothèques standards Node.js

 os : gestion du système: dossiers temporaires, noms d'hôtes, ...


 timers : fournit des fonctionnalités pour la gestion du temps.
 tls : pour la création de serveurs et de clients TLS/SSL sécurisés.
 dgram : pour communiquer avec d'autres applications via le protocole UDP
 zlib : compression et lecture des formats gzip.

Pour plus d’informations on peut visiter le site de la documentation officielle


https://nodejs.org/api/

58
Chapitre 2: Créer des APIs REST

1. API REST exposant des opérations CRUD sur un fichier Json

Etape 1 : Présentation de notre source de données

Etant donné que nous n’avons aucune route configuré, sur le navigateur, si on tape 127.0.0.1:80: on aura
le message d’erreur suivant:

Une fois que le serveur est lancé, on pourra développer nos API Rest, deux étapes sont nécessaires :

1- Les ressources (fichiers json, bases de données Mongodb ou mysql….)


2- Les routes : (les chemins pour récupérer , ajouter, modifier et supprimer les données disponibles
dans nos ressources)

59
Etape 1 : Présentation de notre source de données

Nous allons considérer un fichier equipes.json contenant un ensemble d’équipes de foot. L’objectifs
de cette section est d’exposer les opérations CRUD(Create, Remove, Update,Display) sur cette
source de données

Ainsi les routes que nous allons considérer sont les suivantes:

 GET /equipes(display)
 GET /equipes/:id (display)
 POST /equipes(create)
 PUT /equipes/:id (update)
 DELETE /equipes/:id (remove)

60
2. Test de l’API REST avec Postman

Notre source de données est le fichier equipes.json


contenant des Équipes.
Chaque équipe dispose des champs id, name, country
=>Placer ce fichier dans la racine de votre projet. Afin de
tester nos api rest, nous allons installer l’outil Postman

61
Postman, c'est quoi ?

Postman est officiellement présentée comme une plateforme API pour la création et l’utilisation d’API.
D’une manière générale, Postman est une plateforme qui permet de simplifier chaque étape du cycle de
vie des API et de rationaliser la collaboration, afin de créer, plus facilement et plus rapidement, de
meilleures API.

Pourquoi utiliser Postman ?

La plupart des utilisateurs de Postman recourent à cette plateforme pour la construction et la


formulation de requêtes, afin de tester des API sans avoir à renseigner de code. Parmi les nombreux
points forts de Postman, on relève :

 la possibilité d’utiliser la plateforme, quel que soit le langage utilisé pour la programmation des API
 une interface utilisateur assez simple et facile à prendre en main
 l’absence de compétences nécessaires en codage.

62
Comment marche Postman ?

Le fonctionnement de Postman se résume le plus souvent à formuler une requête en suivant la structure
spécifique (Verbe http + URI + Version http + Headers + Body) puis à obtenir une réponse.

Le code de réponse HTTP délivré par la plateforme informe ensuite le développeur du statut de la
réponse : "200 OK" pour une requête réussie, "404 Not Found" pour un échec, etc.

Comment télécharger Postman ?

Postman est compatible avec les différents systèmes d’exploitation (Linux, Windows et OS X). Pour
télécharger Postman, il suffit de se rendre sur le site internet officiel de la plateforme.

https://www.postman.com/downloads/

63
Etape 1 : Présentation de notre source de données

Etant donné que nous n’avons aucune route configuré, sur le navigateur, si on tape 127.0.0.1:80: on aura
le message d’erreur suivant:

Une fois que le serveur est lancé, on pourra développer nos API Rest, deux étapes sont nécessaires :

1- Les ressources (fichiers json, bases de données Mongodb ou mysql….)


2- Les routes : (les chemins pour récupérer , ajouter, modifier et supprimer les données disponibles
dans nos ressources)

64
Etape 2 : Route GET /equipes : Ajoutons le bout de code suivant:

Le framework Express Nous propose des méthode get, post, put delete pour manipuler les
données
 faites ctrl + c : pour Annuler le serveur puis relancer node index.js
65
Etape 2 : Route GET / equips

Avec POSTMAN, on va créer une collection pour nos 4 requetes

66
Etape 2 : Route GET / equipes

Afin de récupérer les données, ajoutons la ligne de code


suivante

Nous avons remplacé la méthode send par la


méthode json En effet notre API REST va retourner
un fichier JSON au client Et non pas du texte ou un
fichier html Nous avons également Ajouté le code de
status http ‘statut 200’ qui correspond au code
réponse http Indiquant au client que sa requête s’est
terminée avec succès

67
Etape 2 : Route GET / equipes/:id

La requête suivante est aussi une requête GET avec un paramètre «id»

68
Rappel des Middlewares :

Les middlewares sont des fonctions qui s'exécutent lors de la requête au serveur. Ces fonctions ont accès aux
paramètres de la requête et de la réponse et peuvent donc effectuer beaucoup de choses pour
améliorer/automatiser les fonctionnalités de l'API
Le middleware se situe entre la requête et la réponse : user request -> midlleware -> response

Exemple

Lors d'une requête POST, les données envoyées par le client (comme des données de formulaire ou en
JSON) sont incluses dans le corps (body) de la requête HTTP. Cependant, Node.js ne permet pas d'y accéder
directement. Pour cela, on utilise un middleware.

Ce middleware agit comme un intermédiaire entre l'arrivée de la requête sur le serveur et son traitement par
les routes. Il lit le corps de la requête, extrait les données, et les rend accessibles pour le reste de
l'application. Ainsi, nos routes peuvent facilement utiliser les données envoyées dans la requête POST.

69
La méthode app.use(express.json()) est une méthode d'Express.js qui permet de définir un middleware pour
l'analyse des corps de requête entrants au format JSON.

Route POST /equipes/

Au niveau POSTMAN, il faut envoyer un objet JSON

70
Route PUT / equipes /:id

Pour la requête PUT on doit spécifier comme paramètre l’id de l’objet à modifier

71
Route PUT / equipes /:id

On peut vérifier que la liste a été mis à jour

72
Route DELETE / equipes /:id

Enfin, la requête Delete permettant de supprimer un objet de la liste

73
Exercice

Considérer la ressource joueurs.json


Chaque joueur dispose des champs(id, idEquipe, nom, numero, poste)

1-Développer les opérations crud pour l’entité joueur(4 requetes)


2-Développer la route permettant d’afficher les joueurs d’une équipe via son id(de l’équipe).
3-Développer la route permettant de chercher un joueur a partir de son nom

74
Rappel Mongodb :

Comme nous l’avons vu dans le module gestion de données , MongoDB est une base de
données NoSQL orientée document. Elle se distingue des bases de données relationnelles par
sa flexibilité et ses performances.

Contrairement à une base de données relationnelle SQL traditionnelle, MongoDB ne repose


pas sur des tableaux et des colonnes. Les données sont stockées sous forme de collections et de
documents.

Les documents sont des paires de valeurs / clés servant d’unité de données de base. Les
collections quant à elles contiennent des ensembles de documents et de fonctions. Elles sont
l’équivalent des tableaux dans les bases de données relationnelles classiques

75
 Créer une base de donnée et une Collection
 Nom de la base : bdmonapi
 Nom de la collection (équivalent à table) : equipe

76
Importation du fichier equipe.json: Au niveau collection, on peut importer la ressource et
charger notre data

77
Installation du package mongo dans notre projet

Exécuter la requête suivante : npm install mongodb

78
Connexion à la base de données noSql MongoDB

Pour lancer le serveur


node index.js

79
Récupération de la liste des équipes depuis la collection equipe

80
Récupération d’une équipe depuis la collection equipe

81
4. Opérations CRUD

Ajouter une équipe à la collection equipe

82
Supprimer une équipe depuis la collection equipe

83
Modifier une équipes depuis la collection equipe

84
CHAPITRE 3 Authentifier une API REST avec JWT

1. Définition de Json Web Token (JWT)

Les « JSON Web Token » ou JWT sont des jetons générés par un serveur lors de l’authentification d’un
utilisateur sur une application Web, et qui sont ensuite transmis au client.
Ils seront renvoyés avec chaque requête HTTP au serveur, ce qui lui permettra d’identifier l’utilisateur.
Pour ce faire, les informations contenues dans le jeton sont signées à l’aide d’une clé privée détenue par le
serveur. Quand il recevra à nouveau le jeton, le serveur n’aura qu’à comparer la signature envoyée par le
client et celle qu’il aura générée avec sa propre clé privée et à comparer les résultats. Si les signatures sont
identiques, le jeton est valide.

85
Structure d’un jeton JWT

Un jeton JWT se compose de cette façon :


 Une partie “Header”, contenant l’algorithme utilisé pour la signature ainsi que le type de
jeton (dans notre cas toujours “JWT »), en JSON encodé en Base64
 Une partie “Payload” contenant les informations du jeton, comme par exemple le nom de
l’utilisateur, la date d’émission du jeton ou sa date d’expiration le tout en JSON encodé en
Base64
 Une partie “Signature”, qui correspond à la concaténation des parties “Header” et
“Payload” chiffrée avec la clé privée.

86
Voici un exemple de jeton JWT :

Dans cette deuxième partie, il est possible d’inscrire beaucoup


d’informations, comme le nom d’utilisateur ou ses droits par
exemple. Cependant le standard spécifie certains mots clés
comme iat (issued at : date et heure d’émission du jeton sous
forme de timestamp) ou exp (expiration du jeton)

87
2. Création d’un API d’authentification

Dans les chapitres suivants, nous implémenterons l'authentification par e-mail et mot de passe pour
notre API. Cela implique de stocker des mots de passe utilisateur dans notre base de données. Ce que
nous ne voulons certainement pas faire est de les stocker sous la forme de texte brut : quiconque
accéderait à notre base de données verrait la liste complète des informations de connexion de tous les
utilisateurs. À la place, nous stockerons le mot de passe de chaque utilisateur sous la forme d'un hash ou
d'une chaîne chiffrée.

88
Nous utiliserons le package de chiffrement bcrypt pour sécuriser les mots de passe des utilisateurs. Il
transforme les mots de passe en une forme cryptée appelée hash et les stocke dans la base de données.
Lorsqu'un utilisateur se connecte, nous comparons le hash de son mot de passe avec celui stocké.
Cela rend difficile pour les pirates de deviner les mots de passe car les hashs ne sont pas les mêmes
que les mots de passe d'origine. Bcrypt nous aide à stocker et vérifier les mots de passe de manière
sécurisée.

89
Les tokens d'authentification permettent aux utilisateurs de se connecter une seule fois à leur compte. Au
moment de se connecter, ils recevront leur token et le renverront automatiquement à chaque requête par
la suite. Ceci permettra au back-end de vérifier que la requête est authentifiée.

Pour pouvoir créer et vérifier les tokens d'authentification, il nous faudra un nouveau package

npm install jsonwebtoken

Et pour l’importer nous utiliserons la syntaxe :

const jwt = require('jsonwebtoken');

Enfin, nous l'utiliserons dans notre fonction login par exemple :

90
91
92
3. Middleware d’authentification

Le middleware est une fonction qui a accès au nécessaire, réponse objet et nouvelle fonction
dans le cycle demande-réponse. La fonction suivante est invoquée lorsque l'exécution de la
fonction est terminée. Comme je l'ai mentionné ci-dessus, utilisez next() lorsque vous devez
exécuter une autre fonction de rappel ou une fonction middleware.

Créez maintenant un dossier nommé middleware, et à l'intérieur, créez le nom du fichier comme
auth.js et écrivez le code suivant.

Fichier auth.js (voir page suivante)

93
94
PARTIE 3: CRÉER DES MICROSERVICES

• S’initier aux architectures microservices


• Créer une application microservices

95
CHAPITRE 1: S’initier aux architectures microservices

1. Différence entre l’architecture monolithique et l’architecture des microservices

Une application monolithique est une application qui est développée en un seul bloc (war, jar
…), avec une même technologie et déployée dans un serveur d’application. Les difficultés
qu’on peut rencontrer avec l’architecture monolithique :
• Complication du déploiement : tout changement dans n’importe quelle module de
l’application nécessite le redéploiement de toute l’application

• Difficulté à maintenir et à évoluer : Dans une application monolithique, toutes les


fonctionnalités sont regroupées dans un seul code source. Cela peut rendre la maintenance
et l'évolution de l'application plus difficiles à mesure que celle-ci devient plus complexe.
Les modifications apportées à une partie de l'application peuvent avoir des incidences
imprévues sur d'autres parties de l'application, ce qui rend le processus de développement
et de déploiement plus délicat.

 Ces deux difficultés principales ont donné naissance à l’architecture microservices

96
Architecture microservice:

Alors qu’une application monolithique est une seule unité unifiée, une architecture microservices la
décompose en un ensemble de petites unités indépendantes.

Ces unités exécutent chaque processus d’application comme un service distinct. Ainsi, tous les services
possèdent leur propre logique et leur propre base de données et exécutent les fonctions spécifiques.

97
Exemple :

Prenons l’exemple d’un site de vente en ligne des produits: l’application est composée de plusieurs
modules, à savoir : client, produit et facture.

Pour une application monolithique, ces modules seront déployés dans un seul serveur. Et, pour une
architecture microservices, chacun de ces modules constituera un service à part avec sa propre base de
données. Ces services peuvent être déployés dans des infrastructures différents (sur site, en cloud …)

Ainsi, un dysfonctionnement du service « facture », par exemple, n’arrêtera pas le fonctionnement de


l’ensemble du système.

98
2. Concepts de base

Principe :

L'architecture Microservices propose une solution en principe simple : découper une application en
petits services, appelés Microservices, parfaitement autonomes, qui exposent une API que les autres
microservices pourront consommer.

Cette application affiche par exemple un produit à vendre. Cette fiche produit est donc constituée par
exemple d'une photo, d'un descriptif et d'un prix. Dans le schéma, l'interface utilisateur fait appel à un
microservice pour chaque composant à renseigner. Ainsi, celle-ci peut faire une requête REST au
microservice A, qui s'occupe de la gestion des photos des produits, afin d'obtenir celles correspondant au
produit à afficher. De même, les microservices B et C s'occupent respectivement des descriptifs et des prix
99
•Microservice A (gestion des photos) : Ce microservice est chargé de gérer les photos associées aux
produits. Lorsque l'interface utilisateur a besoin d'afficher une photo pour un produit spécifique, elle peut
faire une requête REST à ce microservice pour obtenir les images correspondantes.
•Microservice B (gestion des descriptifs) : Ce microservice est responsable de la gestion des descriptifs
des produits. Lorsque l'interface utilisateur doit afficher le descriptif d'un produit, elle peut interroger ce
microservice pour récupérer les informations nécessaires.
•Microservice C (gestion des prix) : Ce microservice gère les prix des produits. Lorsque l'interface
utilisateur doit afficher le prix d'un produit, elle peut faire appel à ce microservice pour obtenir les données
de tarification.

100
Agilité technologique :

• le choix des technologies est généralement très flexible


et dépend en grande partie des besoins spécifiques de
chaque microservice, ainsi que des compétences et des
préférences de l'équipe de développement.

• Chaque microservice est parfaitement autonome : il a sa


propre base de données, son propre serveur d'application
(Apache, Tomcat, Jetty, etc.), ses propres librairies …

La plupart du temps, ces microservices sont chacun dans un


container Docker, ils sont donc totalement indépendants y
compris vis-à-vis de la machine sur laquelle ils tournent.
L’utilisation de conteneurs, permettra ainsi un déploiement
continue et rapide des microservices.

Voici un exemple simplifié d’une architecture microservice :

101
Le ‘Time to market’(Le délai entre la naissance d’une idée et son lancement au marché)

• Les microservices peuvent être mis à jour, étendus et déployés indépendamment les uns des autres et
par conséquent, beaucoup plus rapidement
• L’indépendance fonctionnelle et technique des microservices permet l’autonomie de l’équipe en
charge sur l’ensemble des phases du cycle de vie (développement, tests, déploiement, et
exploitation), et favorise par conséquent l’agilité et la réactivité

102
Déploiement ciblé :

• Evolution d’une certaine partie sans tout redéployer: Avec les microservices, il est possible de
faire évoluer une partie spécifique de l'application sans avoir à redéployer l'ensemble du système.
Puisque chaque microservice est indépendant, les mises à jour et les modifications peuvent être
effectuées de manière ciblée, ce qui réduit les risques d'impact sur les autres parties de l'application.

• Un seul livrable à partir d’un seul code source: Chaque microservice est généralement développé
à partir d'un seul code source, ce qui simplifie le processus de livraison. Les équipes peuvent
travailler sur leur microservice de manière isolée et publier des versions indépendantes sans avoir
besoin de coordonner avec d'autres équipes.

103
Mise à l'échelle (Scalabilité up/down) :

Selon le trafic du système, on peut ajouter des instances d’un microservice ou en détruire. Prenons
l’exemple de l’événement «Black Friday » de Amazon :
• Les services produits et commandes, par exemple, seront sollicités plus que les services de
notifications et évaluation.

• Scalabilité up (mise à l'échelle vers le haut) : Pour les microservices tels que la gestion des
produits et des commandes, qui sont plus sollicités pendant le "Black Friday", on peut augmenter le
nombre d'instances de ces microservices pour répondre à la demande accrue. Cela permet de
répartir la charge sur un plus grand nombre de serveurs, ce qui améliore les performances et la
capacité de traitement.
• Scalabilité down (mise à l'échelle vers le bas) : Une fois que l'événement "Black Friday" est
terminé et que le trafic sur le site diminue, on peut réduire le nombre d'instances de ces
microservices pour éviter de gaspiller des ressources informatiques. En supprimant les instances
inutilisées, on libère des ressources et on réduit les coûts d'exploitation.

104
Inconvénient de l’architecture microservices :

Le principal inconvénient des microservices est la complexité de tout système distribué.

Communication complexe entre les services : La gestion des communications entre les services peut
devenir complexe, car chaque service est indépendant et doit être coordonné pour répondre aux
demandes.

Plus de services signifie plus de ressources : Chaque microservice nécessite ses propres ressources, y
compris des bases de données et des gestionnaires de transactions. Gérer plusieurs bases de données
peut être fastidieux et coûteux en termes de ressources.

Tests globaux difficiles : Tester une application basée sur des microservices peut être plus complexe
que dans une approche monolithique. Il faut s'assurer que tous les microservices fonctionnent
correctement ensemble, ce qui peut nécessiter des tests d'intégration et de bout en bout plus élaborés.

Ne s'applique pas à tous les systèmes : L'architecture de microservices n'est pas adaptée à tous les
systèmes. Par exemple, si un système est relativement simple et ne nécessite pas une évolutivité et une
flexibilité élevées, une approche monolithique peut être plus appropriée.

105
Qui utilisent les microservices ?

106
3. Architecture

Communication entre services: On distingue trois types de modes de communication entre services:
• Appel synchrone point à point
• Diffusion de messages asynchrones point à point
• Diffusion d’événements

107
Types de communication entre services: Appel synchrone point à point

• Un service appelle un autre service et attend une réponse


 Ce type de communication est utilisé lorsqu'un service émetteur a besoin de la réponse pour
continuer son processus

108
Types de communication entre services: Appel asynchrone point à point

• Un service appelle un autre service et continue son processus


• Le service émetteur n’attend pas de réponse: Fire and forget

 Ce type de communication est utilisé lorsqu’un service désire envoyer un message à un autre service

Implémentation:
Pour exploiter ce type de communication, on emploie un protocole de transport de messages (AMQP)

109
Types de communication entre services: Diffusion d’événements

• Quand un service désire envoyer une notification aux autres services


• il n’a aucune idée des services écoutant cet événement (listen)
• Il n’attend pas de réponse: Fire and forget

 Ce type de communication est utilisé quand un service veut notifier tout le système par un
évènement

110
Intermédiaire entre client et microservices:

Une API Gateway est un composant central dans les architectures modernes de microservices et les
environnements cloud. Elle agit comme un point d'entrée unique pour toutes les demandes provenant
des clients vers les différents microservices qui composent le système.

• Couche intermédiaire : Les passerelles API agissent comme une couche intermédiaire entre les
microservices et les applications clientes qui ont besoin d'accéder à ces microservices. Elles
fournissent un point d'entrée unique pour l'ensemble du système, facilitant ainsi la communication
entre les clients et les microservices.

111
• Exposition des points de terminaison : Les API gateways n'exposent que les points de
terminaison nécessaires aux clients. Elles cachent la complexité des microservices en offrant une
interface simple et unifiée pour accéder aux fonctionnalités du système.

• Sécurité et gestion des autorisations : Les passerelles API jouent également un rôle important
dans la sécurité et la gestion des autorisations. Elles peuvent authentifier les utilisateurs, autoriser
l'accès aux microservices en fonction des rôles et des permissions, ainsi que protéger l'ensemble du
système contre les attaques potentielles.

112
4. Exemples

113
114
115
116
117
118
119
120
121
CHAPITRE 2: Créer des microservices

1. Microservice versus API REST

Qu’est ce qu’un API?

• API signifie Application Programming Interface est un ensemble de règles, protocoles


et outils qui permettent à différents logiciels ou applications de communiquer entre
eux.
• C'est une interface qui permet à deux applications de communiquer;
• Ils sont considérés comme des portes qui permettent aux développeurs d'interagir
avec une application;
• Effectuer des requêtes sur un composant : Les API permettent aux développeurs
d'envoyer des requêtes (demandes) à un composant logiciel spécifique (tel qu'un
serveur web, une base de données, etc.) et de recevoir des réponses en retour. Cela
permet aux développeurs de construire des applications complexes en utilisant des
composants prêts à l'emploi sans avoir à réinventer la roue à chaque fois.

Exemples:

Par exemple, une application de covoiturage peut utiliser une API de paiement en transmettant les
informations de la carte de paiement du client à l'API. Le code derrière l'API peut déduire le
paiement de la carte en toute sécurité et renvoyer une réponse de réussite ou d'échec à l'application
de covoiturage. 122
123
2. Création d’une application en microservices avec Node js

Raisons de créer des microservices avec NodeJS

Parmi tous les langages de programmation utilisés dans le développement d’applications de


microservices, NodeJS est largement utilisé par une grande communauté des développeurs
pour ses caractéristiques et les avantages qu’il apporte.

Voici quelques raisons pour lesquelles les microservices avec Node.JS sont le meilleur
choix :

- Il améliore le temps d’exécution puisque NodeJS s’exécute sur le moteur V8 de Google,


compile la fonction en code machine natif et effectue également des opérations CPU et
IO à faible latence.
- L’architecture événementielle de NodeJS le rend très utile pour développer des
applications événementielles.
- Les bibliothèques NodeJS prennent en charge les appels non bloquants qui continuent
de fonctionner sans attendre le retour de l’appel précédent.

124
Exemple de microservices créés en Node js (Communication synchrone):

• Soit une simple partie d’application e-commerce gérant les produits et leurs commandes;
• L’application sera décomposée, dans un premier temps, en deux miscroservices : produit et
commande;
• Chaque service aura sa propre base de données sous MongoDB
• Les deux services seront considérés comme deux applications séparées, chacune expose son
API et écoute sur son propre port;

125
126
127
128
129
130
Produit-service

localhost:4000/produit/ajouter

131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
Le code de cet exemple est disponible sous le répertoire: https://gitlab.com/asmae.youala/exp-microservice

148

Vous aimerez peut-être aussi