Le déploiement Canary est une technique adoptée par les équipes DevOps, pour tester les mises à jour d'un logiciel auprès d'un petit groupe d'utilisateurs avant la relaxe générale. Découvrez tout ce que vous devez savoir sur cette méthode : fonctionnement, avantages, inconvénients...
Dans le passé, les canaris ont joué un rôle essentiel dans le forage des mines de charbon. Ces petits oiseaux étaient utilisés pour détecter le monoxyde de carbone et autres gaz toxiques avant qu'ils puissent blesser les humains. Pour cause, ils sont plus sensibles que nous aux toxines aéroportées.
Ce concept a été repris dans le domaine du logiciel, à travers le terme « analyse Canary ». À la manière dont les oiseaux prévenaient les mineurs en cas de problème dans l'air, l'analyse de déploiement Canary est exploitée par les ingénieurs DevOps pour anticiper les problèmes que peut poser une nouvelle relaxe en CI/CD (livraison et déploiement continu).
Qu'est-ce qu'un déploiement Canary ?
En ingénierie logicielle , un déploiement Canary consiste à déployer d'abord une mise à jour auprès d'un petit panel d'utilisateurs avant de le rendre disponible pour tous.
Le groupe d'usagers peut tester les nouveaux changements, et fournir leurs retours. Lorsqu'une modification est validée, elle est ensuite déployée auprès du reste des utilisateurs.
Cette technique vise à réduire les risques liés à l'introduction d'une mise à jour logicielle en production. En observant comment les utilisateurs interagissent avec les changements d'une application dans le monde réel, il devient possible d'anticiper tout dysfonctionnement.
Quand opter pour un déploiement Canary ?
Les équipes DevOps utilisent généralement le déploiement Canary lors de la relaxe d'une nouvelle version d'un logiciel comportant d'importantes mises à jour.
Elles adoptent aussi cette approche en cas de risque élevé de problèmes dans l'environnement de production. En effet, le concept de déploiement Canary est basé sur un principe fondamental : détecter et corriger les problèmes avant qu'ils n'affectent l'intégralité de la base d'utilisateurs. Cette pratique permet aussi à l'équipe de restaurer facilement une version ultérieure.
En guise d'exemple, on peut imaginer une entreprise de e-commerce dont la moindre panne d'application entraînerait une perte de revenus et une fuite de clients. Pour mettre à jour et améliorer continuellement son logiciel afin d'améliorer l'expérience client, il est dans son intérêt d'opter pour le déploiement Canary. Ceci lui permettra de réduire les risques d'erreurs à chaque changement.
Le déploiement Canary est une approche idéale pour les mises à jour rapides et fréquentes. Il permet de raccourcir les cycles de déploiement, réduisant le « time to market » et délivrant les nouveautés plus rapidement pour les clients.
Il convient aussi pour les larges systèmes distribués, notamment pour les entreprises ayant des clients aux quatre coins du globe. Les responsables de chaque région pourront déployer la mise à jour à leur rythme selon leur évaluation des risques.
Comment se déroule un déploiement Canary ?
Un déploiement Canary se décompose généralement en trois étapes. Dans un premier temps, il s'agit de planifier et créer une infrastructure Canary sur laquelle la dernière mise à jour est déployée. Un faible pourcentage du trafic est dirigé vers cette instance, tandis que la majorité des utilisateurs continuent d'utiliser la ligne de base.
Par la suite, l'équipe DevOps collecte les données de cette instance Canary telles que les métriques, les logs, ou les informations des outils de surveillance de trafic. Ces données sont ensuite analysées et comparées avec la version de ligne de base, pour vérifier si l'instance Canary fonctionne comme prévu.
Enfin, une fois l'analyse Canary complétée, l'équipe décide de déployer la mise à jour au reste des utilisateurs ou de revenir à une version antérieure en cas de problèmes.
Quels sont les avantages du déploiement Canary ?
L'approche Canary présente plusieurs avantages pour une équipe DevOps. Tout d'abord, exposer un nouveau déploiement à un nombre réduit d'utilisateurs réduit le risque d'erreurs en production.
Cette technique permet aussi d'éliminer les temps d'indisponibilité en production. Après avoir effectué les différents tests d'intégrité, de fumée et de capacité sur un trafic réduit, la restauration d'une version antérieure en cas de problèmes est une tâche rapide et aisée.
Si une erreur survient, il suffit de rediriger à nouveau le trafic vers la ligne de base. Les utilisateurs ne seront donc pas exposés au dysfonctionnement du logiciel. De leur côté, les ingénieurs peuvent continuer à travailler pour déterminer la cause du souci et le corriger avant d'introduire une nouvelle mise à jour.
Par ailleurs, cette méthode permet de faire des économies. Le déploiement d'une mise à jour auprès d'un ensemble réduit d'utilisateurs ne requiert qu'un faible ajout d'infrastructure. Cette approche est donc nettement moins coûteuse qu'une stratégie « blue-green » impliquant l'approvisionnement d'un nouveau produit pour déployer l'infrastructure.
Autre avantage : le déploiement Canary offre aux entreprises une flexibilité accrue pour expérimenter de nouvelles fonctionnalités. Chaque test d'instance Canary a un impact minime sur l'expérience utilisateur et l'infrastructure d'une organisation, laissant aux développeurs la liberté d'innover.
Cette technique confère aussi la capacité de mener des tests A/B. En divisant l'instance Canary en deux parties égales, il est possible d'effectuer une comparaison pour déterminer la stabilité de la mise à jour. Enfin, il est possible d'augmenter progressivement la charge de l'instance Canary pour tester progressivement sa stabilité en production.
Les inconvénients du déploiement Canary
Bien évidemment, le déploiement Canary n'est pas exempt d'inconvénients. Cette approche requiert du temps, notamment si les entreprises effectuent la phase d'analyse de façon isolée et non intégrée.
Dans ce cas de figure, un ingénieur DevOps est chargé de collecter les logs et données de la version Canary et de les analyser manuellement. Ce processus est chronophage, et n'est pas adapté aux déploiements rapides en CI/CD.
De plus, l'analyse peut être imprécise et entraîner de mauvaises prises de décisions. Il est préférable d'utiliser des outils d'automatisation pour accroître la vitesse et la fiabilité de cette étape analytique.
De manière générale, la méthode Canary ne convient pas aux mises à jour d'applications sur site (on-premises) ou client lourd installées sur des appareils personnels. Une solution à ce problème consiste à configurer un environnement de mise à jour automatique pour les utilisateurs finaux.
En outre, l'implémentation peut être difficile. Si l'approche Canary simplifie la gestion des différentes versions d'une application, d'autres outils sont requis pour gérer les bases de données. Le processus de déploiement peut devenir très complexe si l'on tente de modifier l'application pour interagir avec la base de données, ou pour changer le schéma de base de données.
Pour effectuer le déploiement Canary, il est alors nécessaire de commencer par changer le schéma de la base de données pour qu'elle puisse prendre en charge plusieurs instances de l'application. C'est ce qui permettra aux versions anciennes et nouvelles d'être exécutées simultanément.
Relaxe vs Déploiement : quelles différences ?
Une relaxe Canary est un build précoce d'une application. De nombreuses entreprises publient une telle version de leurs produits, dans l'espoir que des utilisateurs les télécharge pour les tester.
C'est par exemple le cas de Mozilla, et ses versions bêta et nightly. De même, Google propose une version Canary de son navigateur Chrome. Cette approche est très adoptée dans le domaine du logiciel open-source, et consiste à séparer la version « stable » en production des branches de développement.
Au contraire, un déploiement Canary consiste à installer la mise à jour sur les systèmes internes sans la publier. Ce sont les utilisateurs qui sont séparés en deux groupes.
Une petite partie est dirigée vers la version Canary, tandis que les autres restent sur la version en production. Après cette période de test permettant d'évaluer la version Canary, les équipes DevOps décident ou non de déployer la mise à jour.
Canary vs Blue-Green : 2 approches du déploiement
La technique Bleu-Vert est similaire au déploiement Canary. Elle consiste à utiliser deux environnements de production : Bleu et Vert. Ceci permet de tester et mettre à jour continuellement le logiciel, en étant capable d'effectuer une restauration en cas de problème.
Ces deux approches présentent leurs avantages et inconvénients respectifs. En général, le déploiement Bleu-Vert est un meilleur choix si le code de la nouvelle version a déjà été testé et que le risque d'erreur est faible, si les mises à jour sont de petites itérations, et s'il est nécessaire de migrer tous les utilisateurs en une seule fois.
En revanche, le Canary est une meilleure option si la nouvelle version présente des risques, s'il s'agit d'une mise à jour majeure, si les performances sont une priorité, si le déploiement n'est pas urgent, et si l'application d'un système qu'il n'est pas possible de répliquer sur un environnement de test.
Roulant ou côte à côte : les deux types de déploiement Canary
Un déploiement Canary implique d'exécuter deux versions d'une application simultanément. L'ancienne version est appelée « stable », et la nouvelle « canary ». Toutefois, on distingue deux façons de déployer la mise à jour : rolling (roulant) ou side-by-side (côte à côte).
Un déploiement roulant consiste à installer les changements par vagues, sur un petit nombre de machines. Les autres serveurs continuent d'exécuter la version stable. C'est la façon la plus classique d'effectuer un déploiement Canary.
Dès que la version Canary est exécutée sur un serveur, un petit nombre d'utilisateurs verront les mises à jour. Les équipes DevOps peuvent alors vérifier l'absence d'erreurs ou de problèmes de performances.
On installe ensuite progressivement la mise à jour sur le reste des machines jusqu'à ce qu'elles exécutent toutes la nouvelle version. En cas de problème, il suffit d'annuler les changements en restaurant l'état précédent des serveurs.
Un déploiement Canary côte à côte (side-by-side) s'apparente davantage à un déploiement bleu-vert. Au lieu de mettre à jour les serveurs par étapes, la version Canary est installée sur une copie de l'environnement en production.
Cet environnement est ensuite présenté à une portion des utilisateurs. Là encore, le groupe de test est surveillé et les autres utilisateurs sont migrés progressivement vers la nouvelle version. Lorsque le déploiement est complété, l'environnement de test est supprimé pour libérer les ressources.
Les meilleurs outils Canary DevOps
Il existe de nombreux outils simplifiant le déploiement Canary. Pour l'approche roulante, on peut notamment exploiter AWS CodeDeploy, Chef, Puppet et Docker.
Pour un déploiement côte à côte, les outils comme Terraform, Ansible ou AWS CloudFormation permettent de définir l'infrastructure en tant que code. Les outils de CI/CD peuvent également compléter cet arsenal, afin de maximiser l'efficacité de la livraison de code.
Les plateformes d'applications mobiles Google Play Store et Apple App Store sont toutes les deux compatibles avec cette méthode de déploiement. Elles permettent de pousser les mises à jour par vagues auprès d'un nombre d'utilisateurs défini. Il s'agit donc d'une approche adaptée aux applications mobiles.
Pour le déploiement de systèmes distribués complexes, l'orchestrateur de conteneurs Kubernetes est d'un précieux secours. Elle propose un outil natif pour le déploiement roulant et cote à cote. Cette plateforme permet le déploiement, la mise à jour et le scaling d'applications par le code.
Conclusion : une stratégie de déploiement idéale pour le CI/CD
La méthode Canary est utilisée par de nombreuses équipes DevOps, car elle réduit les risques d'erreurs et de problèmes lors du déploiement d'une mise à jour en production. Elle réduit aussi les besoins d'infrastructure additionnelle.
Les organisations optant pour cette approche peuvent tester une nouvelle relaxe dans un environnement de production live, sans pour autant exposer tous les utilisateurs aux éventuels dysfonctionnements.
Bien que cette technique comporte des inconvénients et ne soit pas adaptée à tous les types de logiciels, elle offre généralement de nombreux avantages pour le DevOps et le CI/CD.
Afin de découvrir toutes les techniques et maîtriser les outils DevOps, vous pouvez choisir DevUniversity. Nos formations à distance vous permettront d'acquérir toutes les compétences d'ingénieur DevOps ! Découvrez DevUniversity !
Vous savez tout sur le déploiement Canary. Pour plus d'informations sur le même sujet, découvrez notre dossier complet sur Jenkins, un outil open source et notre dossier sur l'Infrastructure en tant que Code.