Cum iti rulezi aplicatia in cloud? Container sau masina virtuala?

Furnizorii de cloud pun la dispozitia clientilor infrastructura necesara pentru a rula aplicatii web, baze de date sau sisteme de ERP (Enterprise Resource Planning). Cele mai multe organizatii folosesc in prezent aplicatii on-premises in care s-au investit sume mari de bani pentru dezvoltare, management, si pentru hardware care trebuie schimbat la fiecare 3-5 ani. Mentinerea unei infrastructuri locale rezulta in costuri operationale mari si “seaca” bugetul destinat departamentului IT. Avand in vedere aceste inconveniente, organizatiile vor sa se mute in cloud si sa renunte la stilul traditional de a cumpara, gestiona si inlocui hardware-ul, software-ul, serviciile si conectivitatea la retea on-premises. Cele mai multe migrari catre mediul cloud se fac in etape pentru a minimiza riscul de downtime si pentru a mari productivitatea. Cea mai populara abordare este cea de lift and shift (cunoscuta si sub numele de rehostare). Aplicatia si datele sale sunt exportate de pe serverele locale si importate in infrastructura din cloud. O data ajunsa in cloud, aplicatia poate folosi serviciile furnizorului pentru optimizare, pentru scalabilitate si pentru reducerea costurilor.

Dar care sunt optiunile din cloud pe care clientii le au la dispozitie pentru a-si rula aplicatiile? Cei mai importanti furnizori de cloud ofera atat varianta clasica de masini virtuale (IaaS – Infrastructure as a Service), cat si varianta moderna, cea a unui serviciu de containere.

Masina virtuala (VM-virtual machine) poate fi un concept deja cunoscut. Poate ca on-premises aplicatia rula intr-o astfel de masina. Insa conceptul de container poate fi unul nou, un teritoriu inca neexeplorat, si fata de care putem sa avem temeri, pentru ca inca nu ne este familiar.

Masina virtuala

O masina virtuala impreuna cu hipervizorul sau abstractizeaza hardware-ul server-ului fizic si ne permit sa rulam mai multe sisteme de operare. Foarte elegant spus de catre cei de la VMware este ca un VM este un “computer software”. Avem, deci, mai multe masini virtuale care impart acelasi hardware fizic, dar care in acelasi timp sunt complet izolate unele fata de celelalte. Aceasta izolare introduce un grad ridicat de securitate.

Printre avantajele folosirii unei masini virtuale se numara si:

  • folosirea mult mai eficienta a resurselor hardware – reducerea numarului necesar de servere fizice, mai putina energie electrica consumata pentru racire si ventilatie, mai putin spatiu fizic ocupat in rack.
  • provizionarea mult mai rapida si mai usoara a serverelor – este mult mai usoara crearea unui server virtual decat instalarea unui server fizic, din cateva click-uri intr-o interfata grafica totul este gata. De asemenea, crearea back-up-urilor si a snapshot-urilor este mult mai usoara. Procesul de disaster recovery (necesar de exemplu in urma unui atac de securitate ca un ransomware) este, deci, mult mai simplu si mai rapid.
  • partea de testare a aplicatiilor este mult simplificata. Aplicatiile au nevoie de un mediu de testare, care sa fie identic cu cel din productie, si complet separat. Mentinerea a doua ferme de servere, una pentru productie si cealalta pentru testare implica niste costuri uriase pentru organizatie. Folosind masini virtuale, se poate replica foarte usor si deloc costisitor, infrastructura de productie pe care sa fie implementate noile feature-uri ale aplicatiei si sa se observe comportamentul acesteia, fara a afecta disponibilitatea aplicatiei din mediul de productie.

Containerul

Containerele abstractizeaza sistemul de operare si ne permit sa rulam aplicatii. Conceptul de container este bazat pe containerul de transport al marfurilor. Containerul este o cutie standardizata in care se afla ceea ce vrem sa rulam (aplicatia noastra) si care nu impune nicio constrangere fata de metoda de transport (pe cale maritima, prin aer sau pe uscat), adica este independent de hardware-ul pe care vrem sa rulam aplicatia. Folosind containerele, aplicatiile impart acelasi sistem de operare, dar folosind arhitectura acestuia, aplicatiile ruleaza complet izolate unele fata de celelalte. Pentru sistemul de operare un container nu este altceva decat un alt proces care ruleaza izolat de altele. Si atunci cand folosim containere avem, deci, un grad ridicat de securitate.

Containerele au urmatoarele beneficii:

  • consumul extrem de redus de resurse – containerele folosesc strict fisierele si librariile software de care au nevoie. Timpul de initializare este semnificativ mai mic fata de cel al unei masini virtuale, care trebuie sa initializeze intregul sistem de operare.
  • portabilitate foarte ridicata – oriunde se poate rula un container engine (ca Docker sau LXC) se poate rula un container. Acest lucru inseamna ca aplicatiile vor prezenta din ce in ce mai putine probleme cauzate de mediul in care ruleaza. Daca aplicatia a functionat corect intr-un container pe pc-ul programatorului, va functiona corect si pentru echipa de QA si in mediul de productie.
  • containerele fac posibila folosirea microserviciilor – microserviciile sunt servicii mici care comunica unele cu altele pentru a forma o aplicatie. Fiecare microserviciu ruleaza in container-ul sau. Prin aceasta descompunere se obtine o testare mai usoara a aplicatiei, punctele de defectare pot fi mai usor identificate si rezolvate, iar viteza de dezvoltare a aplicatiei creste.

Atat masinile virtuale, cat si containerele reprezinta alternative viabile cu privire la infrastructura pe care se bazeaza o aplicatie si fiecare organizatie va trebui sa aleaga acea optiune care i se potriveste cel mai bine, conform specificului sau de business.

Mihai Dumitrascu, Sr Systems Engineer