Écrire des applications, c'est bien. Si seulement nous pouvions faire cela plutôt que de nous embêter avec tout le processus de mise en place et de fonctionnement, n'est-ce pas ? Je dis souvent que les applications sont comme des avions : lorsqu'elles sont en vol, il y a de fortes chances, si vous les avez bien conçues, qu'elles continuent à fonctionner sans problème. C'est au moment du décollage et de l'atterrissage que l'on rencontre généralement des problèmes, c'est-à-dire au moment du déploiement.
Dans cet article de blog, je vais faire un bref historique de la manière dont nous avions l'habitude de déployer les applications, en examinant ce qui a changé, ce qui a bien fonctionné et ce qui n'a pas été si bien en cours de route.
Aujourd'hui, vous seriez choqué de connaître les énormes systèmes qui ont été déployés de cette manière, et vous penseriez probablement que c'est de la folie - mais c'était aussi amusant et vivifiant ! Vous aviez une chose à modifier. Vous double-cliquiez sur l'icône de votre client FTP préféré (oui, nous utilisions Windows). Vous naviguiez jusqu'à un fichier. Double-clic. Modifier quelque chose. Sauvegarder. Voilà, le changement a été effectué. Nous n'utilisions pas beaucoup de frameworks. Il y a donc de fortes chances que vous ayez un énorme fichier PHP quelque part. Et votre changement était localisé. Et s'il était cassé ? Vous double-cliquiez à nouveau et corrigiez le problème. Lorsque les temps de cycle sont de l'ordre de la seconde, c'était parfait. Enfin, jusqu'à ce que ce ne soit plus le cas.
Souvent, votre application fonctionnait sur un seul serveur, dédié à cet usage. La base de données dont vous aviez besoin tournait sur ce serveur, ou si vous utilisiez quelque chose de plus gourmand en ressources, vous aviez probablement un serveur séparé pour la base de données - ce que nous appelions les déploiements multi-tiers. En général, quelqu'un d'autre s'occupait de ce serveur (l'administrateur de la base de données).
En 1998, Apache disposait de ce que l'on appelle les hôtes virtuels, qui permettaient d'hébergerplusieurs sites sur la même machine, ce qui a eu pour effet d'entasser de plus en plus d'applications sur le même serveur. Ainsi, si vous modifiez un fichier dans le mauvais répertoire... eh bien...
À l'époque, vous travailliez peut-être déjà avec de vrais pros et vous étiez sur El Reg et Slashdot, de sorte que vous aviez déjà un semblant de séparation des responsabilités. Si c'était le cas, vous aviez déjà un serveur de test et vous faisiez ce truc sur le staging. Ensuite, un administrateur système se chargeait de la copie vers la production, ce qui était très bien - jusqu'à ce que ce ne soit plus le cas.
À cette époque, les professionnels sont devenus encore plus sérieux et veulent réellement contrôler les éléments qu'ils déploient. Les ingénieurs ont également commencé à détester les dossiers appelés production_v12_final_final_backup_charles_final.
Nous avons donc commencé à utiliser SVN et mettre quelque chose en production signifiait généralement utiliser SVN, ce qui était lent, pénible et souvent cassé. Mais c'était la façon la plus sérieuse de faire les choses. Les personnes intelligentes ont appris à utiliser Symlinks, à mettre en place SVN d'abord, puis à passer à la racine web. C'était comme GitOps sans les Ops, et avec pull plutôt que push.
Mais il s'agissait toujours d'un système à base unique. La dépendance a connu ses meilleurs jours à cette époque. Et généralement, la mise en scène et la production étaient déjà désynchronisées depuis longtemps. C'est à ce moment-là que l'expression "ça marche sur ma machine" est devenue courante.
Vous seriez étonné de voir le nombre de choses qui fonctionnent encore de cette manière : aller sur une page web et pouvoir sélectionner un modèle déployable d'un certain nombre d'applications (principalement PHP, mais plus tard beaucoup plus). Et c'est là que quelque chose d'intéressant s'est produit. Le déploiement d'applications est devenu beaucoup plus facile. En un seul clic.
Cependant, il s'avère que cela rend la maintenance des applications d'autant plus difficile. Lorsque le déploiement est facile mais que la mise à jour est difficile, ce n'est pas génial. En général, ces outils vous permettaient non seulement de modifier des données par FTP, mais ils vous fournissaient également un client web, de sorte que vous n'aviez pas besoin de savoir comment vous connecter à FTP.
La virtualisation a eu un impact considérable : soudain, nous avons pu commencer à séparer les applications du matériel. Désormais, il est possible de créer une image de machine et de la déployer plutôt que l'application.
Ce thème reviendra bien plus tard sous la forme de conteneurs. Plus important encore, parce que vous pouviez avoir différentes bases. Mais la création d'images était une histoire complexe. Les déploiements étaient lents. Certains ont adopté les nouveaux outils pour adopter de nouvelles pratiques. D'autres ont continué à traiter les machines basées sur des VM comme une chose avec laquelle ils utilisaient FTP. Ou SVN. Avec les mêmes résultats.
À un moment donné, les développeurs de logiciels, comme moi, sont devenus très très fatigués de nos échanges avec les administrateurs système. Nous étions maltraités. Et nous savions coder.
Nous avons donc décidé de résoudre le problème par le code. C'est ce que nous appelons aujourd'hui DevOps. Il en existait principalement deux versions :
Les serveurs étaient toujours la propriété des administrateurs système, mais en 2006, EC2 était devenu une réalité. En tant que développeur, vous pouviez accéder à une machine en cours d'exécution sans en demander la permission. Mais l'état d'esprit n'avait pas encore changé. Et les développeurs peu formés à la sécurité se faisaient le plus souvent rapidement (P)posséder.
Néanmoins, si les administrateurs système de l'époque étaient suffisamment modernes, ils commençaient à vous permettre de déployer directement. Au moins pour la mise en scène. Car c'était aussi les années du tiercé : dev-staging-prod. Nous étions suffisamment automatisés pour maintenir (en souffrant) les trois. Ce qui était mieux que staging-prod. Malgré tout, staging a dérivé, et dev était presque toujours à différents stades de rupture.
C'est la phase dont nous avons le plus envie de parler, car nous sommes un PaaS. Et même si nous aimerions parler de nous-mêmes, nous devons respecter nos aînés.
A ce stade, nous avons goûté à la liberté de déployer directement, et à la lourdeur de l'intégration continue. La plupart d'entre nous, habitués à la laideur des ordinateurs et au fait que tous les logiciels sont cassés, ont accepté cela comme faisant partie du coût de l'activité. Sauf qu'au cours de ces années, quelque chose d'autre s'est produit : Ruby et Ruby on Rails. Un changement de donne avec son propre sens de l'esthétique. Les gens de Ruby étaient plus attachés à la beauté et à la simplicité qu'à toute autre chose.
À l'époque, nous étions au paroxysme de la loi de Moore : les ordinateurs devenaient plus rapides et votre code lent deviendrait plus rapide avec le temps, alors pourquoi ne pas plutôt se concentrer sur sa lisibilité et sa beauté ?
Dans le monde Ruby, les tests n'étaient pas considérés comme "le coût de l'activité parce que le langage est un désordre peu sûr", mais comme la preuve que l'on pouvait penser au système en termes simples. Pour reprendre les mots du poète français Boileau, "ce que l'on conçoit bien, s'exprime clairement, et les mots pour le dire viennent facilement".
Un autre élément important a été Git, qui a rapidement remplacé SVN.
Il y a une énorme différence d'intentionnalité entre `svn up` et `git push`. Mais l'essentiel est que Git a rendu les branches bon marché et rapides. Les gens de Heroku, avec leur amour de la simplicité et de l'esthétique Ruby, ont dit en gros que les serveurs et les serveurs en nuage sont maintenant du bétail. Ce que les administrateurs système font pour nous peut et doit être automatisé. Nous allons simplifier et vous donner un seul runtime et une seule base de données. C'est toujours la même chose, il n'y a pas à sortir des sentiers battus. De cette façon, vous pouvez `git push` et votre code fonctionnera sur un serveur accessible au public.
Cela aurait pu être la fin de la ligne, le dernier mot de l'histoire, mais Heroku a été racheté très tôt par Salesforce. Cela ne veut pas dire que Salesforce a été un mauvais gestionnaire, ils ont même ajouté quelques runtimes en cours de route, mais le service est resté essentiellement ce qu'il était, ignorant tout ce qui allait passer dans les 15 prochaines années. Et l'incapacité d'Heroku à évoluer avec son temps a rendu les gens méfiants à l'égard de l'idée.
Le PaaS aurait pu permettre aux développeurs de s'exprimer sans cérémonie ni bureaucratie inutiles, mais peindre à l'intérieur des lignes n'en a pas l'air.
Mais même si l'on s'en tenait à ces lignes, Heroku et ses copies de moindre importance de Google et AWS (AppEngine et Beanstalk) laissaient une grande partie des problèmes au développeur (et maintenant à l'équipe DevOps). Il pouvait gérer la production, mais l'intégration continue, la mise en scène du développement et tout ce qui n'était pas l'exécution unique et la base de données gérée attachée étaient laissés à l'abandon. Ce qui était la plupart des choses nécessaires à toute organisation logicielle mature.
Nous y reviendrons lorsque nous parlerons d'Upsun, mais c'est essentiellement le pari que nous avons fait. Qu'il est possible d'envelopper l'ensemble du processus en un seul, car une véritable plate-forme en tant que service doit être une plate-forme pour l'ensemble du cycle de livraison continue.
Pour continuer sur le thème du PaaS, deux des choses que le premier système PaaS ne résolvait pas étaient l'exécution de logiciels localement et l'exécution de microservices. Non pas l'exécution locale de microservices, car c'était pratiquement impossible à l'époque.
Les premiers systèmes PaaS étaient axés sur la simplification et, comme nous l'avons dit, ils étaient centrés sur le cas d'utilisation spécifique du monolithe unique avec la base de données unique gérée.
Au fil des ans, l'automatisation, l'abstraction et l'amélioration de l'expérience des développeurs ont pris de l'ampleur. À mesure que le web et ses technologies associées évoluent, les méthodes et outils de déploiement continueront à changer pour répondre aux nouveaux défis et opportunités.
Dans cette histoire, l'important, en ce qui concerne ce qui se passe actuellement, ce sont deux tendances en particulier :
Si Kubernetes a débuté comme un outil d'orchestration de conteneurs, son influence s'est étendue bien au-delà, remodelant le paysage du déploiement. Il a permis à des modèles tels que les microservices de prospérer, a dynamisé de nouveaux paradigmes tels que GitOps et a catalysé un vaste écosystème d'outils et d'extensions.
Upsun essaie de prendre toute l'histoire ci-dessus et de distiller ce qui fonctionne dans une boîte en libre-service bien ordonnée :
Upsun, par exemple, permet aux développeurs de cloner leur environnement de production pour le développement, les tests ou la mise en attente. Cela garantit que l'application se comporte de manière cohérente à tous les stades, réduisant ainsi les risques de comportements inattendus en production dus à des différences d'environnement.
De nombreuses plateformes PaaS modernes sont livrées avec des pipelines intégrés d'intégration et de déploiement continus, garantissant que le code est testé et déployé de manière transparente. Cette intégration réduit le besoin d'outils tiers et rationalise le processus de développement jusqu'au déploiement.
Grâce à des fonctions de mise à l'échelle automatique, les solutions PaaS peuvent gérer des charges de trafic variables sans intervention manuelle. Elles peuvent allouer des ressources en fonction des besoins, ce qui garantit des performances et une rentabilité optimales.
Les solutions PaaS modernes sont souvent dotées de fonctions de sécurité intégrées, notamment de correctifs automatisés, de configurations réseau sécurisées et de certifications de conformité. Cette sécurité intégrée signifie moins de configuration manuelle et moins d'outils tiers, ce qui réduit les points de défaillance potentiels.
En réduisant le besoin d'outils et de services multiples, le PaaS peut entraîner des économies. Les organisations n'ont pas besoin d'investir dans l'expertise pour chaque outil individuel et les coûts opérationnels peuvent être réduits grâce aux économies d'échelle réalisées par les fournisseurs de PaaS.
En conclusion, une série d'outils a transformé la façon dont nous envisageons le déploiement d'applications et l'infrastructure, et chacun d'entre eux s'accompagne de ses propres complexités. Les solutions PaaS modernes, comme Upsun, sont une réponse à la demande de méthodologies de déploiement plus simples, unifiées et à l'épreuve du temps. Alors que la technologie continue d'évoluer, la capacité à rester agile et adaptable avec un minimum de friction est un avantage clé, faisant du PaaS un choix attractif pour de nombreuses organisations.
Si vous souhaitez l'essayer, commencez votre essai gratuit dès aujourd'hui.