Mis à jours 14 novembre 2017 L’industrie du logiciel construit des cloud hybrides depuis plus d’une décennie maintenant. Les stratégies et les meilleures pratiques ont commencé à se cristalliser pour savoir comment les gérer. L’industrie ne se contente plus de jouer avec des applications basées sur le cloud ; voici les meilleures pratiques pour les opérations cloud ou CloudOps.
Pour les besoins de cet article, cassons le concept d’un cloud hybride à ses composants et discutons de la meilleure façon de gérer un cloud hybride en termes de performance. Une fois qu’on fait cela, on peut combiner les parties dans une architecture de cloud hybride complète et analyser les fonctionnalités holistiques de la gestion de la performance. Ensuite, on va voir comment tout cela s’intègre dans CloudOps, ce qui est un peu plus stratégique.
Le pouvoir de la distribution est la clé
Les cloud hybrides d’aujourd’hui ne sont pas les mêmes que ceux que nous avons déployés il y a quelques années. À un moment donné, les charges de travail étaient liées statiquement à un cloud privé ou à des cloud publics. De nos jours, les charges de travail peuvent être déplacées à volonté entre les cloud privés et publics. Nous pouvons le faire de manière dynamique en temps quasi réel ou en tant que processus manuel, comme le déplacement de code et de données bruts.
La possibilité de déplacer des charges de travail entre des cloud privés et publics est un élément clé. Considérez que la performance consiste à trouver des moyens de faire fonctionner les composants dans une architecture d’application de manière optimale. Si vous regroupez ces composants dans des charges de travail (par exemple : base de données, programme et interface utilisateur), il est plus facile d’optimiser les applications car elles sont regroupées de manière à être plus faciles à utiliser.
Il existe différentes manières de créer des charges de travail, y compris des machines virtuelles, des conteneurs ou des applications liées entre elles. Une discussion détaillée sur la façon de déplacer ces types de charges de travail dépasse la portée de cet article, mais il est utile de parcourir le processus de déplacement des conteneurs.
Les conteneurs sont des ensembles autonomes de composants pouvant inclure du code d’application, des bases de données, des logiciels intermédiaires, des services de sécurité ou tout ce qui précède. Vous pouvez avoir plusieurs conteneurs qui forment une seule application, ou vous pouvez avoir un seul conteneur qui peut inclure l’ensemble du système. De toute façon, les conteneurs peuvent fonctionner sur des cloud publics et privés.
L’idée que nous essayons de faire passer ici est qu’il existe de nombreuses options pour équilibrer les charges de travail entre les cloud privés et publics. Les manières de répartir les charges de travail entre les cloud privés et publics sont fondamentalement illimitées. Lorsqu’il s’agit de gérer la performance, vous avez le pouvoir de la distribution à votre côté. Alors assurez-vous de tirer parti de cela.
Les composants de suivi des services
Compte tenu du fait que les parties de l’application peuvent être exécutées dans le cloud privé ou public, il est utile de gérer la performance via les services (ou microservices) externalisés par l’application ou la plate-forme cloud elle-même. Pour gérer la performance du cloud hybride en tant qu’ensembles de services, vous devez envisager d’utiliser les composants logiques ou les technologies suivants :
- Agents de service
- Référentiel de service
- Gestionnaire des communications
- Moteur des analyses de performance
- Base de données de séries chronologiques
- Gestion des alertes (voir la figure 1)
Gardez à l’esprit que ce sont des concepts logiques, et nous ne cartographions pas ces concepts à la technologie pour le moment.
Figure 1 : Vue conceptuelle et logique du système de surveillance de la performance du service de cloud hybride. L’idée est de s’en servir comme base pour sélectionner la bonne technologie ou les technologies dont vous aurez besoin.
Avant d’examiner les composants et les technologies, voici quelques éléments à prendre en compte lors de la mise en œuvre des mesures de performance du service et de la surveillance d’un cloud hybride :
- Surveillance de tous les services pertinents qui collectent des mesures de performance, y compris le temps de fonctionnement, la performance, les dépendances et les tendances.
- Analyse proactive des données de tendance pour déterminer la probabilité de problèmes actuels ou futurs et éventuellement corriger ces problèmes avant qu’ils ne surviennent.
- Prise en compte des dépendances de service telles que l’analyse de la performance des services en tant que groupes liés.
- Mesures et surveillance de performance dans le cadre d’un programme de gouvernance de service solide.
- “Auto-guérison” – résolution automatique des problèmes de performance avec des systèmes qui apprennent et deviennent meilleurs en prenant des mesures correctives.
- Surveillance dynamique qui modifie sa fréquence pour éviter les problèmes de performance en cas de charge élevée sur une application.
- Rapports centralisés, analyses, suivi visuel et alertes.
- Suivi de la valeur commerciale directe à partir des mesures de performance et des sous-systèmes de surveillance.
- L’organisation, l’analyse, la visualisation et le stockage des données de performance historique permettent de suivre les problèmes de performance et les résolutions afin d’éviter de manière proactive ces problèmes à l’avenir.
Agents de service
Les agents de service sont des composants logiciels qui s’exécutent côte à côte avec ou à l’intérieur d’un service existant, sur des cloud publics ou privés (voir Figure 1). De nombreux services peuvent être liés à un seul agent ou un seul service est lié à un seul agent. Le rôle des agents de service consiste à :
- Interagir avec le point de surveillance dans le service pendant la production et les opérations.
- Interagir avec le référentiel de service pour déterminer l’identité du service et les seuils de performance dynamique actuel et respecter ces seuils.
- Mettre à jour la base de données de séries temporelles (voir ci-dessous) telle que définie dans le référentiel de service, à une fréquence prédéfinie et dynamique.
- Gérer les communications et les alertes avec d’autres composants (push).
- Travailler avec le système de gestion des identités ou d’autres sous-systèmes de sécurité pour gérer les services d’authentification.
- Travailler avec le système de gouvernance des services pour tirer parti des politiques.
La meilleure façon de penser aux agents de service est qu’ils interagissent avec les services afin de déterminer la performance pendant les opérations. De plus, gardez à l’esprit que les agents eux-mêmes peuvent causer des problèmes de performance et doivent donc être utilisés avec parcimonie et uniquement lorsqu’ils surveillent des composants de performance critique en utilisant les services.
Référentiel de service
Le référentiel de service conserve tous les attributs, les politiques et les identités du service et fournit une découverte de point de service unique sur les clouds publics ou privés. Généralement, cela fait partie d’un système de gouvernance du service, mais il peut être créé spécifiquement pour le suivi de la performance et répliquer directement à partir du référentiel de gouvernance du service. Le rôle du référentiel de service est de :
- Fournir un endroit pour définir les seuils de la performance du service actuel et passé qui sont lus et utilisés par les agents ; ceux-ci couvrent à la fois les clouds privés et publics et peuvent être modifiés dynamiquement en utilisant des API.
- Fournir une identité de service mise à jour, comprenant les dépendances avec d’autres services ou systèmes. Cela permet de définir les groupes de services (tels que les composites) qui agissent ensemble pour exécuter une seule fonction. Les services sont surveillés individuellement et en groupe.
- Définir l’emplacement et les informations de liaison pour les agents qui représentent chaque service.
- Stocker d’autres informations pertinentes pour la gestion de la performance des services.
De nos jours, les référentiels de service ne devraient jamais être construits. Il existe de nombreuses solutions open-source et propriétaires. Dans certains cas, vous devrez peut-être vous adapter à un référentiel existant.
Gestionnaire de communications
Le gestionnaire de communications traite toutes les communications entre les agents, les services, les référentiels de service, les bases de données, les analyses et les autres composants chargés de surveiller et de gérer la performance du service. Généralement, il s’agira d’une longue file – ou d’une autre couche d’intergiciels à haute vitesse – qui permettra aux messages d’être produits et consommés par chaque composant du système. Le rôle du gestionnaire des communications consiste à :
- Se connecter avec chaque composant du système de gestion de la performance du service ; ceci inclut l’authentification et la validation.
- Consommer les informations de chaque composant, transmettre ces informations à la cible correcte et produire ces informations pour la cible.
- Maintenir les débits de données à haute performance afin de réagir instantanément aux alertes et aux réponses relatives à la performance du service.
- Consigner toutes les communications avec les analyses actuelles et futures.
- Récupérer rapidement les échecs de communication, y compris l’avance et le retour en arrière.
Moteur des analyses de performance
Le moteur des analyses de performance est un composant logiciel « enfichable » qui fournit des services des analyses « intégrés ». Vous exploitez ces analyses pour gérer dynamiquement la performance du service pendant la production. Le rôle du moteur des analyses de performance est de :
- Fournir des services analytiques en temps réel sur la performance de tous les services connectés et recommander des changements de seuil, de capacité ou de comportement. (Par exemple, si un service s’exécute sous un seuil et que l’agent génère une alerte, le moteur des analyses peut déterminer une action automatique basée sur les données de la performance actuelle de ce service à partir de la base de données de séries temporelles, et sur le profil de ce service à partir du référentiel de service. Les actions résultantes pourraient être d’augmenter dynamiquement la taille du cache de la base de données, de rediriger vers un autre serveur ou d’alerter un humain.)
- Fournir des rapports ponctuels sur la performance du service et les tendances au fil du temps.
- Apprendre de manière dynamique en recueillant des données, comprendre les causes et les effets lorsque les problèmes de performance sont identifiés et résolus.
- Fournir la console d’administration ainsi que les API pour l’intégration aux autres consoles de gestion du système.
Base de données de séries chronologiques
La base de données de séries chronologiques traite à la fois les données complexes structurées et non structurées. Cette base de données stocke toutes les données brutes enregistrées concernant la performance du service, telles que l’heure, la réponse du service, la réponse de la base de données, la latence du réseau et d’autres informations pouvant être utilisées dans le profil de la performance du service. Il y a deux rôles clés de la base de données de séries chronologiques :
- Stocker des quantités massives de données de séries temporelles afin de surveiller et analyser activement la performance.
- Enregistrer tous les problèmes de performance (par exemple, les alertes) et les solutions à ces problèmes afin que ce système puisse répondre immédiatement à la prochaine fois.
Gestion des alertes
Le système de gestion des alertes est un logiciel qui traite les services placés dans un état d’alerte par leurs agents respectifs, traite les alertes selon les politiques prédéterminées qui sont stockées dans le référentiel de service. Le rôle du système de gestion des alertes est de :
- Capturez les alertes transmises par les agents via le gestionnaire des communications. Généralement, il s’agit des alertes générées par des services qui ne respectent pas les seuils ou qui échouent complètement.
- Évaluer chaque alerte en termes de gravité et se connecter au moteur des analyses pour une analyse du problème et des actions correctives automatiques potentielles. Le système de gestion des alertes génère alors une action corrective, si le moteur des analyses lui demande de le faire. Il peut également alerter les humains.
- Enregistrer chaque alerte, y compris la cause et la résolution, dans la base de données de séries chronologiques pour faciliter l’analyse future et déterminer le bon chemin pour résoudre les futurs problèmes de performance.
- Tracer des chemins pour mieux déterminer l’origine de l’alerte et les autres services qui doivent être traités dans la résolution du problème.
Liste des outils
Gardez à l’esprit que ce que nous définissons ici est de nature conceptuelle. Cependant, c’est une bonne idée de travailler depuis vos exigences conceptuelles à vos solutions de gestion de la performance réelles. La sélection de la technologie sera la dernière étape de ce processus conceptuel. Vous avez des dizaines de systèmes propriétaires et open source à considérer qui comprennent, mais sans s’y limiter :
- Sensu
- Graphite
- Cepmon
- Logstash
- Librato
- PagerDuty
- Umpire alerting-controller
- Graphite
- Statsd
- Logster
- Incinga
- ZeroMQ
- Chef
- Fantoche
- Zookeeper
- Riemann
- OpenTSDB
- Ganglia
- TempoDB
- CollectD
- Datadog
- Folsom
- JMXTrans
- Pencil
- Rocksteady
- Boundary
- Circonus
- GDash
Il n’y a pas de modèles communs à ces outils, et ils sont typiquement conçus pour des aspects spécifiques de la gestion de performance. Vous devrez probablement en sélectionner plusieurs afin de construire votre solution ultime.
Ce n’est pas facile, comme vous l’avez peut-être compris. Bien que nous ayons utilisé du cloud computing hybride depuis un certain temps, la performance a été un peu après coup. Cela dit, étant donné que nous nous concentrions davantage sur les CloudOps et les systèmes de qualité de production qui existent sur les cloud hybrides, la gestion de performance doit être au cœur de la stratégie de déploiement de CloudOps. Résolvez ce problème maintenant, sinon vous aurez un énorme problème à l’avenir.