La escalabilidad era algo que llevaba escuchando durante mucho tiempo en diferentes lugares de trabajo y con colegas programadores, es un concepto que a lo largo del tiempo lo tomé como conocimiento empírico, por lo mismo nunca indagué un poco más al respecto.
El concepto de un “sistema escalable” parece simple, sistema que tiene la cualidad de adaptarse al crecimiento continuo que requiere su negocio. Siendo un concepto sencillo realmente llevarlo a cabo es complejo y es parte del diseño de un sistema.
Como dato curioso, escucho seguido este concepto aplicado a otras áreas diferentes de TI como arquitectura, industrias y hasta psicología, siendo un concepto que no existe en la RAE se ha adoptado como un anglicismo.
Como hacer un sistema escalable
Si se requiere simplificar, podríamos dividirlo en dos factores: escalabilidad en infraestructura y en programación.
Escalabilidad en infraestructura
Esto hace alusión a la capacidad de cómputo, por ejemplo si un sistema que antes aceptaba a 100 usuarios por día, ahora se requiere “escalar” a 1000 por dia, esto podríamos manejarlo en dos sentidos:
Escalamiento vertical: Es añadir más poder de cómputo a una computadora, por ejemplo, la distribución para los 100 usuarios está en un nodo (PC) con 16gb Ram, procesador con 4 núcleos y para los 1000 usuarios ahora ese nodo, tiene 64gb ram y procesador con 32 núcleos, habremos escalado “verticalmente”.
Escalamiento horizontal: Es añadir más nodos (PCs) a un cluster (conjunto de PCs), por ejemplo, el sistema se encuentra distribuido en un conjunto de 5 computadoras para soportar los 100 usuarios, ahora para soportar 1000 usuarios, se añaden 18 computadoras a ese conjunto y en total son 23, esto es escalar horizontalmente.
Escalabilidad en programación
Esto es parte de lo más complicado a la hora de escalar, porque principalmente el diseño inicial y la documentación con la cual inició el proyecto, podrían darnos indicios de cómo hacerlo.
Claro esto dependerá de las buenas prácticas de desarrollo que se tengan y documentar cada cosa correctamente, te invito a leer los mandimientos del programador.
Para nuestro caso hipotético escalar a los 1000 usuarios, digamos que se podría considerar usar redis, elasticSearch, etc. para almacenar algunas cosas importantes y agilizar entrega de datos a los 1000 usuarios, esto conlleva a instalar conexiones, incluirlas en código, probarlas, adaptarlo a lo que ya está, siempre y cuando no tengamos deuda técnica.