2008-10-18 16 views
18

Publiqué un similar question sobre qué tan escalable es linq. Había tantos puntos de vista diferentes sobre lo que significaba la escalabilidad en algunas conversaciones recientes, por lo que me ha motivado hacer esta pregunta también. ¿Qué significa escalabilidad para ti?¿Qué significa la escalabilidad para usted?

+1

Gran pregunta. Lo pensé mientras leía la última pregunta: decidí que querías decir "¿qué tan rápido fue?", Pero lancé la palabra PLINQ en caso de que quieras decir escalable de la misma forma en que lo digo en serio. –

Respuesta

15

miro escalabilidad desde dos perspectivas:

Ampliación de la

Si añado más memoria RAM a la caja que algo se está ejecutando en, la cantidad de rendimiento y capacidad adicional Qué gano? Si una aplicación que tengo puede manejar 300 conexiones más y funciona 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 funciona un 5% más rápido, la aplicación A es claramente más escalable.

escalado horizontal

Ahora, si añado más cajas a configurar, la cantidad de rendimiento y capacidad adicional Qué gano? ¿Puedo configurar interfaces web para manejar más tráfico del cliente? 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 multihilo? Si puedo agregar fácilmente una máquina a mi red para agregar capacidad a mi aplicación, entonces es escalable.

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

3

Respondí esa pregunta como si quisieras decir rápido, pero eso es porque no quería ser un idiota :), es decir, no quería iniciar una discusión sobre qué significa escalable. Considero escalable como: agregar recursos al sistema aumenta su rendimiento.

En ese sentido, PLINQ es escalable, porque agregar más núcleos lo hará funcionar más rápido.

3

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

PLINQ incluso tiene un rendimiento "Súper lineal" anormal en algunos escenarios con sobrecarga limitada (de acuerdo con algunas de sus demostraciones). Pruébalo.

Si eres un chico de C++, Microsoft también está buscando lanzar características de simultaneidad que aparentemente no tienen costos de tiempo de ejecución asociados con ellas y herramientas de simultaneidad basadas en tareas adicionales para ayudarte a llamar mejor.

9

Escalabilidad significa la capacidad para manejar el crecimiento en cualquiera de estas 2 zonas:

1) Facilidad de adición de nuevas características, corregir errores. Para hacer que el código haga estas cosas nuevas, ¿qué tan difícil es hacerlo? Si bien esto puede ser mantenible de alguna manera, también es la cuestión de si puede construir el código para manejar una escala más grande fácilmente.

2) Capacidad para manejar una carga mayor y mayor que pueden ser 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, p. ¿podría hacer una aplicación que maneje tablas con cientos de miles de filas que todavía se consideran "rápidas"?

En general, la escalabilidad significa la capacidad de crecer.

+1

Eliminaría 1), contamina el término y no creo que mucha gente lo incluya. Por supuesto, el mantenimiento es a menudo un requisito para la escalabilidad, pero también lo es, digamos, la facilidad de uso. – reinierpost

1

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

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

+0

De acuerdo. Agregar funciones no tiene nada que ver con la escalabilidad. – user18931

0

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) añadiendo más hardware de los productos básicos ? incluso usando "servidores en la nube" amazon ec2, motor de la aplicación google y similares?

0

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

6

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

Cuando me preguntan acerca de la escalabilidad de un sistema, lo primero que debo saber es la forma en que se espera que su utilización crezca. ¿Recibirá más usuarios? ¿Los usuarios existentes harán un mayor uso de él? ¿Su conjunto de características crecerá? ¿Cambiará la combinación de transacciones que actualmente está apoyando? ¿La experiencia del usuario deberá cambiar?

(OK, por lo que la respuesta a todas estas preguntas es por lo general "Sí", y luego agregar el prefijo a la palabra "Como" a estas preguntas.)

para escoger un ejemplo no totalmente ficticio: un sistema actualmente apoyo muy pocos usuarios, y cuya base de usuarios se espera que crezca rápidamente, tiene un serio problema de escalado si el DBA tiene que pasar dos horas manualmente realizando consultas a partir de la información seleccionada de los mensajes de correo electrónico cada vez que tiene que configurar una nueva cuenta. No se trata de un problema que pueda solucionarse agregando más recursos, a menos que incluya DBA en la lista de recursos que va a agregar (y hay muchas razones por las que no se ampliará bien).

O imagine un sitio de redes sociales que despliega la nueva y emocionante característica que puede ver si sus amigos están en línea y chatee con ellos a través de una agradable interfaz de usuario Ajax-y. De repente, sin un aumento en la base de usuarios, el número de solicitudes HTTP que manejan sus servidores por día aumenta veinte veces, y sus preocupaciones sobre la escalabilidad de su base de datos retroceden en 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 las páginas web idempotentes para que pueda agregar proxies , diseñando su aplicación para que pueda particionar su base de datos en todos los servidores, todos ellos harán que su aplicación sea escalable en varias dimensiones. Vale mucho la pena pensar en eso. Pero es mucho más importante descubrir cuál es tu verdadero enemigo antes de que comiences a pelear.

-1

gran palabra Woh !, ....

lo defino una nueva cada proyecto, ya que depende de lo que el cliente quiere.

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

3

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

Es decir, si puede gastar un poco en recursos informáticos y obtener un sistema de bajo rendimiento, y agregar recursos gradualmente 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.