====== Les ordinateurs virtuels ====== ===== Présentation de la virtualisation d'ordinateurs ===== * Document odt : {{ :si2:fichesavoirs_ordinateurs_virtuels.odt |Fiche savoirs : les ordinateurs virtuels }} La virtualisation d'ordinateur consiste à faire fonctionner **un** ou **plusieurs** systèmes d'exploitation (**système invité** - **Guest**) sur un même ordinateur physique (**système Hôte** - **host**). Quand on virtualise un système d'exploitation Serveur, ils sont aussi appelés **serveur privé virtuel** (Virtual Private Server ou **VPS**). **Emulation** : l'émulation (en informatique) consiste à **substituer** un élément de matériel informatique – tel un terminal informatique, un ordinateur ou une console de jeux – par un logiciel. * l'objectif est de **chercher à imiter** le comportement physique d'un matériel par un logiciel. L'émulateur **reproduit le comportement** d'un modèle dont on **connait précisément** les caractéristiques. **Virtualisation** : la virtualisation consiste à faire fonctionner un ou plusieurs systèmes d'exploitation comme un simple logiciel sur un même ordinateur. \\ Source Wikipedia ===== Virtualisation sur poste de travail ===== {{ :si2:virtualisation.png |}} Le logiciel de virtualisation est généralement assez lourd, gourmand en ressources et s'exécute sur l'OS hôte. Il permet : * de lancer **un ou plusieurs OS invités**. * La machine **virtualise** ou/et **émule** le matériel pour les OS invités, ces derniers croient dialoguer directement avec ledit matériel. Cette solution isole bien les OS invités, mais elle a un coût en performance. Plusieurs OS hétérogènes peuvent s'exécuter sur une même machine grâce à une isolation complète. Les cartes réseaux virtuelles sont émuler sur une seule carte réseau réelle. **Exemples de solution :** logiciels Parallels (Parallels Desktop, Parallels Server), Oracle VM VirtualBox (libre), logiciels VMware (VMware Player, VMware Workstation), logiciels libres (QEMU : émulateur de plateformes x86, PPC, Sparc, et bochs : émulateur de plateforme x86). Ce type de virtualisation est aussi appelé **Hyperviseur de type 2** (Hosted). ===== Virtualisation sur ordinateur serveur ===== {{ :si2:hyperviseur.png |}} Il s'agit d'**OS spécifiques** conçus pour la virtualisation. On les appelle **hyperviseur**. Ils sont caractérisés par : * un noyau système très léger et optimisé pour gérer les accès des noyaux d'OS invités à l'architecture matérielle sous-jacente. * Si les OS invités fonctionnent en ayant conscience d'être virtualisés et sont optimisés pour ce fait, on parle alors de **para-virtualisation** (Hyper-V de Microsoft et qui augmente les performances sur ESX de VMware par exemple). Actuellement l’hyperviseur est la méthode de virtualisation d'infrastructure la plus performante en permettant plus de flexibilité dans le cas de la virtualisation dans un DATACENTER. **Exemple de solution :** Citrix Xen Server (libre), VMware ESX, Microsoft Hyper-V , Parallels Server Bare Metal, KVM (libre), Proxmox (basé sur KVM) **Remarque** : Hyper-V est maintenant intégré à Windows depuis la version 8 Ce type de virtualisation est aussi appelé **Hyperviseur de type 1** (Natif). ==== Les conteneurs ==== Une autre solution de virtualisation consiste à utiliser **l'isolation** comme méthode de cloisonnement au niveau du système d'exploitation de type Linux. **LXC**, contraction de l’anglais **Linux Containers** est un système de virtualisation utilisé pour faire fonctionner des **environnements Linux isolés** les uns des autres dans des conteneurs : * chaque conteneur **partage le même noyau que l'OS** et une plus ou moins grande partie du système hôte, * un conteneur ne contient donc pas le système d'exploitation complet mais s'appuie sur l'OS linux existant , * chaque conteneur apporte une virtualisation de l'**environnement d'exécution** et non pas une virtualisation de l'ordinateur **Proxmox** propose la création de conteneurs LXC. Le logiciel libre **Docker** s'appuie sur les conteneurs LXC en **étendant les fonctionnalités proposées** pour automatiser le déploiement d'applications dans des conteneurs logiciels. Docker permet **d'empaqueter** une application et ses dépendances dans un conteneur isolé, qui pourra être exécuté sur n'importe quel serveur Linux. ==== Les micro-services ==== Docker permet de réaliser une **architecture en microservices**. Cela consiste à concevoir une application serveur sous la forme d’un ensemble de petits services : * Chaque **service** s’exécute dans son **propre processus** (conteneur Docker). * Chaque microservice implémente une **fonctionnalité métier** ou un **domaine spécifique**. * Chaque service est **développé** de manière **autonome**, est **déployé indépendamment* et est **mis à l'échelle** selon les besoins. * Chaque service **communique** avec d’autres processus avec des **protocoles** comme HTTP/HTTPS ou les WebSockets. Lors de la conception des microservices, il faut les rendre les plus petits possible, tant qu'il n'y a pas trop de dépendances directes avec d’autres microservices. Deux éléments sont plus importants que la taille du microservice : * sa **cohésion interne**, * et son **indépendance** vis-à-vis d’autres services. ==== Pour en savoir ==== Emulation : * http://www.tomshardware.fr/articles/Emulation-tuto,2-809.html * https://bellard.org/jslinux/ * https://jeux.developpez.com/tutoriels/programmer-emulateur-console/