2009-06-16 8 views
6

Tengo curiosidad sobre cómo todos se acercan a la pregunta de la siguiente naturaleza:¿Cómo proceder para estimar el hardware requerido para admitir X cantidad de usuarios/transacciones?

'tenemos que crear la Aplicación A (por ejemplo, sitio de comercio electrónico). Utilizará la tecnología B (por ejemplo, java). Tiene que admitir C (por ejemplo, 200) número de usuarios simultáneos. ¿Qué tipo de hardware necesitamos?

La especificación de hardware implicaría la cantidad de CPU requerida, y tal vez la cantidad de memoria para una respuesta básica.

Para simplificar mi ejemplo, me quedo con la tecnología Java en mi pregunta, pero realmente me gustaría un consejo de tecnología neutral.

Entiendo que dicha pregunta implica muchos factores adicionales. Por ejemplo, un marco diferente (Wicket vs Struts vs Spring vs arquitectura EJB J2EE pura), número de niveles distribuidos (configuración de un solo cuadro o configuración de 3 niveles).

Pero dado que una persona puede no tener experiencia previa con la tecnología dada (o quizás no tener la oportunidad de hacer una prueba de carga para averiguar cuál es el hardware requerido), dicha pregunta siempre surge durante una discusión inicial del proyecto (y una respuesta es esencial como línea de base para avanzar), ¿cómo se puede dar una respuesta?

Pensé en resolver el problema de memoria requerido estimando la cantidad de memoria que podría tomar cada sesión de usuario, pero definitivamente habrá sobrecarga de la estructura/máquina virtual.

Pero, en general, parece que no puedo razonar una buena solución a esta pregunta, que siempre parece surgir. Una prueba de carga definitivamente ayudaría a resolverlo, pero para entonces el proyecto ya está listo, y esta es una pregunta que un cliente normalmente querría una respuesta antes de comprometerse con un proyecto.

Espero que la comunidad pueda asesorar sobre buenos enfoques para esto.

Gracias.

Respuesta

3

Realmente tiene que hacer algunas suposiciones sobre su experiencia de usuario para hacer una estimación inicial sin verificación de carga de usuarios simultáneos. Comience con algunas suposiciones sobre la sesión de un usuario. supuestos del estadio de béisbol decente podría ser (esto puede no contener en función de la complejidad o simplicidad de su sitio):

  • Cada usuario pulsa una nueva página o recurso cada 5 segundos (asumiendo AJAXy)
  • Cada solicitud toma un promedio de 200ms para procesar.
  • En general, es bueno tener un uso promedio que es del 25% de la capacidad para permitir picos, incluso más para los sitios de redes sociales donde los picos pueden ser más grandes.

allí tendría que decir:

200 usuarios (200 ms/5s) => 8 CPUs necesidad promedio de 4 * (para el 25% de carga) => 32 CPU.

No creo que esto sea particularmente centrado en el lenguaje. La memoria no es costosa, tiene suficiente.

1

Personalmente, creo que cualquiera que le diga que hay una solución general a este problema le está mintiendo. Eso es especialmente cierto si se trata de un proveedor de hardware.

Solo puede hacer estimaciones como esta basadas en cargas similares a la carga que espera. Más adelante aprenderá que se equivocó porque la carga real en realidad no es similar a la carga "similar" que utilizó como estimación.

Afortunadamente, aprenderá de eso y hará una mejor estimación la próxima vez.

1

Honestamente, no he visto una buena manera de obtener una estimación razonable salvo hacer una prueba de carga de muestra. Simplemente hay demasiadas variables en una aplicación de cualquier tamaño apreciable: hardware (arquitectura de memoria, número de CPU, arquitectura de disco), software (detalles de implementación, sistema operativo, máquina virtual [si existe], sistema de base de datos, etc.), ambiental (red, refrigeración) y otros.

Esto es básicamente una aplicación especial de pruebas de rendimiento. Las personas más sabias sobre el tema han declarado en repetidas ocasiones que es necesario obtener números. Así que el mejor consejo que puedo dar es poner en el plan la necesidad de prototipos de trabajo en la etapa más temprana posible para que pueda obtener esos números y plan para que esos números cambien con el tiempo, así que obtenga prototipos o versiones de trabajo en cada punto de control para vuelva a probar a lo largo de la línea de tiempo del proyecto.

Sus primeras estimaciones probablemente guarden poca similitud con sus números finales, pero al menos podrá corregirlas según sea necesario en momentos críticos en lugar de llegar al final para darse cuenta de que no hay tiempo en el calendario para las correcciones.

0

Usted se pregunta cómo dimensionar cuantitativamente sus requisitos de hardware.

Yo, sin embargo, lo abordaría desde otra perspectiva. Diseña tu aplicación para que pueda escalar (para cualquier nivel). A partir de ahí, despliegue la iteración n. ° 1 de su hardware. Ejecuta alguna beta pública sobre eso. Recoge algunos números de la vida real. Y reconfigure el sistema para cumplir con una métrica de mayor rendimiento. Repetir.

0

El hardware requerido se rige más por la complejidad y calidad del software que por el número de usuarios o la carga de transacción. Las únicas personas que afirman lo contrario son los proveedores de hardware.

Cuestiones relacionadas