Avoir confiance dans les nouvelles stratégies de déploiement cloud

Les environnements cloud dynamiques et pratiques DevOps permettent de déployer sur un seul micro-service bien identifié, mais qui sert aussi potentiellement des douzaines de services en amont déployés sur des containers ou hôtes. Comment garder le contrôle total sur le niveau d'interconnexion et de complexité sous-jacent ?

À l'époque "pré-cloud" des environnements monolithiques et du développement de logiciels en cascade, les déploiements de code étaient des événements isolés et faciles à gérer. Le code était déployé à un endroit spécifique de d'infrastructure, et l'équipe d’exploitation en contrôlait l'impact une fois en production. Cela était limitatif à bien des égards, mais signifiait une compréhension simple de l'impact d'un nouveau code : les équipes opérationnelles savaient où chercher, et quoi faire, si un nouveau déploiement de code tournait mal.

Désormais, les équipes peuvent déployer sur un seul micro-service bien défini plutôt que sur une infrastructure monolithique. Mais ce micro-service sert potentiellement des douzaines de services en amont déployés sur un ensemble de dizaines voire de centaines de conteneurs ou d'hôtes. Si cela permet de mieux contrôler les fonctionnalités, les performances et le coût d'exploitation, le niveau d'interconnexion et de complexité augmentent le risque global de commettre une erreur.

De nouvelles stratégies de déploiement permettent rapidité et passage à l’échelle  

Cette vitalité du cloud a conduit à de nouvelles stratégies de déploiement, qui étant donné le rythme de l’innovation, sont passées d’"utiles" à "nécessaires" dans la plupart des entreprises modernes reposant sur une infrastructure logicielle. Alors comment les équipes d'ingénieurs peuvent-elles entrer dans ce nouveau monde en toute confiance et en récolter les fruits tout en gardant ces risques sous contrôle ? Bien qu’il y ait des différences essentielles entre chacune de ces nouvelles stratégies de déploiement, elles reflètent toutes la nature distribuée, dynamique et collaborative du développement logiciel dans le cloud, ce qui permet une amélioration continue des applications au fil du temps. 

Stratégies de déploiement modernes les plus courantes

  • Déploiement progressif : le code est déployé progressivement, de petits incréments d’infrastructure, tels que quelques conteneurs pour s’assurer que tout va bien avant de déployer plus largement.
  • Déploiement canari : le code est déployé vers des instances spécifiques qui agissent comme le "canari dans une mine de charbon", ce qui permet aux équipes de savoir ce qui pourrait se passer si le code était déployé vers un plus grand nombre d’instances similaires.
  • Déploiement Bleu/Vert : implique d’exécuter un ancien code en arrière-plan tout en déployant le nouveau en même temps, l’ancien code servant de sauvegarde en cas de problème.
  • Déploiement A/B : utilise deux nouveaux déploiements tournant simultanément, ce qui permet de comparer leur performance respective.

Chacune de ces stratégies permet un déploiement plus rapide de nouvelles applications et fonctionnalités parce qu’elles permettent d’analyser l’impact de nouveaux déploiements et de les retirer si nécessaire. Un déploiement rapide sur une infrastructure ciblée permet de minimiser l’impact d’un bug qui a passé le contrôle qualité, de l’identifier, de le résoudre, puis rapidement de redéployer pour affiner le code. Cela semble simple, mais la réalité est toujours plus difficile. En effet, plusieurs équipes, ou même des ingénieurs individuellement, peuvent décider de déployer divers services en parallèle, ce qui peut rendre difficile de garder une trace de tout.

Commencer avec les données collectées lors des différentes versions de déploiement

La plupart des équipes ont déjà leurs outils et processus de monitoring en place pour collecter, organiser et visualiser leurs données. Pour une meilleure visibilité des stratégies de déploiement modernes, des tags doivent être appliqués à chaque déploiement, ce qui permet de comparer plusieurs versions entre elles. En effet, lorsqu’on essaie de résoudre un problème entre plusieurs déploiements et différentes versions du code, il faut avoir une visibilité totale et pouvoir basculer facilement d’une version à l’autre sur les données collectées.

La granularité des données collectées est essentielle pour identifier l’origine des problèmes aussi bien dans leur profondeur que dans leur étendue. Métriques, logs et traces des points de terminaison et des requêtes doivent être collectés, ce qui permet d’examiner des problèmes spécifiques et de les visualiser dans le contexte de leur environnement étendu et des déploiements en cours. Dès lors que les données sont collectées à un niveau granulaire et qu’un monitoring est mis en œuvre pour chaque déploiement, il est possible d’effectuer une résolution de problème et une remédiation, quel que soit le nombre de déploiement.

Le monitoring des stratégies de déploiement modernes en pratique

Disposer d’une richesse de données provenant de l'ensemble des déploiements n'est qu'un début. La façon d’utiliser ces données pour la résolution de problème est également importante pour la gestion des stratégies de déploiement modernes.

Tout d'abord, il faut identifier un ensemble de "signaux dorés", c'est-à-dire les données collectées qui donnent les meilleures indicateurs sur les performances d'un déploiement. Nombre de requêtes, leur latence et taux d'erreur sont les plus courants, tandis que les métriques d'infrastructure et les changements de performance au niveau du code en provenance des traces d'application sont également importants.

Puis, il sera nécessaire d’orienter vos pratiques de monitoring vers le maintien et l'observation de plusieurs versions de déploiement fonctionnant simultanément. Cette approche du monitoring ne doit pas être centrée sur des événements spécifiques dans le temps, mais plutôt sur l'observation continue des différents déploiements. Lors de la résolution de problèmes qui surviennent lors de déploiements nouveaux ou parallèles, il faut pouvoir accéder facilement à d'autres informations de vos outils d'observabilité, afin de pouvoir identifier les différences entre toutes les versions de micro-services. De cette façon, les logs, traces et profils de code peuvent être comparés et contrastés à la volée pour remédier à un problème.

Enfin, il faudra un programme solide d’alertes prédéterminées et des tableaux de bords préconçus, afin d’être avisé des problèmes les plus importants et de visualiser ce qui se passe en temps réel. 

Déployer en toute confiance

Les déploiements de code ne sont plus des événements confidentiels aux impacts mis de côté, le processus de déploiement de code et le monitoring de ses effets étant réellement continu. Pour utiliser ces nouvelles stratégies en toute confiance, une approche bien structurée du monitoring est nécessaire, car elle permet des comparaisons rapides des "signaux dorés" pour chaque version de service et une exploitation d’une richesse de données d’investigation lorsque quelque chose semble anormal. Une fois ces pratiques en place, les avantages du déploiement de codes modernes commenceront à se concrétiser : des fonctionnalités fournies plus rapidement, des erreurs évitées et des clients satisfaits.