Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Arquitectura y Rendimiento
Marcos Montero Torres
Abstract. Proyecto de diseo e implantacin de una arquitectura Moodle con capacidad para
dar servicio a un colectivo de 30.000 usuarios bajo criterios de escalabilidad, rendimiento y alta
disponibilidad. Al margen del diseo de la arquitectura, se definen y desarrollan unas pruebas
de rendimiento que nos permitan mejorar la eficiencia del sistema y determinar de manera
fiable la validez de la plataforma respecto a la dimensin del entorno con antelacin suficiente
a su puesta en explotacin. As mismo, se pretende poder repetir este tipo de estudios de
rendimiento para realizarlos de forma habitual previo a futuras modificaciones de la plataforma
Moodle.
Keywords: Moodle, rendimiento, Jmeter, Campus Digital, UPC, UPCnet, Atenea.
1 Introduccin
Durante el curso 2005/2006 la UPC realiz un proyecto piloto de implantacin de una
nueva plataforma de e-Learning basada en Moodle. Este piloto tena un mbito
limitado dentro de la universidad, ofrecindose un pequeo nmero de asignaturas a
un colectivo formado por 4700 alumnos y 700 profesores.
La UPC ya dispona de una plataforma de e-Learning propia, desarrollada
enteramente desde la propia universidad y con un grado de implantacin y uso
considerables. Una vez valoradas diversas alternativas y comprobada la viabilidad del
uso de Moodle desde el punto de vista docente y su adaptabilidad a las necesidades
del profesorado de la UPC se decidi su utilizacin como herramienta de e-Learning
global en toda la universidad y, para ello, se procedi a disear un proyecto para
acometer la extensin del nuevo campus digital, (conocido como Atenea), a toda la
comunidad UPC.
En su nueva fase, el campus digital debera ofrecer servicio a un colectivo de 30.000
estudiantes y 3.000 profesores, ofreciendo un nmero aproximado de 4.000 cursos
Moodle.
Este volumen lo converta, no slo en una herramienta clave en el entorno docente de
la universidad, sino en una de las mayores instalaciones de Moodle en el entorno
Universitario hispano. Y como tal, resultaba imprescindible que su implantacin fuera
un completo xito. Como factor clave para este xito (aunque no el nico), la
plataforma que ofreciera este servicio deba cumplir una serie de requisitos en cuanto
2 Arquitectura Hardware
3. Herramienta de simulacin
3.2 J-meter
La herramienta seleccionada para realizar las pruebas de rendimiento ha sido Apache
Jmeter. Desarrollada por la Apache Software Foundation, se trata de una aplicacin
100% Java que se utiliza habitualmente para realizar pruebas funcionales y medir
rendimientos. Fue originalmente diseada para testear aplicaciones web, pero desde
entonces ha evolucionado incrementando su funcionalidad y los tipos de pruebas a los
que puede aplicarse.
Puede utilizarse para simular condiciones de carga muy elevada en servidores, redes o
aplicaciones concretas, para comprobar su capacidad o analizar el rendimiento
general bajo diferentes condiciones de carga.
4. Pruebas de rendimiento
La realizacin de las pruebas de rendimiento del sistema tena dos objetivos
complementarios: el primero, certificar la validez de la arquitectura tecnolgica
escogida para soportar volmenes de carga adecuados segn la magnitud del
colectivo de alumnos/profesores de la UPC (30.000 alumnos, 3000 profesores). El
segundo, detectar los aspectos mejorables de la plataforma para dotarla de la
capacidad de respuesta suficiente y una vez conseguida esta, tener una idea lo ms
exacta posible de los elementos susceptibles de mejora en futuras ampliaciones.
#Hits/hora
Usuarios concurrentes
Prueba 1
12
600
2.100.000
1.200
Prueba 2
18
800
2.900.000
1.500
Cabe destacar que la simultaneidad no hace referencia a meras peticiones http, sino a
la cantidad de usuarios que se encuentran en el sistema ejecutando parte de una sesin
tal y como la hemos definido previamente en los perfiles. Es decir, estamos ante
1200 o 1500 sesiones de 7 minutos y de usuarios diferentes que se ejecutan de manera
solapada en el tiempo.
A continuacin se resumen los cuellos de botella ms importantes que se detectaron
en la plataforma conforme avanzaban las pruebas y las soluciones que se aportaron
para cada uno de ellos. Se presentan agrupados segn la capa de la plataforma en la
que se ha actuado:
Balanceadores de carga:
Una vez instalados los balanceadores, las actuaciones sobre ellos consistieron en
afinar al maximo los valores de los diferentes time-outs de ldirector y en definir un
test adecuado para la comprobacin del servicio http (en nuestro caso, la consulta de
un archivo .gif).
Front-ends HTTP:
Instalacin de un acelerador PHP. (PHP eAccelerator)
Puesto que el cdigo Moodle est basado en PHP casi en su totalidad, esta es la
medida de tuning ms evidente. Aun as, los ratios de mejora observados cuando se
instala un acelerador pueden variar dependiendo de diversos factores. En nuestras
pruebas se observaba una mejora sustancial pero no excesiva (alrededor de un 15% de
incremento de la capacidad del sistema respecto a las pruebas sin acelerador).
Procesos de Apache.
Es el objetivo prioritario de la actuacin. La capacidad de concurrencia del web server
depende, en gran medida, (el aprovechamiento de la CPU ya mejora gracias al
acelerador PHP), de la memoria disponible.
Aunque Apache es un servidor web de magnficas prestaciones, la utilizacin de PHP
nos impone algunas restricciones: puesto que PHP no es un producto considerado
thread-safe, no es posible ejecutar Apache bajo el mdulo mpm-worker, que es donde
consigue un mayor rendimiento. Moodle (PHP, en realidad) nos obliga a utilizar el
mdulo mpm-prefork, pasando a usar Apache en multiproceso en lugar de multithread. Esto quiere decir que para atender cada peticin HTTP Apache lanza un
proceso hijo que consume memoria adicional. As, la cantidad de procesos Apache
que puede tener nuestro sistema tiene como lmite fsico la memoria disponible
dividida entre la memoria ocupada por uno de estos procesos.
En nuestras mediciones se observ que el peso de un proceso Apache oscilaba entre
los 10 y 12Mb (llegando incluso a 15Mb segn las condiciones del sistema).
Suponiendo un sistema con 3Gb libres de memoria, podramos tener no ms de 300
procesos en marcha en cada Front-end.
Para incrementar este lmite sin aumentar la memoria fsica de nuestros servidores, se
examin con detalle el trfico HTTP y se determin que ms del 50% de las
peticiones que deba atender el servidor web corresponden a contenido esttico.
Concretamente imgenes de poco tamao (gif, png, jpg...) que se sirven una y otra
vez y se encuentran en cabeceras, pies de pgina, iconos, logos, etc...
Como solucin para aumentar la capacidad del sistema se instal en los servidores
Front-end un segundo servidor Apache con una configuracin extremadamente
simple: se compil expresamente sin la mayor parte de mdulos que lleva un servidor
estndar, de tal manera que debido a esta simplicidad, sus procesos slo ocupan
2Mbytes de RAM.
Este servidor que llamamos tiny-apache pasa a ser el servidor web que atiende en el
puerto 80. Para cada peticin que le llega lo nico que hace es: determinar si se trata
de contenido esttico o dinmico, servir la peticin si se trata de contenido esttico, y
en otro caso, pasarla al servidor apache estndar, (que ahora corre en el puerto 8080).
Con este mecanismo, la mayor parte de las peticiones HTTP que recibe el sistema, las
atiende un servidor cuyos procesos slo ocupan 2Mbytes de memoria en lugar de los
10-12Mbytes anteriores; gracias a ello se incrementa considerablemente el nmero de
peticiones que es capaz de atender simultneamente el sistema.
Back-end:
Las actuaciones en el Back-end se orientaron bsicamente a buscar la configuracin
necesaria para garantizar que el SGBD pudiera soportar un nmero muy elevado de
conexiones simultneas. En nuestro caso, 1.500 conexiones.
Para conseguirlo, aparte de la configuracin del servidor PostgreSQL hubo que
modificar los valores de determinados parmetros referentes a la gestin de memoria
en el kernel de linux.
La experiencia ha demostrado que el nmero de conexiones a la Base de datos suele
mantenerse en niveles considerablemente bajos incluso cuando tenemos un nmero
muy elevado de peticiones simultneas al sistema. Si el servidor tiene memoria y
CPU suficiente, suelen servirse muy rpido.
Sin embargo, condicionantes externos pueden hacer que su duracin sea mayor y, por
tanto, su nmero se incremente muy rpidamente en condiciones de carga elevada. Es
por esto que es importante que el sistema sea capaz de absorber muchas
simultneamente. De todas formas, un nmero muy elevado de conexiones
postgreSQL de forma sostenida habitualmente constituye un buen indicio de que el
sistema tiene algn problema (ya sea debido a hardware, lentitud en la red, falta de
algn ndice en alguna tabla, consultas muy costosas, malfuncionamiento de algn
mdulo de moodle, etc...)
5. Conclusiones
Usuarios distintos
Diario
12.000
32.000
320.000
Semanal
20.000
140.000
1.200.000
Mensual
25.000
400.000
4.500.000
utilidad a la hora de determinar las materias que ms han interesado a los alumnos, los
ejercicios ms realizados, qu apartados de una asignatura han sido ms visitados,
etc El nmero de registros en esa tabla es un indicador infalible del grado de
actividad de los usuarios en la herramienta.
Al observar la tabla con detenimiento, queda patente que con semejantes cifras de
acceso diarias, forzosamente la complejidad y duracin de las sesiones reales en la
actualidad difiere en cierta medida, (y necesariamente a la baja), del modelo que se
utiliz para realizar las pruebas del sistema. Es lgico que una vez la plataforma se
extiende a un pblico mucho ms amplio y se generaliza su utilizacin, los patrones
de uso varen sustancialmente. El acceso ms frecuente lleva consigo el reparto del
trabajo entre las diferentes sesiones e implica, tanto la reduccin de la complejidad de
las tareas que se realizan en una sesin, como una disminucin en la duracin de la
misma. En cualquier caso, estas reducciones se compensan con el incremento global
de peticiones y, en estas nuevas condiciones, el sistema todava debe garantizar,
(como de hecho sucede), la capacidad suficiente para atender la elevada demanda de
conexiones al sistema.
6. Bibliografa
Libros:
PostgreSQL (2nd edition), by Korry Douglas.
Apache Cookbook: Solutions and examples for Apache administrators, by Rich
Bowen & Ken Coar.
Apache, the definitive guide (2nd edition), by Ben Laurie & Peter Laurie.
Recursos on-line:
PostgreSQL: documentation http://www.postgresql.org/docs
The Linux Virtual Server Project http://www.linux.virtualserver.org
Wikipedia http://www.wikipedia.org
Apache JMeter: http://jakarta.apache.org/jmeter/
Apache performance tuning http://httpd.apache.org/docs/2.0/misc/perftuning.html
http://moodle.org/mod/forum/view.php?id=596
Sakai project: http://sakaiproject.org/