3 octubre, 2018
Aplicacions al Cloud

Aplicacions al Cloud: escalabilitat

Moltes vegades, quan parlem d’allotjar determinats serveis TI en el Cloud ho associem amb el procés de virtualitzar servidors existents on alberguem aplicacions, per a finalment executar-los en algun entorn de virtualització del nostre proveïdor de confiança. Això, per si sol, no fa que la nostra aplicació s’hagi convertit en «cloud», és a dir, encara no podem gaudir de molts dels avantatges que els evangelistes del cloud prediquen, ja que estem passant per alt un aspecte molt important: l’arquitectura dels serveis o aplicacions que volem executar.

Però, per a poder utilitzar i aprofitar els avantatges que ofereixen en termes de flexibilitat i escalabilitat les plataformes Cloud, és necessari en primer lloc, que les nostres aplicacions estiguin preparades. Definim llavors escalabilitat com, la capacitat del programari per a adaptar-se al creixement i a les necessitats de rendiment a mesura que el nombre d’usuaris o les transaccions s’incrementen.

Aplicacions en el Cloud: escalat vertical vs horitzontal

Quan tenim una aplicació corrent en un servidor i la demanda de peticions s’incrementa correm el risc que el servidor no pugui atendre i servir correctament totes aquestes peticions. En aquest punt tenim un problema i dues opcions: escalat vertical vs escalat horitzontal.

 
Aplicacions al Cloud

1. Escalat Vertical

És el que es coneix com ‘fer créixer el hardware’, ja que, permet augmentar les prestacions del servidor, és a dir, més memòria, més CPU, etc. Aquest tipus d’escalat és el que es plantejava antigament quan la demanda creixia lentament i existia la possibilitat de fer pressupostos a X anys. A més, era possible comptar sempre amb capacitat sobrant en els servidors com a previsió del possible creixement.

En l’actualitat, els projectes o serveis nous tenen una producció a curt termini i és difícil realitzar prediccions a més d’un any vista, per això, quan s’està buscant ajustar costos i no pagar més de l’estrictament necessari, l’escalat vertical deixa de tenir sentit i fins i tot es pot considerar una estratègia perillosa. Les ampliacions (o reduccions) de hardware, encara que siguin de manera virtual impliquen tasques de manteniment i corts de servei.

Addicionalment, un servidor no pot créixer indefinidament en memòria, disc o CPU, ja que, sempre hi ha un límit i moltes vegades apareix en un moment poc oportú.

N’hi ha prou amb mirar al nostre voltant: cap dels grans serveis o portals que coneixem i que són exemple de creixement i escalabilitat (Google, Facebook, Twitter, Evernote, Whatsapp, Linkedin, etc.) podrien ser servits des d’un únic gran servidor, dit d’una altra manera: cap d’aquests serveis hauria estat possible utilitzant l’escalat vertical.

Aplicacions al Cloud

2. Escalat Horitzontal sobre arquitectures distribuïdes

Una estratègia diferent és la de distribuir l’aplicació en diferents components i augmentar el número de cadascun d’ells segons convingui. Aquí, és on trobem la clau principal, i és que, en lloc de dissenyar una aplicació de forma monolítica, la descomponem en diferents mòduls i cadascun d’ells executa una funció concreta. Només d’aquesta manera aconseguim créixer allà on és necessari en nombre de servidors (instàncies o nodes), en comptes d’augmentar CPU o la memòria d’un únic gran node, com passa en l’escalat vertical.

Si utilitzem l’escalat horitzontal, en tenir més d’una instància (servidor) per a cada servei, el que fem és balancejar les peticions entre els diferents nodes que donen aquest servei amb la possibilitat d’afegir més nodes segons les necessitats i la càrrega global de peticions.

Aquest balanceig de peticions ens ofereix un segon avantatge: l’alta disponibilitat del servei. Això es tradueix en la possibilitat de parar un node, sigui perquè té problemes o perquè necessitem realitzar algun tipus de manteniment com actualitzar el sistema operatiu, amb el que redirigirem les peticions cap als nodes restants de manera que l’usuari final no notarà cap interrupció de servei.

Addicionalment, una arquitectura distribuïda ens permet afrontar canvis en una part de l’aplicació sense afectar la resta facilitant el control de versions i la gestió del canvi. A més, ens ajuda també al fet que cada part de l’aplicació funcioni amb el sistema operatiu i versions més adequat, sense haver d’assumir compromisos ni tenir problemes de compatibilitat. Ara bé, l’escalat horitzontal també ens planteja una sèrie de reptes que hem de superar per a poder gaudir dels seus avantatges, per a això, serà necessari seguir un conjunt de bones pràctiques que veurem més endavant.

Exemples d’escalats

Un exemple d’arquitectura monolítica i que ha de créixer mitjançant escalat vertical és un Servidor Web amb una aplicació (PHP, Java, ASP, etc.) i una Base de dades (MySQL, SQL Server, etc.), tot executant-se en un mateix servidor.

Quan el nombre de visitants o el nombre de peticions simultànies en la base de dades fa que el nostre servidor arribi al màxim de memòria o CPU aquest deixarà de respondre i l’única cosa que podrem fer és parar l’equip, afegir més memòria RAM o CPU i tornar a encendre’l esperant que, els nous recursos addicionals siguin suficients per a assumir la càrrega. Si passat un temps baixa l’activitat i veiem que ja no necessitem aquells recursos extres i volem deixar de pagar-los, el que haurem de fer és similar: parar l’equip (un nou tall de servei), treure memòria RAM i/o CPU i tornar-lo a posar en marxa, i així successivament.

Tot això amb l’inconvenient afegit que un problema de recursos amb el servei web pot deixar sense memòria el servei de base de dades i viceversa, dificultant encara més les previsions i la gestió de la càrrega en moments crítics. És clar que això no és un bon exemple d’escalabilitat.

Quan pensem en arquitectures web distribuïdes probablement la primera idea que ens ve a la ment és separar la base de dades del servei web. D’aquesta manera cada funció és executada en un servidor diferent, cadascun pot tenir els recursos i versions del sistema operatiu que més s’adeqüin a la funció a realitzar, i si és necessari, podem afegir més nodes de cada tipus per a dividir la càrrega i augmentar la capacitat. Serà necessari que la nostra aplicació tingui en compte l’existència dels nodes addicionals, i aquí apareix un dels primers reptes.

Per a això, ens poden ser d’ajuda elements com els balancejadors de peticions web. En altres casos, el mateix codi de l’aplicació decideix enviar dades o peticions a diferents nodes per exemple quan tenim més d’una base de dades on guardem diferents tipus d’informació.

De totes maneres una arquitectura escalable al cloud va molt més enllà d’això, i per a aconseguir sistemes realment auto escalats i elàstics basats en plataformes cloud haurem d’incorporar un conjunt de metodologies i tecnologies addicionals.

Bon profit!

Treballem fins i tot a l'hora de sopar. Posa't en contacte amb nosaltres i t'ajudarem en el que necessitis.
Contáctanos