# Escalabilidad

Es un anglicismo que describe la capacidad de un negocio o sistema de crecer en magnitud. Aunque la palabra escalabilidad no existe en el diccionario de la RAE el adjetivo más cercano ampliable es de poco uso en telecomunicaciones y en ingeniería informática. La escalabilidad, término tomado en préstamo del idioma inglés, es la propiedad deseable de un sistema, una red o un proceso, que indica su habilidad para reaccionar y adaptarse sin perder calidad, o bien manejar el crecimiento continuo de trabajo de manera fluida, o bien para estar preparado para hacerse más grande sin perder calidad en los servicios ofrecidos.
En general, también se podría definir como la capacidad del sistema informático de cambiar su tamaño o configuración para adaptarse a las circunstancias cambiantes. Por ejemplo, una Universidad que establece una red de usuarios por Internet para un edificio de docentes y no solamente quiere que su sistema informático tenga capacidad para acoger a los actuales clientes que son todos profesores, sino también a los clientes que pueda tener en el futuro dado que hay profesores visitantes que requieren de la red por algunas aplicaciones académicas, para esto es necesario implementar soluciones que permitan el crecimiento de la red sin que la posibilidad de su uso y reutilización disminuya o que pueda cambiar su configuración si es necesario.
La escalabilidad como propiedad de los sistemas es generalmente difícil de definir, en particular es necesario definir los requisitos específicos para la escalabilidad en esas dimensiones donde se crea que son importantes. Es una edición altamente significativa en sistemas electrónicos, bases de datos, ruteadores y redes. A un sistema cuyo rendimiento es mejorado después de haberle añadido más capacidad hardware, proporcionalmente a la capacidad añadida, se dice que pasa a ser un sistema escalable.

## Dimensiones

La escalabilidad se puede medir en diferentes dimensiones.

### Escalabilidad en carga

Un sistema distribuido nos hace fácil el ampliar y reducir sus recursos para acomodar (a conveniencia), cargas más pesadas o más ligeras según se requiera.

### Escalabilidad geográfica

Un sistema geográficamente escalable, es aquel que mantiene su utilidad y usabilidad, sin importar que tan lejos estén sus usuarios o recursos.

### Escalabilidad administrativa

No importa qué tantas diferentes organizaciones necesiten compartir un solo sistema distribuido, debe ser fácil de usar y manejar.

## Ejemplos

Por ejemplo, un sistema de procesamiento y transacción en línea o un sistema administrador de base de datos escalable pueden ser actualizados para poder procesar más transacciones añadiendo por medio de nuevos procesadores, dispositivos y almacenamiento que se pueden implementar fácil y transparentemente sin apagarlos.
Un protocolo enrutador es considerado escalable con respecto al tamaño de la red, si el tamaño de la necesaria tabla enrutadora en cada nodo crece como una cota superior asintótica (log N), donde N es el número de nodos en la red.
Por otro lado, una aplicación de software es escalable si al incrementar los procesadores donde se ejecuta, el rendimiento crece proporcionalmente. Por el contrario, una aplicación no es escalable si su rendimiento no "escala" o crece con el incremento de los procesadores.
Otro ejemplo es: en el CoE = 4

## Tipos de escalabilidad

Capacidad del sistema informático de cambiar su tamaño o configuración para adaptarse a las circunstancias cambiantes.

### Escalabilidad vertical

Un sistema escala verticalmente o hacia arriba, cuando al añadir más recursos a un nodo particular del sistema, este mejora en conjunto. Por ejemplo, añadir memoria o un disco duro más rápido a una computadora puede mejorar el rendimiento del sistema global. Otro ejemplo muy básico dentro de la economía digital sería aumentar el número de CPUs que tiene el servidor de nuestro sitio web.
Este es el sistema más simple, pues como hemos dicho, significa crecer el hardware de uno de los nodos, es decir aumentar el hardware por uno más potente, como disco duro, memoria, procesador, etc. pero también puede ser la migración completa del hardware por uno más potente. El esfuerzo de este crecimiento es mínimo, pues no tiene repercusiones en el software, ya que solo será respaldar y migrar los sistemas al nuevo hardware.
Pese a que hemos visto que se trata de un proceso sencillo, la realidad es que este tipo de escalamiento contiene algunos aspectos negativos. Esto se debe a que el crecimiento está directamente ligado al hardware, y este; tarde o temprano alcanza su límite. Llegará un momento en el que tendremos el mejor disco duro, el mejor procesador, la mejor memoria y ya no podamos crecer más. Podríamos comprar el siguiente modelo de servidores, pero el coste de esta operación sería enorme y el rendimiento solo mejoraría un poco, es decir, que no nos valdría la pena. Además, seguiríamos teniendo el mismo problema el próximo año y, por lo tanto, no sería una solución efectiva. Sin embargo a nivel estructural no supone ninguna modificación reseñable, lo que la convierte en una buena opción si los costos anteriores son asumibles.
En cualquier caso, esto no significa que el sistema de escalabilidad vertical sea malo, dado que podemos combinarlo con el escalamiento horitzontal y así obtener mejores resultados.

### Escalabilidad horizontal

Un sistema escala horizontalmente si al agregar más nodos al mismo, el rendimiento de este mejora. Se basa en mantener el coste de desarrollo y aplicación adaptándose en todo momento a su continuo crecimiento, pero es un sistema más complejo de implementar y administrar. Este tipo de escalabilidad se basa en la modularidad de su funcionalidad. Por ello suele estar conformado por una agrupación de equipos que dan soporte a la funcionalidad completa. Normalmente, en una escalabilidad horizontal se añaden equipos para dar más potencia a la red de trabajo.
Con un entorno de este tipo, es lógico pensar que la potencia de procesamiento es directamente proporcional al número de equipos de la red. El total de la potencia de procesamiento es la suma de la velocidad física de cada equipo transferida por la partición de aplicaciones y datos extendida a través de los nodos.
Si se aplica un modelo de escalabilidad basado en la horizontalidad, no existen limitaciones de crecimiento a priori. Como principal e importante defecto, este modelo de escalabilidad supone una gran modificación en el diseño, lo que conlleva a una gran trabajo de diseño y reimplantación. Si la lógica se ha concebido para un único servidor, es probable que se tenga que estructurar el modelo arquitectónico para soportar este modelo de escalabilidad.
Tiene que haber un encargado que se encargue de cómo realizar el modelo de partición de datos en los diferentes equipos es el desarrollador. Ya que existen dependencias en el acceso a la aplicación. Es conveniente, realizar un análisis de actividad de los usuarios para ir ajustando el funcionamiento del sistema. Con este modelo de la escalabilidad, se dispone de un sistema al que se pueden agregar recursos de manera casi infinita y adaptable al crecimiento de cargas de trabajo y nuevos usuarios.
La escalabilidad cuenta como factor crítico el crecimiento de usuarios. Es mucho más sencillo diseñar un sistema con un número constante de usuarios (por muy alto que sea este) que diseñar un sistema con un número creciente y variable de usuarios. El crecimiento relativo de los números es mucho más importante que los números absolutos
Por ejemplo, al añadir una computadora nueva a un sistema que balancee la carga entre la antigua y la nueva puede mejorar el rendimiento de todo el sistema. Otro ejemplo que encontramos sería el de una tienda en línea. En este caso se trataría de implementar un software flexible que pueda ir ajustándose a los requerimientos en picos altos de demanda y que aporte una excelente gestión en términos de rendimiento y optimización.

#### Escalabilidad Vertical vs Escalabilidad Horizontal

Ventajas :
| Escalabilidad Vertical | Escalabilidad Horizontal |
| No implica un gran problema para las aplicaciones, pues todo el cambio es sobre el hardware | El crecimiento es prácticamente infinito, se podrían agregar tantos servidores como fueran necesarios |
| Es mucho más fácil de implementar que el escalamiento horizontal | Es posible combinarse con el escalamiento vertical |
| Puede ser una solución rápida y económica (compara con modificar el software) | Soporta la alta disponibilidad |
| | Si un nodo falla, los demás sigue trabajando |
| | Soporta el balanceo de cargas. |
Desventajas :
| Escalabilidad Vertical | Escalabilidad Horizontal |
| El crecimiento está limitado por el hardware | Requiere de mucho mantenimiento |
| Una falla en el servidor implica que la aplicación se detenga | Es difícil de configurar |
| No soporta la alta disponibilidad | Requiere de grandes cambios en las aplicaciones (si no fueron diseñadas para trabajar en clúster) |
| Hacer un upgrade del hardware al máximo puede llegar a ser muy caro, ya que las partes más nuevas suelen ser caras con respecto al rendimiento de un modelo anterior. | Requiere de una infraestructura más grande. |

## Escalabilidad en los modelos de negocio

El término de escalabilidad se aplica también en el mundo empresarial. El uso intensivo de las tecnologías de la información y la comunicación (TIC) por parte de las de empresas, genera modelos de negocio escalables, entendiendo éstos como ideas de negocio con alto potencial de expansión, rápida adaptación a los mercados internacionales y capaz de generar mayores beneficios sin aumentar los costes de forma lineal. Incluso si no estás listo para crecer en este momento, hay cosas que puedes hacer para preparar un crecimiento y éxito escalables: construye una base sólida, enfócate en soluciones escalables y planifica de forma estratégica.
Un ejemplo de empresas con estas características son las startups o empresas emergentes. Este tipo de empresas consiguen, mediante la utilización de la tecnología, crecer de forma rápida y continuada manteniendo estructuras flexibles, adaptables en función del desarrollo del mercado y con costes relativamente bajos.

#### Relación de las Startups con la Escalabilidad

Para empezar, deberíamos entender la escalabilidad como punto de partida y como una vía imprescindible para todos los emprendedores que comienzan con una empresa de nueva creación. Las startups basan su negocio y comercializan sus servicios y/o productos a través del uso intensivo de las tecnologías de la información y la comunicación, a la vez que trabajan con un modelo de negocio estable el cual les permite crecer de manera rápida y sostenible en el tiempo. Este fuerte componente tecnológico les permite poder escalar su negocio de forma ágil y rápida.
Es por todo esto que las startups tienen un gran potencial con respecto a la escalabilidad. Esto se debe a que las startups desarrollan, generalmente, modelos de negocio innovadores y operan con costes inferiores a los de las empresas tradicionales. Además, su principal objetivo es crecer rápidamente y operan, por norma general, con un organigrama horizontal que le permite adaptarse en todo momento a su continuo crecimiento.

#### Influencia de las TIC en la escalabilidad de un proyecto

Este concepto, TIC, hace referencia a las teorías, las herramientas y las técnicas utilizadas en el tratamiento y la transmisión de la información: informática, internet y telecomunicaciones.
La tecnología es el mejor equipamiento de cualquier negocio escalable, ya que se ha consolidado como una herramienta clave para la estandarización de los procesos y la estrategia general de la empresa.
* Facilita las tareas de la empresa
* Produce innovación.
* Aporta mayores recursos de producción y competitividad
Es importante que conozcamos los tipos de tecnología que mejor se adapten a nuestro modelo de negocio. Las TICs se componen de distintos conocimientos, herramientas, técnicas y dispositivos y a la hora de emprender con un proyecto escalable podremos encontrar en ellas soluciones a medida para realizar el trabajo.

## Cómo mejorar la escalabilidad

El cálculo del escalado de la aplicación debe comenzar en la etapa de desarrollo, atendiendo a los requerimientos. Es importante decidir de antemano qué se necesitará para conseguir un adecuado escalado y cómo se va a realizar. Se debe pensar en factores como el comportamiento del crecimiento de la aplicación y los límites de los recursos de infraestructura que podamos tener o asumir económicamente. Estas decisiones seguramente condicionen el desarrollo y marquen la necesidad de arquitecturas específicas (microservicios, REST…), de modo que el software se adapte correctamente.
En cuanto a escalado vertical es importante saber que no siempre es posible aumentar los recursos actuales de un servidor. Por ejemplo, los Servidores Dedicados tienen pocas posibilidades de expansión y generalmente es necesario cambiar la máquina entera, con la correspondiente migración. Esto, sin embargo, no sucede con los Servidores Cloud, ya que es perfectamente posible asignar más recursos al servidor cuando sea necesario, ahorrándonos la necesidad de cambiar de máquina.
Los Servidores Cloud también facilitan mucho el escalamiento horizontal, ya que crear nuevos servidores y añadirlos al clúster es muy rápido y sencillo. La complejidad de estas configuraciones no nos tiene que asustar, pues gracias al panel de Cloudbuilder Next de Arsys es posible configurar un clúster de servidores con equilibrado de carga de manera muy fácil, prácticamente a golpe de clic, como puedes ver en el tutorial Cuándo y cómo hacer un equilibrado de carga en nuestros Servidores Cloud.
Generalmente, el escalado vertical es más que adecuado para la mayoría de las aplicaciones, pero cuando se espera un crecimiento elevado de los usuarios y, por tanto, una cantidad alta de solicitudes en un espacio corto de tiempo es posible que sea necesaria la planificación de una estrategia de escalado horizontal. También se debe considerar que a veces el aumento del hardware no es viable, por presupuesto o porque la mejoría no resulta lo suficientemente relevante para una aplicación. En estos casos el escalado horizontal es mucho más seguro, pero también podemos acudir a estrategias mixtas, como sería separar ciertos servicios a un servidor adicional, como la base de datos. De esta manera, sin llegar a las complejidades de configuración de un clúster, podemos tener dos máquinas atendiendo solicitudes, una encargada de la parte del servidor web y otra de la base de datos.