Pour nous assurer que chaque Clever App ait assez de ressources pour fonctionner, nous utilisons les métriques comme indicateur pour augmenter ou non le nombre d’instances d’une application.
Ces métriques, comme toutes celles de notre infrastructure interne, sont stockées dans une base de données time serie. Avec une croissance de 2 To par semaine, nous devons penser au cycle de vie de chaque métrique. Puisque nous ne souhaitons pas la supprimer, nous avons mis en place une solution d’archivage automatisée à partir de Cellar.
Notre infrastructure
Avec plusieurs milliers d’applications clientes, et plusieurs centaines pour des usages internes, nous avions besoin d’un moyen permettant d’accepter des centaines de milliers de points par seconde.
En production depuis octobre 2023, notre cluster warp10-c2 permet de répondre à ce besoin. Basé sur Warp10 et grâce à sa couche de stockage utilisant FoundationDB, nous sommes capables de tenir la charge face à des piques d’ingestions de plus de 500 000 points/seconde tout en permettant de lire 5 millions de points/seconde.
Un cluster en constante linéaire
Bien avant de pouvoir mettre en place cette stratégie d’archivage, notre équipe data a été confrontée à bon nombre de problèmes depuis la mise en production de c2.
Tout d’abord, pendant les premières semaines, le cluster a subi des problèmes de performances. Afin de pouvoir se concentrer sur ces derniers, nous avons continuellement ajouté de l’espace de stockage physique. Dès lors que ces problèmes de stabilité furent résolus, en ajoutant des nœuds permettant d’augmenter notre capacité de stockage, nous avons fait face à de nouveaux problèmes de ressources. Cette fois-ci liés au CPU et à la RAM. Et puisque nous n’avons pas des ressources infinies, nous avons gagner en capacité de stockage sans perte d’informations.
Les strategies possibles
La solution la plus naïve serait de sélectionner continuellement toutes les séries et points, et de les réécrire dans Cellar sans apporter de changement. Bien que c2 soit capable de gérer des millions de lectures par seconde, nous parlons ici de milliards de points. Même avec des machines de requêtes dédiées, cela aurait entraîné des problèmes de performances provenant de notre couche de stockage. De plus, nous aurons un espace disque utilisé similaire à celui des données dans le stockage à chaud.
Une seconde manière de procéder serait de réduire la résolution des métriques, plutôt que d’avoir des informations avec une précision à la seconde, la réduire pour avoir la moyenne sur une heure ou une journée. Cette stratégie amène beaucoup plus de questions que de réponses, comme :
- Que faire des extremums dans une série, doivent-ils être supprimés ou conservés ?
- Comment savoir depuis combien de temps une application fonctionne ?
- Doit-on appliquer cette stratégie sur nos applications internes, doit-on les traiter au cas par cas ?
Cette solution aurait exigé trop d’efforts dans un système qui aurait tout de même des défauts.
Enfin, la dernière stratégie consiste à utiliser l’extension Warp10 HFiles, une extension vendue par l’éditeur du logiciel permettant de générer des fichiers compacts de manière efficiente, avec des capacités de chiffrement. Cette solution peut nous aider à avoir un taux de compression fort en garantissant zéro perte, transformant des téraoctets de données en quelques dizaines de gigaoctets. Ce fort ratio de compression est notamment dû au fait que le nombre de valeurs qu’un point peut prendre est rarement infini, un pourcentage d’utilisation CPU par exemple ne peut avoir qu’un nombre fini de valeurs.
En février 2024, nous avons choisi cette troisième stratégie comme solution à notre problème. Cependant, nous avons dû mettre en place tout un workflow automatisé autour de cette extension afin de ne pas avoir à exécuter cette tâche manuellement chaque mois.
Automatiser le processus
Avant d’aborder la manière dont nous avons rendu cela possible, une brève introduction aux HFiles est nécessaire afin de mieux comprendre pourquoi nous avons procédé ainsi. Ensuite, nous explorons la mise en place de l’orchestrateur de workflow que nous utilisions pour automatiser le processus. Enfin, nous partagerons les chiffres du lancement de ce processus d’archivage.
Introduction aux HFiles de Warp10
Un “HFile” est une extension de fichier proposé par l’extension Warp10 HFiles. Le processus de génération d’un HFile est assez simple. Tout d’abord, nous l’extension va générer un cache local avec toutes les séries qui doivent être archivées en se basant sur des critères de sélection donnés par l’utilisateur. Pour chacune des séries, l’extension va récupérer tous les points dans une plage de temps spécifiée, tout en compressant continuellement ces points. Au travers de plusieurs expérimentations, nous savons que ce processus peut facilement prendre beaucoup de temps, parfois plusieurs jours.
Cependant, avec des paramètres et des critères de sélection spécifiques, nous sommes capables de générer des HFiles en quelques heures. Ces générations sont synchrones, ce qui signifie que vous devez conserver une connexion HTTP ouverte avec la machine exécutant la génération.
Nous avons principalement ajusté trois paramètres afin d’optimiser le temps de traitement :
- Plage temporelle des points : elle permet de récupérer uniquement des points de données entre deux dates ;
- Parallélisation : puisqu’une génération peut prendre plusieurs heures, nous pouvons paralléliser plusieurs exécution afin d’optimiser une mieux nos capacités de génération ;
- Nombre de séries : parce que pour chaque série dans le cache, l’extension essaiera de récupérer les données liées (même si la série est vide dans la plage de temps spécifiée), réduire le nombre de série dans le cache permet de limiter le nombre de requêtes au système de stockage.
Que signifie une « série » ?
Une série, aussi appelée GTS (“Geo Time Serie”) dans le contexte de Warp10 est un nom unique sous lequel sont enregistrés des points de données. Une série est composée d’un nom de métrique et de labels permettant de donner du contexte. Par exemple, pour une Clever App, une série qui contient la consommation du processeur serait cpu.usage_guest{app_id=’app_87e33fea-9dde-4a99-b347-674de382ff7b’}.
Dans notre cluster c2, nous avons plus de 150 millions de séries uniques.
L’orchestrateur de workflow
Pour permettre un archivage de manière automatisée, nous étions à la recherche d’un outil répondant aux contraintes suivantes :
- Planification : pour éviter de devoir déclencher l’action manuellement chaque mois ;
- Retry et failover : en cas d’échec d’une génération de HFile, il doit pouvoir réessayer, ou si un nœud du système crash, l’outil doit pouvoir reprendre la ou il s’était arrêté ;
- Alerting : lorsque plusieurs tentatives ne suffisent pas, nous devons être informé par un message Slack que le système n’a pas réussi de générer un HFile;
- Capacité à exécuter de longues tâches : comme nous le savons, nos générations peuvent prendre plusieurs heures, il ne faut donc pas que l’outil empêche cela.
Après avoir essayé plusieurs outils d’orchestration, notre avis final s’est placé sur Kestra. Un outil Open Source qui répond à toutes nos contraintes et à notre besoin. Déployé en tant que Clever App, nous avons pu mettre en place des workflows qui minimisent le temps de génération d’un HFile en utilisant nos paramètres optimisés.
Fin février, nous avons terminé notre workflow complet de génération de HFile, comme le montre le schéma ci-dessus, il est plutôt simple, mais très efficace. Jusqu’à présent, il a été exécuté sur les données du mois de Novembre, sans supprimer les données. Il s’agissait d’un test qui nous a permis d’avoir suffisamment confiance en Kestra pour permettre de valider nos dernières interrogations. Nous avons ensuite exécuté la suppression manuellement, afin de s’assurer qu’il n’y ait pas d’effet de bord, ou d’oublis.
Aujourd’hui, la génération des HFiles et la suppression des données est complètement automatisée grâce à Kestra. Même si notre utilisation de l’outil est assez simple, nous avons l’ambition de l’utiliser pour de nouveaux cas à l’avenir.
Chiffres sur les métriques du mois de Novembre 2023
Début Mars, nous avons lancé notre premier archivage, avec succès. Cet archivage est basé sur le mois de Novembre puisque nous souhaitons garder 3 mois de mesures disponibles.
Ce premier mois est particulier puisque c2 a été mis en production fin octobre, et toutes les applications clientes de Clever Cloud ont dû être redéployées pour utiliser le nouveau cluster. Cela signifie que les chiffres suivants comportent un nombre de séries et de points plus élevé que les mois qui suivront.
Nous avons archivé plus de 22 milliards de points provenant de plus de 33 millions de séries. Ces séries et points utilisaient environ 20 To d’espace disque. Une fois compressé, nous sommes rendus à 20 Go. Une chose importante à noter est que les données dans le cluster sont chiffrées, ce qui signifie que la taille d’un point est plusieurs fois celle du vrai point, puisque nous appliquons un algorithme de chiffrement.