This shows you the differences between two versions of the page.
uso:laboratoare:new:09-vm:concepts [2018/11/30 17:07] octavian.guzu created |
uso:laboratoare:new:09-vm:concepts [2018/12/03 11:07] (current) dragos.dimitriu [Cum a apărut virtualizarea și de ce avem nevoie de ea?] |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | Liza | + | ===== Concepte ===== |
+ | |||
+ | ==== Ce este virtualizarea? ==== | ||
+ | |||
+ | **Virtualizarea** este o tehnologie care partajează și alocă resursele hardware ale unui sistem de calcul în mai multe “mașini virtuale” | ||
+ | (VM = Virtual Machine) și creează posibilitatea rulării **simultane** a mai multor sisteme de operare pe un singur calculator. Practic, | ||
+ | prin intermediul virtualizării se crează o abstractizare a hardware-ului. | ||
+ | |||
+ | <note> | ||
+ | Abstractizarea hardware-ului se referă la faptul că se creează câte o instantă virtuală pentru fiecare componentă dintr-un sistem de | ||
+ | calcul (procesor, memorie, disc). | ||
+ | </note> | ||
+ | |||
+ | ==== Cum a apărut virtualizarea și de ce avem nevoie de ea? ==== | ||
+ | |||
+ | Se întâmplă adesea să avem nevoie să folosim o aplicație care să nu fie compatibilă cu vesiunea curentă a sistemului de operare pe care | ||
+ | îl folosim (sau chiar cu sistemul de operare în sine). Spre exemplu, majoritatea jocurilor pe calculator sunt făcute să ruleze pe | ||
+ | sistemul de operare Windows, iar pentru un utilizator Linux, acestea ar fi inaccesibile. | ||
+ | |||
+ | În situația prezentată mai sus, am avea nevoie, ideal, de câte o stație pentru fiecare versiune sistem de operare de care avem nevoie. | ||
+ | Acest lucru este foarte costisitor și de cele mai multe ori nu ar fi rentabil întrucât sistemele de operare evoluează foarte rapid. Mai | ||
+ | rentabil ar fi să avem un singur sistem de calcul cu resurse puternice, decât să avem mai multe sisteme cu resurse standard, suficiente | ||
+ | pentru a rula un singur sistem de operare. | ||
+ | |||
+ | Există mai multe soluții pentru a rezolva acest neajuns. Prima variantă ar fi să instalăm fiecare sistem de operare de care avem nevoie | ||
+ | pe câte o partiție într-o configurație dual-boot. Acestă soluție ne dezavantajează în momentul în care vrem să folosim mai multe sisteme | ||
+ | de operare simultan, acest lucru fiind imposibil de realizat așa. Putem totuși să comutăm de pe unul pe altul, dar trebuie să resetăm | ||
+ | calculatorul și să alegem ce sistem de operare vrem să pornim. | ||
+ | |||
+ | A doua variantă propusă este **virtualizarea**. Instalarea unei **mașini virtuale** ne permite folosirea mai multor sisteme de operare | ||
+ | **simultan**, folosindu-ne de o un singur sistem de calcul (mașină, stație, calculator). Un avantaj major al folosirii unei mașini virtuale | ||
+ | este faptul că în eventualitatea apariției unei probleme în cadrul ei, sistemul de operare nativ (cel care rulează într-adevăr pe mașina | ||
+ | fizică) nu va fi afectat. De exemplu, dacă avem un program pe care îl suspectăm a fi **malițios**, îl putem rula pe o mașină virtuală și | ||
+ | în cazul în care premisa de la care am pornit este adevărată, știm să nu o rulăm pe sistemul de operare principal unde ne-ar putea afecta | ||
+ | informații sensibile (e.g. un [[https://en.wikipedia.org/wiki/Ransomware|Ransomware]] care ne criptează toate fișierele de pe disc). | ||
+ | Revenind la ideea de mai sus, ca o completare, putem spune că e mai eficient să avem un calculator puternic pe care să putem rula mai multe | ||
+ | mașini virtuale simultan decât să avem câte un calculator pentru fiecare sistem de operare. | ||
+ | |||
+ | De asemenea, dacă serverul hardware se prăbușește, virtualizarea are abilitatea de a migra în timp real toate informațiile pe un alt | ||
+ | server fără a afecta funcționalitatea programelor. | ||
+ | |||
+ | <note> | ||
+ | De reținut este faptul că deși rulăm mai multe sisteme de operare simultan pe aceeași resursă hardware, sistemele sunt izolate unul de | ||
+ | celălalt, astfel încât este prevenit furtul de informații de la unul la celălalt. | ||
+ | </note> | ||
+ | |||
+ | ==== Arhitectura mașinilor virtuale ==== | ||
+ | |||
+ | Când vorbim despre mașini virtuale, aduce mai în discuție mai mulți termeni pe care ar trebui să-i clarificăm înainte de a trece mai | ||
+ | departe. În această secțiune vom vorbi despre **host (sistem gazdă)**, **guest (sistem oaspete)** și **hypervizor (virtual machine monitor**. | ||
+ | |||
+ | === Host === | ||
+ | **Host-ul** sau **sistemul gazdă** este, de fapt, **sistemul fizic** pe care am instalat prima oară un sistem de operare (cel pe care îl folosim cel mai | ||
+ | des, de bază) peste care vom rula o mașină virtuală care rulează un alt sistem de operare. Sistemul gazdă este cel peste care rulează | ||
+ | soluția de virtualizare - **hipervizorul**. | ||
+ | |||
+ | === Guest === | ||
+ | **Guest-ul** sau **sistemul oaspete** este, de fapt, **mașina virtuală** cu sistemul de operare secundar pe care vrem să-l avem. Mașina | ||
+ | virtuală rulează peste **hipervizor**, dând impresia de sistem complet. Deși hardware-ul este virtualizat, utilizatorul nu își poate da | ||
+ | seama dacă sistemul de operare rulează direct pe sistemul fizic sau comunică cu acesta prin intermediul hipervizorului. | ||
+ | |||
+ | === Hypervisor === | ||
+ | **Hypervisor-ul** sau **VMM (Virtual Machine Monitor)** poate fi văzut ca un intermediar între host și guest și este compomenta care se | ||
+ | ocupă de virtualizare. Orice operație care se executa pe mașina virtuală (care desigur necesită accesarea unei sau mai multe resurse | ||
+ | hardware) trece prin hipervizor, care mai departe se ocupă de execuția operației în numele mașinii virtuale. Hipervizorul oferă guest-ului | ||
+ | o interfață compatibilă cu hardware-ul sistemului. | ||
+ | |||
+ | Hipervizorul poate fi de două tipuri: ''hosted'' sau ''baremetal''. Mai multe detalii despre diferențele dintre cele 2 tipuri de VMM-uri | ||
+ | pot fi găsite [[http://elf.cs.pub.ro/uso/res/carte/uso_cap-14-vm.pdf|aici]]. | ||
+ | |||
+ | ==== Ce este cloud-ul? ==== | ||
+ | |||
+ | Cloud-ul repreztină tot o formă de virtualizare a resurselor, însă vine cu câteva diferențe față de mașinile virtuale despre care am | ||
+ | vorbbit până acum. | ||
+ | |||
+ | === Cloud vs. Virtual Machines vs. Internet Services === | ||
+ | Spre deosebire de o mașină virtuală locală, când vorbim de cloud, utilizatorul nu știe unde se află mașina fizică peste care rulează | ||
+ | mașina sa virtuală, ce tip de server e, care este capacitatea maximă a lui șamd. Utilizatorul știe doar cum se poate conecta la mașina | ||
+ | virtuală (username, adresă IP) și resurele alocate pentru el (procesor, memorie, disc). | ||
+ | |||
+ | O altă diferență vine din faptul că procesul de instalare a unei mașini virtuale locale este un proces dificil, în special pentru o | ||
+ | persoană care nu este de profil tehnic, fără cunoștințe de sisteme de operare, virtualizare sau rețelistică. În condițiile în care | ||
+ | acesta doar are nevoie de o astfel de mașină virtuală pentru a-și face treaba, este mult mai eficient să apeleze la soluția **cloud**. | ||
+ | |||
+ | Există două tipuri de cloud: private și publice. Cele private sunt cele care aparțin unei organizații care are nevoie să ruleze mai multe | ||
+ | mașini virtuale. Printre soluțiile de cloud private putem enumera [[https://www.openstack.org|OpenStack]] sau [[https://opennebula.org|Opennebula]]. Cele publice sunt deținute de | ||
+ | companii și sunt oferite, în general, utilizatorilor care nu dețin suficient hardware sau resurse materiale pentru a menține un astfel de | ||
+ | server. Câteva companii care se ocupă cu distribuirea de servicii de cloud publice sunt: Google, Amazon, Oracle, DigitalOcean. | ||
+ | |||
+ | Până acum am vorbit doar de diferențele dintre **cloud** și **mașini virtuale**. Am reținut faptul că serviciul cloud ne oferă posibilitatea | ||
+ | deținerii unei mașini virtuale pe un server care nu e al nostru, dar pe care o putem folosi cu ce scop dorim. Serviciul cloud, însă, ne | ||
+ | oferă mai mult decât mașini virtuale. Serviciile web, de stocare sau de computing sunt alte tipuri care ne pot fi oferită prin cloud. | ||
+ | - web: Amazon Web Services | ||
+ | - stocare: Google Drive, Dropbox, Onedrive | ||
+ | - computing: Google Compute Engine | ||
+ | ==== Emulare vs. Virtualizare ==== | ||
+ | |||
+ | Prin intermediul virtualizării putem rula mai multe sisteme de operare pe aceeși mașină fizică. Sistemele de operare sunt proiectate | ||
+ | să ruleze pe același tip de arhitectură (ARM, x86). Prin intermediul virtualizării nu este posibil să rulăm pe același sistem fizic | ||
+ | sisteme de operare concepute pentru diverse arhitecturi (nu putem rula un sistem de operare Android proiectat pentru o arhitectură | ||
+ | de tip ARM pe o stație cu un procesor din gama x86). | ||
+ | |||
+ | Pentru a rezolva acest neajuns, a fost introdusă **emularea**. Emularea este procedeul prin care fiecare instrucțiune este tradusă | ||
+ | (interpretată) de un software specializat denumit emulator. Instrucțiunile nu sunt rulate direct pe procesor, acest lucru fiind imposibil, | ||
+ | ci trecute prin emulator care se ocupă mai departe de executarea lor într-un mediu al său. Emularea este un procedeu mult mai lent ca | ||
+ | virtualizarea. | ||
+ | |||
+ | ==== Docker și containere vs. Virtualizare ==== | ||
+ | |||
+ | Câteodată putem avea nevoie ca o aplicație să ruleze într-un mediu izolat, dar nu neapărat pe un alt sistem de operare față de cel pe care | ||
+ | îl avem instalat pe sistemul fizic. Am putea instala o mașină virtuală în care să rulăm aplicația, însă overhead-ul adus este mult prea | ||
+ | mare. Soluția se găsește în conceptul de **light virtualization** sau **containerizare**. Containerele sunt caracterizare print-o nouă | ||
+ | ierarhie de fișiere, separată de cea a mașinii gazdă. Ele sunt mult mai rapide decât mașinile virtuale, însă au dezavantajul că nu | ||
+ | pot rula un alt sistem de operare față de cel de pe mașina gazdă întrucât este nevoie de același tip de nucleu. În imaginea de mai jos | ||
+ | se poate observa mai clar diferența dintre rularea a 3 mașini virtuale pe un sistem și existența a 3 containere pe un sistem. | ||
+ | Se observă faptul că în primul caz (mașini virtuale - stânga) avem un hipervizor deasupra căruia rulează mașini virtuale cu nucleele aferente, | ||
+ | iar în cel de-al doilea (containere) avem mecanism de containerizare (în exemplul din figură se numește Docker) peste care rulează direct aplicațiile. | ||
+ | |||
+ | {{ :uso:laboratoare:new:09-vm:virtualizare_vs_container.png?500 |}} |