Pregunta

Es una pregunta difícil que me hicieron el otro día ... Estamos trabajando en una aplicación de telefonía bastante compleja (SIP) con código mixto C ++ y PHP con bases de datos MySQL y varios componentes de código abierto.

Un ingeniero de telecomunicaciones nos pidió que calculemos el rendimiento de la aplicación (que aún no está lista). Dijo: 'bueno, ya sabes cuántos paquetes pueden pasar a través del kernel de Linux por segundo, además de saber qué tan rápida es tu aplicación, así que dime cuántas llamadas pasarán por tus cosas por segundo'.

Me parece una tontería, ya que hay un millón de escenarios que podrían suceder (bueno, literalmente ...)

Sin embargo ... ¿hay alguna manera de estimar el rendimiento de la aplicación (conociendo el hardware en el que se ejecutará, pudiendo ejecutar puntos de referencia estándar, etc.) antes de la prueba real?

¿Fue útil?

Solución

Ciertamente puede vincular el problema con los límites superiores (rendimiento máximo). No hay tonterías en eso. De hecho, no saber esas cosas indica un enfoque bastante casual de un problema, especialmente en el mundo de la telefonía.

Puede resolver el problema usted mismo: ¿cuál es el mínimo "trabajo"? tiene que cumplir para una transacción o cualquier unidad de tarea que tenga en su aplicación?

¿Algunos mensajes hacia y desde, algún procesamiento y un hit de base de datos, por ejemplo? Obtener información sobre las piezas individuales le dará una idea del rendimiento más rápido posible. Si carga el sistema y ve un rendimiento significativamente menor, entonces puede tomarse el tiempo para descubrir dónde posiblemente está perdiendo el rendimiento con algoritmos ineficientes, etc.

EDIT

Para hacer este ejercicio, debe conocer todos los pasos que realiza su aplicación para cada caso de uso. Luego puede identificar el rendimiento máximo para cada caso de uso. Definitivamente deberías saber estas cosas antes de su lanzamiento y lanzamiento.

Estoy ignorando el análisis del peor de los casos ya que eso, como usted señala, es bastante más difícil.

Otros consejos

Consulte Planificación de capacidad para el rendimiento web: métricas, modelos y métodos . También hay algunas herramientas que pueden hacer este tipo de simulación de eventos discretos:

Esto no es fácil, y las herramientas comerciales te costarán. El libro Capacity Planning viene con un CD con muchas plantillas de libros de Excel y ejemplos de modelos que pueden ayudarlo a comenzar.

Buena suerte :)

Si realmente tiene que responder esto, podría decir algo como esto:

" No sé de la parte superior de mi cabeza. Estoy dispuesto a estimar esto para usted, pero llevará tiempo. Obviamente, la precisión de mi respuesta depende de cuánto esfuerzo (es decir, tiempo) puse en calcular mi estimación. ¿Cuánto tiempo debo dedicar al cálculo de mi estimación? & Quot;

Devuelva la carga sobre ellos. Si realmente quieren una respuesta precisa, tendrán que permitirte crear al menos algunas aplicaciones de prueba que puedan simular el entorno real.

Puede aumentar para medir el rendimiento. Es posible que todo el sistema aún no esté funcionando, pero usted sabe cómo deben encajar las piezas. Puede preparar algo en unas pocas horas que haga el mismo tipo de trabajo que la aplicación final, en todas las capas, y usarlo para medir el rendimiento de su diseño.

Recuerde: los prototipos son amplios, los picos son profundos.

Deberías hacer la estimación. Una estimación no le dará la respuesta correcta. Sin embargo, te hará pensar en el problema. En este momento suena como su codificación y esperando que todo esté bien. O está en modo de pánico y siente que no tiene tiempo para estimar.

Pasa algo de tiempo pensando en ello. Analizar los casos de uso importantes. Piensa en la memoria que puedas necesitar; pensar en el acceso a la base de datos; pensar en el acceso a la red (local y remota). Esto afectará el rendimiento de su sistema. Reúna a todo el equipo para hacer esto.

Mida regularmente el rendimiento de su sistema durante el desarrollo para estos casos de uso importantes. Simula componentes / otros sistemas si es necesario. Analiza los resultados. ¿Cómo se comparan con su estimación? Quizás los componentes están vinculados a la memoria / base de datos / red. Quizás necesites más memoria; menos acceso a la base de datos; consultas más simples; almacenamiento en caché No tiene que hacer estos cambios de inmediato. Sin embargo, usted sabe cómo funciona su sistema y qué debe hacer.

Resultado: Menos sorpresas desagradables en la prueba del sistema. Menos pánico a medida que se acerca la fecha de lanzamiento.

Definitivamente puede planificar la capacidad de antemano, pero la calidad de la estimación dependerá de la calidad de los datos disponibles.

La mejor estimación es construir el sistema en prueba, ejecutar cargas de trabajo simuladas y luego predecir la capacidad en función de los requisitos de rendimiento y la carga de trabajo. Estos 3 forman un espacio de predicción: dado 2 de los 3, puede predecir el tercero:

  1. Dados los requisitos de rendimiento y capacidad (es decir, hardware), puede calcular la carga de trabajo que puede manejar.

  2. Dados los requisitos de rendimiento y la carga de trabajo, puede calcular la capacidad (es decir, el hardware) que necesita.

  3. Dada la carga de trabajo y la capacidad, puede predecir el rendimiento esperado.

Esto es cierto en algunos dominios, pero a menos que sea un experto en ese dominio, entonces no tiene idea. Por ejemplo, escribo código para controlar robots industriales. La velocidad está limitada por el movimiento del robot, no por la velocidad de ejecución del código. Sabiendo qué tan rápido es el robot y qué tan lejos tiene que llegar, podemos hacer estimaciones bastante buenas de la "velocidad". No tengo idea de cómo calcular el tiempo para su aplicación.

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