La escalabilidad es la propiedad de un sistema de manejar una cantidad creciente de trabajo. Una definición de los sistemas de software especifica que esto puede lograrse agregando recursos al sistema. [1]
En un contexto económico , un modelo de negocio escalable implica que una empresa puede aumentar las ventas si dispone de más recursos. Por ejemplo, un sistema de entrega de paquetes es escalable porque se pueden entregar más paquetes añadiendo más vehículos de reparto. Sin embargo, si todos los paquetes tuvieran que pasar primero por un único almacén para su clasificación, el sistema no sería tan escalable, porque un almacén puede gestionar solo una cantidad limitada de paquetes. [2]
En informática, la escalabilidad es una característica de las computadoras, redes, algoritmos , protocolos de red , programas y aplicaciones. Un ejemplo es un motor de búsqueda , que debe soportar un número cada vez mayor de usuarios y de temas que indexa . [3] Webscale es un enfoque de arquitectura informática que lleva las capacidades de las empresas de computación en la nube a gran escala a los centros de datos empresariales. [4]
En los sistemas distribuidos , existen varias definiciones según los autores, algunos consideran los conceptos de escalabilidad como una subparte de la elasticidad , otros como algo distinto. Según Marc Brooker: "un sistema es escalable en el rango en el que el costo marginal de la carga de trabajo adicional es casi constante". Las tecnologías sin servidor se ajustan a esta definición, pero es necesario considerar el costo total de propiedad, no solo el costo de la infraestructura. [5]
En matemáticas, la escalabilidad se refiere principalmente al cierre bajo la multiplicación escalar .
En ingeniería y fabricación industrial, la escalabilidad se refiere a la capacidad de un proceso, sistema u organización para manejar una carga de trabajo creciente, adaptarse a demandas crecientes y mantener la eficiencia operativa. Un sistema escalable puede gestionar eficazmente volúmenes de producción mayores, nuevas líneas de productos o mercados en expansión sin comprometer la calidad ni el rendimiento. En este contexto, la escalabilidad es una consideración vital para las empresas que buscan satisfacer las expectativas de los clientes, seguir siendo competitivas y lograr un crecimiento sostenible. Los factores que influyen en la escalabilidad incluyen la flexibilidad del proceso de producción, la adaptabilidad de la fuerza laboral y la integración de tecnologías avanzadas. Al implementar soluciones escalables, las empresas pueden optimizar la utilización de recursos, reducir costos y agilizar sus operaciones. La escalabilidad en ingeniería y fabricación industrial permite a las empresas responder a las condiciones fluctuantes del mercado, capitalizar las oportunidades emergentes y prosperar en un panorama global en constante evolución. [ cita requerida ]
El Sistema de Comando de Incidentes (ICS, por sus siglas en inglés) es utilizado por las agencias de respuesta a emergencias en los Estados Unidos. El ICS puede escalar la coordinación de recursos desde un incendio forestal en la carretera provocado por un solo motor hasta un incendio forestal interestatal. El primer recurso en el lugar establece el comando, con autoridad para ordenar recursos y delegar responsabilidades (administrando de cinco a siete oficiales, quienes a su vez delegarán en hasta siete, y así sucesivamente a medida que el incidente se agrave). A medida que un incidente se expande, oficiales de mayor rango asumen el mando. [6]
La escalabilidad se puede medir en múltiples dimensiones, como: [7]
Los recursos se dividen en dos grandes categorías: horizontales y verticales. [8]
El escalamiento horizontal (hacia afuera/hacia adentro) significa agregar o quitar nodos, como agregar una nueva computadora a una aplicación de software distribuida. Un ejemplo podría implicar el escalamiento horizontal de un servidor web a tres. Las aplicaciones informáticas de alto rendimiento , como el análisis sísmico y la biotecnología , escalan cargas de trabajo horizontalmente para respaldar tareas que antes habrían requerido supercomputadoras costosas . Otras cargas de trabajo, como las grandes redes sociales, exceden la capacidad de la supercomputadora más grande y solo pueden ser manejadas por sistemas escalables. Para explotar esta escalabilidad se requiere software para una gestión y mantenimiento eficiente de los recursos. [7]
Escalar verticalmente (arriba/abajo) significa agregar recursos a (o quitar recursos de) un solo nodo, lo que generalmente implica agregar CPU, memoria o almacenamiento a una sola computadora. [7]
Los beneficios de la ampliación incluyen evitar el aumento de la complejidad de la gestión, una programación más sofisticada para asignar tareas entre los recursos y gestionar cuestiones como el rendimiento, la latencia y la sincronización entre nodos. Además, algunas aplicaciones no se escalan horizontalmente .
La virtualización de funciones de red define estos términos de manera diferente: escalar hacia adentro o hacia afuera es la capacidad de escalar agregando o quitando instancias de recursos (por ejemplo, una máquina virtual), mientras que escalar hacia arriba o hacia abajo es la capacidad de escalar cambiando los recursos asignados (por ejemplo, memoria, CPU o capacidad de almacenamiento). [9]
La escalabilidad de las bases de datos requiere que el sistema de bases de datos pueda realizar trabajo adicional si se dispone de mayores recursos de hardware, como servidores, procesadores, memoria y almacenamiento adicionales. Las cargas de trabajo han seguido creciendo y las demandas de las bases de datos han seguido su ejemplo.
Las innovaciones algorítmicas incluyen el bloqueo a nivel de fila y la partición de tablas e índices. Las innovaciones arquitectónicas incluyen arquitecturas de uso compartido total y no compartido para gestionar configuraciones de múltiples servidores.
En el contexto del almacenamiento de datos escalable , la escalabilidad se define como el tamaño máximo del clúster de almacenamiento que garantiza la consistencia total de los datos, lo que significa que solo hay una versión válida de los datos almacenados en todo el clúster, independientemente de la cantidad de copias de datos físicos redundantes. Los clústeres que brindan redundancia "perezosa" al actualizar las copias de manera asincrónica se denominan "eventualmente consistentes" . Este tipo de diseño escalable es adecuado cuando la disponibilidad y la capacidad de respuesta se evalúan por encima de la consistencia, lo que es cierto para muchos servicios de alojamiento de archivos web o cachés web ( si desea la última versión, espere unos segundos para que se propague ). Para todas las aplicaciones orientadas a transacciones clásicas, este diseño debe evitarse. [10]
Muchos clústeres de almacenamiento de código abierto e incluso comerciales de escalabilidad horizontal, especialmente aquellos construidos sobre hardware y redes de PC estándar, solo brindan consistencia eventual, como algunas bases de datos NoSQL como CouchDB y otras mencionadas anteriormente. Las operaciones de escritura invalidan otras copias, pero a menudo no esperan sus reconocimientos. Las operaciones de lectura generalmente no verifican cada copia redundante antes de responder, lo que potencialmente omite la operación de escritura anterior. La gran cantidad de tráfico de señales de metadatos requeriría hardware especializado y distancias cortas para manejarse con un rendimiento aceptable (es decir, actuar como un dispositivo de almacenamiento o base de datos no agrupados). [ cita requerida ]
Siempre que se espere una fuerte consistencia de los datos, busque estos indicadores: [ cita requerida ]
Los indicadores para diseños eventualmente consistentes (¡no aptos para aplicaciones transaccionales!) son: [ cita requerida ]
A menudo se aconseja centrar el diseño del sistema en la escalabilidad del hardware en lugar de en la capacidad. Normalmente es más barato añadir un nuevo nodo a un sistema para conseguir un rendimiento mejorado que participar en un ajuste del rendimiento para mejorar la capacidad que puede gestionar cada nodo. Pero este enfoque puede tener rendimientos decrecientes (como se explica en la ingeniería del rendimiento ). Por ejemplo: supongamos que el 70% de un programa se puede acelerar si se paraleliza y se ejecuta en varias CPU en lugar de una. Si es la fracción de un cálculo que es secuencial, y es la fracción que se puede paralelizar, la aceleración máxima que se puede conseguir utilizando procesadores P se da de acuerdo con la Ley de Amdahl :
Sustituyendo el valor de este ejemplo, utilizando 4 procesadores, se obtiene
Duplicar la potencia de procesamiento a 8 procesadores proporciona
Duplicar la capacidad de procesamiento solo ha acelerado el proceso en aproximadamente una quinta parte. Si todo el problema fuera paralelizable, la velocidad también se duplicaría. Por lo tanto, agregar más hardware no es necesariamente el enfoque óptimo.
En sistemas distribuidos , puede utilizar la Ley de Escalabilidad Universal (USL) para modelar y optimizar la escalabilidad de su sistema. USL fue acuñada por Neil J. Gunther y cuantifica la escalabilidad en función de parámetros como la contención y la coherencia. La contención se refiere al retraso debido a la espera o la puesta en cola de recursos compartidos. La coherencia se refiere al retraso para que los datos se vuelvan consistentes. Por ejemplo, tener una alta contención indica un procesamiento secuencial que podría paralelizarse, mientras que tener una alta coherencia sugiere dependencias excesivas entre procesos, lo que le impulsa a minimizar las interacciones. Además, con la ayuda de USL, puede, de antemano, calcular la capacidad efectiva máxima de su sistema: ampliar su sistema más allá de ese punto es un desperdicio. [11]
La computación de alto rendimiento tiene dos nociones comunes de escalabilidad:
{{cite journal}}
: CS1 maint: DOI inactive as of November 2024 (link)