Escalabilidad
La escalabilidad es la propiedad de un sistema para manejar una cantidad creciente de trabajo mediante la adición de recursos al sistema.
En un contexto económico, un modelo de negocio escalable implica que una empresa puede aumentar las ventas con mayores recursos. Por ejemplo, un sistema de entrega de paquetes es escalable porque se pueden entregar más paquetes agregando más vehículos de entrega. Sin embargo, si todos los paquetes tuvieran que pasar primero por un solo almacén para su clasificación, el sistema no sería tan escalable, porque un almacén solo puede manejar una cantidad limitada de paquetes.
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 admitir un número creciente de usuarios y el número de temas que indexa. 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.
En matemáticas, la escalabilidad se refiere principalmente al cierre bajo la multiplicación escalar.
Ejemplos
El Sistema de Comando de Incidentes (ICS) es utilizado por las agencias de respuesta a emergencias en los Estados Unidos. ICS puede escalar la coordinación de recursos desde un incendio forestal de un solo motor en la carretera hasta un incendio forestal interestatal. El primer recurso en escena establece el mando, con autoridad para ordenar recursos y delegar responsabilidades (administrando de cinco a siete oficiales, quienes nuevamente delegarán hasta siete, y así sucesivamente a medida que crezca el incidente). A medida que se expande un incidente, más oficiales superiores asumen el mando.
Dimensiones
La escalabilidad se puede medir en múltiples dimensiones, como:
- Escalabilidad administrativa: la capacidad de un número cada vez mayor de organizaciones o usuarios para acceder a un sistema.
- Escalabilidad funcional: la capacidad de mejorar el sistema agregando nuevas funciones sin interrumpir las actividades existentes.
- Escalabilidad geográfica: la capacidad de mantener la eficacia durante la expansión de un área local a una región más grande.
- Escalabilidad de carga: la capacidad de un sistema distribuido para expandirse y contraerse para acomodar cargas más pesadas o más livianas, incluida la facilidad con la que un sistema o componente puede modificarse, agregarse o eliminarse para adaptarse a cargas cambiantes.
- Escalabilidad de generación: la capacidad de un sistema para escalar mediante la adopción de nuevas generaciones de componentes.
- La escalabilidad heterogénea es la capacidad de adoptar componentes de diferentes proveedores.
Dominios
- Un protocolo de enrutamiento se considera escalable con respecto al tamaño de la red, si el tamaño de la tabla de enrutamiento necesaria en cada nodo crece como O(log N), donde N es el número de nodos en la red. Algunas implementaciones tempranas de punto a punto (P2P) de Gnutella tenían problemas de escalado. Cada consulta de nodo inundó sus solicitudes a todos los nodos. La demanda de cada par aumentó en proporción al número total de pares, superando rápidamente su capacidad. Otros sistemas P2P como BitTorrent escalan bien porque la demanda de cada par es independiente del número de pares. Nada está centralizado, por lo que el sistema puede expandirse indefinidamente sin más recursos que los propios pares.
- Un sistema escalable de procesamiento de transacciones en línea o un sistema de administración de bases de datos es aquel que se puede actualizar para procesar más transacciones agregando nuevos procesadores, dispositivos y almacenamiento, y que se puede actualizar de manera fácil y transparente sin apagarlo.
- La naturaleza distribuida del Sistema de Nombres de Dominio (DNS) le permite funcionar de manera eficiente, sirviendo a miles de millones de hosts en Internet en todo el mundo.
Escalado horizontal (escalado) y vertical (escalado)
Los recursos se dividen en dos grandes categorías: horizontales y verticales.
Horizontal o escalado
Escalar horizontalmente (hacia afuera/adentro) significa agregar más nodos (o eliminar nodos) de un sistema, como agregar una nueva computadora a una aplicación de software distribuida. Un ejemplo podría implicar escalar horizontalmente de un servidor web a tres. Las aplicaciones informáticas de alto rendimiento, como el análisis sísmico y la biotecnología, escalan las cargas de trabajo horizontalmente para respaldar tareas que antes requerían costosas supercomputadoras. Otras cargas de trabajo, como las grandes redes sociales, superan la capacidad de la supercomputadora más grande y solo pueden ser manejadas por sistemas escalables. Explotar esta escalabilidad requiere un software para la gestión y el mantenimiento eficientes de los recursos.
Vertical o a escala
Escalar verticalmente (hacia arriba/hacia abajo) significa agregar recursos a (o eliminar recursos de) un solo nodo, lo que generalmente implica la adición de CPU, memoria o almacenamiento a una sola computadora.
Una mayor cantidad de elementos aumenta la complejidad de la administración, una programación más sofisticada para asignar tareas entre los recursos y manejar problemas como el rendimiento y la latencia entre los nodos, mientras que algunas aplicaciones no escalan horizontalmente.
Escalabilidad de la red
La virtualización de funciones de red define estos términos de manera diferente: escalar hacia adentro/hacia afuera es la capacidad de escalar agregando/eliminando instancias de recursos (p. ej., máquina virtual), mientras que escalar hacia arriba/hacia abajo es la capacidad de escalar cambiando los recursos asignados (p. ej., memoria/CPU). /capacidad de almacenamiento).
Escalabilidad de la base de datos
La escalabilidad de las bases de datos requiere que el sistema de la base de datos sea capaz de realizar un trabajo adicional con mayores recursos de hardware, como servidores, procesadores, memoria y almacenamiento adicionales. Las cargas de trabajo han seguido creciendo y las demandas de 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 nada compartido y de todo compartido para administrar configuraciones de múltiples servidores.
Consistencia fuerte versus eventual (almacenamiento)
En el contexto del almacenamiento de datos de escalamiento horizontal, 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 proporcionan redundancia "perezosa" mediante la actualización de copias de forma asíncrona se denominan "eventualmente coherentes". Este tipo de diseño de escalamiento horizontal es adecuado cuando la disponibilidad y la capacidad de respuesta tienen una calificación más alta que la consistencia, lo cual 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 clásicas orientadas a transacciones, se debe evitar este diseño.
Muchos clústeres de almacenamiento de escalamiento horizontal de código abierto e incluso comerciales, especialmente aquellos construidos sobre redes y hardware de PC estándar, solo brindan consistencia eventual. Idem algunas bases de datos NoSQL como CouchDB y otras mencionadas anteriormente. Las operaciones de escritura invalidan otras copias, pero a menudo no esperan su reconocimiento. Las operaciones de lectura normalmente no verifican todas las copias redundantes antes de responder, lo que podría pasar por alto 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).
Siempre que se espere una gran consistencia de los datos, busque estos indicadores:
- el uso de InfiniBand, Fibrechannel o redes similares de baja latencia para evitar la degradación del rendimiento con el aumento del tamaño del clúster y la cantidad de copias redundantes.
- longitudes de cable cortas y extensión física limitada, lo que evita la degradación del rendimiento del tiempo de ejecución de la señal.
- mecanismos de mayoría / quórum para garantizar la consistencia de los datos siempre que partes del clúster se vuelvan inaccesibles.
Los indicadores para diseños eventualmente consistentes (¡no aptos para aplicaciones transaccionales!) son:
- el rendimiento de escritura aumenta linealmente con la cantidad de dispositivos conectados en el clúster.
- mientras el clúster de almacenamiento está particionado, todas las partes siguen respondiendo. Existe el riesgo de actualizaciones conflictivas.
Ajuste de rendimiento frente a escalabilidad de hardware
A menudo se recomienda centrar el diseño del sistema en la escalabilidad del hardware en lugar de en la capacidad. Por lo general, es más económico agregar un nuevo nodo a un sistema para lograr un mejor rendimiento que participar en el ajuste del rendimiento para mejorar la capacidad que puede manejar cada nodo. Pero este enfoque puede tener rendimientos decrecientes (como se analiza en la ingeniería de 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 sola. 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 lograr mediante el uso de procesadores P se da de acuerdo con la Ley de Amdahl:
Sustituyendo el valor de este ejemplo, usando 4 procesadores da
Duplicar el poder de cómputo a 8 procesadores da
Duplicar la potencia 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.
Escalado débil versus fuerte
La computación de alto rendimiento tiene dos nociones comunes de escalabilidad:
- El escalado fuerte se define como la forma en que el tiempo de solución varía con la cantidad de procesadores para un tamaño de problema total fijo.
- El escalado débil se define como la variación del tiempo de solución con el número de procesadores para un tamaño de problema fijo por procesador.
Contenido relacionado
Daytime Protocol
Autenticación de acceso con resumen
Organización del conocimiento