Hola devs! Nos volvemos a encontrar, esta vez hablando sobre un término muy utilizado en la industria, pero a veces poco comprendida, no es tan sencillo como parece, así que empecemos!
Escalamiento (del inglés scaling o scalability) es un concepto clave en ingeniería de software que se refiere a la capacidad de un sistema para manejar un crecimiento en la carga de trabajo, el número de usuarios, el volumen de datos o el tráfico, sin perder desempeño ni estabilidad, y he resaltado en negrita porque es muy importante saber esto.
De donde vino el término 'Escalabilidad'
Este término no proviene de un estándar ISO directamente, pero aparece de forma indirecta en varios estándares internacionales relacionados con la calidad del software, especialmente en el ISO/IEC 25010 (modelo de calidad del software), donde la eficiencia del rendimiento (performance efficiency) incluye atributos como capacidad de escalado (scalability).
Así que más que una palabra de moda tiene sus fundamentos en un estándar y está además está muy relacionada con los requerimientos, ya que la escalabilidad es una característica del software y como tal hace parte de los requerimientos no funcionales.
En este artículo puedes leer más sobre los requerimientos, es un tema muy importante en Ingeniería de Software 😉
Tipos de Escalamiento
Ahora que ya tenemos un muy buen fundamento teórico, te aseguro que estás en el top 10% de desarrolladores respecto a este tema, ya que muy pocos se toman el tiempo de investigar esto, así que vas muy bien.
Entonces es momento de aterrizar este concepto a la práctica, cómo se implementa entonces el escalamiento en el software?
Déjame decirte que hay 2 tipos de escalamiento:
Escalamiento vertical
Aquí mejoras las capacidades de una sola máquina, como podría ser el servidor mediante mejorar su hardware es decir aumentando memoria RAM, espacio en disco, cambiando el procesador, mejorar su interfaz de red, entre otras similares o también mejorando su software.
Como todo en la vida, tiene sus ventajas y desventajas, aquí te listo sus ventajas:
- Fácil de implementar
- Es la menos compleja de los 3 tipos de escalamiento
- En líneas generales es la más rápida de implementar
Y sus desventajas son:
- Tiene limitaciones de hardware, es decir tiene crecimiento limitado
- También tiene limitaciones físicas, como por ejemplo de espacio
- En general es costosa y este costo debe ser desembolsado en el momento
En .NET podría darte un ejemplo real:
Una empresa de logística desarrolló una API REST con .NET 9 para que transportistas consulten cargas disponibles en tiempo real. Inicialmente, la aplicación se desplegó en una máquina virtual de Azure (VM) con ciertas características y conforme crece el número de usuarios y la carga de trabajo (más consultas concurrentes, más tráfico y mayor tamaño de la base de datos), la API empieza a responder lento o incluso lanzar errores de timeout, así que se escaló verticalmente la VM de Azure de la siguiente manera:
| Recurso | Antes | Después |
|---|---|---|
| CPU | 2 vCores | 12 vCores |
| RAM | 4 GB | 64 GB |
| Disco | HDD estándar 500GB | SSD M2 4TB |
| SQL Server | Versión Express | Versión Enterprise |
Gracias a este escalamiento ahora la misma aplicación puede soportar por ejemplo:
- 8 veces más usuarios concurrentes
- Procesamiento más rápido de operaciones costosas
- Mejor tiempo de respuesta
Y todo esto sin tocar una sola línea de código.
En conclusión el Escalamiento vertical en .NET consiste en darle más recursos físicos o virtuales a la misma instancia de la app para que procese más sin modificar su arquitectura. Es la opción más rápida para mitigar cuellos de botella en producción, pero tiene un límite físico y no reemplaza al escalamiento horizontal a largo plazo.
Escalamiento horizontal
Aquí lo que haremos será añadir más máquinas o nodos para distribuir la carga entre ellas. Cada máquina puede ser una réplica o tener una función específica.
Entre sus ventajas tiene:
- Escalabilidad potencialmente infinita
- Alta tolerancia a fallos
Y sus desventajas son:
- Es más difícil de diseñar e implementar
- Requiere darle mantenimiento
- Requiere seguimiento y control
- Podría llegar a ser costosa si no se tiene una implementación adecuada
Ahora te daré un ejemplo real también:
Una fintech lanza una API en .NET 9 para procesar transacciones financieras (depósitos, pagos, transferencias). La app se publica en un contenedor Docker y corre en Azure App Service o Kubernetes.
Inicialmente, solo una instancia maneja todas las peticiones. Con el crecimiento, los usuarios se quejan de lentitud en horas pico (por ejemplo, al final del día hábil, a fines de mes y en fechas festivas de fin de año 🥳).
El equipo decidió en lugar de mejorar la máquina (escalado vertical) diseñar la siguiente estrategia (escalado horizontal):
- Desplegar múltiples instancias: La misma imagen de la aplicación se ejecuta en 4 réplicas
- Externalizar servicios como caché con Redis, archivos con Storage Accounts en Azure y colas con Azure Service Bus.
- Configurar un balanceador de carga (load balancer) como Azure Load Balancer para repartir tráfico entre instancias.
Gracias a este escalamiento ganamos lo siguiente:
- Mayor tolerancia a fallos porque si una instancia se cae tenemos otras que siguen funcionando.
- Se puede escalar sólo las partes que necesitan o son más demandadas, por ejemplo si usas microservicios, puedes sólo escalar aquellos microservicios implicados directamente como Transferencias.
- Se hace un escalado automático de instancias, pasando de 1 a 10 según el uso de CPU o tráfico de red.
Ten en cuenta que también se puede aplicar automatización al escalado vertical 😉 ya que el auto-scaling no es un tipo de escalamiento sino una forma de aplicarla ya sea manual o automática independientemente si es vertical u horizontal!
Y todo esto sin modificar la máquina inicial sino multiplicándola y ahora la misma app .NET ahora puede manejar miles de transacciones simultáneas, y responde igual de rápido en horas pico. No hay downtime al escalar, y el cliente ni lo nota.
En conclusión el escalamiento horizontal con .NET es ideal cuando tu aplicación está bien diseñada (stateless, desacoplada, con recursos compartidos) y usas plataformas modernas (App Service, Kubernetes, Docker). Es más complejo que el vertical, pero esencial para alta disponibilidad y crecimiento real.
Conclusión
Entonces como podrás notar hay formas de hacer tu aplicación escalable y aquí te presenté ejemplos reales, espero te haya servido mucho y ya sabes qué responder cuando te pregunten esto en una entrevista técnica o cuando tengas una exposición ante tu equipo de ingeniería en tu compañía mi crack! 🔥🐿️
Si esta entrada te ha gustado compártela! 👌🏼
Créditos de imagen de portada: Foto de Lisette Verwoerd en Unsplash

2 comentarios en «La Escalabilidad en el Software como nunca te la han explicado»