Architectures Microservices
Architectures Microservices
Microservices
Client
Navigateur
Web
HTTP SQL
Serveur NoSQL BDD
Application SOAP
Mobile REST
Service
Web
Architecture 3 tiers
Les protocoles et normes associés aux services web permettent de décrire les services, les
messages échangés, les interfaces, et les opérations supportées.
WSDL
XML JSON
(Web Services
(Extensible Markup (JavaScript Object
Description
Language) Notation)
Language)
Le WSDL (Web Services Description Language)
WSDL
(Web Services
Description
Language)
Langage de description de
service qui permet de
décrire les opérations du
service, les types de
données échangés, et les
protocoles de
communication utilisés.
Le WSDL (Web Services Description Language)
WSDL
(Web Services
Description
Language)
Langage de description de
service qui permet de
décrire les opérations du
service, les types de
données échangés, et les
protocoles de
communication utilisés.
Le XML (Extensible Markup Language)
XML
(Extensible Markup
Language)
JSON
(JavaScript Object
Notation)
Service Web
HTTP (GET,POST..)
SOAP
Fonctions Internet
API
Ensemble de fonctions exposées
WSDL
XML
JSON
Encapsulation
Différence entre REST et SOAP
REST SOAP
(REpresentational State Transfer) (Simple Object Access Protocol)
Atomicité
Cohérence
Isolement
Durabilité
Il existe plusieurs modèles de développement de services web, chacun avec ses propres
caractéristiques, avantages et inconvénients.
Service Web
HTTP (GET,POST..)
Fonctions SOAP
Ensemble de fonctions exposées
“getWeather” Client
“getLength” Le client appelle une
fonction exposée par le
serveur et attend une
réponse.
Le modèle RPC
Remote Procedure Call
Notions de service, d’interface, de message et de
transport
Service Web
HTTP (GET,POST..)
Fonctions SOAP
Ensemble de fonctions exposées
“getWeather” Client
Le serveur traite la
demande et renvoie la “getLength”
réponse à l’appelant
Le modèle RPC
Remote Procedure Call
Notions de service, d’interface, de message et de
transport
Ce modèle est similaire à l’appel de méthode locale, mais la fonction est exécutée sur le serveur
distant. Le modèle RPC est souvent utilisé avec le protocole SOAP.
Service Web
HTTP (GET,POST..)
Fonctions SOAP
Ensemble de fonctions exposées
“getWeather” Client
“getLength”
Le serveur renvoie la
réponse
Le modèle RPC
Remote Procedure Call
Notions de service, d’interface, de message et de
transport
Service Web
HTTP (GET,POST..)
Fonctions RESTful
Ensemble de fonctions exposées
“getWeather” JSON Client
“getLength”
Le modèle documentaire
Le modèle RESTful
Ce modèle est basé sur les principes de l’architecture REST (Representational State Transfer). Le
client envoie des requêtes HTTP au serveur pour effectuer des opérations sur des ressources
(par exemple, un document XML ou une base de données). Le serveur renvoie une réponse
HTTP, généralement au format JSON. Le modèle RESTful est de plus en plus populaire en raison
de sa simplicité et de sa flexibilité.
Introduction à l’architecture web
Il existe plusieurs types d’architecture web, qui varient selon la manière dont les différents
éléments de l’application sont séparés et communiquent entre eux.
Il n’y a pas de type d’architecture web qui convient à tous les cas d’utilisation, et le choix de
l’architecture dépend de nombreux facteurs tels que la taille de l’application, les contraintes de
temps et de budget, les exigences en matière de performances et de disponibilité, etc.
Travail de groupe noté
Durée : 30 minutes
Application
User posts
User components
Utilisateur BDD
Groups
Photo Storage
Regrouper tous les éléments
de l’application dans un seul Live Streaming
et même codebase et à les
déployer ensemble.
Elle est souvent utilisée pour les applications de petite et moyenne taille, qui n’ont pas besoin de
scalabilité ou de flexibilité élevées.
Avantages Inconvénients
L’architecture microservices est une approche de développement d’application web qui consiste
à regrouper les éléments de l’application en plusieurs microservices indépendants, qui
communiquent entre eux pour réaliser les fonctionnalités de l’application. Cette approche est
souvent utilisée pour les applications de grande taille ou à forte croissance, qui ont besoin de
scalabilité et de flexibilité élevées.
Avantages de l’architecture microservices
Stockage
Réseau VM Container
Stockage
BDD Stockage
Avantages de l’architecture microservices
Stockage
Indépendance
Gère et déploie
Equipe Réseau Réseau
Gère et déploie
Equipe Infrastructure VM
Gère et déploie
Equipe Data BDD
Avantages de l’architecture microservices
VM Json Container
Indépendance Indépendance
Inconvénients de l’architecture microservices
Vue d’ensemble
Gestion de la
confuse
croissance difficile
Coûts élevés
Interactions
complexes Maintenance Gestion des
pannes et des
difficile erreurs
Exemples d’applications web microservices
L’architecture Serverless
Cours 2
Conception d’une
architecture web
Scalabilité Flexibilité
Disponibilité Coût
Sécurité
La modélisation des services web avec les
diagrammes de séquences et cas d’utilisation
La modélisation des services web peut être faite à l’aide de différents diagrammes, notamment
les diagrammes de séquence et de cas d’utilisation.
Le diagramme de séquence permet de modéliser les interactions entre les différents éléments
d’un système, en particulier les échanges de messages entre les services. Il permet de visualiser
l’ordre dans lequel les messages sont envoyés et reçus, ainsi que les conditions de
déclenchement de chaque message.
Requête HTTP
“GET /resource”
Client Service Web
Réponse HTTP
“200 OK”
Le diagramme de cas d’utilisation
Le diagramme de cas d’utilisation permet de modéliser les différentes actions que peuvent
réaliser les utilisateurs d’un système, ainsi que les rôles et les responsabilités de chaque acteur
impliqué. Il permet de visualiser les limites et les contraintes du système, ainsi que les
interactions avec d’autres systèmes ou services.
Client
Event Bus
API Gateway
Une API Gateway est une passerelle de communication qui sert de point d’entrée unique et
centralisé pour les différents services et composants de l’application. Elle permet de mettre en
place une interface de communication standardisée et normalisée, en gérant les routes, les
protocoles, les sécurités, les performances, etc. L’API Gateway s’appuie sur des technologies
comme les APIs REST, les WebHooks, les Events, etc. pour gérer les échanges de données et de
messages entre les différents acteurs de l’application.
Routes
API Protocoles Internet
Application Gateway Performances
Pourquoi utiliser une API Gateway ?
Simplification, sécurisation de
Gestion des routes et des
l’intégration et de l’interopérabilité
protocoles
des services
Interface
commune et
se
ut
normalisée
ro
es
nd
io
Gestion des
st
Ge
protocoles
Gestion de la
sécurité
Authentification
Autorisation..
Exemples d’utilisation d’une API Gateway
Microservice
1
Authentification Sécurité
Autorisation
API
Gateway
Microservice
Monitoring et suivi
3
des erreurs
Performance
Détection
Disponibilité
Exemples de logiciels d’API Gateway
Le load balancing est une technique utilisée pour répartir la charge de travail sur plusieurs
serveurs ou instances de traitement afin d’optimiser la performance et la disponibilité d’un
système. Il est souvent utilisé dans les environnements de production pour gérer les pics de
charge et assurer la continuité de service.
Load Balancing
Le modèle OSI
Load Balancing
Le load balancing peut être mis en place de différentes manières, comme en utilisant un
équilibreur de charge dédié ou en utilisant un logiciel de load balancing sur un serveur existant.
Il est également possible de configurer le load balancing en utilisant un service de cloud
computing, comme Amazon Elastic Load Balancing ou Google Cloud Load Balancer.
Le Load Balancer
Un load balancer (équilibreur de charge) est un composant ou un service qui permet de répartir
la charge de travail sur plusieurs serveurs ou instances de traitement afin d’optimiser la
performance et la disponibilité d’un système. Il est généralement utilisé dans les
environnements de production pour gérer les pics de charge et assurer la continuité de service.
Les technologies du Load Balancer
Un circuit breaker est un patron de conception qui permet de protéger une application contre
les pannes de sous-systèmes en désactivant temporairement les appels de service à ces
sous-systèmes qui échouent de manière répétée. On l’utilise généralement en parallèle d’un
Load Balancer pour améliorer les performances et la (haute) disponibilité.
Processus du circuit breaker
2. Si un nombre suffisamment élevé d’appels de service échouent de manière consécutive, le circuit breaker
passe en mode “ouvert” et bloque tous les appels de service futurs vers le sous-système en question.
3. Pendant que le circuit breaker est ouvert, il surveille en continu si les appels de service réussissent à
nouveau.
Dans une application de commerce en ligne, un circuit breaker peut être utilisé pour protéger
l’application contre les pannes du système de paiement. Si le système de paiement échoue de
manière répétée, le circuit breaker peut être activé pour bloquer temporairement les appels de
service vers ce système et empêcher l’application de se bloquer.
Exemples de circuit breaker
Maison Hypermarché
Mise en cache
20 minutes
Maison Hypermarché
Mise en cache
2 minutes
Maison Epicerie
Hypermarché
Exemples de mise en cache
Mise en cache
Recommandation
“Pourquoi en utilisant un VPN, vous pouvez accéder au catalogue Netflix
du monde entier ?”
Mise en cache
Il s’agit d’une couche de communication indépendante qui permet de découpler les différents
services et composants de l’application, de manière à ce qu’ils n’aient pas à se connaître ou à se
dépendre les uns des autres.
L’Event Bus
Event
Message
EVENT BUS
Event
Scalabilité
EVENT BUS
Flexibilité
Découplage
Vous pouvez utiliser un outil de diagramme de cas d’utilisation comme Lucidchart ou [Link] pour réaliser votre
modélisation. Voici quelques éléments à prendre en compte lors de la création de votre diagramme :
Prenez le cas d’une application de e-commerce qui permet de acheter en ligne des produits.
Identifiez les différents services nécessaires à l’application (par exemple : service de gestion des produits, service
de gestion des commandes, service de gestion des utilisateurs, etc.)
Utilisez des diagrammes de séquence et de cas d’utilisation pour modéliser les interactions entre ces services.
Choisissez un pattern d’architecture web qui convient à votre application (par exemple, API Gateway, Load
Balancer, Circuit Breaker, etc.) et justifiez votre choix.
Dessinez le diagramme de votre architecture en utilisant les outils vus en cours (par exemple, [Link]).
Dans une architecture web, il y a plusieurs acteurs qui jouent un rôle clé dans la communication
et l’interaction entre les différents éléments de l’application. Ces acteurs sont le client, le
serveur et le réseau.
Cours 3 : Implémentation
d’une architecture
Microservices
Conteneurisation
et Docker
● Introduction à la conteneurisation
● Présentation & utilisation de Docker
Qu’est ce qu’un conteneur ?
Conteneur
Introduction à la conteneurisation
Qu’est ce qu’un conteneur ?
Environnement isolé
Un conteneur est un environnement
logiciel qui permet de lancer et exécuter
des applications de manière isolée et
Application
autonome. Il encapsule les applications,
leurs dépendances et leur configuration
dans un environnement qui peut être
Conteneur facilement déplacé d’un système à un
Dépendances autre.
Fichier de configuration de
conteneur (Dockerfile)
Introduction à la conteneurisation
Qu’est ce qu’un conteneur ?
Virtualisation Conteneurisation
Machine Machine Machine
Virtuelle 1 Virtuelle 2 Virtuelle 3
Les conteneurs sont similaires aux
Application
Application
machines virtuelles, mais
Application
Application
Application
OS OS
Qu’est ce qu’un conteneur ?
Meilleure isolation
Automatisation des tâches
de déploiement
Conteneur
Meilleure scalabilité
Automatisation de la
scalabilité Meilleure sécurité
Les défis de l’environnement d’exécution des
applications
Serveurs
m ent physiques
ploie
Dé
?
Application Serveurs
physiques Serveurs
physiques
Machine
virtuelle
Les avantages de la conteneurisation
Environnement d'exécution 1
ment
p loie
Dé
Environnement d'exécution 2
Conteneur
Environnement d'exécution 3
Les avantages de la conteneurisation
Environnement d'exécution 1
Portabilité
ment
p loie
Dé
Environnement d'exécution 2
Conteneur
Portabilité
Environnement d'exécution 1
ment
p loie Isolation
Dé
Environnement d'exécution 2
Conteneur
Isolation
Les conteneurs isolent les applications
les unes des autres, ce qui permet de
Environnement d'exécution 3
gérer les différentes parties de
l’application de manière plus efficace.
Les avantages de la conteneurisation
Sécurité
Environnement d'exécution 1
ment
p loie Sécurité
Dé
Environnement d'exécution 2
Conteneur
Sécurité
Les conteneurs isolent les applications
les unes des autres, ce qui permet de
Environnement d'exécution 3
limiter les risques de sécurité.
Les avantages de la conteneurisation
Scalabilité
Conteneur
En résumé, la conteneurisation est une technique de “virtualisation légère” qui permet d’isoler
les applications et leurs dépendances dans des environnements autonomes appelés conteneurs.
Cela permet de garantir que l’application fonctionne de manière identique sur tous les
environnements, qu’il s’agisse d’un environnement de développement, de test ou de production.
Il offre des avantages tels que la portabilité, l’isolation, la scalabilité et la sécurité.
Il est souvent comparé aux machines virtuelles qui ont besoin de plus de ressources et peuvent
être plus lents à démarrer, tandis que les conteneurs sont plus légers et plus rapides, ils sont
donc plus adaptés pour les applications qui nécessitent une scalabilité et une flexibilité élevées.
Les concepts clés de la conteneurisation : images,
conteneurs, registres
La conteneurisation repose sur trois concepts clés : les images, les conteneurs et les registres.
Une image est un package qui contient une application et toutes ses dépendances, ainsi que les
instructions nécessaires pour créer un conteneur à partir de l’image.
Images
Les concepts clés de la conteneurisation : images,
conteneurs, registres
Un conteneur est une instance en cours d’exécution d’une image. Les conteneurs sont légers et
portables, et peuvent être déployés rapidement et facilement.
Conteneurs
Les concepts clés de la conteneurisation : images,
conteneurs, registres
Un registre est un dépôt centralisé pour stocker et distribuer des images Docker. Le registre public
de Docker, Docker Hub, contient des milliers d’images pré-construites que les développeurs
peuvent utiliser pour créer des conteneurs.
Registres
[Link]
Introduction à Docker
Solomon Hykes
Les composants de Docker
Les composants de Docker
Docker Host
Client Registry
Docker Daemon
Docker build Ubuntu
Ubuntu NGiNX
Docker run
Openstack
MySQL
Les composants de Docker
Docker Host
Client Registry
Docker Daemon
Docker build Ubuntu
Ubuntu NGiNX
Docker run
Openstack
MySQL
Le client Docker est la principale interface permettant de communiquer avec le système Docker. il reçoit les
commandes par la CLI et les transmets au Docker Daemon.
Les composants de Docker
Docker Host
Client Registry
Docker Daemon
Docker build Ubuntu
Ubuntu NGiNX
Docker run
Openstack
MySQL
Le Docker daemon traite les requêtes API afin de gérer les différents aspects de l’installation comme les images, les conteneurs ou les
volumes de stockage.
Les images Docker sont des modèles en lecture seule, utilisées pour créer des conteneurs Docker. Elles sont composées de plusieurs
couches empaquetant toutes les installations, dépendances, bibliothèques, processus et codes d’application nécessaires.
Les composants de Docker
Docker Host
Client Registry
Docker Daemon
Docker build Ubuntu
Ubuntu NGiNX
Docker run
Openstack
MySQL
Le registre Docker est un système de catalogage permettant l’hébergement et le “push and pull” des images Docker.
Vous pouvez utiliser votre propre registre local ou l’un des nombreux services hébergés par des tiers comme Amazon
ECR ou Google Container Registry.
Les composants de Docker
Docker Host
Client Registry
Docker Daemon
Docker build Ubuntu
Ubuntu NGiNX
Docker run
Openstack
MySQL
Les avantages de Docker
Docker offre plusieurs avantages par rapport aux méthodes de déploiement traditionnelles.
Tout d’abord, il permet de créer des conteneurs légers et portables qui peuvent être déployés
rapidement et facilement sur différentes plateformes. De plus, Docker permet d’isoler les
applications et leurs dépendances, ce qui facilite la gestion et le déploiement des applications.
Enfin, Docker offre une grande flexibilité et facilite le travail en équipe en permettant aux
développeurs de travailler sur des applications de manière indépendante et de partager leurs
images et leurs conteneurs avec d’autres développeurs.
Travailler avec des conteneurs Docker
Une fois que vous avez une compréhension de base de Docker, vous pouvez commencer à
travailler avec des conteneurs Docker. Cette section explique comment créer des images
Docker et exécuter des conteneurs.
Attention vous allez avoir besoin d’installer docker sur votre machine pour faire les commandes
de cette partie du cours.
Créer une image Docker
Pour créer une image Docker, vous devez écrire un Dockerfile, qui est un fichier texte qui
contient toutes les instructions pour créer une image.
FROM python:3.8-slim-buster
WORKDIR /app
COPY [Link]
RUN pip install - -no-cache-dir -r [Link]
COPY . .
CMD [“python”, “[Link]”]
Dockerfile
(.dockerfile)
Dockerfile crée une image qui exécute une application web Python
Créer une image Docker
Pour créer une image Docker, vous devez écrire un Dockerfile, qui est un fichier texte qui
contient toutes les instructions pour créer une image.
Une fois que vous avez écrit le Dockerfile, vous pouvez créer l’image avec la commande docker
build. Par exemple :
Cette commande crée une image avec le tag myimage:1.0 à partir du Dockerfile situé dans le
répertoire courant ( . ).
Exécuter un conteneur Docker
Une fois que vous avez créé une image Docker, vous pouvez l’exécuter en tant que conteneur
avec la commande docker run
Vous pouvez configurer l’environnement d’un conteneur Docker en utilisant les variables d’environnement ou les fichiers de
configuration. Par exemple, vous pouvez définir une variable d’environnement dans un Dockerfile :
ENV MY_VAR=myvalue
Vous pouvez également spécifier des variables d’environnement au moment de l’exécution du conteneur avec la commande
docker run. Par exemple :
Cette commande exécute un conteneur à partir de l’image myimage:1.0 et définit la variable d’environnement MY_VAR à
myvalue.
Travailler avec des volumes Docker
Volume externe
persistant
Fichiers de configuration
Volume externe
persistant
Cette commande monte un volume Docker “myvolume” dans le conteneur et le rend accessible
dans le répertoire /data.
Travailler avec des réseaux Docker
Les réseaux Docker permettent aux conteneurs de communiquer entre eux et avec le monde extérieur.
Vous pouvez créer des réseaux Docker pour isoler vos applications et les protéger contre les attaques.
Pour créer un réseau Docker, vous pouvez utiliser la commande docker network create. Par exemple :
Pour exécuter un conteneur Docker sur un réseau spécifique, vous pouvez utiliser l’option --network
avec la commande docker run. Par exemple :
Cette commande exécute un conteneur à partir de l’image myimage:1.0 sur le réseau mynetwork.
Limites et alternatives à Docker
Docker peut être plus difficile à mettre en place que d’autres technologies de virtualisation, en
particulier pour les utilisateurs débutants.
Les conteneurs Docker partagent le même noyau de système d’exploitation, ce qui peut créer
des problèmes de sécurité si le noyau est compromis.
Les conteneurs Docker peuvent être moins isolés que les machines virtuelles, ce qui peut causer
des problèmes de performance ou de sécurité dans certaines situations.
Playground & TP Docker
Pour la suite et les exercices de ce cours vous devez effectuer le cours docker 101 :
[Link]
Puis :
[Link]
TP noté Docker à rendre
Rendu attendu : PDF comprenant des captures d’écran et des textes explicatifs de ce que vous
avez réalisé.
L’intégration continue (CI) est une pratique de développement de logiciel qui consiste à intégrer
les modifications et les ajouts de code de manière régulière et automatisée dans le code source
principal du projet. L’objectif de l’intégration continue est de s’assurer que le code source est
stable et fonctionnel à tout moment, en détectant et en corrigeant les erreurs et les bugs de
manière précoce.
L’intégration Continue (CI)
Pour mettre en place une intégration continue, il est nécessaire de configurer un environnement
de développement et de déploiement automatisé, qui inclut des outils de build, de test et de
déploiement. Ces outils permettent de construire, de tester et de déployer le code source de
manière automatisée, en s’appuyant sur un système de contrôle de version (Git, SVN, etc.) et sur
un serveur d’intégration continue (Jenkins, Travis CI, etc.).
L’intégration Continue (CI)
L’intégration continue s’appuie sur une stratégie de développement en continu, qui consiste à
développer et à intégrer le code de manière continue et itérative, plutôt que de le faire de
manière séquentielle et ponctuelle. Cette stratégie permet de réduire les temps de
développement et de déploiement, de s’assurer de la qualité et de la stabilité du code, et de
faciliter la collaboration et la communication au sein de l’équipe de développement.
Outils de build
Les outils de build sont des logiciels qui permettent de compiler, d’assembler et de packager le
code source de l’application en vue de sa mise en production. Ils peuvent automatiser et
optimiser différentes tâches de build, comme la génération de fichiers binaires, la création de
fichiers de configuration, l’inclusion de dépendances, la minification de code, etc.
Les outils de test sont des logiciels qui permettent de vérifier et de valider le bon
fonctionnement et la qualité de l’application. Ils peuvent exécuter différents types de tests,
comme les tests unitaires, les tests d’intégration, les tests de performance, les tests de sécurité,
etc. Les résultats des tests sont généralement reportés dans des rapports, qui permettent de
suivre l’état de l’application et de détecter les éventuels problèmes.
Automatisation des tests et des déploiements
Scénario cyber 1
Scénario cyber 2
Environnement de Dev
Scénario cyber 3
Ready to
Build Test Deployment
Projet build
Automatisation des tests et des déploiements
DevOps DevSecOps
Scénario cyber 1
Scénario cyber 2
Environnement de Dev
Scénario cyber 3
Ready to
Build Test Deployment
Projet build
Tests d’acceptation
Les tests d’acceptation sont des tests qui vérifient que le système répond aux besoins et aux
attentes des utilisateurs ou des clients. Ils permettent de s’assurer que le système est facile à
utiliser, ergonomique et fonctionnel, et qu’il respecte les standards et les normes en vigueur. Les
tests d’acceptation sont souvent exécutés par les utilisateurs ou les clients finaux au cours de la
phase de déploiement, pour valider l’adéquation du système aux besoins et aux attentes de
l’organisation.
Tests de performance
Les tests de performance sont des tests qui mesurent les indicateurs de performance d’un
système, tels que sa vitesse, sa capacité de traitement, sa fiabilité, etc. Ils permettent de
s’assurer que le système est capable de gérer les charges de travail prévues et de répondre aux
exigences de performance définies.
Les tests de performance sont souvent exécutés par les testeurs ou les administrateurs système
au cours de la phase de déploiement, pour valider les performances du système en conditions
réelles.
Tests de sécurité
Les tests de sécurité sont des tests qui vérifient la sécurité d’un système, en détectant et en
corrigeant les failles et les vulnérabilités qui pourraient être exploitées par des attaquants. Ils
permettent de s’assurer que le système est protégé contre les menaces externes et internes, et
qu’il respecte les règles de sécurité en vigueur. Les tests de sécurité sont souvent exécutés par
des experts en sécurité ou des sociétés de testing spécialisées, pour valider la sécurité du
système avant son déploiement.
Etude de cas : Outils d’Intégration Continue
Outils CI/CD, GitLab CI, Travis CI, Jenkins, Bamboo
Groupe 2 : Bamboo
Groupe 1 : Jenkins
Groupe 5 : Sonarqube
Groupe 3 : Travis CI
Séance 4 : Déploiement
Continu (CD)
Déploiement Continu (CD)
Pour mettre en œuvre le déploiement continu, il est nécessaire de mettre en place une chaîne
d’intégration et de déploiement (CI/CD en anglais) qui permet de gérer de manière automatisée
et transparente les différentes étapes du processus de déploiement. La CI/CD peut être basée
sur des outils de build, de test et de déploiement tels que Jenkins, Travis CI, CircleCI, etc.
Dans ce scénario, chaque fois qu’un développeur valide un commit sur la branche de
développement, le processus de CI/CD déclenche automatiquement la compilation et les tests
de l’application, puis déploie le code sur un serveur de staging (environnement de
préproduction). Les tests de non-régression et les validations manuelles peuvent être effectuées
sur ce serveur avant de déclencher le déploiement sur le serveur de production.
Automatisation des tests et des déploiements
Environnement de Dev
Environnement de Staging (Pré-Prod) Environnement
de Prod
Tests de
non-regression
Ready to
Build Test Deployment
build
Déploiement sur un serveur de production
Environnement de Dev
Environnement
de Prod
Projet Projet
Ready to
Build Test Deployment
build
Déploiement continu sur le cloud
Projet Projet
Ready to
Build Test Deployment
build
Outils de déploiement
Les outils de déploiement sont des logiciels qui permettent de déployer l’application sur un ou
plusieurs serveurs de production. Ils peuvent automatiser et optimiser différentes tâches de
déploiement, comme le transfert de fichiers, la configuration de l’application, le redémarrage de
services, la mise à jour de la base de données, etc. Ils peuvent également gérer les différentes
versions de l’application et les rollbacks en cas de problème. Exemples d’outils de déploiement :
Jenkins, Github Action, Gitlab CI, ArgoCD …
Stratégies de déploiement (blue-green, canary..)
Déploiement progressif
Déploiement Blue-Green Déploiement Canary
(Rolling)
Les différentes techniques de déploiements
Déploiement blue-green
Instance de l’application
Load
Exécution parallèle
Balancer
Instance de l’application
Utilisation
Utilisateurs nominale
Instance “live”
Les différentes techniques de déploiements
Déploiement blue-green
Instance “live”
Utilisation
Utilisateurs nominale
Instance de l’application
Load
Exécution parallèle
Balancer
Instance de l’application
Le déploiement blue-green est souvent utilisé en conjonction avec des outils de gestion de
conteneurs pour automatiser les tâches de déploiement et de gestion des instances. Il est
également utilisé pour les déploiements sur des plateformes cloud, qui offrent des
fonctionnalités pour automatiser les tâches de déploiement, de scalabilité et de gestion des
instances.
Conteneur
Load
DNS
Balancer
Conteneur
Rolling-Upgrade
Le Rolling upgrade consiste à installer une nouvelle version de l’application d’une façon
séquentielle en procédant par une ou plusieurs instances. Ce mode assure la continuité de
service, car il ne traite qu’une partie de l’infrastructure à la fois.
Version 1
Rolling-Upgrade Version 2
Conteneur Conteneur
Conteneur Conteneur
Utilisateurs
Conteneur Conteneur
Conteneur Conteneur
Version 1
Rolling-Upgrade Version 2
Conteneur Conteneur
Conteneur Conteneur
Utilisateurs
Conteneur Conteneur
Conteneur Conteneur
Version 1
Rolling-Upgrade Version 2
Conteneur Conteneur
Conteneur Conteneur
Utilisateurs
Conteneur Conteneur
Conteneur Conteneur
Version 1
Rolling-Upgrade Version 2
Le Rolling Upgrade
Conteneur Conteneur est conseillé dans les
cas suivants :
Application qui
Conteneur Conteneur
supporte avoir deux
différentes versions
Utilisateurs accessibles en même
temps
Modifications
acceptées
e
Load
Ec
Balancer
Modifications
refusées
e
Load
ha
Balancer
Ec
Géré en Interne
Bien sélectionner
les “Canaris”
REX rapide
Les avantages du déploiement Canary
En mettant à disposition une partie des modifications auprès d’un petit échantillon
d’utilisateurs, il est plus facile d’avoir des retours d’expérience. Ce sont ces feedbacks qui
permettent d’améliorer le logiciel ou l’application en continu.
Les avantages du déploiement Canary
Si certains bugs sont identifiés en phase de test, les utilisateurs les subissant sont peu nombreux.
Ce qui permet de maintenir un excellent niveau de satisfaction.
En outre, les modifications sont plus facilement réversibles que si elles étaient diffusées à une
large partie des utilisateurs.
Dans tous les cas, le risque lié au déploiement est grandement réduit grâce au Canary Devops.
Les avantages du déploiement Canary
À ce titre, le déploiement Canary DevOps est particulièrement utile pour les entreprises qui ne
disposent pas de moyens financiers faramineux.
Les inconvénients de Canary Release
Malgré tous les bénéfices de Canary pour un déploiement DevOps, il convient d’avoir
conscience des faiblesses de cette méthode. En effet, même si les utilisateurs restreints peuvent
apporter leurs retours, il y a parfois des bugs qui passent à la trappe. Alors avant la mise en
production à l’ensemble de l’environnement, il est primordial de vérifier à nouveau d’éventuels
dysfonctionnements.
Ce qu’il faut retenir
Le déploiement Canary permet aux organisations de réduire les risques, d’accélérer la mise en
production, et tout ça, à moindre coût.
Cours
Monitoring et
logging de services
Web
Un cours de Yann Fornier
Thèmes abordés
Mise en place de monitoring et de logging pour suivre les performances et la disponibilité des
services web
Les différents outils et techniques utilisées pour le monitoring et le logging des services web
Introduction
Le monitoring et le logging sont des pratiques clés pour assurer la disponibilité, la performance
et la sécurité des services web.
Monitoring Logging
Définition du Monitoring
Le monitoring est la surveillance continue d’un système ou d’une application pour détecter les
anomalies et les problèmes potentiels.
Dashboard
Problèmes
Epuisement de
Ralentissements Erreurs
ressource
Définition du Logging
Logging
Le monitoring
Dashboard
Datadog
Les objets à monitorer
Bases de Services
Serveurs Web Charge réseau
données d’authentification
Disponibilité des
Nombre de connexions
applications IOPS Tokens
temps réel
Bande passante
Intégrité des données
Utilisation des utilisée
Sécurité
ressources
Tentatives d’accès non
Consommation de CPU autorisées
Consommation de RAM Erreurs de sécurité
connues
Utilisation du DD
Analyse des journaux
d’accès
Objectif du logging
Journalisation
Analyse Préventive
Forensic
Détecter un comportement inhabituel sur
un SI et remonter le comportement pour “Police scientifique” Étude des logs pour
voir si c’est un faux positif ou un trouver des traces des pirates qui ont
évènement de cybersécurité organisé une attaque
Dualité monitoring/logging
Monitoring Logging
Dashboard
Admin systèmes
Sécurité des outils de monitoring
Il est important de noter que la sécurité de ces outils de monitoring et de logging doit être prise en
considération pour éviter les fuites de données ou les accès non autorisés aux données collectées. Il est
donc essentiel de mettre en place les protocoles de sécurité adéquats et de suivre régulièrement les
politiques de sécurité.
Couche de sécurité
Dashboard
API
API
API
Logging et monitoring en python
Python dispose d’une bibliothèque de journalisation intégrée appelée logging, qui permet de
générer des messages de journalisation de manière simple et efficace. Il est également possible
d’utiliser des bibliothèques de monitoring telles que psutil pour récupérer des informations sur
les performances et les ressources système.
info total
warning used
error available
Journalisation de base
import logging
error
Monitoring de la mémoire utilisée
import psutil
warning
error
Monitoring de l’utilisation du processeur
import psutil
psutil (bibliothèque)
cpu_info = psutil.cpu_percent(interval=1)
cpu_percent
print(“CPU usage : ” , cpu_info)
Journalisation et monitoring combinés
import psutil
import logging
[Link]fig(level=[Link],
format = ‘%(asctime)s %(levelname)s %(message)s’)
[Link](“Application started”)
#Perform calculations
result = 0
for i in range (1, 101):
result += i
cpu_info = psutil.cpu_percent(interval = 1)
[Link](“CPU usage : %s”, cpu_info)
[Link](“Application finished”)
Journalisation et monitoring combinés
Il est important de noter que les exemples ci-dessus ne représentent qu’une petite partie des
fonctionnalités offertes par les bibliothèques de journalisation et de monitoring disponibles en
Python. Il est donc important de consulter la documentation de ces bibliothèques pour en savoir
plus sur les fonctionnalités.
Etude de cas : Les outils pour du monitoring et log
Etude de cas (30 minutes)
Groupe 1 Groupe 2
Grafana/Prometheus DataDog
Groupe 3 Groupe 4
PowerBI AWS CloudWatch
Grafana Tableaux de bord
interactifs
Dashboard personnalisé Grafana
Graphiques
Prometheus
InfluxDB
Ingestion temps réel
Graphite
Format de données
Open source
Analyse de tendances
Visualisation de données Alertes temps réel
Équipe Cybersécurité
Identification des problèmes de sécurité
temps réel
Équipe
Gestion de performance
Gestion des performances temps réel
Grafana et Prometheus
PromQL
Source 2 Prometheus (Prometheus Query Language)
Métriques
Indicateur de performance système
Ressources utilisées
Données d’application
Grafana et Prometheus
Ingestion de données (temps réel) Data Visualization
PromQL
Source 2 Prometheus (Prometheus Query Language)
Métriques
Indicateur de performance système
Ressources utilisées
Données d’application
Travaux pratiques : Création d’un dashboard
Grafana avec une source de donnée Prometheus
[Link]
Créer un Dashboard
Collecte de métriques
Analyse de logs
Tracing d’applications
Alerting
Intégration avec des services Cloud
API AWS
API Azure
API
Alertes pour des Utilisation de
Erreurs
valeurs limites ressources anormales
[Link]
Un dashboard PowerBI
PowerBI Modélisation de
données
PowerBI
Données
diverses
Création de
visualisations
Excel
Azure
Services
Microsoft
Génération de
Modèles statistiques
rapports
AWS Cloudwatch
Un dashboard CloudWatch
AWS CloudWatch
Cloud
Données
EC2
Données extérieures
extérieures S3
EC2
Autoscaling RDS
Données Données
extérieures extérieures
AWS CloudWatch
Cloud
Données
EC2
Données extérieures
extérieures S3
EC2
Autoscaling Pilotage automatisé RDS
Données Données
extérieures extérieures
L’écosystème du Cloud
Cloud
Réseaux définis par Cybersécurité dans le Gestion des Big Data & Analytics
logiciel (SDN) cloud conteneurs dans le Cloud
Quantic Cloud Gestion des coûts
IA/ML DevSecOps
Computing dans le Cloud
Plutôt que d’avoir des serveurs, des stockages et des applications physiquement
présents sur site, les utilisateurs accèdent à ces ressources via des connexions
Internet à partir de fournisseurs de services cloud.
Le Cloud Computing vous demande de considérer l’infrastructure physique comme une couche logicielle.
Le modèle classique informatique
Cloud Computing
Sur Site
Les utilisateurs
peuvent gérer ces
Dans le Cloud ressources de
manière flexible.
Exemple de IaaS
Les modèles de facturation des Cloud Providers
Facturé par Go
Infrastructure IT
Gagner sur le Coût Global de Possession (TCO en anglais : Total Cost of Ownership)
Qu’est ce que le TCO ?
Le TCO est une estimation financière qui permet de déterminer les coûts directs
et indirects d’une système.
On l’utilise également pour budgéter et construire les cas pratiques dans le cas
d’une migration dans le cloud.
Infrastructure IT
Hardware : Serveurs, châssis, Software : OS, Coût des installations
unités de distribution (PDU) , licences de
Coûts des serveurs top-of-rack (TOR) + virtualisation Espace Energie Refroidissement
maintenance + maintenance
Main d’oeuvre
“Administrer tout ce qu’il y a au dessus ..”
Informatique
Exemples de clients IaaS (AWS)
Les modèles de service dans le CC
Platform as a
Service
Ecouter de la musique
“Service basé sur le Cloud où, au lieu de télécharger un logiciel sur votre PC de bureau où
votre réseau professionnel peut exécuter et mettre à jour, vous accédez à une application
via un navigateur internet.”
Oracle Cloud
Présentation des acteurs du Cloud
Scalabilité
?
Automatisation du cycle de vie d’un conteneur
Les conteneurs sont devenus l'unité informatique standard pour les applications cloud natives.
Les fournisseurs de cloud proposent des instances de serveurs virtuels pour exécuter toutes
sortes de charges de travail informatiques et conviennent parfaitement aux charges de travail
basées sur des conteneurs. La seule exigence pour pouvoir exécuter des conteneurs est que le
serveur lui-même exécute un service de conteneurisation tel que Docker.
Le conteneur
Unité informatique standard
Cas d’utilisation de l’orchestration de conteneurs
Kubernetes offre une approche déclarative pour gérer les infrastructures de conteneurs,
rendant les systèmes plus robustes et flexibles à maintenir
Objets de Kubernetes
Les noeuds
Les pods
Les services
Les Noeuds de Kubernetes
Un Node est un serveur physique ou une VM du Cluster Kubernetes qui exécute des conteneurs.
Souvent, on ne gère pas les serveurs dans les Clouds publics, mais on doit gérer la taille du cluster,
les ressources allouées à chaque noeud et les interfaces réseaux.
Cluster
Worker Node
Ressources allouées
Master Node
Worker Node
Interfaces réseaux
Worker Node
Container Runtime
Worker Node
Kube Proxy
Kubelet
Worker Node
Container Runtime
Worker Node
Kube Proxy
Container Runtime Pod Pod Pod
Kubelet
Kube Proxy
Kubelet
Zoom sur le Worker Node
Worker Node
Container Runtime
Worker Node
Kube Proxy
Container Runtime Pod Pod Pod
Kubelet
Kube Proxy
Kubelet
Container Runtime
Worker Node
Kube Proxy
Container Runtime Pod Pod Pod
Kubelet
Kube Proxy
Kubelet
Worker Node
Container Runtime
Worker Node
Kube Proxy
Container Runtime Pod Pod Pod
Kubelet
Kube Proxy
Kubelet App
BDD
Entreprise gère :
Une application + une BDD
Kube Proxy
Container Runtime Pod Pod Pod
Kubelet
Kube Proxy
Kubelet
Volume
Interne
Kube Proxy
Kubelet
Kube
Scheduler
YAML
Kube Proxy
Kubelet
Architecture de Kubernetes
Worker Node
Stockage
Persistent
Container Runtime
Pod Pod
Master Node
Kube Proxy
Kubelet
Kube
Scheduler
YAML
Kube Proxy
Kubelet
Control Plane
Architecture de Kubernetes
Worker Node
Stockage
Persistent
Stocke les données de Container Runtime
configuration du cluster de
Pod Pod
manière distribuée
Master Node
Expose l’API Kubernetes etd etd etd
c’est l’interface principale
du système
Kube Proxy
Kubelet
Kube
Scheduler
YAML
Supervise l’état du cluster Kube Proxy
et s’assure que l’état actuel
correspond à l’état désiré Kubelet
Attribue des Pods à des noeuds spécifiques
Control Plane en fonctions des ressources disponibles
Les services sur Kubernetes
Les services fournissent une couche d’abstraction qui englobe un ensemble de pods et permet
un trafic extérieur par des services d’équilibrage de charge et de découverte. Dans un cluster
K8s, chaque service représente potentiellement une application accessible depuis l’exterieur et
exécutée dans plusieurs pods sur un ou plusieurs noeuds. Une adresse IP est attachée à ce
service, permettant d’équilibrer le trafic parmi tous les pods du service.
Entreprise gère :
Les services de Kubernetes Une application + une BDD
Worker Node
Container Runtime
Client 1
Entreprise gère :
Les services de Kubernetes Une application + une BDD
Client 1
TP : Installation et configuration d’un Cluster
Kubernetes en local via Minikube
Rendu : Rapport de TP au format PDF contenant des captures d’écran et des textes
d’explications concernant l’installation de Kubernetes.
Format : PDF comprenant l’architecture déployée, la présentation des outils, exemples de code utilisés
Le système attribue à cette entité les données d'identité pour une session d'accès (ces attributs
sont détenus par le système ou peuvent être fournis par l'entité lors du processus
d'authentification). À partir des éléments issus de ces deux processus, l'accès aux ressources du
système pourra être paramétré (contrôle d'accès).
Les types d’identifiants
Mot de passe
Empreintes digitales
Iris
Cartes à puce
Jetons
Méthodes d’authentification
Authentification
Authentification
Multifactorielle Biométrie
unique (SSO)
(MFA)
Concept de SSO (Single Sign-On)
Le concept de SSO, ou Single Sign-On (authentification unique en français), est une méthode
d'authentification qui permet à un utilisateur de se connecter une seule fois à un système et
d'accéder ensuite à plusieurs applications ou services sans avoir à se reconnecter à chaque fois.
L'idée principale derrière le SSO est de simplifier le processus d'authentification pour les
utilisateurs tout en renforçant la sécurité.
Concept de SSO (Single Sign-On)
Vérifie que
Le maintien de l’utilisateur est Compatibles avec le
sessions authentifié sinon le SSO
redirige vers le
serveur
La propagation Interfaçables avec
d’identité entre les Plug-in intégré dans
l’agent
applications (souvent chaque application
d’authentification
par création de jeton)
Comment fonctionne le SSO ?
Serveur applicatif
Agent
d’authentification
Ordinateur Application
OUI
Ordinateur Application
Ordinateur Application
Ordinateur Application
Ordinateur Application
Ordinateur Application
Serveur
d’authentification BDD
users
Comment fonctionne le SSO ?
Serveur applicatif
Agent
d’authentification
Ordinateur Application
Serveur
d’authentification BDD
users
Comment fonctionne le SSO ?
Serveur applicatif
Agent
d’authentification
Ordinateur Application
Serveur
d’authentification BDD
users
Comment fonctionne le SSO ?
Serveur applicatif
Application 1
Application 2
Application 5
Application 6
Authentification MultiFactorielle
Facteurs d’authentification
Quelque chose
Authenticator Biométrie
Mots de passe
Clé physique (empreinte digitale,
Clé informatique
Carte à puce rétine..)
Implémentation et bonnes pratiques de la MFA
Mettre en place des protocoles de sécurité pour protéger les communications internes et
externes, y compris le chiffrement des données en transit.
Entreprise
Chiffrement SSL/TLS
Chiffrement Data
In
Data Transit
At
Rest
Credentials
Client Serveur
Demande des ressources protégées
Entre un
Encode et envoie les informations Valide les
username et
d’identification informations
un password
Entre un
Encode et envoie les informations
username et
d’identification
un password
Requête d’autorisation
Resource Owner
Octroi d’autorisation
Requête d’autorisation
Serveur
Client d'autorisation
Renvoie un token d’accès
5. Invoque le service