English version is available here: Linear programming applied to virtualization
Introduction
La recherche opérationnelle est une discipline mathématique fournissant des outils d'aide à la décision. Parmis les problème pouvant être résolus à l'aide de ces techniques, on trouve les problèmes combinatoires. Un exemple de ce type de problème: le dimensionnement d'une infrastructure de virtualisation, ou comment trouver la meilleure combinaison de serveurs physiques pour héberger des machines virtuelles au meilleur coût?
Cette fois, nous n'utiliserons pas GLPK mais LibreOffice. Grâce à l'optimiseur linéaire intégré à la suite bureautique, il devient très simple et presque convivial de résoudre ce type de problème. Il ne s'agit évidemment que d'un exemple parmis tant d'autre de ce que l'on peut faire avec LibreOffice.
Énoncé du problème
Une entreprise souhaite déployer une plate-forme web sous forme de machines virtuelles. Ces machines virtuelles ont bien entendu différentes fonctions: Front, Cache, Proxy, BDD slave et BDD master.
Les équipes techniques de l'entreprise ont effectué des tests de la future plate-forme web et ont déterminé les besoins en terme d'I/O disque, CPU et mémoire. De plus, l'entreprise ne souhaite pas acquérir de nouveaux types de matériels. Il faut donc héberger cette plate-forme sur des serveurs existants. Ces serveurs sont de 3 types et possèdent des capacités I/O disque, CPU et RAM connues des équipes techniques, là encore après des tests. De plus, les équipes techniques ont constaté des effets de seuil, qui dégradent les performances des serveurs. Ces effets de seuils, ici appelés Saturation sont également indiqués.
L'objectif final est de déterminer le nombre de serveur de chaque type à acheter pour pouvoir héberger la plate-forme tout en minisant les coûts.
Énoncé mathématique du problème
Soit x1, x2 et x3 le nombre de serveurs de type SRV1, SRV2 et SRV3 à acquérir.
Pour chaque critère (I/O disque, CPU et mémoire), il faut bien entendu que le besoin total des machines virtuelles soit couvert par l'apport des serveurs physiques. Pour chacun des critère de chacun des serveurs, on applique la saturation, c'est à dire que seuls 60% de la capacité I/O disque, 60% de la capacité CPU et 95% de la capacité mémoire sont effectivement "disponibles".
Ceci nous donne 3 contraintes à respecter:
- Contrainte d'
I/O disque: 540x1+ 360x2+ 180x3>= 12500 - Contrainte de
CPU: 540x1+ 450x2+ 360x3>= 16500 - Contrainte de
mémoire: 121,6x1+ 60,8x2+ 45,6x3>= 2560
Les valeurs de droite pour chacune de ces inéquations représentent le besoin total des machines virtuelles.
Le coût total de la plate-forme web dépendra du nombre de serveur de chaque type à acheter. Le calcul de coût est finalement assez simple:
- Coût mensuel:
x1(5500/36 + 55) +x2(3000/36 + 40) +x3(2000/36 + 30) - Coût sur 36 mois:
x1(5500 + 55*36) +x2(3000 + 40*36) +x3(2000 + 30*36)
Résolution avec LibreOffice
Une fois les bases du problème posé, nous pouvons le résoudre. Dans ce cas précis, nous allons utiliser OpenLibreOffice, et plus précisément Calc. Vous pouvez récupérer le classeur Calc utilisé pour cet exercice.
Les cellules en vert clair peuvent, et devraient, être modifiées par vous. Ceci vous permettra de jouer plusieurs scénarios.
Les cellules contenant les informations Besoin des machines virtuelles et Capacités des serveurs peuvent également être modifées. Bien évidemment, il faudra y inscrire des valeurs représentatives de votre matériel et/ou machines virtuelles.
En revanche, ne modifiez rien en dehors de l'étape 1, sauf à savoir ce que vous faites: l'étape 2 consolide les besoins et capacités, l'étape 3 vous donne les informations Nombre de serveurs physiques. Quant à l'étape 4, vous aurez deviné qu'elle vous donne le résultat final avec le coût de votre infrastructure. Le tout utilise des formules Calc, il est donc important de ne les modifier qu'en connaissance de cause.
Utilisation de l'optimiseur LibreOffice
Une fois la feuille Calc remplie avec les valeurs, utilisez le menu Outils > Solveur comme indiqué à l'image ci-dessous
Dans la fenêtre qui s'ouvre, la cellule cible correspond à notre objectif, soit le coût final. il s'agit donc de la cellule F24. L'objectif étant de minimiser les coûts, vous cocherez l'option Minimum. Les cellules à modifier concernent le nombre de serveurs physiques, soit les cellules C24 à E24. Enfin, les contraintes à respecter sont:
- Cellule
F17inférieure ou égale à celluleG17(contrainte d'I/O disque) - Cellule
F18inférieure ou égale à celluleG18(contrainte d'CPU) - Cellule
F19inférieure ou égale à celluleG19(contrainte d'mémoire)
Nous y sommes presque. Un dernier détail à régler: il faut s'assurer que le nombre de serveur soit positif d'une part, et surtout un nombre entier. Je doute que 2,3215 serveur vous soit d'une quelconque utilité, ni à vous, ni au directeur financier :). Pour cela, cliquez sur Options et cochez les 2 cases comme indiqué ci-dessous:
Une fois les Options enregistrées, vous pouvez alors demander la résolution du problème en cliquant sur le bouton Résoudre de la fenêtre Solveur. Le calcul est alors effectué et le résultat affiché:
Vous aurez noté que la feuille Calc a été mise à jour. Cliquez sur Conserver le résultat pour fermer la fenêtre du Solveur et retourner à la feuille Calc:
Vous êtes alors capable d'annoncer l'investissement nécessaire pour la mise en production de la plate-forme:
- 8 serveurs de type
SRV1 - 16 serveurs de type
SRV2 - 14 serveurs de type
SRV3
Le coût total étant de 4833,33 € par mois, soit 174 000 € sur la période d'amortissement.
Conclusion
Vous pouvez également tester différents scénarii, par exemple pour tester l'impact d'un ajout de RAM dans un type de serveur. Pour cela, modifier la ou les cellules à l'étape 1 et recommencez l'optimisation. À chaque fois, l'optimiseur vous donnera la combinaison dont le coût sera le plus faible... Magie des mathématiques !
Autre exemple, comment "neutraliser" un type de serveur physique ? Simplement en mettant ses capacités à 0 ! :)
Bien entendu, lancer l'optimisation manuellement peut se révéler fastidieux. À cela, une solution: les macros. L'optimiseur est un composant de LibreOffice parmis d'autre, et il est poassible de le contrôler à partir d'une macro. Vous pourrez alors actualiser la feuille d'un simple clic sur un bouton. Mais ça, c'est une autre histoire.
Cet exemple est évidemment, et volontairement, simplifié. Bien d'autres paramètres entrent en ligne de compte. Mais, maintenant que vous savez comment faire, libre à vous d'adapter la feuille de calcul. À titre d'exercice, vous pouvez chercher la répartition idéale des machines virtuelles sur les différents serveurs.
