Le déploiement Canary représente une méthode sophistiquée de développement et de déploiement logiciel. Il s’agit d’une diffusion progressive des nouvelles fonctionnalités ou mises à jour, initialement destinée à un segment restreint d’utilisateurs, avant une extension à l’ensemble de la base.
Cette stratégie implique la création d’une nouvelle version du logiciel, déployée sur un groupe limité d’utilisateurs, tandis que l’ancienne version reste active pour la majorité. L’équipe de développement surveille rigoureusement cette nouvelle version afin de s’assurer de sa stabilité et de son bon fonctionnement.
Si les performances sont conformes aux attentes, la nouvelle version est progressivement déployée à un nombre croissant d’utilisateurs, jusqu’à atteindre l’ensemble de la base. Cette approche minimise les risques d’introduction de bugs ou de problèmes majeurs qui pourraient impacter tous les utilisateurs simultanément.
L’objectif principal du déploiement Canary est de limiter le risque lié à l’introduction de nouvelles fonctionnalités auprès d’un large public. En diffusant les modifications par étapes, les développeurs peuvent évaluer les performances et la stabilité de la nouvelle version, effectuer des ajustements nécessaires, avant un déploiement complet. Cette approche favorise une transition plus douce vers la nouvelle version.
Principes Fondamentaux et Avantages
Source : martinfowler.com
Les principes fondamentaux du déploiement Canary sont les suivants :
- Déploiement initial de la nouvelle version auprès d’un groupe restreint d’utilisateurs, suivi d’une expansion progressive à un public plus large.
- Surveillance attentive de la nouvelle version pour garantir sa stabilité et son fonctionnement optimal.
- Possibilité de restauration rapide et aisée vers la version précédente en cas de problème.
- Automatisation maximale du processus de déploiement pour minimiser les erreurs humaines.
Les avantages du déploiement Canary dans un environnement DevOps sont nombreux :
- Réduction du risque d’introduction de bugs ou d’autres problèmes majeurs grâce au déploiement progressif.
- Obtention rapide de retours sur la nouvelle version, permettant des ajustements avant une diffusion massive.
- Assurance de la qualité grâce au suivi des performances et de la stabilité de la nouvelle version.
- Renforcement de la confiance des développeurs et des parties prenantes dans le processus de déploiement grâce à la réduction des risques d’impact négatif sur l’expérience utilisateur.
Le Déploiement Canary : Concepts et Terminologie
Source : cncf.io
Analysons le cycle de vie typique de ce processus.
Tout débute avec le groupe Canary, constitué des premiers utilisateurs de la nouvelle version. Parallèlement, le groupe Baseline englobe tous les autres utilisateurs non inclus dans le groupe Canary.
Au fur et à mesure que les utilisateurs du groupe Canary adoptent la nouvelle version, le déploiement s’étend à un nombre croissant d’utilisateurs, constituant le transfert de trafic. Le groupe Canary s’élargit tandis que le groupe Baseline se réduit, assurant un déploiement progressif.
Le processus de surveillance enregistre les activités et les résultats d’utilisation, générant des métriques essentielles pour les développeurs. Ces derniers peuvent alors corriger les anomalies ou revenir à la version Baseline si nécessaire.
L’automatisation des tâches de surveillance et de déploiement permet aux développeurs de se concentrer sur la résolution des problèmes.
Le groupe Canary peut identifier des fonctionnalités défectueuses, tandis que d’autres se révèlent excellentes. Les développeurs signalent alors les fonctionnalités problématiques pour les exclure du processus de déploiement.
Les développeurs suivent en parallèle les groupes Canary et Baseline, ce qui permet d’effectuer des tests A/B, évaluant le comportement des anciens et nouveaux systèmes dans des conditions identiques. Des tests automatisés sont continuellement menés sur la nouvelle version pour s’assurer de la stabilité du groupe Canary.
Différences avec les Stratégies de Déploiement Traditionnelles
Après avoir saisi le processus de cycle de vie, les différences avec les méthodes traditionnelles de déploiement sont flagrantes.
- Déploiement progressif et contrôlé au lieu d’un déploiement massif immédiat, limitant les problèmes en production.
- Concentration du risque de bugs sur le groupe Canary uniquement, évitant d’exposer l’ensemble des utilisateurs aux problèmes.
- Surveillance de la nouvelle version avant sa diffusion à grande échelle, au lieu d’une intervention a posteriori qui peut nécessiter des ressources importantes.
- Possibilité de retour arrière avant un déploiement complet, évitant une autre fenêtre de publication pour une annulation.
- Le déploiement Canary encourage l’investissement dans l’automatisation. A contrario, les approches traditionnelles relèguent l’automatisation à la fin de la liste des priorités.
Pipelines CI/CD et Déploiement Canary
Source : aws.amazon.com
Dans un pipeline CI/CD, les modifications sont automatiquement créées, testées et déployées dans un environnement intermédiaire, avant la mise en production. Le déploiement Canary est une application idéale dans ce contexte.
Après le déploiement dans l’environnement de staging et la validation des tests, le pipeline CI/CD lance automatiquement le déploiement de la version Canary sur un sous-ensemble d’utilisateurs dans l’environnement de production.
En cas de problème, un autre pipeline permet de restaurer la version précédente, ou de signaler les fonctionnalités défectueuses pour éviter leur inclusion dans les prochains déploiements. L’automatisation simplifie le processus et élimine les soucis.
La version Canary inclut des tests de contrôle de santé automatisés, intégrés aux pipelines CI/CD, garantissant la fiabilité du processus.
Processus et Étapes du Déploiement Canary
En résumé, voici le flux de travail habituel d’un déploiement Canary que vous pouvez adapter à votre projet.
#1. Planification et Préparation
L’équipe de développement planifie le déploiement Canary, incluant les modifications à effectuer, la création de la nouvelle version, la définition des indicateurs de santé et de performance. L’équipe identifie également le groupe d’utilisateurs qui recevra la nouvelle version en premier et élabore le plan de déploiement.
#2. Mise en Œuvre du Routage et de la Surveillance du Trafic
La nouvelle version est déployée sur le groupe d’utilisateurs désigné. Le routage du trafic dirige une partie des utilisateurs vers la nouvelle version, tout en conservant l’ancienne version pour les autres. Les performances et la stabilité sont étroitement surveillées grâce à des métriques et des contrôles.
#3. Analyse et Évaluation des Performances du Déploiement
Les performances de la nouvelle version sont analysées à l’aide des indicateurs définis lors de la planification. Si les résultats sont positifs, le déploiement s’étend progressivement à un plus grand nombre d’utilisateurs. En cas de problème, le déploiement peut être rapidement annulé.
#4. Promotion ou Annulation du Déploiement
L’équipe décide de promouvoir la nouvelle version à l’ensemble des utilisateurs ou de revenir à la précédente. Si la nouvelle version est stable et conforme aux normes de qualité, elle est déployée à l’ensemble de la base. En cas de problème, le retour à la version antérieure est rapidement exécuté.
Source : aws.amazon.com
Meilleures Pratiques et Stratégies
Lors de la mise en œuvre du déploiement Canary, commencez par définir des objectifs clairs et des indicateurs de réussite, tels que des mesures de performance, des retours utilisateurs et l’impact sur l’entreprise.
Créez un petit groupe d’utilisateurs pour tester la nouvelle version. Évitez un groupe initial trop grand, afin de conserver une flexibilité maximale.
Surveillez les performances et la stabilité de la nouvelle version à l’aide de métriques et de contrôles de santé. Réagissez immédiatement en cas d’anomalie. Il vaut mieux sur-réagir que sous-réagir lors d’un déploiement progressif.
Augmentez progressivement le déploiement de la nouvelle version au fil du temps, assurant ainsi une transition plus fluide.
Utilisez l’automatisation autant que possible pour simplifier les processus de déploiement et de surveillance. Intégrez-les aux pipelines CI/CD. Cela réduit le risque d’erreur humaine et garantit un processus cohérent et reproductible.
Utilisez des indicateurs de fonctionnalités pour activer ou désactiver des éléments spécifiques du logiciel, facilitant le contrôle des futurs déploiements sans modifications manuelles. Ainsi, les développeurs peuvent se concentrer sur la correction des bugs.
Utilisez les tests A/B pour comparer les performances de différentes versions du logiciel. Identifiez la version la plus performante et adaptez vos futures décisions de développement.
Assurez-vous de pouvoir restaurer rapidement le déploiement en cas de problème avec la nouvelle version. Cela limitera l’impact des problèmes et permettra une récupération rapide.
Défis et Études de Cas
Malgré ses avantages, le déploiement Canary présente certains défis.
La latence du réseau peut affecter les performances de la nouvelle version. Pour y remédier, utilisez des équilibreurs de charge et des réseaux de diffusion de contenu. La latence des processus internes (déploiements, exécutions de pipelines CI/CD) doit également être optimisée pour éviter des temps d’attente pour les développeurs.
Assurer la cohérence des données entre l’ancienne et la nouvelle version est crucial. La réplication et la synchronisation des bases de données permettent de garantir cette cohérence. La synchronisation doit être parfaite pour que les utilisateurs ne perdent pas de données, quel que soit le groupe auquel ils appartiennent.
Netflix utilise le déploiement Canary pour les modifications de son service de streaming, en s’appuyant sur des tests automatisés, des indicateurs de fonctionnalités et des tests A/B.
Google utilise également le déploiement Canary pour les modifications de ses services cloud, en profitant des tests automatisés, de la répartition du trafic et de la surveillance, améliorant la qualité et la stabilité de ses services.
Derniers Mots
Le déploiement Canary n’est pas une solution universelle. Il peut être difficile à mettre en œuvre en raison de contraintes environnementales, de manque de compréhension ou de connaissances.
Cette approche est idéale pour les projets modernes avec une culture agile, une automatisation poussée et des exigences de fiabilité élevées.
Le déploiement Canary représente une évolution des pratiques de développement agile, permettant aux équipes d’atteindre des niveaux de performance inédits.
Poursuivez votre exploration avec la mise à l’échelle et l’optimisation CI/CD.