From 8b66c2b9e92074d827ac59d61c322c51dece89fd Mon Sep 17 00:00:00 2001 From: Fred Pauchet Date: Sun, 21 Nov 2021 19:59:04 +0100 Subject: [PATCH] Integrate IaaS --- .../iaas_focus-paas-saas-diagram.png | Bin 0 -> 52309 bytes source/main.adoc | 6 ++-- source/part-2-deployment/_main.adoc | 32 ++++++++++++++---- 3 files changed, 29 insertions(+), 9 deletions(-) create mode 100644 source/images/deployment/iaas_focus-paas-saas-diagram.png diff --git a/source/images/deployment/iaas_focus-paas-saas-diagram.png b/source/images/deployment/iaas_focus-paas-saas-diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..d3b58ec4ca5a312ce5ea4a895378614173d226a8 GIT binary patch literal 52309 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 Gp$PyumhK|} literal 0 HcmV?d00001 diff --git a/source/main.adoc b/source/main.adoc index 0b2796c..f5e8634 100644 --- a/source/main.adoc +++ b/source/main.adoc @@ -70,8 +70,6 @@ footnote:[Avec même un peu d'https://www.xkcd.com[XKCD] et de Calvin & Hobbes d === Let's keep in touch - - include::part-1-workspace/_main.adoc[] include::part-2-deployment/_main.adoc[] @@ -85,6 +83,8 @@ include::part-9-resources/_index.adoc[] [glossary] = Glossaire +IaaS:: _Infrastructure as a Service_, où un tiers vous fournit des machines (généralement virtuelles) que vous devrez ensuite gérer en bon père de famille. L'IaaS propose souvent une API, qui vous permet d'intégrer la durée de vie de chaque machine dans vos flux - en créant, augmentant, détruisant une machine lorsque cela s'avère nécessaire. + ORM:: _Object Relational Mapper_, où une instance est directement (ou à proximité) liée à un mode de persistance de données. PaaS:: _Platform as a Service_, qui consiste à proposer les composants d'une plateforme (Redis, PostgreSQL, ...) en libre service et disponibles à la demande (quoiqu'après avoir communiqué son numéro de carte de crédit...). @@ -93,4 +93,4 @@ PaaS:: _Platform as a Service_, qui consiste à proposer les composants d'une pl == Index == Bibliographie -bibliography::[] \ No newline at end of file +bibliography::[] diff --git a/source/part-2-deployment/_main.adoc b/source/part-2-deployment/_main.adoc index 2affad5..8e7b7e8 100644 --- a/source/part-2-deployment/_main.adoc +++ b/source/part-2-deployment/_main.adoc @@ -8,9 +8,9 @@ Unfortunately, deployment strategy is seldom considered during initial developme This leads to architectures that may be make the system easy to develop, but leave it very difficult to deploy. Il y a une raison très simple à aborder le déploiement dès maintenant: à trop attendre et à peaufiner son développement en local, -on en oublie que sa finalité sera de se retrouver exposé sur un serveur. +on en oublie que sa finalité sera de se retrouver exposé et accessible depuis un serveur. Il est du coup probable d'oublier une partie des désidérata, de zapper une fonctionnalité essentielle -ou simplement de passer énormément de temps à adapter les sources pour qu'elles fonctionnent sur un environnement en particulier. +ou simplement de passer énormément de temps à adapter les sources pour qu'elles puissent être mises à disposition sur un environnement en particulier, une fois que leur développement aura été finalisé, testé et validé. Un bon déploiement ne doit pas dépendre de dizaines de petits scripts éparpillés sur le disque. L’objectif est qu'il soit rapide et fiable. Ceci peut être atteint au travers d’un partitionnement correct, incluant le fait que le composant principal s’assure que @@ -20,9 +20,29 @@ Aborder le déploiement dès le début permet également de rédiger dès le dé Déploier une nouvelle version sera aussi simple que de récupérer la dernière archive depuis le dépôt, la placer dans le bon répertoire, appliquer des actions spécifiques (et souvent identiques entre deux versions), puis redémarrer les services adéquats, et la procédure complète se résumera à quelques lignes d'un script bash. Le serveur que django met à notre disposition _via_ la commande `runserver` est extrêmement pratique, mais il est uniquement prévu pour la phase développement: en production, il est inutile de passer par du code Python pour charger des fichiers statiques (feuilles de style, fichiers JavaScript, images, ...). -De même, Django propose par défaut une base de données SQLite, qui fonctionne parfaitement dès lors que l'on connait ses limites et que l'on se limite à un utilisateur à la fois. En production, il est légitime que la base de donnée soit capable de supporter plusieurs utilisateurs et connexions simultanément... +De même, Django propose par défaut une base de données SQLite, qui fonctionne parfaitement dès lors que l'on connait ses limites et que l'on se limite à un utilisateur à la fois. +En production, il est légitime que la base de donnée soit capable de supporter plusieurs utilisateurs et connexions simultanés. En restant avec les paramètres par défaut, il est plus que probable que vous rencontriez rapidement des erreurs de verrou parce qu'un autre processus a déjà pris la main pour écrire ses données. -En bref, vous avez quelque chose qui fonctionne, mais qui ressemble de très loin à ce dont vous aurez besoin au final. +En bref, vous avez quelque chose qui fonctionne, qui répond à un besoin, mais qui va attirer la grogne de ses utilisateurs pour des problèmes de latences, pour des erreurs de verrou ou simplement parce que le serveur répondra trop lentement. + +L'objectif de cette partie est de parcourir les différentes possibilités qui s'offrent à nous en termes de déploiement, tout en faisant en sorte que le code soit le moins couplé possible à sa destination de production. +L'objectif est donc de faire en sorte qu'une même application puisse être hébergées par plusieurs hôtes sans avoir à subir de modifications. +Nous vous renvoyons vers les 12-facteurs dont nous avons déjà parlé et qui vous énormément nous aider, puisque ce sont des variables d'environnement qui vont réellement piloter le câblage entre l'application, ses composants et son hébergeur. + +RedHat proposait récemment un article intitulé _*What Is IaaS*_, qui présentait les principales différences entre types d'hébergement. + +.L'infrastructure en tant que service, cc. _RedHat Cloud Computing_ +[link=https://www.redhat.com/fr/topics/cloud-computing/what-is-iaas] +image::images/deployment/iaas_focus-paas-saas-diagram.png[] + +Ainsi, on trouve: + +1. Le déploiment _on-premises_ ou _on-site_ +2. Les _Infrastructures as a service_ ou _((IaaS))_ +3. Les _Platforms as a service_ ou _((PaaS))_ +4. Les _Softwares as a service_ ou _((SaaS))_, ce dernier point nous concernant moins, puisque c'est nous qui développons le logiciel + + Dans cette partie, nous aborderons les points suivants: @@ -39,7 +59,7 @@ Pour une mise ne production, le standard _de facto_ est le suivant: * HAProxy pour la distribution de charge * Gunicorn ou Uvicorn comme serveur d'application * Supervisor pour le monitoring - * PostgreSQL ou MariaDB comme base de données. + * PostgreSQL ou MySQL/MariaDB comme bases de données. * Celery et RabbitMQ pour l'exécution de tâches asynchrones * Redis / Memcache pour la mise à en cache (et pour les sessions ? A vérifier). * Sentry, pour le suivi des bugs @@ -133,7 +153,7 @@ Nous allons détailler ci-dessous trois méthodes de déploiement: * Sur une machine hôte, en embarquant tous les composants sur un même serveur. Ce ne sera pas idéal, puisqu'il ne sera pas possible de configurer un _load balancer_, de routeur plusieurs basées de données, mais ce sera le premier cas de figure. * Dans des containers, avec Docker-Compose. -* Sur une *Plateforme en tant que Service* (ou plus simplement, *PaaS*), pour faire abstraction de toute la couche de configuration du serveur. +* Sur une *Plateforme en tant que Service* (ou plus simplement, *((PaaS))*), pour faire abstraction de toute la couche de configuration du serveur. === Sur une machine hôte