Cloud și date

Scalarea în cloud: orizontală, verticală și elasticitate

Scalarea în cloud explicată: diferența dintre scalarea verticală și orizontală, ce este elasticitatea, echilibrarea încărcării și limitele fiecărei metode.

De Publicația LumeaTehnologiei5 min de citit
Autostradă cu benzi pline de mașini, văzută de sus, într-o oră de trafic aglomerat
Cuprins 6 secțiuni

Scalarea este procesul prin care o aplicație primește mai multe resurse atunci când are mai mulți utilizatori. Un site de bilete care funcționează impecabil într-o zi obișnuită poate ceda în minutul în care se pun în vânzare locurile la un concert mare. Scalarea este ceea ce îl ajută să reziste.

Există două direcții principale, verticală și orizontală, iar diferența dintre ele este una dintre ideile cele mai utile pe care le înveți despre cloud. Fiecare are avantaje și o limită proprie.

Ce este scalarea verticală?

Scalarea verticală înseamnă să faci același server mai puternic: mai mult procesor, mai multă memorie, discuri mai rapide. Aplicația rămâne într-un singur loc, dar are mai multă putere la dispoziție.

În cloud, schimbarea se face adesea din câteva clicuri: alegi o variantă mai mare de mașină virtuală, o repornești și gata. Avantajul este simplitatea, deoarece aplicația nu trebuie schimbată deloc. Un program scris pentru un singur server continuă să funcționeze la fel, doar mai repede.

Limitele apar repede:

  • tavanul fizic: există o mărime maximă a unui server, iar ultimele trepte devin foarte scumpe;
  • punctul unic de cădere: dacă acel server se oprește, se oprește totul;
  • pauze la schimbare: de multe ori trebuie repornit pentru a primi resursele noi.

Pentru o bază de date mică sau o aplicație internă cu puțini utilizatori, scalarea verticală este adesea suficientă și cea mai ieftină ca efort. Rămâne rezonabilă mult timp, dacă încărcarea nu explodează.

Ce este scalarea orizontală?

Scalarea orizontală înseamnă să adaugi mai multe servere și să împarți munca între ele, în loc să faci un server uriaș. Zece servere mici care lucrează împreună pot servi mai mulți utilizatori decât unul singur, oricât de puternic.

Piesa care face posibil acest lucru este echilibratorul de încărcare, un program sau un dispozitiv care primește toate cererile și le distribuie către serverele disponibile. Utilizatorul vede o singură adresă, iar în spatele ei lucrează o echipă de mașini. Dacă unul dintre servere cade, echilibratorul nu îi mai trimite cereri, iar utilizatorii nu observă nimic.

Avantajele sunt mari: nu există un tavan clar, căderea unui server nu oprește aplicația, și poți adăuga sau scoate servere fără pauză. Costul este complexitatea. Aplicația trebuie scrisă astfel încât serverele să nu depindă de date păstrate local, pentru că două cereri succesive ale aceluiași utilizator pot ajunge pe servere diferite. Datele comune se mută într-o bază de date sau într-un sistem de stocare partajat.

Ce este elasticitatea?

Elasticitatea este capacitatea unui sistem cloud de a adăuga și de a scoate resurse automat, în funcție de încărcarea de moment. Scalarea îți spune ce poți face; elasticitatea spune că se face singur și în ambele sensuri.

Un sistem elastic urmărește indicatori simpli, cum ar fi gradul de ocupare al procesorului sau numărul de cereri pe secundă. Când trece de un prag, pornește servere noi. Când traficul scade, le oprește, iar tu nu mai plătești pentru ele. Principiul acesta este una dintre cele mai importante promisiuni ale cloudului, descrisă și în ghidul principal despre cloud computing.

Un exemplu: un magazin online are trafic mic noaptea, mediu ziua și foarte mare în ziua reducerilor. Cu elasticitate, numărul de servere urmărește aproape exact aceste valuri, în loc să fie dimensionat pentru cel mai rău caz tot timpul.

Balanță metalică veche cu greutăți așezate pe talere, folosită la măsurarea cantității

Cum compari cele două tipuri de scalare?

Alegerea depinde de aplicație, de buget și de cât de mult îți permiți să complici arhitectura. Tabelul de mai jos adună diferențele practice.

CriteriuScalare verticalăScalare orizontală
Ce faciMărești un serverAdaugi servere
Modificări în aplicațieDe obicei niciunaAdesea necesare
Limită superioarăDa, dată de hardwarePractic foarte mare
Rezistență la defecteSlabăBună
Pauze la modificareFrecventeRare sau absente
Potrivire tipicăBaze de date mici, aplicații interneSite-uri cu trafic variabil, API-uri

În realitate, cele două se combină. Aplicațiile web se scalează de obicei orizontal, iar bazele de date mari se scalează mai întâi vertical și abia apoi se împart pe mai multe servere, ceea ce este mai dificil.

Sfat: Dacă începi un proiect nou, scrie aplicația fără să păstrezi date importante pe discul local al serverului. Această singură regulă îți deschide ușa către scalarea orizontală mai târziu.

Ce se întâmplă când scalarea nu ajunge?

Uneori adăugarea de servere nu rezolvă problema, pentru că blocajul se află în altă parte. O bază de date supraîncărcată, o legătură de rețea îngustă sau un serviciu extern lent pot ține în loc toată aplicația, oricâte servere noi adaugi în față.

De aceea scalarea începe cu măsurarea. Înainte să plătești pentru resurse în plus, afli unde se pierde timpul: în calcul, în citirea datelor sau în rețea. Câteva soluții complementare se dovedesc adesea mai eficiente decât mai multe servere:

  1. Memoria rapidă (cache), care ține la îndemână răspunsurile cerute des, astfel încât să nu fie recalculate de fiecare dată.
  2. Distribuirea conținutului static prin rețele CDN, care servesc imaginile și fișierele din locuri apropiate de vizitator.
  3. Apropierea de utilizator prin edge computing, pentru sarcinile sensibile la întârziere.

Mai există și riscul facturii: scalarea automată fără limite poate duce la costuri neașteptate dacă traficul este provocat de un atac sau de o eroare. De aceea se setează praguri maxime și alerte, subiect pe care îl găsești în Costurile în cloud: cum se facturează resursele.

Pe aceeași temă, citește și Serverless: ce înseamnă să rulezi cod fără server.

Întrebări frecvente

Care este diferența dintre scalare și elasticitate?

Scalarea este adăugarea de resurse, manual sau automat. Elasticitatea este scalarea automată, în ambele sensuri, în funcție de încărcare.

Scalarea orizontală este întotdeauna mai bună?

Nu. Este mai flexibilă și mai rezistentă, dar cere o aplicație pregătită pentru ea. Pentru sisteme mici, scalarea verticală este mai simplă și suficientă.

Ce face un echilibrator de încărcare?

Primește cererile utilizatorilor și le trimite către serverele disponibile, urmărind care sunt sănătoase și mai puțin încărcate. Dacă un server cade, îl ocolește.

Un site mic are nevoie de scalare automată?

De obicei nu. Dacă traficul este mic și stabil, un singur server bine ales este suficient. Scalarea automată merită când traficul variază mult.

Poate fi scalată orice aplicație?

Orice aplicație poate fi scalată vertical. Pentru scalarea orizontală, aplicația trebuie să nu depindă de date păstrate local pe un singur server.

↑