Amazon a eu l'idée de mettre à la disposition du public son énorme infrastructure mondiale, dimensionnée pour les pics (Noël...) et sous-utilisée le reste du temps
Les entreprises souhaitent en finir avec les pannes informatiques.
Les entreprises ont besoin de baisser les coûts et d’utiliser au maximum l’investissement du très cher matériel informatique.
Le terme Cloud est devenu très englobant. Aujourd’hui il regroupe la fourniture d’un service, son mode d’accès et son infrastructure. Plusieurs organismes ont essayé de normaliser la définition du Cloud computing
National Institute of Standards and Technology
Cloud computing is a model for enabling ubiquitous, convenient, on-demand network access to a shared pool of configurable computing resources (e.g., networks, servers, storage, applications, and services) that can be rapidly provisioned and released with minimal management effort or service provider interaction. This cloud model is composed of five essential characteristics, three service models, and four deployment models.
C’est une application identifié, fournie à la demande pour un utilisateur, l’application et les données sont hébergées dans les Datacenters du fournisseur. En général elle est hautement configurable.
On peut intégrer les offres de sauvegarde en ligne dans cette catégorie (icloud / dropbox ...).
Cette fois ci, le fournisseur propose un support pour votre propre application. Un Paas est constitué d’outils permettant la compilation et/ou le déploiement de code source dans un langage défini. Ce code est ensuite instancié (ou pas) à la manière du Saas pour mettre à disposition l’application développée.
C’est la base du Cloud Computing, ici le fournisseur offre du CPU, de la RAM, du stockage, du réseau et éventuellement d’autres services d’infrastructures (FireWall, DNS, VPN …). Le client construit son architecture, ajoute des réseaux, des machines virtuelles, des volumes de stockages persistant… Il installe ensuite les systèmes d’exploitations qu’il désire, les applications qu’il souhaite et propose (ou non) ces services sur le réseau (internet ou autre). Le tout est facturé à la consommation.
Un nouveau modèle devient disponible, le Container As A Service
On peut étendre la notion de As A Service à d’autre types de services. Stockage, sécurité, base de données, Machine Learning/IA … Une évolution notable concerne l’évolution du Paas avec le service Lambda d’AWS ou encore Google Cloud Function. Avec ces Function As A Service, vous poussez le code d’une fonction dans le service et celle ci est exécutée, ne consommant que ce qui est nécessaire, puis elle est détruite.Pas de réservation de ressources, vous êtes facturés par tranche de 100ms d’exécution. On parle de Serverless Computing
Plusieurs niveaux
Exemple de l’envolée du Bitcoin : si la flambée du bitcoin démarrée en 2017 avait continuée , en 2020 le calcul de la blockchain aurait consommé toute l’énergie de la planète. Cette consommation s’est stabilisée et équivaut aujourd’hui à peu près à la consommation de la suisse.
GREEN IT
On identifie 6 différentes stratégies pour migrer une application legacy dans un environnement de Cloud.
Cette stratégie aussi appelée Lift and shift Consiste à déplacer l’application sans en changer le code
On adapte l’application pour que cela fonctionne mieux, par exemple en utilisant des bases de données managées. (Cloud Ready)
On réécrit l’application et son architecture en tirant profit des avantages du Cloud (Cloud Native).
On remplace par des solutions SaaS, cette méthode ne concerne bien entendu que des produits disponibles sur étagère (CRM, CMS simples, etc…)
Ces deux modèles sont un peu particulier, il s’agit soit de ne pas migrer l’application ou carrément de décommissionner celle ci, car la migration n’offre pas de plus-value.
Pour tirer parti des avantages du Cloud computing, il faut repenser la manière de développer des applications en les adaptant à l’environnement dans lequel elles vont s’exécuter. On parle d’application Cloud native. Les piliers d’une application Cloud native sont :
Beaucoup de notions sont mises en oeuvre lors de la création d’un application Cloud Native, voici quelques définitions :
Infra As Code, 12 factors , Stateless, API, webservices, Devops, Object Storage, NoSQL, Message Queue, CDN
1 : Base de code
Une base de code suivie avec un système de contrôle de version, plusieurs déploiements
2 : Dépendances
Déclarez explicitement et isolez les dépendances
3 : Configuration
Stockez la configuration dans l’environnement
4 : Services externes
Traitez les services externes comme des ressources attachées
5 : Assemblez, publiez, exécutez
Séparez strictement les étapes d’assemblage et d’exécution
6 : Processus
Exécutez l’application comme un ou plusieurs processus sans état
7 Associations de ports
Exportez les services via des associations de ports
8 Concurrence
Grossissez à l’aide du modèle de processus
9 Jetable
Maximisez la robustesse avec des démarrages rapides et des arrêts gracieux
10 Parité dev/prod
Gardez le développement, la validation et la production aussi proches que possible
11 Logs
Traitez les logs comme des flux d’évènements
12 Processus d’administration
Lancez les processus d’administration et de maintenance comme des one-off-processes
Les Service Web désigne plusieurs chose mais principalement un concept d’API exposé sur le WEB utilisant une technologie d’échange, le plus souvent en mode SOA (Architecture orienté service) où des fonctions sont exécutées à distance.
Les API RESTful sont grandement utilisé dans le monde des WebServices. (HTTP + CRUD)
Une API (Application Programming Interface) Permet de faire abstraction de l’élément sur lequel elle se pose. Elle décrit comment le consommateur peut utiliser les fonctions du fournisseur. Dans le Cloud il est primordial que le maximum d’échanges se fassent au travers d’API pour garantir l’interopérabilité.
Se dit d’une application ou d’un service qui ne conserve pas en interne d’état d’une connexion d’un client entre 2 appels au service. Cela permet de faire traiter la demande par des machines différentes à chaque requête. C’est une des notions primordiale du développement d’application Cloud-Native
C’est la faculté qu’un système a de s’interfacer avec un autre sans le connaître. Interopérabilité est primordiale dans un environnement hétérogène. Ceci est notamment faisable grâce à la description complète des interfaces de ce système et à l’utilisation de format d’échanges normés ou standardisés.
Un SI multi-tenant désigne une infrastructure qui partage ses ressources entre plusieurs clients. Chaque client ne doit pas avoir conscience que les autres existent.
l’Infrastructure As Code désigne les technique permettant de définir une infrastructure par du code informatique (script, conf…). La mise en place de cette infrastructure est alors totalement automatisable et ré-instanciable à la demande. Ceci est possible lorsque tous les éléments de l’infrastructure ont été virtualisés.
Le stockage Objet permet une abstraction du stockage physique, les informations sont stockée sous forme d’Objet pouvant contenir n’importe quelle donnée, des métadonnées et accessible sans index (c’est un algorithme qui calcul à quel endroit se situe la donnée dans le cluster) via une API (S3 d’AWS par exemple). Le cluster est composé d’éléments simples, peu coûteux, facilement extensible, avec une gestion logicielle.
NoSQL regroupe un ensemble de type de SGBD, souvent adapté à des gros volumes ou à des traitements rapides, et par nature facilement scalables et résilients.
ex : MongoDB, Redis, Cassandra
Les architectures Cloud utilisent beaucoup la programmation par évènement et donc des agents de message (Message Broker) pour orchestrer ces messages, c’est le rôle d’une Message Queue
Ex: ActiveMQ, RabbitMQ, Kafka
ServerLess désigne les services proposé en mode Cloud qui ne comprennent pas la livraison d’une machine pour réaliser l’opération, l’appel au service génère une mise à disposition de ressource en fonction de la charge nécessaire à l’exécution de la demande et la libère instantanément.
L’autonomic Computing désigne la capacité de ces systèmes de pouvoir se réparer eux même. Ils intègrent de la surveillance et de la détection d’anomalie.
12 Factors désigne les règles pour concevoir des applications Cloud Natives. Ces applications ainsi développées s’intégreront parfaitement dans les univers Cloud en profitant au maximum des avantages de ce type d’hébergement.
Un système réparti est un SI dans lequel l’information et l’exécution est distribuée sur un ensemble de nœuds constituant un Cluster. Cet ensemble peut être hétérogène et doit être scalable.
la HA désigne la capacité d’un système à survivre à la perte d’un élément de son infrastructure. Ceci en permettant l’utilisation d’une autre ressource de façon transparente pour l’utilisateur. On élimine ainsi les SPOF (Single Point Of Failure). Un Load-balancer permet la HA des services Web par exemple.
Content Delivery Network désigne un réseau synchronisé de serveurs permettant la diffusion de données au plus près de l’utilisateur (géographiquement parlant) afin de limiter l’effet de latence. Le CDN permet aussi de fournir un système de cache très efficace et proche de l’utilisateur.
l’Open source qui consiste à ouvrir le code source d’une application à tous, est omniprésent dans les différents niveaux du Cloud computing. Même les plus grands fournisseurs utilisent des logiciels Open source, ils en sont souvent les principaux contributeurs.
Devops désigne un courant de pensée informatique visant à éliminer le conflit entre les Développeurs qui souhaitent faire évoluer un SI et les Opérationnels qui souhaitent avoir un SI le plus Stable possible.
Il est née de l’utilisation de bout en bout des méthodes Agiles
Devops est très à la mode, c’est une méthodologie très adaptée aux startups, l’évolution des outils mis à disposition permet de faire des pipeline de bout en bout sans connaissance de la complexité sous-jacente.
Mais on commence à voir les travers:
Kubernetes est une solution open-source de gestion de conteneur développé par Google. Kubernetes à permis le passage en production des applications basées sur des conteneurs en apportant la fiabilité et la sécurité nécessaire à ce passage. Les outils (API) fournis par Kubernetes permettent un fonctionnement optimal des applications cloud natives.
Par sa conception Kubernetes est facilement modifiable pour s’adapter aux besoins les plus divers.
Le Cloud et l’IoT sont très liés et ces deux éléments sont en très forte croissance. Cisco estime qu’en 2021, un habitant consommera à lui seul 200Gb de donnée par jour sur l’internet. 90% de ce trafic passera par le Cloud public et atteindra 3.3Zo (ZetaOctets), principalement pour la diffusion video
Traffic mondial des Datacenter :
Docker est en fait un ensemble d’outils de conteneurisation applicative.
Scénario type :
docker build
docker push
docker run
wget -O prime.c https://cedricici.github.io/cours-cloud/public/prime.c
sudo apt update && sudo apt install build-essential
gcc prime.c -o prime
time ./prime 10000
Calcul des 10000 premiers nombres premiers
real 0m1.573s
user 0m1.572s
sys 0m0.000s
FROM debian:latest
ADD ./prime /prime
CMD [ /prime 0 ]
docker build -t prime .
time docker run -ti prime /prime 10000
Calcul des 10000 premiers nombres premiers
real 0m2.246s
user 0m0.012s
sys 0m0.004s
sudo apt install qemu-system-arm
Calcul des 10000 premiers nombres premiers
real 0m36.174s
user 0m36.130s
sys 0m0.010s
Question : Donnez vos premières conclusions sur ces résultats
Question : expliquez les différences entre les durées real, user et sys
Question : pourquoi le temps user dans Docker est-il si petit? est-ce normal?
Question : Donnez une solution pour obtenir le temps user effectif dans le conteneur
Objectif : déployer une application Saas
Connectez vous sur le site Wordpress.com. c’est un service de SaaS basé sur le CMS(Content Managment System) Open source Wordpress, disponible sur le site wordpress.org
Instanciez vous même le CMS Wordpress
Question : D'après vous, quelle différence peut-on noter entre le logiciel Wordpress et le service de Saas Wordpress.com
Question : Quels éléments (vu dans le cours) faudrait-il mettre en place pour proposer notre propre service de Saas basé sur Wordpress?
Question : Proposez une architecture pour rendre ce service (fichier draw.io)
Objectif : déployer une appli Paas
L’objectif ici est de déployer une application à partir d’un code source. Ce TP initialement fait sur Heroku.com est maintenant réalisé sur Render.com
Question : Une fois que l'application est lancée et que vous pouvez y jouer, expliquer en détail ce qu'il s'est passé.
Question : Donnez une explication des technologies qui selon vous sont misent en œuvre ici.
J’attend pour ces réponses des schémas et des références au cours.
Objectif : Comprendre une architecture cloud
Je vous propose de réaliser un serveur de données cartographiques Raster basé sur Rok4 et son site de visualisation de donnée, vous aurez besoin de ces ressources :
Le résultat à atteindre est visualisable à l’aide d’un ensemble de conteneur Docker que nous avons préparés pour cette démo :
La version optimisée pour le Cloud est disponible ici :
https://github.com/rok4/docker/blob/develop/run/server/
Clonez le dépot et lancez la stack Docker à partir du fichier compose . Cherchez le viewer. Vous aurez besoin de Docker et de docker-compose.
Après avoir réussi à instancier cette structure avec succès, j’attends de vous que vous me fassiez le schéma d’architecture niveau IAAS de cette pile applicative.Vous procéderez par instrospection en analysant le contenu des images Docker utilisées.
Votre schéma devra contenir :
Question : Fournissez un schéma d'architecture complet représentant cette pile applicative
Ceux qui sont aventuriers peuvent se lancer dans la construction de cette Stack au sein d’un cluster Kubernetes (via minikube ou K3S ) :
Installation minikube en utilisant Docker comme driver :
https://minikube.sigs.k8s.io/docs/start/
Installation k3s (préférable) :
On se trouve donc à simuler un cluster d’orchestration de conteneur dont les noeuds sont des… conteneurs !
Vous pouvez essayer de convertir le docker-compose ROK4 en manifest Kubernetes avec cet outil :
Rendez moi au format Markdown + schema (.drawio) par mail à cedric.esnault@ign.fr, un compte rendu de ces TP avec les différentes étapes de vos recherches. N'hésitez pas à noter les points durs .