10/12/2024 6 Minutes read Tech 

Cette année j’ai participé au Forum PHP 2024 qui s’est tenu le 10 et 11 octobre, un événement incontournable pour les développeurs PHP. J’ai eu la chance d’assister à une conférence particulièrement enrichissante animée par Smaïne Milianni. Le sujet abordé était : le Zero Downtime Deployment, une approche permettant de déployer des mises à jour logicielles sans perturber les utilisateurs.

Dans cette conférence, Smaïne Milianni a mis en avant les différentes techniques et bonnes pratiques pour garantir une mise à jour continue de vos services sans aucune interruption, un enjeu crucial dans un monde où la disponibilité des applications est primordiale. Dans cet article , je vous propose de revenir sur les points clés de sa conférence et sur comment peut-on mettre en place un tel déploiement dans nos projets.

Zero Downtime Deployment : Qu’est-ce que c’est ?

Le Zero Downtime Deployment est une technique de déploiement logiciel qui permet de mettre à jour une application, un site web ou un service sans provoquer de downtime (période d’indisponibilité) perceptible par les utilisateurs. Cela est particulièrement important dans des environnements où la continuité du service est essentielle, comme dans les applications bancaires en ligne, les plateformes e-commerce ou encore les services de streaming vidéo.

L’objectif est donc de minimiser, voire éliminer, les périodes où les utilisateurs ne peuvent pas accéder à une application pendant un déploiement.

Les fondamentaux du Zero Downtime Deployment selon Smaïne Milianni

Dans sa conférence, Smaïne Milianni explique que la mise en place d’un Zero Downtime Deployment repose sur plusieurs principes et techniques. Il ne s’agit pas seulement de la mise en œuvre de certaines technologies, mais aussi de la manière dont une équipe de développement et DevOps doit aborder l’ensemble du processus de déploiement pour garantir la disponibilité et la stabilité du système.

Les techniques clés du Zero Downtime Deployment

Blue-Green Deployment :

Le Blue-Green Deployment est l’une des techniques les plus populaires pour atteindre un déploiement sans downtime. L’idée est de maintenir deux environnements de production distincts :

  • Blue : l’environnement actif en production.
  • Green : une copie exacte de l’environnement, prête à recevoir la mise à jour.

Lors du déploiement, on met à jour l’environnement Green avec la nouvelle version de l’application ou du service. Une fois la mise à jour terminée et validée, on effectue un basculement vers l’environnement Green, qui devient le nouvel environnement Blue, tout en maintenant l’autre environnement intact pour permettre un retour en arrière rapide en cas de problème.

Avantages :

  • Pas de downtime visible pour les utilisateurs.
  • Possibilité de tester les nouvelles versions dans un environnement de production avant de les mettre en ligne.
  • Facilité de rollback en cas d’erreurs.

Rolling Deployment :

Le Rolling Deployment consiste à déployer la mise à jour de manière progressive sur une partie des serveurs à la fois. Dans cette approche, les différentes instances de l’application sont mises à jour une par une, de sorte que les utilisateurs continuent d’accéder aux parties non mises à jour du système pendant que d’autres sont en cours de déploiement.

Cette méthode est particulièrement utile pour les systèmes où la mise à jour doit être effectuée sur plusieurs serveurs ou instances dans des environnements distribués, c’est la cas par exemple avec les microservices. L’objectif est de ne jamais prendre toute l’infrastructure hors ligne en même temps.

Avantages :

  • Peut être utilisé sur des architectures complexes avec de multiples instances.
  • Permet de contrôler le déploiement étape par étape, réduisant les risques de mise à jour globale.
  • Équilibre la charge durant le processus de mise à jour.

Canary Deployment :

Une autre approche, le Canary Deployment, consiste à déployer la nouvelle version de l’application à un petit groupe d’utilisateurs avant de l’étendre à l’ensemble des utilisateurs. Ce test en conditions réelles avec une petite portion d’utilisateurs, qu’on appelle les « canaris », permet d’observer si des problèmes surviennent avant d’étendre la mise à jour à l’ensemble du système.

En général, l’approche Canary commence par déployer la nouvelle version sur un petit pourcentage d’utilisateurs, puis augmente progressivement la proportion à mesure que les tests sont validés.

Avantages :

  • Permet de détecter des problèmes avec un impact limité.
  • Peut être combiné avec des métriques et des outils de surveillance pour analyser l’impact réel du déploiement.
  • Facilité d’extensibilité : une fois la version stable, le déploiement est étendu.

Feature Flags :

Les Feature Flags permettent de déployer une nouvelle version du code, mais de garder certaines fonctionnalités désactivées jusqu’à ce qu’elles soient prêtes ou validées. Cette technique est particulièrement utile pour tester de nouvelles fonctionnalités en production sans exposer immédiatement les utilisateurs à des changements potentiellement risqués.

Avec les Feature Flags, il est possible de désactiver certaines parties du code, de les activer progressivement pour différents groupes d’utilisateurs, ou même de les tester sur un environnement de production sans affecter l’ensemble de l’application.

Avantages :

  • Permet de déployer des fonctionnalités avant qu’elles ne soient terminées ou validées.
  • Réduit les risques d’impact pour les utilisateurs finaux.
  • Facilite les tests A/B en production.

Breaking change:

Les breaking changes sont des modifications qui peuvent impacter le bon fonctionnement de l’application. Si elles ne sont pas correctement gérées, elles risquent de causer des dysfonctionnements et des perturbations importantes. Il est donc essentiel de bien anticiper tous les scénarios possibles avant chaque déploiement.

Par exemple, dans le cas d’un champ en base de données dont on souhaite changer l’état, il est crucial de prévoir et de gérer toutes les étapes de cette transition. Vous pourrez ainsi appliquer le changement progressivement, en assurant la compatibilité à chaque étape, avant de finaliser l’état final. Pour plus de détails sur cette approche, vous pouvez consulter l’article de Benjamin Rambaud qui traite de ce sujet.

Avantages:

  • Permet de garder une continuité du service
  • Réduit les risque de bugs
  • Facilite les déploiements en minimisant les risques

Les bonnes pratiques pour mettre en place un Zero Downtime Deployment

  1. Automatisation des Déploiements : Pour garantir que les déploiements sont rapides, fiables et reproductibles, il est essentiel d’automatiser autant que possible le processus. Cela inclut l’automatisation des tests (tests unitaires, tests d’intégration, tests de charge) ainsi que des processus de déploiement eux-mêmes. Les outils d’intégration et de déploiement continu, comme Jenkins, GitLab CI, et bien d’autres, sont indispensable pour réussir ce type de déploiement.
  2. Monitoring et Observabilité : Il est essentiel d’avoir une surveillance constante de l’état de l’application pendant et après un déploiement. Avec un suivi des erreurs, des performances, de la latence et de l’utilisation des ressources. Les outils de monitoring comme Datadog ou encore Grafana, permettent de suivre en temps réel l’impact du déploiement et de détecter rapidement toute anomalie.
  3. Tests en Production : Les tests de performance et de charge doivent ausi être effectués en production. Cela permet de garantir que la mise à jour fonctionnera correctement dans le contexte réel. Des tests en canari, ainsi que des tests A/B, peuvent être utilisés pour observer le comportement des utilisateurs face à de nouvelles versions.
  4. Rollback Facile : Assurez-vous que le processus de rollback est aussi automatisé que possible. Si une mise à jour échoue, il doit être possible de revenir en arrière rapidement sans impact pour les utilisateurs. Cela implique de garder une trace de toutes les versions déployées, de disposer de mécanismes de sauvegarde des données et d’avoir un plan bien défini pour restaurer une version antérieure en cas de problème.
  5. Communication et Coordination : Enfin, une bonne communication entre les équipes est essentielle pour s’assurer que tout le monde est au courant des modifications apportées et des risques potentiels. Les équipes doivent travailler de manière étroite pour garantir que le déploiement est bien coordonné et que les utilisateurs n’éprouvent aucun problème pendant le processus.

Conclusion : Pourquoi devrait-on adopter le Zero Downtime Deployment

Le Zero Downtime Deployment est devenu une norme dans les environnements de production modernes, notamment en raison de la pression croissante pour offrir des services ininterrompus aux utilisateurs. Adopter des stratégies telles que Blue-Green Deployment, Rolling Deployment, Canary Deployment et Feature Flags permet non seulement de garantir une disponibilité constante, mais aussi de réduire les risques et d’améliorer l’expérience utilisateur.

L’implémentation réussie de ces techniques repose sur une combinaison d’outils d’automatisation, de surveillance et de tests en production. Cela nécessite également un engagement à tous les niveaux de l’organisation pour garantir que chaque déploiement soit effectué de manière contrôlée et mesurée. En suivant les principes du Zero Downtime Deployment, les entreprises peuvent non seulement maintenir la stabilité de leurs services, mais aussi améliorer la confiance et la satisfaction des utilisateurs finaux.

En résumé, la conférence de Smaïne Milianni a été très instructive. Elle m’a permis de découvrir des techniques essentielles pour déployer des applications sans interruption, telles que le déploiement Blue-Green. Ces méthodes offrent une grande flexibilité et sécurité, permettant de minimiser les risques lors des mises à jour. J’ai appris de nouvelles pratiques pour améliorer la stabilité et la performance des déploiements, et pourquoi pas le mettre en oeuvre sur un projets à venir.

Références:


Zero Downtime Deployment was originally published in ekino-france on Medium, where people are continuing the conversation by highlighting and responding to this story.