Practica2 Parte3
Practica2 Parte3
Practica2 Parte3
Construiremos a continuacin un proceso de llegadas que se asemeje a un proceso de Poisson siguiendo el procedimiento descrito. Para ello comiencen un plan de pruebas de JMeter con un grupo de hilos. Incluyan en ese grupo de hilos un muestreador de peticin HTTP y un timer de espera aleatoria uniforme. De esta forma, todos los T i(k) de la Ilustracin 1 sern variables aleatorias uniformes independientes e idnticamente distribuidas (i.i.d.). Haremos referencia a una cualquiera de estas variables aleatorias con T, siendo su media E[T]. El elemento de peticin HTTP solicitar el recurso randwait.php indicando un tiempo de espera uniforme. As, todos los Wi(k) de la Ilustracin 1 sern variables aleatorias uniformes independientes e idnticamente distribuidas. Haremos referencia a una cualquiera de estas variables aleatorias
No confundir cuando hablamos de proceso en el sentido de proceso estocstico de llegadas por ejemplo de cuando nos referimos a un proceso como programa en ejecucin con su memoria, pila, etc
1
con W, siendo su media E[W]. Llamaremos Nh al nmero de hilos. Dada esta forma de crear el proceso, cul es el tiempo medio entre dos peticiones consecutivas del mismo hilo al servidor web? Llamaremos a este tiempo E[Tih]. Cul ser la tasa media de peticiones por unidad de tiempo que hace un hilo cualquiera al servidor web? La llamaremos h Cul ser la tasa media total de peticiones que recibe el servidor web? La llamaremos T Dado que el tiempo de servicio que sufren las peticiones viene determinado por la variable aleatoria W, cul es la intensidad de trfico que ataca al servidor? La llamaremos I
3. Sistema simplificado
Hemos descrito la forma de crear un proceso aproximadamente poissoniano. En este proceso de creacin especificamos un tiempo de servicio uniforme para el trabajo del servidor. El procedimiento no requera que dicho tiempo fuera uniforme sino que podra seguir cualquier distribucin con momentos finitos. Lo mismo aplica al tiempo de OFF. A partir de ahora usaremos para W una variable aleatoria exponencial. Eso implica que tenemos no solo un proceso de llegadas de Poisson sino tambin tiempos de servicio exponenciales i.i.d. Para el servidor web mantendremos la configuracin presentada en partes anteriores de este trabajo, de forma que como mucho se atender una peticin a la vez y configuraremos un ListenBacklog de 1 . En notacin de Kendall a qu tipo de sistema se ha reducido el problema? Verifique este comportamiento con experimentos con JMeter y wireshark donde vea cuntas peticiones se quedan encoladas.
5. Experimentacin
El objetivo es evaluar cmo depende el porcentaje de peticiones que no se sirven inmediatamente, de parmetros como la carga que sufre el sistema, el nmero de procesos que
lanza el servidor, etc. En primer lugar nos planteamos evaluar simplemente la dependencia de dicho porcentaje con la intensidad de trfico que ataca al servidor. El resultado podra ser una grfica que nos muestre en el eje x la intensidad de trfico y en el eje y el porcentaje (probabilidad) de prdidas (ejemplo en la Ilustracin 2).
Cada punto en esta grfica corresponder a un experimento en el que habremos configurado unos parmetros en JMeter para que haga peticiones al servidor con la carga indicada y obtenido la probabilidad de prdida medida como el porcentaje de peticiones que no fueron aceptadas por el servidor. As pues, lo primero que necesitamos es decidir/calcular los valores de los parmetros de JMeter para crear una intensidad de trfico en concreto. Esto va a ser tan simple como el proceso inverso del que se ha pedido hacer en el apartado 2 de este documento. El nmero de hilos se ha planteado como determinado por el nmero de usuarios que queremos emular. Querramos probar el funcionamiento del sistema ante un gran nmero de usuarios, sin embargo, no es factible emplear JMeter con cifras de miles de usuarios/hilos y alta carga. As pues, en vez de centrarnos en que los hilos emulen cada uno el comportamiento de un usuario nos centraremos en que la superposicin de los hilos emule el multiplex de un nmero grande de los mismos. Para esto necesitamos que N sea lo suficientemente grande para que el proceso resultante parezca de Poisson, al menos a los efectos del rango de parmetros del sistema a evaluar. No vamos a dedicar tiempo en este trabajo a decidir un valor o valores para N sino que tomaremos directamente en torno a N=30 hilos. As pues, para cada intensidad de carga con la que desee experimentar, calcule unos valores razonables de E[W] y E[T]. Empleando en JMeter un Timer uniforme entre 0 y un valor T max es trivial decidir dicho valor Tmax para que la media sea E[T]. Queda por decidir el nmero de peticiones que har cada hilo. Cuantas menos peticiones pongamos en el experimento menos tiempo tardar en llevarse a cabo, sin embargo, dado que estamos calculando el porcentaje de peticiones no atendidas necesitamos hacer suficientes peticiones para que el clculo de dicho porcentaje tenga un grado de confianza suficiente. Por ejemplo, resulta evidente que si tenemos 30 hilos y a cada uno le pedimos que haga 10 peticiones tenemos un total de 300 peticiones con las que es difcil por ejemplo estimar correctamente porcentajes de prdidas del orden de 1%. Lo que vamos a hacer es lanzar experimentos de muy larga duracin y observar cmo a medida que se producen ms llegadas se va estabilizando la estimacin de la probabilidad de prdida calculada con el porcentaje de prdidas. Para ello en el plan de pruebas indicaremos que se guarde en fichero un log de las peticiones1. Se ha preparado un script2 para visualizar la evolucin del experimento. Este script requiere que se seleccione en la configuracin del registro en fichero la opcin Guardar
1 No aada al plan de pruebas un Listener que por ejemplo guarde en memoria del programa todas las peticiones y sus respuestas pues en un experimento largo se distorsionarn las medidas por el tiempo que consumir JMeter en mantener dicha lista en memoria. 2 Se les deja este script como ayuda pero no es obligatorio usarlo; pueden crear sus propias herramientas para procesar los ficheros de log o usar otra como awk, una hoja de clculo, etc. Es ms recomendable no copiarlo y utilizar siempre la versin que haya en el directorio /opt3/varios/compartir/rss
cdigo de respuesta pues la necesita para reconocer en dicho fichero las peticiones que fueron rechazadas (de forma muy simple, bsicamente buscando timed out para reconocer si la lnea es de una peticin que se atendi o que no). El fichero tambin debe estar en formato CSV (no en XML). El script toma el fichero de registro y calcula la probabilidad de prdida con las K primeras peticiones, las K+1, las K+2, etc, graficando esa probabilidad frente a K. Si se cierra la figura, el script toma de nuevo el fichero (que habr crecido entre tanto) y rehace la figura. El script puede ejecutarlo de la siguiente forma:
$/opt3/varios/compartir/rss/graphprogresoFICHERO_DE_LOG
Y puede interrumpirlo en el terminal con Ctrl+C3. Calcule los parmetros necesarios para llevar a cabo los experimentos que le permitan crear una figura del estilo de la Ilustracin 2. Ensaye dichos parmetros con algunas intensidades de trfico para verificar que los resultados se estabilizan en un tiempo razonable. Tenga en cuenta las limitaciones mencionadas en el apartado 4. Pruebe a verificar que la carga que est sufriendo el sistema es la calculada tericamente.
6. Resultados
En el anterior apartado se han obtenido los parmetros para realizar un estudio del comportamiento del Apache con la configuracin establecida en la sesin inicial. Se ha supuesto que esta configuracin con estos parmetros de trfico que lo atacan se puede comparar a un modelo de teora de colas de los estudiados tericamente, pero habr que comprobarlo. Si en el fichero de log que guarda los resultados activa tambin Guardar etiqueta de tiempo, el JMeter guarda el timestamp de cada peticin con precisin de ms. Lo que necesita es el instante que se genera la peticin, no el instante que se finaliza la peticin que es lo que guarda por defecto el JMeter. Ya busc cmo cambiar este comportamiento al final de Parte 2 - Introduccin a Apache JMeter de esta prctica lanzando el JMeter con ciertos parmetros. Lance el JMeter tal como se pide y guarde tambin el timestamp inicial de las peticiones. Realice los experimentos planteados en el apartado anterior y obtenga las probabilidades de prdidas para cada intensidad de trfico. Compare los resultados con los tericos esperados. Con los timestamps de las peticiones haga los histogramas del tiempo entre peticiones y compruebe si siguen una distribucin exponencial. Realice tambin las autocorrelaciones del tiempo entre peticiones para comprobar si las peticiones se pueden considerar un proceso independiente.
7. Aumentando la cola
Hasta ahora el Apache estaba configurado para guardar una peticin en cola, vamos a probar a aumentar este valor. Aumente el valor de la cola hasta 3. En notacin de Kendall, ahora a qu tipo de sistema se ha reducido el problema? Realice otra vez los mismo experimentos y obtenga las probabilidades de prdidas.
El script crea ficheros temporales en /tmp que intenta borrar pero puede que se queden si aborta el script (algo que al final tendr que hacer pues no hay una forma ms elegante de terminarlo). No se preocupe por los ficheros temporales pues la prxima vez que ejecute el script borrar los anteriores que se quedaron.
3