jeudi 31 mars 2011

Virtualisation en français facile

Introduction
Comme promis, cet article, le premier d'une série d' articles sur la virtualisation, a pour but d'introduire mon intervention sur le salon irc où nous animons une série de présentation sur divers sujet recouvrant l'informatique du point de vue du logiciel libre et open source.

Définition
Le terme "virtuel" fait référence à quelque chose qui n'est pas réel, physique. En informatique, on appliquera la notion de virtualisation principalement au matériel. Ainsi, virtualiser un matériel donné signifie "simuler" ce matériel par des moyens logiciels. On parlera alors de "machine virtuelle" ou d'"environnement virtuel" (Virtual Environment) pour faire référence au résultat de cette simulation.

Intérêt ( source [1] )

Les raisons qui poussent à l'utilisation de la virtualisation sont nombreuses et relèvent des mobiles autant académiques qu' industriels :
  • utilisation optimale des ressources d'un parc de machines (répartition des machines virtuelles sur les machines physiques en fonction des charges respectives),
  • installation, déploiement et migration facile des machines virtuelles d'une machine physique à une autre, notamment dans le contexte d'une mise en production à partir d'un environnement de qualification ou de pré-production, livraison facilitée,
  • économie sur le matériel par mutualisation (consommation électrique, entretien physique, surveillance, support, compatibilité matérielle, etc.)
  • installation, tests, développements, cassage et possibilité de recommencer sans casser le système d'exploitation hôte
  • sécurisation et/ou isolation d'un réseau (cassage des systèmes d'exploitation virtuels, mais pas des systèmes d'exploitation hôtes qui sont invisibles pour l'attaquant, tests d'architectures applicatives et réseau)
  • isolation des différents utilisateurs simultanés d'une même machine (utilisation de type site central)
  • allocation dynamique de la puissance de calcul en fonction des besoins de chaque application à un instant donné,
  • diminution des risques liés au dimensionnement des serveurs lors de la définition de l'architecture d'une application, l'ajout de puissance (nouveau serveur etc) étant alors transparent.
Principe
Sur un ordinateur normal, on retrouve toujours trois grandes parties:
  • le matériel qui consiste en des éléments électroniques et mécaniques et qui constitue la partie visible de l'ordinateur,
  • le système d'exploitation qui permet de piloter le matériel, d'optimiser, de gérer et d'assurer (dans le sens fiabilité et sécurité) l'accès au matériel (disques durs, lecteurs CD/disquettes, etc) par la troisième couche,
  • une troisième couche qui concerne l'ensemble des applications installées dans ce système d'exploitation et qui sont les principaux points d'interaction avec l'utilisateur. Cette couche est aussi désigné par l'expression "espace utilisateur" en opposition à l'"espace noyau" (qui concerne principalement l'OS).

Grâce à cette organisation, les applications métiers n'ont pas directement accès au matériel, mais plutôt y accèdent via une interface logicielle bien définie (on parle d'API pour Application Programming Interface) proposée par le noyau du système d'exploitation. Cela présente de nombreux avantages comme la simplification de l'écriture des applications métiers ou une meilleure utilisation/protection/répartition des ressources matérielles entre autres choses.

Mais en y réfléchissant de plus près, on pourrait constater qu' en utilisant les différentes interfaces proposée par cette répartition des couches fonctionnelles, on pourrait ainsi tromper les couches supérieures:
  • en mettant un logiciel (hyperviseur) entre le matériel et l'OS, on pourrait présenter à celui-ci, un matériel ayant des caractéristiques différentes des caractéristiques réelles, à charge à ce logiciel d'assurer la conversion. On parle ici d'hyperviseur de type 1.
  • en mettant un logiciel (hyperviseur) entre l'OS et les applications, on pourrait présenter à un autre OS un matériel différent du matériel réel et installer dans ce dernier OS différentes applications. L'ensemble OS + applications + hyperviseur étant vu par l'OS de base comme de simples applications. On parle dans ce cas d'hyperviseur de type 2,
  • toujours en restant entre le système d'exploitation et la couche applicative, on pourrait éviter le niveau supplémentaire d'abstraction proposé par la solution précédente et simplement faire croire aux applications qu'elles tournent dans un OS différent de l'OS réel. On parle d'émulateurs dans ce cas;
  • il existe une troisième catégorie qui est en quelque sorte une variante de la catégorie des machines virtuelles que nous avons appelée "émulateurs". Ce type de machines virtuelles est courant principalement dans les systèmes unix et linux. Il s'agit d'environnement chrooté ou de conteneurs. En effet, dans les systèmes Linux et Unix, tout est fichier, de sorte que même les différentes ressources matérielles ( interfaces réseaux, disques durs, mémoire RAM, etc) sont utilisées suivant cette abstraction. Il est alors possible de rediriger un certain nombre de ressources comme celles-ci vers une application (au sens unix/linux du terme) donnée.
Dans les articles suivants, on verra chaque catégorie plus en détails.

[1] Virtualisation sur wikipedia

3 commentaires:

  1. Cool la présentation!!! Merci bien

    RépondreSupprimer
  2. C'est déjà fini?
    C'est tellement bien expliqué que je ne me suis pas rendu compte que je suis arrivé à la fin...
    A quand la suite

    RépondreSupprimer
  3. La saga sur la virtualisation continue. J'essaye juste de trouver un peu de temps pour publier la suite.

    RépondreSupprimer