Pregunta

Publiqué una pregunta similar sobre cómo es linq escalable. Hubo muchos puntos de vista diferentes sobre lo que realmente significaba la escalabilidad en algunas conversaciones recientes, por lo que también me ha impulsado a hacer esta pregunta. ¿Qué significa la escalabilidad para ti?

¿Fue útil?

Solución

Miro la escalabilidad desde dos perspectivas:

Ampliación

Si agrego más RAM a la caja en la que se está ejecutando algo, ¿cuánto rendimiento y capacidad adicionales obtengo? Si una aplicación que tengo puede manejar 300 conexiones más y se ejecuta un 15% más rápido cuando agrego 2 GB de RAM a mi servidor y otra aplicación solo puede manejar 100 conexiones más y se ejecuta un 5% más rápido, la aplicación A es claramente más escalable.

Escalado horizontal

Ahora, si agrego más cuadros a mi configuración, ¿cuánto rendimiento y capacidad adicionales obtengo? ¿Puedo configurar front-end web para manejar más tráfico de clientes? Si es así, ¿hay un aumento lineal? Si agrego 3 cuadros, ¿puedo obtener 3 veces más usuarios accediendo a mi sitio? ¿Puedo agregar más bases de datos para distribuir la carga de datos? ¿Puedo ampliar el subprocesamiento múltiple? Si puedo agregar fácilmente una máquina a mi red para agregar capacidad a mi aplicación, entonces es escalable.

Esto, por cierto, es una de las unidades principales de n-tier.

Otros consejos

Escalabilidad significa la capacidad de manejar el crecimiento en cualquiera de estas dos áreas:

1) Facilidad de añadir nuevas funciones, corrigiendo errores. Para hacer que el código haga estas cosas nuevas, ¿qué tan difícil es hacerlo? Si bien esto puede ser mantenibilidad de alguna manera, también se trata de si puede construir el código para manejar una escala más grande fácilmente.

2) Capacidad para manejar una carga cada vez mayor que puede ser de múltiples solicitudes simultáneamente en Desarrollo web o conjuntos de datos más grandes para un sitio web simple basado en bases de datos, por ejemplo. ¿Podría crear una aplicación que maneje tablas con cientos de miles de filas que aún se vean como "rápido"?

En general, para mí la escalabilidad significa la capacidad de crecer.

No creo que la escalabilidad tenga un poco de sentido sin contexto.

Cuando me preguntan sobre la escalabilidad de un sistema, lo primero que necesito saber es la forma en que se espera que crezca su utilización. ¿Estará recibiendo más usuarios? ¿Los usuarios existentes estarán haciendo un uso más intenso? ¿Estará creciendo su conjunto de características? ¿Cambiará la combinación de transacciones que actualmente soporta? ¿Será necesario cambiar la experiencia del usuario?

(OK, la respuesta a todas esas preguntas suele ser " Sí " ;; luego, anteponga la palabra " Cómo " a esas preguntas).

Para elegir un ejemplo no completamente ficticio: un sistema que actualmente admite muy pocos usuarios, y cuya base de usuarios se espera que crezca rápidamente, tiene un grave problema de escalamiento si el DBA tiene que pasar dos horas ejecutando consultas manualmente de la información seleccionada. mensajes de correo electrónico cada vez que tiene que configurar una nueva cuenta. Ese no es un problema que pueda solucionarse agregando más recursos, a menos que incluya a los DBA en la lista de recursos que agregará (y hay muchas razones por las que no se escalará bien).

O imagina un sitio de redes sociales que presenta la nueva e interesante función que puedes ver si tus amigos están conectados y chatea con ellos a través de una agradable interfaz de usuario de Ajax-y. De repente, sin un aumento en la base de usuarios, la cantidad de solicitudes HTTP que sus servidores manejan por día aumenta veinte veces, y sus preocupaciones acerca de la escalabilidad de su base de datos retroceden a un segundo plano. (A menos que, por supuesto, haya involucrado la base de datos en su aplicación de chat. ¡Buena idea!)

Claro, hacer que sus aplicaciones web sean sin estado para que pueda agregar servidores web, haciendo que las páginas web sean idempotentes para que pueda agregar proxies, diseñando su aplicación para que pueda particionar su base de datos entre servidores, todos ellos van a hacer su aplicación Escalable en varias dimensiones. Vale mucho la pena pensar en eso. Pero es mucho más importante averiguar cuál es tu verdadero enemigo antes de que comiences a luchar.

Respondí esa pregunta como si quisieras decir rápido, pero eso es porque no quería ser un imbécil :), es decir, no quería comenzar una discusión sobre lo que significa escalable. Pienso en escalable como: agregar recursos al sistema aumenta su rendimiento.

En ese sentido, PLINQ es escalable, porque agregar más núcleos hará que se ejecute más rápido.

Solo para agregar a la publicación de @Lou Franco.

PLINQ incluso tiene monstruo " Super Linear " Rendimiento en algunos escenarios con gastos generales limitados (según algunas de sus demostraciones). Pruébalo.

Si eres un tipo de C ++, Microsoft también está buscando lanzar funciones de concurrencia que aparentemente no tienen un costo de tiempo de ejecución asociado a ellas y herramientas de concurrencia adicionales basadas en tareas para ayudarte a llamar mejor.

Pienso en la escalabilidad como una medida de la suavidad de la curva de costo-rendimiento.

Es decir, si puede gastar un poco en recursos informáticos y obtener un sistema de bajo rendimiento y, gradualmente, agregar recursos, puede obtener un sistema proporcionalmente mejor, es escalable. Si tiene que agregar recursos en trozos caros, para obtener mejoras menos que lineales, no es escalable.

Escalabilidad: la capacidad de un sistema de usar recursos adicionales para lograr una mayor capacidad o rendimiento. Recursos adicionales como unidades de disco, memoria, tarjetas de red, procesadores o máquinas.

No asocio directamente la escalabilidad con el crecimiento de funciones, aunque no es posible agregar funciones a un sistema en su límite de escala.

En estos días y especialmente para aplicaciones web, pero en algunos casos también para aplicaciones empresariales, la escalabilidad horizontal es lo que desea tener,

¿Puedo manejar más (tráfico, datos, procesamiento) agregando más hardware básico? incluso utilizando " servidores en la nube " Amazon ec2, motor de aplicaciones de google y similares?

Escalable significa que puedo acumular recursos en un sistema y crecerá tanto en espacio como en tiempo entre O (log (n)) y O (n log n). Eso es algo poco realista, pero así es como pienso en "escalable".

Woh !, gran palabra ....

Lo defino como un nuevo proyecto, porque depende de lo que el cliente quiera.

La escalabilidad no siempre se trata de agregar capacidad de procesamiento / almacenamiento, sino que puede incluir el soporte de muchas entradas y muchas salidas también.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top