6.
PROBANDO Y OPTIMIZANDO THESERVERSIDE.COM
TheServerSide.com
experimentó numerosos problemas de escalabilidad antes de su
lanzamiento. Usando los consejos sugeridos en este artículo,
resolvimos todos los problemas, por lo que TheServerSide.com es uno
de los portales basados en Java más rápidos que hay.
El primer
paso para probar TheServerSide.com fue llenar la base
de datos con datos de prueba. Después de llenarla con una cantidad
moderada y con una cantidad extrema (añadiendo 16,000 mensajes
y 40,000 usuarios a nuestra base de datos), encontramos
un problema serio. El tiempo de
respuesta de nuestras páginas de nivel máximo saltó desde
los 2 segundos a 12 segundos para un único usuario.
No habiendo
leído este documento, cometimos el más común de
los errores: doblamos la velocidad de nuestra CPU y la memoria de nuestra
máquina. Esto sólo redujo el tiempo de respuesta a 8 segundos
y, por lo tanto, no era la causa del cuello de botella.
El problema
que teníamos indicaba que algo fallaba en la base de datos. Después
de comprobar cómo nuestra base de datos procesaba nuestras consultas,
descubrimos que nuestras columnas de clave primaria (y otras) no se
indexaban correctamente. Esto significa que la base de datos tenía
que hacer búsquedas lineales, incluso para ejbFindByPrimaryKey,
que es la más común de las llamadas.
Después
de hacer cambios a la base de datos y a nuestra estrategia de clave
primaria (nuestra base de datos PostgreSQL presentaba errores al manejar
el indexado de enteros de 8 bytes), pudimos indexar todas las columnas
apropiadas y bajar el tiempo de respuesta a 3 o 4 segundos.
Una vez hubimos
optimizado la base de datos, comenzamos a ejecutar pruebas de carga
apropiadas. Usamos WebLoad, una potente herramienta para pruebas de
cargas. La copia de evaluación permite probar con 12 usuarios
concurrentes (probablemente representativos de 30 o 40 personas reales).
Después de ejecutar las pruebas al máximo (12 usuarios
concurrentes), encontramos que nuestro sitio Web era muy poco escalable.
El tiempo de respuesta saltó de los 3 o 4 segundos de un único
usuario a 15 o 20 segundos por página bajo cargas más
pesadas. Obviamente, estos números no eran lo suficientemente
buenos.
Habiendo
optimizado la base de datos y actualizado el hardware, pasamos a examinar
nuestra arquitectura. Se hicieron pequeñas modificaciones, pero
aún no podíamos encontrar la causa del problema. Cuando
empezamos a usar un perfilador, todo cambió. Después de
ejecutar remotamente Optimize-It (tenía una ventana en mi máquina
local mostrando las estadísticas del servidor ejecutándose
en nuestro proveedor de servicios de Internet), descubrí la causa
del problema. 30% del tiempo de CPU se perdía en comunicaciones
de socket con nuestra base de datos. Optimize-It me permitió seguir
la pista y ver qué objetos y métodos iniciaban estas llamadas.
Así identifiqué un problema de diseño que hacía
que consultáramos un conteo en la base de datos cada vez que
queríamos mostrar un mensaje en TheServerSide.com. Después
de arreglar ese problema tonto, el número de llamadas a la base
de datos usadas para mostrar una página bajó de 15 a 1,
y, de repente, nuestro tiempo de respuesta disminuyó a cerca
de un segundo. Esto era exactamente lo que queríamos.
7.
CONCLUSIÓN.
Realizar
pruebas de rendimiento y optimizar una aplicación puede ser una
tarea muy desafiante. Afortunadamente hay herramientas en el mercado
que pueden simplificar el proceso. Usando esas herramientas y siguiendo
los pasos sencillos que se han explicado en este artículo, usted
debería ser capaz de seguir la pista a los cuellos de botella
de un sistema de forma efectiva.
Gracias especiales
a Mark Turnbull, el mejor administrador de base de datos que conozco.
Compruebe la calidad de nuestro desarrollo offshore.
Aurum Solutions tiene experiencia en desarrollo offshore en
J2EE y .NET de alta calidad y reducidos costos para empresas
europeas y norteamericanas. Conozca nuestro
desarrollo offshore haciendo
clic aquí o
en la página Web ../../offshore.html.
Cursos
de Aurum Solutions relacionados con el tema de este
artículo:
“Enterprise Javabeans”
“Servlets y JSP”
“Buenas prácticas en arquitecturas J2EE”
“Buenas prácticas en programación en Java”
“Herramientas de pruebas para Java”
|