• Les cookies assurent le bon fonctionnement de nos services. En poursuivant votre navigation, vous acceptez l'utilisation de cookies.

Tiramisu : cas d'utilisation
Cadoles , Technique , Tiramisu

Cadoles participe, depuis sa création, au développement de la bibliothèque libre Tiramisu (licence GPL).

Tiramisu est une bibliothèque.de gestion de configuration. Ce projet permet rapidement d'organiser, de manipuler et de valider des objets de configuration (classiquement des clefs/valeurs). La structure est conservée dans des objets Options et les valeurs dans un objet Config.

Tiramisu est un outil riche et complet. Mais il n'est pas toujours facile d'expliquer à quoi sert Tiramisu.

Je vous propose quatre exemples d'utilisation de la bibliothèque.

Cas 1 : les origines : Pypy

Pypy n'utilise pas Tiramisu, mais nous sommes partis du gestionnaire de configuration du code de Pypy pour créer la bibliothèque. Tiramisu serait donc tout à fait adapté pour gérer cette partie de Pypy. Le gestionnaire de configuration de Pypy (et donc de Tiramisu) est utilisé pour les options de l'interpréteur Pypy.

Le gestionnaire de configuration permet de gérer des valeurs par défaut, des valeurs spécifiées par les utilisateurs et des exigences.

La configuration est donc volatile et les valeurs n'ont pas besoin d'être conservées après avoir quitté l'interpréteur. Par contre, il y a de fortes contraintes entre les options.

Cas 2 : Gaspacho

Gaspacho est un outil libre de gestion de configuration des postes clients. Gaspacho utilise une base de données pour conserver les règles ainsi que les choix des utilisateurs. Ces choix peuvent être spécifiés pour un groupe de machines donné, ou hérité d'un autre groupe de machines.

Je ne vais pas présenter la base de données de Gaspacho dont la structure est assez complexe. Pour éviter de faire trop d'interrogations sur la base de données, j'avais tendance à faire des interrogations plus larges et à garder les résultats en cache. J'utilisais ce cache à différents endroits du code. Cela permettait d'améliorer la réactivité de l'application, mais complexifiait le code.

J'ai donc entrepris de remplacer les caches par des objets Tiramisu. Cela permet de charger une fois pour toute la structure des règles dans des objets Options et de ne charger les valeurs que pour un groupe de machines déterminé dans un objet Config. Cela permet donc de supprimer le système de cache et d'étendre les possibilités de validation de l'application.

Les valeurs sont enregistrées dans la base de données lorsque la config est supprimée. Les options sont conservées en mémoire jusqu'à la prochaine utilisation.

Cas 3 : Comparateur d'offres

Nous sommes en train de développer un comparateur d'offres des produits Cadoles. Dans ce comparateur d'offres, nous chargeons une structure Tiramisu (5 ou 6 critères) avec toutes les valeurs par défaut, les exigences et les calculs nécessaires. Pour cela, nous utilisons toutes les fonctionnalités de la bibliothèque.

Les valeurs définies par l'utilisateur n'ont pas besoin d'être conservées.

Cas 4 : Creole

Creole est un gestionnaire de configuration libre utilisé par le projet EOLE. Creole a trois contraintes importantes :
  • une structure (l'équivalent des options) à un moment T peut être complétement différente du moment T-1 ;
  • la structure du serveur ayant généré les valeurs (l'équivalent de l'objet Config) peut être différente du serveur final ;
  • les valeurs peuvent être calculées, Creole doit toujours retourner une valeur calculée et non une valeur enregistrée.
Comment cela fonctionne ? La structure est spécifiée dans des "dictionnaires" XML.

Les dictionnaires sont distribués dans des paquets EOLE. Ils peuvent évoluer au fur et à mesure du temps. De plus, l'administrateur local a toute latitude pour modifier, à tout moment, parfois même profondément, la structure.

Le fichier de valeur peut être récupéré depuis un serveur central Zéphir ou généré directement sur le serveur.

Tiramisu, par son aspect volatile, permet de générer les objets suivant la structure définie dans les dictionnaires. Il n'est donc pas nécessaire de faire une synchronisation entre la structure définie dans les XML et une base de données. Les valeurs seront validées au chargement des données et les calculs seront effectués juste à temps (Just In Time, JIT),

Il existe deux cas d'utilisation des objets Tiramisu :

  • en lecture seule : un démon conserve les objets en mémoire et fournit les valeurs à la demande (calculées ou non) ;
  • en lecture écriture : la configuration est conservée le temps du paramétrage du serveur, les valeurs sont enregistrées dans le fichier.
Pour information, une configuration de mon serveur de test représente (d'après Guppy)  6 977 objets et 446 112 bytes de mémoire utilisée. Le temps de chargement, incluant la validation, (d'après hotshot) est de 0.124 secondes.

Commentaires

Aucun commentaire pour l'instant, soyez le premier !

Cadoles recrute !

Nous recherchons de nouveaux coopérateurs :