Rapport 3
Rapport 3
Option
Sujet
text Majidi
3
À ALLAH avant tout
À ma très chère maman
Aucune dédicace ne saurait exprimer l’amour, l’estime, le dévouement et
le respect que j’ai pour toi.
Rien au monde ne vaut les efforts fournis jour et nuit pour mon
éducation et mon bien être.
Ce travail est le fruit de tes sacrifices que tu as fait pour mon éducation
et ma formation. « Je t’aime très fort »
text Elghazal
4
Remerciements
Au terme de ce travail, nous tenons à exprimer notre profonde gratitude et nos sincères
remerciements pour tous ceux qui nous ont aidés de près ou de loin pendant la durée de
notre stage.
5
Résumé
e présent rapport constitue le fruit d’un travail de quatre mois, réalisé dans le
Il s’agit en effet d’étudier, puis réaliser une architecture qui va permettre la gestion auto-
matisée d’un service propre à la société . Pour arriver à cette fin, nous avons pour mission
d’étudier les dernières technologies dans le domaine du Cloud pour mieux aborder la phase
de conception et déploiement. Pour bien mener ce projet, nous avons choisi de définir les
notions fondamentales et nécessaires pour la compréhension du projet notamment dans
le domaine du Cloud.
Durant ce projet, nous avions pour mission dans un premier temps de cerner le sujet,
étudier sa faisabilité et définir le cahier de charges, ainsi que rédiger le dossier de spé-
cifications fonctionnelles aussi bien que techniques. Ensuite nous avons entamé l’analyse
approfondie et la conception de notre projet, nous avons par la suite élaboré plusieurs
architectures intermédiaires. Finalement nous avons passé à l’implémentation, le test et
le déploiement de l’architecture.
Mots clés : Cloud, Cluster, Scalabilité, Conteneur, Docker, PaaS, SaaS, Odoo, Deis.
6
Abstract
his submission is the result of our work at Sayoo, conducted as part of our gra-
In fact, this project aims to reach an architecture that will enable automated management
of the company’s service. Then, our mission is to study the latest cloud technologies to
get a better knowledge of further parts. In order to have a clear view of this project, we’ve
defined several concepts and aspects of the cloud and its technologies.
Initially in this project, we had to identify the issue then define the functional and techni-
cal specifications. After, we’ve focused on the analysis and design parts. We’ve developed
several intermediate architectures that finally lead us to the appropriate architecture.
Mots clés : cloud, Cluster, Scalability, Container, Docker, PaaS, SaaS, Odoo, Deis.
7
Table des figures
8
TABLE DES FIGURES
Page 9
Liste des tableaux
10
Liste des abréviations
11
Table des matières
Résumé 6
Abstract 7
Introduction 15
2 Le cloud computing 23
2.1 Le Cloud Computing [1] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.1.1 Définition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.1.2 Caractéristiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.1.3 Les types de Cloud . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.2 Virtualisation ou containérisation . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.2.1 Virtualisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.2.2 Containérisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
2.2.3 Etude comparative . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
2.3 L’outil Docker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
12
TABLE DES MATIÈRES
4 Conception 49
4.1 Base de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
4.2 Scalabilité et disponibilité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
4.3 Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
5 Réalisation 56
5.1 A base d’un Cluster . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
5.1.1 Installation du Cluster . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
5.1.2 Installation des proxy . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
5.1.3 Utilisation du Cluster . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
5.2 A base d’une PaaS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
5.2.1 Plate-forme Deis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
5.2.2 Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
5.2.3 Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
5.2.4 Avantages du PaaS par rapport au Cluster . . . . . . . . . . . . . . . 61
5.2.5 Sécurité avec le protocole SSL/TLS . . . . . . . . . . . . . . . . . . . 62
[Link] SSL/TLS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
[Link] Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
5.3 Supervision . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
5.3.1 Outils de supervision utilisés . . . . . . . . . . . . . . . . . . . . . . . . 64
5.3.2 Démarche d’installation . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
5.3.3 Interfaces graphique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
5.3.4 Supervision et scalabilité . . . . . . . . . . . . . . . . . . . . . . . . . . 67
Conclusion 69
Webographie 70
Index 72
Page 13
TABLE DES MATIÈRES
B Docker-compose 75
D Fournisseurs du Cloud 79
Page 14
Introduction
Toutes les entreprises fournissent des services à leurs clients, évidemment avec l’objectif
de générer des bénéfices ainsi qu’une gestion efficace des ressources. En effet, l’entreprise
doit tracer une stratégie efficace au court, moyen et long terme pour améliorer cette gestion
et promouvoir sa relation avec ses clients et partenaires. Le concept de planification des
ressources de l’entreprise (ERP) est une réponse à ce besoin car il met en place un système
modulaire englobant l’ensemble du système d’informations (SI). Cependant les ERP ne
recouvrent pas entièrement les besoins, c’est pourquoi certaines entreprises se penchent
sur le développement personnalisé de nouveaux modules.
Dans cette optique, la société Sayoo a décidé de s’investir dans le développement
des modules ERP ainsi que leurs déploiements. Ce service a pour objectif de faciliter la
gestion et le suivi des ressources de l’entreprise ainsi que l’évolution de leurs relations
avec les clients, en automatisant plusieurs processus métier. Sayoo a décidé d’améliorer
ce service. Dans ce cadre, notre stage de fin d’étude a donc pour objectif de mettre en
œuvre une architecture Cloud basée sur les conteneurs qui facilitera à Sayoo la provision,
l’administration et le déploiement des instances ERP.
Le présent mémoire expose les résultats de notre travail durant notre stage. Il comporte
cinq chapitres organisés comme ceci :
— L’objet du premier chapitre est de cerner le projet dans son contexte général, à
travers la présentation de la société Sayoo, ensuite décrire la motivation du projet
et les objectifs visés. La dernière section du chapitre sera consacrée à la conduite
et la planification du projet.
— le deuxième chapitre est consacré à la définition du Cloud computing et l’explication
des différents concepts ainsi que l’introduction de la notion de containérisation.
— Le troisième chapitre s’attaque à l’orchestration des applications distribuées qui
15
TABLE DES MATIÈRES
Page 16
CHAPITRE 1
e présent chapitre permet de situer le projet dans son contexte général, à travers
17
CHAPITRE 1. CONTEXTE GÉNÉRAL DU PROJET
1.1.1 Services
La société Sayoo fournit des services de qualité qui touchent plusieurs domaines.
Conception des design Sayoo ne se focalise pas totalement sur l’aspect technique. la
société conçoit et délivre des interfaces réactives et séduisantes pour les clients.
Intégration des ERP et formations Sayoo se penche aussi sur la gestion des entreprises
via Odoo (anciennement Open ERP). Ce service tient une place importante pour la société
notamment dans sa personnalisation.
Page 18
CHAPITRE 1. CONTEXTE GÉNÉRAL DU PROJET
personnalisée de la suite Odoo (anciennement Open ERP) au client pour une gestion effi-
cace. Par la suite, la société qui s’est déjà procurée 3 différents serveurs (Développement,
Évaluation, Production) doit déployer une version d’Odoo sur le serveur de développe-
ment pour que les développeurs effectuent les premières personnalisations. Le client doit
avoir accès au serveur Développement pour confirmer ou refuser. En cas de confirmation,
l’administration doit déployer la version souhaitée sur le serveur production et conserver
la version d’évaluation au cas d’une nouvelle mise à jour ou maintenance. Le serveur Éva-
luation a pour but de faire découvrir le client une version standard ou améliorée de la
suite Odoo.
Pour une meilleure fiabilité, la société se procure 2 serveurs ( Développement, Pro-
duction) par client. elle doit périodiquement effectuer des maintenances pour assurer la
disponibilité de son service. Chaque client de la société se différencie seulement par sa
personnalisation de la suite Odoo donc les étapes de configuration sont redondantes pour
tous les clients. Le temps de configuration et de déploiement reste trop important donc le
client doit attendre pour accéder à son service après chaque maintenance. Les pré-requis
de ce service sont relativement coûteux et affecte par conséquent le prix final du client.
1.2.2 Motivations
Le processus de la provision des applications ERP pour les clients n’est pas optimale.
D’où les motivations d’opter vers une solution Cloud. Voici une liste des problèmes que
rencontrent Sayoo lors du processus du déploiement actuel.
— La provision des instances Odoo est complètement manuelle. Quand un client de-
Page 19
CHAPITRE 1. CONTEXTE GÉNÉRAL DU PROJET
mande une version de test d’Odoo par exemple, l’équipe de Sayoo est contrainte
d’exécuter une longue série d’étapes répétitives : la commande, l’installation et la
configuration du serveur, la mise en place de l’application Odoo, la configuration
DNS, etc...
— Le besoin récurrent des administrateurs qui doivent garder en permanence l’œil sur
les applications des clients.
— La supervision est manuelle. En effet, au fur et à mesure que le nombre de clients
augmente, l’administrateur doit ajouter les applications au système de supervision.
Ce processus devient faible et non évolutif. Par conséquent, le suivi est pénible en
termes de ressources et de temps.
— L’absence d’automatisme fait que l’équipe Sayoo consacre la plupart du temps aux
tâches répétitives au lieu de se consacrer au développement et la personnalisation
des applications Odoo.
— La nécessité d’acheter un serveur pour chaque client pour y installer son application,
ceci est un "overkill" pour atteindre le but. En conséquence, cela affecte le coût final
de la solution.
— L’absence d’une architecture robuste qui peut garantir des exigences non fonction-
nelles énormes, à savoir la configuration automatique, la haute disponibilité, la
sécurité et la scalabilité. Ainsi, Sayoo ne garantie pas un SLA à ses clients.
Page 20
CHAPITRE 1. CONTEXTE GÉNÉRAL DU PROJET
Page 21
CHAPITRE 1. CONTEXTE GÉNÉRAL DU PROJET
Page 22
CHAPITRE 2
Le cloud computing
23
CHAPITRE 2. LE CLOUD COMPUTING
2.1.1 Définition
Le Cloud Computing est l’exploitation de la puissance de calcul ou de stockage de
serveurs informatiques distants par l’intermédiaire du réseau internet. Ces serveurs sont
loués à la demande selon des critères techniques (Bande passante, puissance, etc.). Le
Cloud Computing se caractérise par sa grande souplesse. En effet, il est destiné et ouvert
à tous les utilisateurs.
Le Cloud est rendu possible grâce à la virtualisation, l’ubiquité des réseaux à grande
vitesse, les capacités des navigateurs actuels et l’évolution des piles de développement Web.
Avec ces choses en place, il devient moins nécessaire de posséder sa propre infrastructure,
ou même de posséder son propre logiciel. Il est possible de subvenir à ses besoins à partir
du Cloud Computing.
2.1.2 Caractéristiques
Le Cloud donne la capacité aux utilisateurs finaux d’utiliser des pièces de ressources,
elles doivent être acquises rapidement et facilement. NIST définit plusieurs caractéristiques
qu’il juge essentiel pour qu’un service soit considéré comme «Cloud». Ces caractéristiques
comprennent les points suivants :
— Service à la demande : La capacité pour un utilisateur final de s’inscrire et
recevoir des services sans les longs délais qui ont caractérisé l’informatique tradi-
tionnelle.
— Accessible au réseau large : La capacité d’accéder au service via les plates-
formes standard (bureau, ordinateur portable, mobiles, etc.).
— La mise en commun des ressources : Les fournisseurs servent plusieurs clients
ou «locataires» avec des services provisoires et évolutifs. Ces services peuvent être
ajustés pour répondre aux besoins de chaque client, sans aucune modification ap-
parente pour l’utilisateur.
— Rapide élasticité : La capacité des ressources doit évoluer pour faire face aux
pics de la demande.
— Service mesuré : La facturation est mesurée et livrée.
Sans ces caractéristiques, l’informatique en nuage n’apporte rien par rapport à l’in-
formatique traditionnelle. Une solution Cloud doit comporter ces caractéristiques. Par
Page 24
CHAPITRE 2. LE CLOUD COMPUTING
conséquent, notre projet se doit de satisfaire les critères du Cloud. Dans ce qui suit, nous
détaillerons les types classiques du Cloud.
Software as a Service
Page 25
CHAPITRE 2. LE CLOUD COMPUTING
à consacrer pour l’utilisation de l’application, les serveurs, les machines virtuelles, et les
équipements réseaux. Enfin, il suffit de pointer le navigateur à l’application.
Infrastructure as a Service
IaaS est à l’autre bout du pyramide du Cloud. Lorsque l’on souhaite garder le contrôle
de l’environnement logiciel, mais on ne veut pas maintenir aucun équipement ni acheter
des serveurs et les mettre dans une pièce à température contrôlée. On consulte une offre
IaaS d’un fournisseur IaaS pour commander et acheter tout simplement une machine
virtuelle.
On peut mettre n’importe quel logiciel que l’on souhaite au-dessus d’IaaS. En arrière
plan, le fournisseur fournit les ressources nécessaires pour satisfaire le besoin. Ceci est
rendu plus facile avec les technologies de virtualisation, qui séparent les ressources phy-
siques de la machine virtuelle qui exécute le logiciel. IaaS est disponible sur Amazon EC2,
GCE de Google et bien d’autres.
L’infrastructure en tant que service ou l’IaaS ne touche pas directement à notre sujet.
Du coup, il ne sera mentionné que rarement par la suite.
Platform as a Service
PaaS se situe entre IaaS et SaaS. Il n’est pas un produit fini comme SaaS, encore moins
une simple ressource virtuelle vierge comme IaaS. PaaS est destiné pour les développeurs,
il leur donne des outils et des interfaces de haut niveau pour mieux développer. Par
exemple, Windows Azure de Microsoft vous donne des outils pour développer des appli-
cations mobiles, des applications sociales, sites Web, jeux et plus encore. Vous construisez
ces choses, mais vous utilisez les API et les outils pour les accrocher et exécuter dans
l’environnement Azure.
Page 26
CHAPITRE 2. LE CLOUD COMPUTING
2.2.1 Virtualisation
La virtualisation sert à partitionner un seul serveur physique en plusieurs machines
virtuelles comme un espace de stockage ou un réseau. Elle permet une consolidation de
serveurs avec une grande souplesse d’utilisation. Dans le contexte de l’informatique en
nuage, la virtualisation est importante pour la mise en service et le retrait rapide de
serveurs. Par ailleurs, la scalabilité est la principale caractéristique du Cloud moderne.
Ainsi la virtualisation a permis la création de machines virtuelles, la montée en charge à
la demande, la migration à chaud, etc. La virtualisation est une technologie permettant
d’arriver à une utilisation rentable des serveurs tout en prenant en charge la séparation
entre de multiples locataires d’un matériel physique.
Il existe plusieurs solutions de virtualisation, l’on peut citer à titre informatif :
— VMware : Cette solution, séduisante, pose certains problèmes. En effet, il propose
des outils propriétaires et incompatible avec le noyau Linux.
Page 27
CHAPITRE 2. LE CLOUD COMPUTING
2.2.2 Containérisation
Le noyau Linux permet de lancer plusieurs instances isolées de l’espace utilisateur. Un
conteneur est un environnement isolé où un ou plusieurs processus peuvent être exécutés.
Les conteneurs se concentrent sur l’isolation des processus au lieu d’émuler une machine
physique complète.
Historiquement, chroot dans le noyau Linux a fourni un certain niveau d’isolation en
fournissant un environnement pour créer et héberger une copie virtualisée d’un logiciel,
et ceci depuis le début des années 80. Mais le terme «conteneurs» n’est apparu que vers
la fin de l’année 2006. Il a été renommé «Control Groups» (cgroups) pour éviter toute
confusion causée par de multiples significations du terme «conteneurs» dans le noyau
Linux. «Control Groups» est une fonctionnalité du noyau Linux qui est disponible depuis
la version v2.6.24, elle limite et isole l’utilisation des ressources d’un ensemble de processus.
Par la suite, l’isolation de l’espace de noms a été ajoutée.
Cela a conduit à l’évolution de Linux Containers (LXC), un environnement de virtua-
lisation au niveau du système d’exploitation qui est construit sur les fonctionnalités du
noyau Linux comme chroot, cgroupes, l’isolation de l’espace de noms, etc.
Cgroups
Page 28
CHAPITRE 2. LE CLOUD COMPUTING
Namespaces
Page 29
CHAPITRE 2. LE CLOUD COMPUTING
Page 30
CHAPITRE 2. LE CLOUD COMPUTING
Page 31
CHAPITRE 2. LE CLOUD COMPUTING
En somme, il va s’en dire que Docker l’emporte largement par rapport à KVM, tant
qu’en termes de la gestion des ressources (CPU, RAM) qu’en termes du temps consommé
pour le démarrage, le redémarrage et la suppression. Par ailleurs, Docker est le meilleur
dans la lecture/écriture dans le disque dur et s’approche à des performances natives. Ainsi,
Il serait donc judicieux de virtualiser les bases de données dans des conteneurs que dans
des machines virtuelles.
Page 32
CHAPITRE 2. LE CLOUD COMPUTING
d’applications, d’avoir plusieurs versions d’une même application sur les serveurs (phase
de développement, tests), mais aussi d’automatiser le packaging d’applications. Avec
Docker, on s’oriente vers de l’intégration et du déploiement en continu grâce au système
de conteneur. De plus, Docker permet de garder son système de base propre, tout en
installant de nouvelles fonctionnalités au sein de conteneurs, on part d’une base qui est
le système d’exploitation et on ajoute différentes briques conteneurisées. Docker a été
distribué en tant que projet open source à partir de mars 2013.
Page 33
CHAPITRE 2. LE CLOUD COMPUTING
La figure 2.6 cache derrière elle toute la philosophie de Docker. Cette philosophie
assume que toute application qui marche dans l’ordinateur du développeur doit marcher
aussi dans les serveurs de production. En effet, le développeur, quand il aura fini de
développer son application, va faire un build pour construire une image de son application.
Enfin, il va faire un push pour pousser l’image vers un registre des images centralisé. Dans
un environnement de production, une copie de l’application peut-être lancée en faisant
un simple pull et run.
Page 34
CHAPITRE 3
35
CHAPITRE 3. ORCHESTRATION DES APPLICATIONS DISTRIBUÉES
3.1 Le Clustering
Nous avons présenté dans le chapitre 2 le Cloud Computing ainsi que ses services
classiques. Dans cette section, nous allons parler du Cluster comme un service et le situer
dans le pyramide des services du Cloud (Figure 3.1) [6].
Page 36
CHAPITRE 3. ORCHESTRATION DES APPLICATIONS DISTRIBUÉES
flexibilité ++ + -
Agilité - + ++
Page 37
CHAPITRE 3. ORCHESTRATION DES APPLICATIONS DISTRIBUÉES
Page 38
CHAPITRE 3. ORCHESTRATION DES APPLICATIONS DISTRIBUÉES
Docker Machine
Ce service facilite l’approvisionnement d’un hôte avec Docker installé dans une variété
d’environnements. Les développeurs peuvent rapidement lancer les machines hôtes exécu-
tant Docker ; sur un ordinateur portable, un centre de données de VMs, ou une instance
Cloud. Cela évite la tâche de se connecter à un hôte pour installer et configurer le dé-
mon Docker et le client. Bien que toujours en version alpha, Docker machine prend en
charge l’approvisionnement de Docker localement avec VirtualBox et à distance sur les
instances Digital Ocean. Le support pour AWS, Azure, VMware, OpenStack et d’autres
infrastructures devrait arriver rapidement.
Docker Swarm
Docker Swarm est un service de Clustering natif de Docker qui fonctionne avec le
moteur Docker standard, et qui crée un ensemble de ressources sur lesquels les applications
distribuées s’exécutent. Cela permet aux développeurs et aux équipes opérationnelles de
considérer un cluster de machines Docker comme une collection de ressources unique. Les
administrateurs peuvent planifier des conteneurs qui seront lancés dans l’un des hôtes qui
répond aux exigences. Docker Swarm fournit des contraintes standard et personnalisées
pour répondre aux besoins et à la planification basée sur des règles, cela permet de déclarer
des exigences et contraintes spécifiques à chaque conteneur. Docker Swarm est conçu
pour évoluer avec le cycle de vie de l’application. Il peut prendre en charge un hôte
dans l’environnement de développement et d’autres s’exécutant dans l’environnement de
production.
Page 39
CHAPITRE 3. ORCHESTRATION DES APPLICATIONS DISTRIBUÉES
Docker Compose
Docker Composer permet aux développeurs d’assembler un ensemble de conteneurs.
Du coup, ils agissent de façon autonomes, interopérables et indépendantes des infrastruc-
tures. Avec cette approche déclarative, il est facile de définir des piles de conteneurs qui
sont portables. Une pile d’applications distribuées est déclarée dans un simple fichier de
configuration YAML qui contient la définition de chaque conteneur.
Page 40
CHAPITRE 3. ORCHESTRATION DES APPLICATIONS DISTRIBUÉES
Page 41
CHAPITRE 3. ORCHESTRATION DES APPLICATIONS DISTRIBUÉES
Page 42
CHAPITRE 3. ORCHESTRATION DES APPLICATIONS DISTRIBUÉES
Page 43
CHAPITRE 3. ORCHESTRATION DES APPLICATIONS DISTRIBUÉES
Marathon
Marathon est un framework Mesos développé pour exécuter les applications "long-
running". Il sert de remplacement pour le système init. Il possède de nombreuses fonc-
tionnalités qui simplifient les applications en cours d’exécution dans un environnement en
Cluster telles que la haute disponibilité, les contraintes de nœuds, les contrôles de santé
de l’application, une API pour scriptabilité et la découverte de service ainsi qu’un outil
facile à utiliser l’interface utilisateur Web UI. Il ajoute ses capacités de mise à l’échelle et
d’auto-guérison à l’ensemble des fonctionnalités de Mesos.
Chronos
Chronos est une application Mesos qui a été initialement développée par Airbnb comme
remplacement pour le système cron. Il est un ordonnanceur pleinement fonctionnel, dis-
tribué et tolérant aux pannes pour Mesos, ce qui facilite l’orchestration des "jobs" qui
sont des collections de tâches. Il comprend une API qui permet d’exécuter les scripts
de la planification de tâches et une interface web pour la facilité d’utilisation. Chronos
est complémentaire à Marathon car il fournit une autre façon d’exécuter des applications
selon un calendrier ou d’autres conditions telles que la réalisation d’un autre emploi. Il
Page 44
CHAPITRE 3. ORCHESTRATION DES APPLICATIONS DISTRIBUÉES
est également capable de la planification des tâches sur plusieurs nœuds esclaves Mesos,
et fournit des statistiques sur les échecs et les réussites d’emploi.
3.5 coreOS
coreOS est un système d’exploitation open-source basé sur le noyau Linux et construit
pour fournir des infrastructures aux déploiements en Cluster. En effet, il est un système
minimaliste, sur lequel est greffé des conteneurs applicatifs indépendants et sécurisés.
coreOS est conçu pour être léger et performant afin de gérer les datacenters. coreOS
consomme 40% moins de mémoire au démarrage en moyenne par rapport à un serveur
Linux. coreOS est disponible sur plusieurs plates-formes comme Amazon Compute Cloud,
Google Compute Engine et plusieurs autres [14].
Le service Systemd
systemd est un service de gestion de système et ses processus. Il a pour but d’offrir un
meilleur cadre pour la gestion des dépendances entre services, de permettre le chargement
en parallèle des services au démarrage, et de réduire les appels aux scripts shell. Il est
contrôlé dans le système d’exploitation CoreOS par le service Fleet.
Le service Etcd
Le service etcd est une base de données distribuée de clé-valeur qui fournit une confi-
guration partagée et un système de découverte de services pour les Clusters CoreOS. Il
fonctionne sur chaque machine dans un Cluster et gère l’élection du maître lors de la
production du Cluster ou la perte du maître.
Page 45
CHAPITRE 3. ORCHESTRATION DES APPLICATIONS DISTRIBUÉES
Le service Fleet
Fleet permet de traiter le Cluster Coreos comme s’il partageait un unique système
d’initialisation. Il encourage les utilisateurs à écrire des applications sous forme de petites
unités éphémères qui peuvent facilement migrer autour d’un Cluster. En utilisant Fleet,
les développeurs peuvent se concentrer sur la gestion des conteneurs sans soucier des
machines qui tournent les conteneurs. Le service Fleet a plusieurs avantages :
— Déployer les conteneurs Docker sur des hôtes arbitraires dans un cluster.
— Distribuer des services vers un Cluster depuis une machine locale.
— Maintenir un nombre fixe d’instances d’un service, ré-ordonnancer lors d’une panne
d’une machine.
— Découvrir les machines fonctionnant dans le Cluster.
— Se connecter automatiquement via SSH dans la machine exécutant un service.
Page 46
CHAPITRE 3. ORCHESTRATION DES APPLICATIONS DISTRIBUÉES
3.6 Récapitulation
Etcd élit le leader du cluster Un master par cluster Haute disponibilité des
masters
Orchestration bas niveau Orchestration haut niveau Orchestration bas niveau
Mesos, Kubernetes et CoreOS essaient tous de résoudre des problèmes très similaires,
chacun agit dans un niveau d’abstraction. L’on peut imaginer faire des combinaisons des
trois solutions d’orchestration en cas de nécessité :
— CoreOS + Kubernetes : CoreOS est parfait pour produire rapidement un Clus-
ter. Il va ordonnancer les composants de base de Kubernetes dans le Cluster. L’or-
donnancement des conteneurs va être délégué à Kubernetes.
Page 47
CHAPITRE 3. ORCHESTRATION DES APPLICATIONS DISTRIBUÉES
Page 48
CHAPITRE 4
Conception
49
CHAPITRE 4. CONCEPTION
Pour y remédier, l’on peut penser à monter le volume des données dans le serveur
hôte, ainsi les données sont plus ou moins persistantes. Outre le fait que les données seront
certainement perdues quand le serveur tombe en panne, le conteneur n’aura plus accès aux
données quand il sera réordonnancé. En effet, le caractère imprévisible de l’ordonnanceur
Fleet fait qu’il n’y a pas de garantie qu’un conteneur réside dans le même serveur. La
figure 4.2 montre ce scénario.
Page 50
CHAPITRE 4. CONCEPTION
Dans un environnement de production, il est encore tôt pour mettre les bases de
données et les applications à états (stateful) en général dans des conteneurs. De ce fait, il
serait judicieux de les faire sortir de l’architecture à base de conteneurs. Par conséquent,
deux solutions se portent à nous, les bases de données vont être mis en place suivant
l’informatique classique ou elles vont être consommées comme un service à partir d’une
partie tierce Cloud (Délégation de l’informatique). La dernière solution est coûteuse mais
il est plus fiable.
Page 51
CHAPITRE 4. CONCEPTION
Pour faire une bonne conception d’un SaaS évolutif, il faut distinguer d’abord deux
types d’applications :
— Application stateful ou à états : C’est une application dont les processus ne
stockent aucune donnée qui doit persister, même dans un temps aussi petit qu’il
soit, dans l’espace mémoire ou le système de fichiers.
— Application stateless ou sans états : C’est une application qui stocke tous les
données persistantes dans un service de support externe (Base de données, queue,
mémoire cache, etc.).
Une application évolutive doit être stateless, plus que cela, il doit respecter les douze-
facteurs définies dans l’annexe C. Une application évolutive suppose qu’aucune donnée
mise en cache (mémoire, disque) ne sera disponible dans une requête ultérieure. En effet,
les chances sont élevées qu’une future requête sera servie par un processus différent du
même service. L’idée c’est qu’une application doit être capable de renvoyer les réponses
de façon consistante à partir de n’importe quelle instance exécutant l’application.
La figure 4.3 montre un service qui n’est pas évolutif contrairement au service présenté
dans la figure 4.4.
Page 52
CHAPITRE 4. CONCEPTION
4.3 Architecture
L’architecture est très simplifiée car nous avons fait une abstraction du comportement
interne des composants de CoreOS. Cette architecture est inspirée de la plate-forme de
Nuxeo [16] basée sur Docker et CoreOS et conçue pour la résilience des pannes. Elle décrit
trois processus et implique trois acteurs :
— Développeur : Il développe, personnalise et adapte l’image Odoo de base aux
besoins du client. Une fois le développement est fait, il pousse l’image Odoo vers le
registre des images de Docker. Cette image est étiquetée par un nom, une version
et un environnement (développement, test, production).
— Exploitant : Il exploite l’ordonnanceur Fleet pour déployer l’application que le
développeur vient de pousser dans le registre. L’exploitant va demander à l’ordon-
nanceur, par exemple, de lancer le service en mode haute disponibilité. L’ordonnan-
ceur lance plusieurs instances du service dans des serveurs différents. L’exploitant,
remarquant un pic de charge sur ce service, va demander à l’ordonnanceur de lancer
une autre instance qui compense la surcharge.
— Client : C’est l’utilisateur final de l’application. Il va saisir l’URL de son applica-
tion. Son requête va être interceptée par l’équilibreur de charge (Load-Balancer)
qui va faire suivre la demande à un des serveurs du Cluster. Quand la requête est
arrivée, elle sera interceptée par le proxy de ce serveur qui va la faire suivre à l’ins-
tance du service la moins chargée, quitte même à la faire suivre vers une instance
Page 53
CHAPITRE 4. CONCEPTION
Page 54
CHAPITRE 4. CONCEPTION
Conclusion
En somme, nous avons prouvé l’incompatibilité des bases de données avec les conte-
neurs dans une solution fiable. Une architecture qui répond aux exigences du Cloud a été
présentée, mais il ne faut pas la gâcher par une mauvaise conception des applications.
Page 55
CHAPITRE 5
Réalisation
C globale de deux solutions sera décrite, puis les avantages de l’une par rapport à
l’autre seront illustrés. Enfin, La sécurisation et l’installation d’un système de
supervision évolutif clôturera le chapitre.
56
CHAPITRE 5. RÉALISATION
Page 57
CHAPITRE 5. RÉALISATION
Page 58
CHAPITRE 5. RÉALISATION
La solution à base d’un Cluster CoreOS motorisé par des équilibreurs de charges
élastiques est très puissante, mais son utilisation demeure très difficile. En effet, interagir
directement avec le Cluster nécessite des administrateurs systèmes très compétents. C’est
la raison pour laquelle une solution à base d’une PaaS sera adoptée.
Deis
Deis est une Plate-forme en tant que service, PaaS, open-source qui
facilite la gestion et le déploiement des applications sur des serveurs.
Deis se base sur Docker et CoreOS pour fournir une PaaS très légère
inspirée par la fameuse plate-forme Heroku [19].
Applications supportées
Deis peut déployer n’importe quelle application ou service qui peut fonctionner à
l’intérieur d’un conteneur Docker. Pour que l’application soit évolutive horizontalement,
elles doivent suivre la méthodologie de douze-facteurs de Heroku (Voir Annexe C, page
76).
Plates-formes supportées
Deis peut être déployée sur n’importe quelle système qui supporte CoreOS : poste de
travail, ainsi que la plupart des Clouds publics, privés et les centres de données.
Pourquoi Deis ?
— Langage-agnostique : Deis déploie des services écrites dans n’importe quels lan-
gages de programmation ;
— Extensibilité : Deis est extensible, les outils de supervisions et de la gestions des
message logs peuvent être intégrés facilement ;
— Scalabilité : Une application est montée en charge avec une seule commande. Par
ailleurs, La capacité de la plate-forme Deis peut être montée en charge en ajoutant
simplement des hôtes au Cluster ;
Page 59
CHAPITRE 5. RÉALISATION
— 100% Open Source : Deis est un logiciel libre, open-source publié sous la licence
Apache 2.0.
5.2.2 Architecture
l’architecture de Deis présentée dans la figure 5.1 a tellement de points de commun avec
celle que nous avons proposé. Néanmoins, elle cache beaucoup de détails, notamment à
l’intérieur du contrôleur. Par ailleurs, Deis intègre ses propres routeurs (Load Balancer) et
un registre privé des images Docker. Les services de support, la supervision, la gestion des
messages logs et l’équilibreur de charge principal ne sont pas intégrés par la plate-forme
Deis.
Un développeur, voulant déployer une application, va pousser son code vers le contrô-
leur. Ce dernier construit l’image et la stocke dans le registre des images. Ensuite, le
contrôleur passe le relais à l’ordonnanceur qui se débrouille pour lancer le service à l’in-
térieur d’un conteneur. Le conteneur est crée à base de l’image Docker.
Page 60
CHAPITRE 5. RÉALISATION
5.2.3 Installation
Deis nécessite un Cluster de CoreOS pour s’installer dessus. Nous aurions pu installer
Deis au-dessus du Cluster que nous avons déjà réalisé, mais Deis nécessite des ressources
(au moins 4GB de RAM) que la version d’essai d’AWS n’offre pas. Nous avons opté pour
GCE.
L’installation de Deis sur GCE est détaillée dans la documentation [21]. Les grandes
étapes d’installation :
— Lancer des serveurs CoreOS avec le fichier d’initialisation de Deis fourni par la
documentation.
— Faire pointer l’équilibreur de charge de Google vers nos serveurs. Cette équilibreur
de charge est élastique et donc reconnaît dynamiquement des nouveaux serveurs.
— Configurer le DNS pour faire pointer le nom de domaine et tous les sous-domaines
vers l’équilibreur de charge de Google (Figure 5.2).
Page 61
CHAPITRE 5. RÉALISATION
1 $ d e i s s c a l e cmd=3
2
Durant le déploiement d’une nouvelle version d’un service, Deis garantit un temps
quasi nul d’indisponibilité. En effet, les routeurs ne sont reconfigurés que lorsque le dé-
ploiement est terminé. Enfin, l’ancienne version est supprimée.
Deis offre des APIs REST pour un interfaçage facile et standard. Du coup, il est
possible de développer dans le futur des interfaces web ou mobile qui cache les difficultés
de la ligne de commande. D’ailleurs, une interface web est déja crée par la communauté
pour la gestion du Cluster [22].
[Link] SSL/TLS
SSL est un protocole qui permet d’échanger des informations entre deux ordinateurs
de façon sûre. SSL assure trois choses :
— Confidentialité : Il est impossible d’espionner les informations échangées ;
— Intégrité : Il est impossible de truquer les informations échangées ;
— Authentification : Il permet de s’assurer de l’identité du programme, de la per-
sonne ou de l’entreprise avec laquelle on communique.
Nous allons installer SSL dans la plate-forme pour établir un lien crypté entre le
navigateur et le serveur (HTTPS). Ce qui est intéressant, c’est que lorsque SSL est activé,
il le sera pour tous les services qui s’exécutent sur le Cluster.
[Link] Installation
Page 62
CHAPITRE 5. RÉALISATION
— Attacher la clé privée et le certificat avec la plate-forme. En fait, ils doivent être
installés dans l’équilibreur de charge. Il y a deux choix qui se portent à nous, soit
les installer dans l’équilibreur de charge principal de GCE ou dans les routeurs de
Deis. Nous avons décidé de l’installer dans les équilibreurs de charge propres à Deis
vu que c’est une solution portable et ne dépend pas de l’environnement où Deis est
installé.
1 $ o p e n s s l g e n r s a − d e s 3 − p a s s o u t p a s s : x − out s e r v e r . p a s s . key 2048
2 $ o p e n s s l r s a − p a s s i n p a s s : x − i n s e r v e r . p a s s . key − out s e r v e r . key
3 $ o p e n s s l r e q −new − key s e r v e r . key − out s e r v e r . c s r
4 $ o p e n s s l x509 − r e q − days 365 − i n s e r v e r . c s r − s i g n k e y s e r v e r . key − out
server . crt
Page 63
CHAPITRE 5. RÉALISATION
5.3 Supervision
La PaaS Deis ne dispose pas d’un système de supervision intégré. Puisque les services
déployés dans Deis fonctionnent entièrement à l’intérieur des conteneurs Docker, cela
signifie que les outils de supervision des conteneurs Docker devraient fonctionner avec
Deis. Les plus matures d’entre eux seront utilisés.
cAdvisor
Page 64
CHAPITRE 5. RÉALISATION
Heapster
Heapster est un projet open source de Google qui comble la limitation de cAdvisor
qui supervise un seul serveur. Heapster recueille les données à travers les HTTP API
fourni par les cAdvisor installés sur les serveurs, puis les stocke dans la base de données
InfluxDB. Ainsi, Heapster est considéré comme un superviseur au niveau du Cluster.
InfluxDB
Grafana
Grafana est l’un des meilleurs projets open source pour la visualisa-
tion des données de mesure. Il fournit un moyen puissant et élégant
pour créer, partager et explorer les données et les tableaux de bord à
partir des bases de données de métriques. Grafana assure un support
riche pour les bases de données Graphite, InfluxDB et OpenTSDB. Grafana sera utilisé
pour visualiser les mesures stockées dans InfluxDB.
Page 65
CHAPITRE 5. RÉALISATION
Le code suivant montre comment charger et installer cAdvisor dans le cluster. C’est
la même procédure pour les autres services.
1 $ s s h core@104 . 1 5 4 . 7 5 . 6
2 $ f l e e t c t l load cadvisor . s e r v i c e
3 $ f l e e t c t l start cadvisor . service
Page 66
CHAPITRE 5. RÉALISATION
Page 67
CHAPITRE 5. RÉALISATION
les données qui va les stocker dans la base de données pour des consultations via
l’interface graphique. Ainsi, l’auto-découverte des services est assurée.
— Lors d’un pic de charge, on a intérêt à lancer les nouveaux conteneurs dans une
nouvelle machine. On va tout d’abord lancer un nouveau serveur avec le fichier
d’initialisation du Cluster. Désormais, le serveur appartient au Cluster et, de façon
automatique, le superviseur le reconnaît parfaitement. Ainsi, les conteneurs lancés
sur ce nouveau serveur sont supervisés automatiquement comme le décrit le scénario
1.
D’autre part, Grafana, l’interface utilisateur, sera disponible dans la machine dans
laquelle Fleet décide d’installer le trio Heapster, InfluxDB et Grafana. Cela signifie que
Grafana peut changer de position dans le Cluster à l’improviste et n’aura donc pas une
adresse IP fixe pour y accéder. Comme perspective, il serait préférable de mettre en place
une sorte de proxy dont l’IP est fixe par lequel on accède à Grafana partout où il soit.
Conclusion
Nous avons décrit l’installation et l’utilisation d’une plate-forme en tant que service
au-dessus d’un Cluster de CoreOS. La PaaS, couplée avec son interface utilisateur et un
système de supervision, devient plus complète et favorise le déploiement continue dans un
monde containérisé.
Page 68
Conclusion
otre stage de fin d’études consistait à mettre en œuvre une architecture Cloud
N basée sur des conteneurs. Le but de ce projet est de faciliter et simplifier aux
développeurs de Sayoo le développement, la personnalisation de nouveaux mo-
dules Odoo (Open ERP), et faciliter le processus de déploiement continue.
Certes, c’est Odoo qui a poussé à avoir recours au Cloud, mais la solution réalisée est
conçu de façon général pour la provision des SaaS légers (containérisés). Toutefois, elle
n’est pas complète. En effet, Nous aimerions ajouter un service de mesure et de factura-
tion ainsi que d’améliorer le processus de scalabilité et de l’automatiser.
Par ailleurs, nous suivrons avec attention le projet Flocker qui s’intéresse à la containéri-
sation des bases de données dans le but de perfectionner l’orchestration des applications
Stateful. Nous continuerons à surveiller le projet Deis qui intégrera Kubernetes et Mesos
dans un futur proche, ce qui rendra l’architecture encore plus performante et optimale.
Enfin, nous développerons des interfaces utilisateurs (UI) afin de simplifier la gestion en-
tière de l’architecture et éviter de passer par les lignes de commandes.
69
Webographie
[1] Rackspace S UPPORT. Understanding the Cloud Computing Stack : SaaS, PaaS, IaaS.
URL : [Link]
the-cloud-computing-stack-saas-paas-iaas.
[2] W IKIPEDIA. Cloud Computing. URL : https : / / fr . wikipedia . org / wiki / Cloud _
computing.
[3] ANAND MANI SANKAR. Containers (Docker) : A disruptive force in cloud computing.
URL : [Link]
[4] IBM. KVM and Docker LXC Benchmarking with OpenStack. URL : [Link]
net/BodenRussell/kvm-and-docker-lxc-benchmarking-with-openstack.
[5] MICHAEL PAGES. Docker Présentation – Part 1. URL : [Link]
04/14/docker-presentation-part-1/.
[6] G OOGLE. Scaling clusters declaratively with Kubernetes and Docker realisation. URL :
[Link]
[7] G OOGLE. Containerizing the Cloud with Docker on Google Cloud Platform. URL : https:
//[Link]/watch?v=tsk0pWf4ipw.
[8] Kasia L ORENC. Docker Goes After Enterprise With Orchestration Services And Hub. URL :
[Link]
[Link].
[9] D OCKER. URL : [Link]
[10] Sreenivas M AKAM. Docker Compose and Interworking of Docker Machine, Swarm, Com-
pose. URL : [Link]
and-docker-machine-swarm-compose-interworking/.
[11] METEORHACKS . Kubernetes : The Future of Cloud Hosting. URL : [Link]
com/learn-kubernetes-the-future-of-the-cloud.
[12] Mitchell A NICAS. An Introduction to Mesosphere. URL : [Link]
com/community/tutorials/an-introduction-to-mesosphere.
70
WEBOGRAPHIE
[13] Ben L ORICA. Running batch and long-running, highly available service jobs on the
same cluster. URL : [Link]
[Link].
[14] C ORE OS. Container management and deployment for your cluster using fleet. URL :
[Link]
[15] C ORE OS. Containerizing the Cloud with Docker on Google Cloud Platform. URL : http:
//[Link].
[16] DAMIEN METZLER. “CoreOS and Nuxeo : How We Built [Link]”. In : nuxeo (2014).
DOI : [Link]
[17] C ORE OS. Running CoreOS on EC2. URL : https : / / coreos . com / docs / running -
coreos/cloud-providers/ec2/.
[18] ARKENIO . Gogeta. URL : [Link]
[19] D EIS. Docker based PaaS to deploy and manage applications on cluster. URL : http:
//[Link]/.
[20] D EIS. Deis architecture. URL : [Link]
deis/architecture/.
[21] D EIS. Installing Deis on Google Compute Engine. URL : [Link]
[22] full client-side web app that interfaces with deis api. URL : https : / /
JUMBOJETT .
[Link]/jumbojett/deis-ui.
[23] G OOGLE. Installing Heapster on CoreOS. URL : [Link]
heapster/blob/master/docs/[Link].
[24] H EROKU. The twelve-factor app methodology for building robust SaaS. URL : http :
//[Link]/.
[25] W IKIPEDIA. Amazon Web Services. URL : [Link]
Web_Services.
[26] Dominique F ILIPPONE. “Google Compute Engine : ses atouts pour l’emporter face à
AWS”. In : journaldunet (2014). DOI : [Link]
cloud-computing/[Link].
Page 71
Index
AWS, 79
cAdvisor, 64
Cluster, 36
Containérisation, 28
CoreOS, 45
Deis, 59
Disponibilité, 51
Docker, 32
Douze-facteurs, 76
Etcd, 45
Fleet, 46
GCE, 79
Gogeta, 57
Heroku, 80
IaaS, 26, 36
Kubernetes, 41
LXC, 28
Mesos, 42
Odoo, 18
PaaS, 26, 36
SaaS, 25
Scalabilité, 51
SSL, 62
Systemd, 45
TLS, 62
72
ANNEXE A
Dans ce qui suit, nous allons donner une idée sur l’interface que fournit Docker pour
la provision des services (conteneurs). Nous allons réaliser la mini-architecture suivante :
73
ANNEXE A. ODOO SOUS DOCKER
Environnement technique
Nous allons partir d’un serveur Ubuntu 14.04-64 bits avec un noyau >= 3.8 et Docker
installé (L’installation ne sera pas détaillée), ou de préférence, un serveur CoreOS où
Docker est déjà intégré nativement avec ce système d’exploitation.
Installation de PostgreSQL
Odoo a besoin d’un serveur de base de données PostgreSQL, la commande suivante
permet de l’installer :
1 $ d o c k e r run −d − e POSTGRES_USER=odoo − e POSTGRES_PASSWORD=odoo −−name
db p o s t g r e s
2
Installation d’Odoo
L’installation d’Odoo se fait grâce à la commande suivante :
1 $ d o c k e r run −p 8 0 : 8 0 6 9 −−name odoo −− l i n k db : db − t odoo
2
En quelques secondes, nous avons pu lancer le service Odoo prêt à être utilisé, person-
nalisé, et éventuellement porté vers un autre serveur. Pour accéder au service il suffit de
taper dans le navigateur :
1 h t t p : / /IP_SERVEUR: 8 0
2
Page 74
ANNEXE B
Docker-compose
Nous allons réaliser l’installation détaillée dans l’annexe A avec l’outil Docker-compose.
Cet outil permet de définir dans un fichier YAML l’architecture de l’application. Enfin,
on peut faire des manipulations (démarrage, redémarrage, arrêt) sur toute l’architecture
comme si c’était un seul service.
1 odoo :
2 image : odoo
3 links :
4 − db
5 ports :
6 − " 80:8069 "
7 db :
8 image : p o s t g r e s
9 environment :
10 − POSTGRES_USER: odoo
11 − POSTGRES_PASSWORD: odoo
12
1 $ docker − compose up −d
2
75
ANNEXE C
code source
Le code source de l’application doit être unique, mis et suivi depuis un système de
contrôle de version comme Git.
Dépendances
La plupart des langages de programmation offre un système de gestion de dépendances.
Ainsi, une application doit déclarer explicitement et isoler les dépendances. Un SaaS
robuste ne repose jamais sur l’existence implicite des dépendances.
76
ANNEXE C. DOUZE-FACTEURS D’UN SAAS
Configuration
Les variables de configurations peuvent varier entre les environnements (développe-
ment, test, production, etc). Ces variables ne doivent jamais être stockées dans des
constantes à l’intérieur du code. Une bonne pratique c’est de les stocker dans des va-
riables d’environnement.
Services de support
Traiter tous les services de support (base de données, file d’attente, serveur SMTP,
etc.) comme des ressources liées.
Processus
Les processus d’une application doivent être sans état (stateless). Les données per-
sistantes doivent être stockées dans une base de données.
Attachement de port
Chaque service doit être exporté via un port.
Concurrence
Les processus d’une application ne doivent jamais lancés comme un démon. Au lieu de
cela, il faut compter sur le gestionnaire de processus du système d’exploitation (systemd,
init.d, upstart, etc.).
Jetable
Les processus d’une application sont jetables, ils peuvent être stoppés ou démarrés à
n’importe quel moment rapidement et sans causer de problèmes.
Page 77
ANNEXE C. DOUZE-FACTEURS D’UN SAAS
Parité Dev/Prod
Il faut garder tous les environnements (développement, test, production, etc) aussi
similaires que possible.
Messages logs
Les messages logs sont très importants, il faut les traiter comme des flux d’événements.
Processus admin
Les tâches d’administration doivent être exécutés dans un unique processus avec un
environnement identique à celui du processus principal.
Page 78
ANNEXE D
Fournisseurs du Cloud
79
ANNEXE D. FOURNISSEURS DU CLOUD
Heroku
Heroku est un service de Cloud Computing de type plate-forme en tant que service.
Créé en 2007, il était l’un des tout premiers services Cloud, puis a été racheté par Sa-
[Link]. Cette plate-forme est destinée pour les développeurs pour y mettre leurs
applications programmées dans la plupart des technologies web.
Heroku n’a pas été utilisé durant notre projet, mais il a influencé le projet indirec-
tement. En effet, Heroku a tellement inspiré Deis de sorte qu’elle a été décrite comme
un mini-Heroku privé. Par ailleurs, l’équipe de Heroku a résumé son expérience dans la
scalabilité des applications et a introduit les douze-facteurs d’un SaaS
Page 80