2011-01-15 23 views
5

Soy bastante nuevo en Windows Azure y quiero alojar una aplicación de encuesta que completará el appr. 30,000 usuarios simultaneamente.Número de instancias necesarias para la aplicación azul de Windows

La aplicación consta de 1 página .aspx que se enviará al cliente una vez, hace 25 preguntas y dará un resumen de las respuestas dadas al final. Cuando el usuario haya dado la respuesta y presione los botones de la 'próxima pregunta', la respuesta dada se enviará a través del controlador .ashx al servidor. La respuesta es la siguiente pregunta y respuestas. El resumen se envía al cliente después de una devolución de datos completa. La respuesta se guarda en una tabla de Azure que está dividida de modo que cada partición puede contener un máximo de 450 usuarios.

Me gustaría preguntar si alguien puede dar una estimación aproximada sobre la cantidad de instancias de roles web que debemos iniciar para que esta aplicación siga funcionando. (Si eso es demasiado difícil de decir, ¿es más probable que comience 5, 50 o 500 instancias?)

¿Cuál es una mejor manera de hacerlo: 20 instancias pequeñas o 5 instancias grandes?

Gracias por su ayuda!

Respuesta

5

La respuesta más obvia: lo mejor sería probarlo usted mismo y ver cómo se mantiene su aplicación. Puede obtener fácilmente contadores de rendimiento y otros diagnósticos de Windows Azure; por ejemplo, puede conectar Microsoft SCOM (System Center Operations Manager) para supervisar su entorno durante la prueba. Site Hammer es una herramienta de prueba de carga simple para Windows Azure (en la galería de códigos de MSDN).

Aparte de esta respuesta muy obvia, voy a compartir algunas estimaciones: dado el tipo de carga, es probable que sea mejor con más instancias pequeñas en comparación con una menor cantidad de grandes, especialmente porque ya tiene su almacenamiento particionado . Si realmente vas a tener 30,000 visitantes simultáneamente y les das un intervalo de ~ 15 segundos entre leer las preguntas & publicando sus respuestas, estás buscando 2,000 solicitudes por segundo. 10 nodos deberían ser más que suficientes para manejar esa carga. Recuerde que esto es solo una estimación simple, que carece de cualquier forma de conocimiento en su arquitectura, etc. Para este tipo de cargas, el almacenamiento en caché es una muy buena idea; aumentará drásticamente la carga que puede manejar cada nodo.

Sin embargo, el mejor consejo que puedo darle es asegurarse de que está supervisando activamente. Se requieren menos de 30 minutos para generar instancias adicionales, por lo que si supervisa su entorno y/o se asegura de que se le notifique cada vez que comienza a ahogarse, puede actualizar fácilmente su configuración. Tenga en cuenta que debe ponerse en contacto con el servicio de atención al cliente para poder acceder a más de 20 instancias (este es un límite predeterminado para protegerlo de un gasto excesivo).

+0

Hola Tijmen, gracias por tus comentarios. Empezamos las pruebas de carga, pero dado que soy bastante nuevo en este tema, siempre es bueno intentar no reinventar la rueda ... La encuesta es algo diferente: los 30,000 visitantes están viendo un espectáculo y responderán la pregunta al mismo tiempo . Esto aumentará las solicitudes por segundo a un estimado de 10.000. Usamos clases de almacenamiento en caché, singleton y estamos optimizando la solución en este momento para hacerlo lo más eficiente posible. Nos sumergiremos en el monitoreo y agregaremos recursos de inmediato. –

+0

Para este tipo de rendimiento, observe la diferencia de rendimiento entre escribir en una cola de Azure en lugar de hacerlo directamente en una tabla de Azure ... la cola debe ser más rápida, puede obtener algo de rendimiento allí. Necesita escribir una función de trabajador para procesar los datos en la cola, pero eso no está en la ruta perf-critical. Independientemente de la solución, asegúrese de revisar el tiempo de ejecución de la solicitud para todas las visitas (y no para los promedios), para asegurarse de que no haya ~ 10% de las visitas que tarden demasiado sin que aparezcan en los valores promedio. – tijmenvdk

2

Aparte de los sabios consejos que tijmenvdk le dio, permítame agregar mi opinión sobre el tamaño de la instancia. En general, vaya con el tamaño más pequeño que admitirá su aplicación, y luego escale para manejar un mayor tráfico. De esta forma, cuando reduce la escala, su costo mínimo de cómputo se mantiene bajo. Si ejecutó, por ejemplo, un par de instancias extragrandes como su línea de base (dado que siempre desea un mínimo de dos instancias para obtener el SLA de tiempo de actividad), su costo de implantación comienza en 0.12 x 8 x 2 = $ 1.92 por hora, incluso durante tiempos de tráfico. Si vas con instancias pequeñas, estarías en 0.12 x 1 x 2 = $ 0.24 por hora.

Cada tamaño de VM como la CPU asociada, la memoria y el almacenamiento de disco local 9non duradero), por lo que elegir el tamaño de la unidad más pequeña que su aplicación funciona de manera eficiente en.

Para carga/rendimiento en las pruebas, también puede que quiera considerar una solución alojada como Loadstorm.

+0

Hola David, gracias por el consejo. Como solo tenemos una tabla simple en la que almacenamos las respuestas, una página .aspx y una .ashx, creo que de hecho podemos ir para instancias pequeñas. –

0

¿Cuán simultáneas son las solicitudes en realidad? ¿Todos escribirán la dirección exactamente al mismo tiempo?

Dicho esto, perfile su aplicación localmente, esto le permitirá estimar el uso de CPU, red y memoria en Azure. Entonces, en lugar de ver cuántas instancias necesita, ¡mire cómo puede reducir el requerimiento! Aplique estas sugerencias y haga un perfil local de nuevo.

La mayoría de los consejos de rendimiento tienen una compensación entre la CPU, la memoria o el uso de ancho de banda, la idea es garantizar que se escalen por igual. Si su aplicación se queda sin memoria, pero tiene un montón de CPU y red, no

Para una encuesta de una sola página, asegúrese de que su html, css & js esté minimizado, asegúrese de que sea almacenable en caché.

Combínelas si es posible, y para obtener realmente escalables, inserte archivos estáticos (css, js & images) en un CDN. Todo esto reduce el número de solicitudes que el servidor web tiene que tratar y, por lo tanto, reduce el número de webroles que necesitará = menos red.

¿Cómo devuelve el ashx la respuesta? es decir, ¿está enviando html, xml o json? personalmente, me gustaría que devuelva JSON, ya que esto requerirá menos ancho de banda de red, y muy probablemente menos procesamiento del lado del servidor = menos memoria y red.

Uso Asyncronous API para acceder al almacenamiento azul (esto utiliza los puertos de finalización IO para liberar el hilo de IIS para manejar más solicitudes hasta el almacenamiento azul regresa = permitiendo a la CPU a escala)

tijmenvdk ya se ha mencionado el uso de colas para escribir . ¿Cambia la lista de preguntas? de lo contrario, almacénelos en caché, de modo que la aplicación solo tenga que leer desde el almacenamiento de la tabla una vez en el inicio y una vez por cada cliente para el cierre final = guarde la red y la CPU a expensas de la memoria.

Todos estos consejos son igualmente aplicables a una aplicación web normal, en un solo servidor o entorno de granja web.

Lo que estoy tratando de decir es que lo que no se puede medir, no se puede mejorar, y la medición, la mejora y el costo van de la mano. El escalado dinámico reducirá los costos, pero fundamentalmente si su aplicación no se ha medido y el uso de los recursos ha sido optimizado, preguntarse cuántas instancias necesita no tiene sentido.

Cuestiones relacionadas