¿Qué se entiende por ‘escalabilidad’ en ingeniería de software?

Un sistema es escalable si puede atender más carga de trabajo con un esfuerzo de mínimo a razonable para lograrlo.
Me gusta usar el ejemplo del burócrata.
Imagina un burócrata que está solo y atiende una fila de personas que quieren que les revisen su documentación y les pongan un sello para poder continuar su trámite.
Imagen: Te presentamos la increíble, asombrosa y maravillosa vida de un burócrata cola de personas puede variar según la cantidad que llega y la velocidad para atenderlas. Si la cola de personas crece demasiado, nuestro servicio burocrático debería “escalar”, prepararse para atender más gente, más “carga de trabajo”.
Hay dos maneras de hacer eso: escalamiento vertical y horizontal.
El escalamiento vertical significa que nuestro burócrata es sometido a un horrible tratamiento genético para agregarle más brazos, más ojos y más cerebros para que pueda atender más gente en paralelo (o sea, cambiamos un computador pequeño por uno más grande, con un mayor procesador, memoria y capacidad de red). Eso funciona al principio, pero el problema es que, eventualmente, cada experimento genético es mucho más caro que el anterior. Cada expansión empieza a costar realmente caro
La otra opción es el escalamiento horizontal. En este caso, lo que hacemos es poner más burócratas al lado de nuestro amigo original (o sea, más computadores idénticos trabajando uno al lado del otro). La gente llega y se distribuye en muchas filas, una por cada nuevo burócrata. Esta opción es la más simpática (y más humana, sin horribles experimentos) pero es más compleja de implementar ya que aparecen otras cuestiones.
Imaginemos que tenemos diez burócratas:
  • ¿Qué pasa si uno tiene una fila demasiado larga y los otros nueve están desocupados?
  • ¿Qué pasa si no viene nadie durante las mañanas? ¿Seguimos pagando 10 sueldos en forma innecesaria?
  • ¿Qué pasa cuando llega demasiada gente en hora pico? ¿De dónde conseguimos nuevos burócratas rápidamente?
  • ¿Qué pasa si la forma en que la gente llega no tiene ningún patrón, así que no hay forma de predecir la carga en algún momento determinado? ¿Nos quedamos con los diez todo el tiempo por si acaso?
  • ¿Cómo podemos entrenar a los nuevos para que entren a trabajar rápido?
  • Se implementa un nuevo proceso de revisión de la documentación. ¿Llamamos a los diez a reunión para capacitarlos? ¿Los llamamos de uno en uno?
  • ¿Qué pasa si el nuevo proceso no funciona? ¿Cómo les avisamos a todos que ya no lo hagan así?
Todo esto se pone aún peor si son cien o mil burócratas trabajando en paralelo.
Para todo esto y más, hay técnicas y herramientas que ayudan a lograrlo.
¿Cuál es la forma correcta de escalar? ¿Horizontal o vertical?
Ambas son igual de correctas. Depende del proyecto.
Por ejemplo, si tienes un sitio web para unos cientos de usuarios y no hay vistas de crecer muy rápido, escalamiento horizontal podría ser “sobreingeniería”, o sea, complejidad no necesaria. En ese caso, el escalamiento vertical es suficiente, en la medida que servidores web como Apache están listos para usar todos los recursos del computador.
Por otro lado, si estás empezando un proyecto que se sabe que manejará millones de transacciones y seguirá aumentando, el escalamiento vertical sería un cuello de botella en el corto o mediano plazo. En este caso, lo mejor sería diseñar el sistema desde el principio para escalar horizontalmente.

Como corolario, ¿cuándo un sistema no es escalable?
Cuando requiere un esfuerzo grande para aplicar el escalamiento vertical u horizontal. Por ejemplo, ponemos el sistema en un computador más grande (escalamiento vertical), pero el sistema no aprovecha los nuevos recursos. Necesitamos reescribirlo y configurarlo para que pueda ser más rápido en un computador más grande. Lo mismo si copiamos el sistema a más computadores (escalamiento horizontal). Si el sistema no está hecho para coordinar entre las copias, tendríamos que recurrir a algún truco caro o reescribir el sistema para que sea capaz de funcionar de esta manera.

Deja un comentario