Le déploiement en production peut être risqué. Malgré toutes les stratégies d’atténuation mise en place — spécialistes de l’AQ, suites de tests automatisées, surveillance et alertes, examens de code et analyse statique — les systèmes deviennent de plus en plus complexes chaque jour. Cela rend plus probable que lors de l’introduction d’une nouvelle fonctionnalité elle se répercute sur d’autres domaines de votre application, et ne cause des bogues qui érodent la confiance de vos clients.
Faisant allusion au « canari dans la mine de charbon », les déploiements de canaris sont pour les développeurs des déploiements sur un sous-ensemble d’utilisateurs ou de systèmes. En rendant accessibles de nouveaux logiciels à une partie des utilisateurs, les développeurs surveillent les problèmes sans causer de perturbations majeures. Cela permet de garder la confiance générale des clients tout en libérant les développeurs pour se concentrer sur l’innovation et la fourniture de nouvelles fonctionnalités aux clients.
L’histoire des déploiements de canaris
Le terme « déploiement canari » provient d’une ancienne technique d’extraction du charbon. Ces mines contenaient souvent du monoxyde de carbone et d’autres gaz dangereux qui tuaient les mineurs. Les Canaries sont plus sensibles aux toxiques aéroportés que les humains, de sorte que les mineurs les utiliseraient comme détecteurs précoces. Les oiseaux étaient souvent victimes du gaz avant que les mineurs en souffrent. Cette approche a permis d’assurer la sécurité des mineurs : un oiseau mourant ou tombant malade sauver plusieurs vies humaines. En fait,la légende prétendant qu’on emmenait jadis des oisillons dans des cages au fond des mines (ils succombaient en présence de gaz, avertissant les mineurs) est en grande partie erronée. En effet, le grisou n’est pas toxique, il peut remplacer l’oxygène de l’air (anoxie) si sa concentration est supérieure à 30 % auquel cas il est déjà trop tard. Les oiseaux sont en revanche très sensibles au monoxyde de carbone (autre ennemi invisible des mineurs), produit par l’oxydation des poussières de charbon et susceptible d’accompagner les dégazements de grisou. Ils réagissent la plupart du temps en gonflant leur plumage.
Dans le développement de canaris, une partie des utilisateurs reçoit une nouvelle version et est don notre canari. Il détecte les bogues potentiels et les perturbations sans affecter tous les autres systèmes en cours d’exécution. Les gestions des versions avec canaris sont généralement de courte durée et utilisées pour valider si une version répond aux exigences qu’il a énoncées.
OK, mais comment puis-je faire cette magie se produire ?
L’idée elle-même est simple, mais il y a beaucoup de nuances dans la façon dont pour aborder le déploiement de logiciels de cette manière. Souvent, il faudra beaucoup de temps pour être de faire des versions avec des canaris.
La gestion de version en a-t-elle besoin ?
Les déploiements de canaries ont un coût. Ils ajoutent de la complexité à vos processus et à vos systèmes. L’approche présente également des défis dans la maintenance de vos produits et pour faire face à vos problèmes excitant sur les différentes versions de vos logiciels.
Lorsque vous déterminez s’il faut utiliser un déploiement de canaris pour une version, vous savoir si cela en vaut la peine. Les nouvelles versions introduisent de nouveaux codes, de nouveaux composants et de nouveaux services qui peuvent tous comporter des risques. Il faut répondre à certaines questions avant d’envisager une approche de déploiement de canaris :
- La version représente-t-elle un refactor significatif du code existant ?
- Comment cette nouvelle version se comporte-t-elle dans le monde réel en termes de scalabité et de performance ?
- Avez-vous testé tous les cas de bord pour des problèmes fonctionnels ?
Les modifications simples du code sont relativement faciles à déployer et ne conviennent pas au déploiement de canaris. Les modifications à plus grande échelle et mises à jour du code, si la modification de l’emplacement d’un bouton ne vaut pas un canari, l’introduction d’un nouveau module de reporting le mérite.
Quel sera votre canari ?
Il est important de déterminer quelles sont les éléments que vous utiliserez pour partitionner. Il y a généralement deux domaines qui font bons échantillons : les utilisateurs et les instances.
Bien que l’utilisation de deux manières de partitionner soit un bon début, trouver des découpage à plusieurs niveaux vous permettra d’envisager une augmentation incrémentale de l’exposition et vous permettra de gagner de la confiance dans votre capacité de release.
Par Utilisateur
Presque toutes les applications portent le concept d’utilisateur et vous devez choisir de regrouper les utilisateurs (par emplacement ou fuseau horaire). Diviser par région géographique, par exemple, la création d’une libération canari pour vos clients chinois à déployer pendant la nuit. Cela permettrait de s’assurer que l’impact commercial en cas d’échec sera faible tout en recevant quelques commentaires des noctambules.
Une alternative, prendre un pourcentage, par exemple seulement cinq pour cent des utilisateurs passe sur la nouvelle version et les erreurs augmentent ou si les temps de réponses augmentent. Ou enfin cloisonner en fonction par l’adhésion à un programme « early adopter » comme par exemple le programme Microsoft Windows Insider.
Essayez de choisir un échantillon où la confiance est élevée ou ou la perte de confiance des clients aura un faible impact.
Par exemple
Séparer les informations par utilisateur est le moyen le plus efficace pour diviser vos utilisateurs. Sans méthode implémentée pour le faire, vous pouvez utiliser vos instances d’application et de service comme canaris. Si vous avez plusieurs instances de votre application, configurer un sous-ensemble d’entre eux pour distribuer le nouveau logiciel.
De quelle infrastructure ai-je besoin ?
Si vous souhaitez mettre en œuvre le déploiement de canaris, il existe de nombreuses options. Vous devez être en mesure de diviser la base d’utilisateurs et que vous pouvez modifier cette partition au moment de l’exécution. Cela peut être fait dans le code (par exemple à l’aide d’une instruction de commutateur) ou vous pouvez utiliser vos mécanismes de répartitions de charge pour acheminer le trafic en fonction des en-têtes de demande dans les requêtes adéquates.
Comment puis-je savoir si quelque chose va mal?
Si on oublie les bug fonctionnels, les déploiements en canaries ne sont utiles que si vous pouvez suivre leur impact sur votre système. Cela induit la mise en place d’un certain niveau de surveillance ou d’analyse dans votre application. Ces analyses doivent être corrélées à la façon dont vous divisez vos fonctionnalités. Par exemple, par les utilisateurs d’une région, vous devez être capable de voir le volume de trafic et la latence par chaque région. Les métriques utiles sont la latence, le nombre d’erreurs internes, le volume, l’utilisation de la mémoire et l’utilisation du processeur et les I/O.
Heureusement, il est facile de nos jours de transférer l’analyse et la surveillance. Vous pouvez utiliser des options open source (grafana) sans frais initiaux, ou opter pour des solutions commerciales. Sur une plate-forme cloud, beaucoup de ces mesures sont intégrées. Il n’est généralement inutile de le construire vous-même, adapter les paquets existant en fonction de vos besoins.
C’est une bonne idée de réfléchir à la façon dont vous allez revenir en arrière si vos analyses révèlent que la version canari ne répond pas à vos objectifs.
Quand est-ce que je pousse la nouvelle version à tout le monde ?
Comme nous l’avons mentionné plus tôt, les versions de canaris sont idéaux pour valider qu’un changement répond à l’exigence. Vous voulez garder le canari sur une courte durée (maximum de quelques heures) et puis vous retirez le canari, et le déployer entièrement. Vous devez pas maintenir deux branches différentes du code à la suite de la création d’un canari – la libération du canarie doit atterrir votre ligne principale.
Mettre l’accent sur la réalisation de l’excellence, pas sur l’évitement des risques
Si vous implémentez des déploiements de canaris pour vos versions, vous aurez un poids en moins lourds sur les épaules coté peur. Vous penserez moins aux pannes de production et aux perturbations et vous pourrez-vous concentrez sur la façon de pousser la prochaine fonctionnalité que tous vos clients attendent.