Pruebas de carga sobre un servidor Jabber

Hoy hablaremos sobre pruebas, el tema sobre el que se centra mi trabajo en TID. En concreto, analizaremos como realizar pruebas de carga sobre un servidor de mensajería instantanea Jabber.

¿Qué es Jabber?

Jabber es un protocolo abierto, basado en XML y diseñado para el intercambio de mensajes e información de presencia. Su especificación fue aceptada como estándar bajo el nombre XMPP

La arquitectura de un servidor jabberd se basa principalmente en 4 procesos principales.

C2S (client to server): es el encargado de mantener las conexiones entre los distintos clientes y el servidor.

SM (session manager): existirá uno por cada dominio existente. Proporciona los datos de los usuarios (quienes están conectados, mensajes de espera, vcard, autenticación, …)

S2S (server to server): mantenimiento de las conexiones entre distintos servidores.

Router: interconecta los componentes anteriores, ya que estos pueden estar distribuidos incluso en máquinas distintas.

Resolver: encargado de realizar las consultas DNS.

Transport: pasarela de comunicación entre el servidor jabberd y otros protocolos.

jabber

Software de pruebas

Para realizar las pruebas utilizaremos dos programas de libre distribucion

Además, se considera que partimos de una instalación correctamente configurada tanto del servidor Jabberd como del servidor de bases de datos que utiliza, en este caso mysql.

Adaptación del SO y de la instalación de Jabber

Los benchmark se lanzarán en el mismo servidor Jabberd2, por lo que este hará tanto de stress tool como de stressed host. Esto implicará duplicar el número máximo de descriptores de fichero abiertos.

  • ulimit –n X (siendo X el doble del número de usuarios máximo a simular)

Por defecto Jabberd2 está configurado para aceptar un máximo de 1024 usuarios. Si se desean simular más se debe configurar la variable max_fds en los siguientes ficheros:

  • c2s.xml
  • router.xml

Creando los usuarios de pruebas

Para crear los usuarios necesarios para simular las pruebas se hará uso de la herramienta jabberd-testsuite. Los pasos a seguir son:

  • Descomprimimos el fichero en /opt

tar xvf jabber-testsuite-1.0.2.tgz

  • Entramos en el directorio correspondiente

cd /opt/testsuite

  • Compilamos las fuentes

make userreg

Una vez completada la instalación procedemos a ejecutar la herramienta. Nos da distintas posibilidades opciones de ejecución, siendo la sintaxis mímina:

  • userreg -h <hostname> -u <usuarios-totales>

Por ejemplo, para crear 100 usuarios en la BD, siendo el primer usuario el 1 lanzaríamos desde el directorio /opt

  • ./userreg –h <hostname> -u 100 –n 1

Estos usuarios serán creados con el nombre test_Y, siendo Y un número iterativo a partir del índice dado. Se puede comprobar que dichos usuarios han sido creados correctamente consultando las tablas active y authreg de la BD jabberd2.

Simulación de los escenarios

El software utilizado para simular los distintos escenarios será jabsimul
Los pasos a seguir para su instalación son los siguientes:

  • Descomprimimos el fichero en el directorio /opt

tar xvf jabsimul.tar.gz

  • Cambiamos al directorio correspondiente

cd /opt/jabsimul/jab_simul

  • Compilamos los fuentes

./configure
make

La configuración de los test lanzados mediante jabsimul está basada en un fichero xml, en el cual se especifican los distintos parámetros del escenario que queremos simular.

Una vez configurado el fichero según el escenario a simular se procede a lanzar el programa desde /opt/jabbsimul/jab_simul

  • ./jab_simul

Análisis de los datos

Jabsimul nos proporciona información en tiempo real de las acciones que está llevando a cabo el servidor en cada momento.

jabsimul

Entre ellas se distinguen 5 grupos principales:

  • Conexiones: establecidas, eliminadas, con éxito, fallidas.
  • Mensajes: enviados, recibidos, recibidos offline, recibidos desde el administrador, …,…
  • Lista de contactos: contactos añadidos, eliminados
  • Cambios de estado: enviados, recibidos, recibidos offline
  • Paquetes: creados, enviados, cancelados, en cola

Los datos más importantes a tener en cuenta son: Conexiones fallidas, estabilidad (tiempo entre el envío y recepción de un mensaje) y paquetes cancelados. Con estos datos se puede comprobar la usabilidad que obtendrían los usuarios del escenario recreado.

Para comprobar el estado de la máquina, al tiempo que está corriendo el simulador se ejecutará en otra consola el comando top, mediante el cual podremos comprobar el uso de CPU y memoria de cada proceso implicado (sm, route, c2s). También se puede tener en cuenta la carga del programa jab_simul, aunque no es del todo determinante para comprobar el stress del servidor.

____________________________

Fichero de configuración jabsimul.xml

<dpsm>
<events_after>1</events_after>

<!– Generador de usuarios –>
<user_names_generator>
<range>
<!– numero de usuarios a crear –>
<from>1</from><to>200</to>
</range>
<!– nombre de los usuarios –>
<name>test_%(num:u)</name>
<!– id del servidor jabberd –>
<server>tidjaberd</server>
</user_names_generator>

<!– Propiedades de los usuarios –>
<user_properities>
<!– nombre de los usuarios –>
<filter><name>test_.*</name></filter>
<properities>
<!– nombre completo –>
<fullname>test%(num*2:u)-%(3+num%12000/(1+3)+7:u)</fullname>
<!– password –>
<password>password</password>
<!– nombre del recurso –>
<resource>stressingserver</resource>
<!– host –>
<Xhost>tid</Xhost>
<!–directorio para el sniffer –>
<sniff>/tmp</sniff>

<!–Configuracion de los distintos eventos –>
<!–Para desactivar alguno de ellos colocar en la variable name una @ delante del texto –>

<!–Generar conexiones al servidor –>
<event>
<name>connect</name>
<!– Frecuencia con la que se realiza una nueva conexión (ms)–>
<frequency>3000</frequency>
<!– Numero total de conexiones–>
<counter>200</counter>
<digest/>
</event>

<!–Annadir contactos a la lista de contactos cada usuario –>
<event>
<name>add_roster</name>ç
<!– Frecuencia con la que se añade un nuevo contacto (ms) –>
<frequency>5000</frequency>
<!–Usuarios entre los que se agregan contactos –>
<user><range><from>1</from><to>200</to></range></user>
<!–Maximo numero de contatos por usuario –>
<max_roster_count>1000</max_roster_count>
</event>
<!–Eliminar contactos de la lista de contactos–>
<event>
<name>del_roster</name>
<!– Frecuencia con la que se eliminan contactos de la lista (ms)–>
<frequency>20000</frequency>
</event>

<!– Envio de mensajes entre usuarios –>
<event>
<name>send_message</name>
<!– Frecuencia con la que se envia un mensaje (ms)–>
<frequency>500</frequency>
<!–Usuarios a los que se le envían mensajes –>
<user><range><from>1</from><to>200</to></range></user>
<prepend_with_debug_info/>
<!– Fichero adjunto al mensaje [opcional]–>
<Xfile>file.txt</Xfile>
<!–Cuerpo del mensaje –>
<text>Mensaje para prueba de rendimiento del servidor jabberd </text>
</event>

<!–Cambio de estado –>
<event>
<name>change_status</name>
<!–Frecuencia con la que un usuario cambia de estado (ms)–>
<frequency>2000</frequency>
<status>Jezdem tera dostepny</status>
<show>chat</show>
</event>

<!–Desconexion de un usuario –>
<Xevent>
<name>logout</name>
<!–Frecuencia con la que se desconecta un usuario (ms)–>
<frequency>10000</frequency>
</Xevent>

<!–Matar conexiones en el servidor –>
<Xevent>
<name>kill_connection</name>
<!–Frecuencia con la que se mata una conexión (ms) –>
<frequency>20000</frequency>
</Xevent>

<!– Simulacion de ruido en la conexion –>
<Xevent>
<name>send_raw_bytes</name>
<!– Frecuencia con la que se envia una trama de ruido (ms)–>
<frequency>15000</frequency>
<!–Tiempo que permanece la trama de ruido (ms) –>
<random_stream len=”1000″/>
</Xevent>
</properities>
</user_properities>
</dpsm>

· jab_simul http://www.ejabberd.im/files/other/jabsimul.tar.gz

· jabberd-testsuite http://sourceforge.net/projects/jabbertest

Para ello se parte de una instalación correctamente configurada tanto del servidor Jabberd como del servidor de bases de datos que utiliza, en este caso mysql.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s