Cuando desarrollamos software, hay aspectos cruciales que debemos cuidar y tener claros; uno de ellos es la escabilidad, pero ¿a qué nos referimos con ello?

Es un anglicismo que describe la capacidad de un negocio o sistema de crecer en magnitud. Hasta hace poco tiempo, la palabra escalabilidad no existía en el diccionario de la RAE, pero ya fue incluida formalmente en el Diccionario de la lengua española como la «capacidad de adaptación y respuesta de un sistema a la medida que aumentan sus necesidades de rendimiento»

Cuando partimos un proyecto de software, buscamos medir un posible tamaño; con ello dimensionamos los recursos y elegimos las estrategias para la gestión y tráfico de datos y transacciones, solo que con el tiempo, es posible que lo estimado cambie. Nuestro proyecto es un éxito y ahora tenemos más usuarios de los estimados; realizamos más operaciones de las previstas. ¿Qué implica esto? Sí, señores, significa que debemos redimensionar la aplicación, o mejor dicho, ¡debemos ESCALARLA!

¿Cómo escalar una aplicación?

Existen 2 aproximaciones para escalar una aplicación; la primera y más común es decir: "Bueno, si para X usuarios con Y operaciones tenía un Servidor de tamaño Z, vamos a incrementar los recursos en el servidor entonces.

¿Es correcta esta aproximación? Lo es hasta cierto punto; aquí estamos partiendo de que nuestra aplicació, sigue una arquitectura monolítica, es decir, todo está en un único recurso o servidor. Entonces, la primera aproximación se denomina Escalamiento Vertical.

1*MooyOrVt8aUIqP2JSDJepg

Este tipo de escalamiento es de rápida aplicación, siempre que estemos usando un servicio en la nube, con ajuste elástico, tipo EC2 de Amazon o VM de GCP; con esto, en pocos minutos podemos redimensionar nuestros recursos y con ello poder atender la demanda creciente.

¿Qué impactos o implicaciones le ves a este tipo de escalamiento?

El primero, este escalamiento es limitado, ya que podemos llegar a usar el hardware más potente disponible y, si aun así no solventamos el problema, ya no tenemos otra opción.

El costo, ya que podemos llegar a necesitar un hardware muy caro que nos impacte de forma negativa en la parte financiera.

¿Qué otra aproximación podemos aplicar?

Efectivamente, así como existe un Escalamiento Vertical, existe un escalamiento horizontal; de esta forma, en lugar de crecer hacia arriba, crecemos a los lados, es decir, agregamos servidores a los lados.

¿Qué ventajas tiene? No tiene límites, podemos crecer a los lados de forma infinita, con ello mitigar el problema de recursos; en cuanto a costos, en la medida que necesitemos vamos agregando, pero siempre con la ventaja de que deberíamos poder resolver el problema. Entonces, ¿siempre debemos escalar horizontalmente? ¡Parece genial, parece simple, pero no, no lo es!

La realidad es que podemos replicar nuestros servidores, pero vamos a necesitar de algo más, de un responsable por orquestar o dirigir el proceso de uso de cada instancia de servidor, ¿y eso cómo se hace?

Primero veamos cómo sería ese Escalamiento Horizontal:

1*q9h0JQNTZJfmLQnH-CshVQ

En la imagen anterior nos falta un elemento central, responsable por ordenar el tráfico y llevar el control de cuál servidor atiende qué petición; de acuerdo al tipo de problema que tengamos, ese elemento central puede ser:

  • Load balancers: responsable por definir a quién se le entrega la petición (más adelante tendremos contenido sobre esto)
  • Colas de mensajes: aplicaciones que controlan el procesamiento y son capaces de controlar el flujo.
  • Bases de datos distribuidas: Cuando se trata de almacenamiento, podemos dividir la base de datos en N servidores, aplicando la técnica de sharding.

¿Ya has enfrentado problemas de Escalibidad en tus aplicaciones? ¿Qué abordaje has usado? Coméntalo para que podamos discutir sobre este apasionante tema.

Sígueme en mis redes: