lunes, octubre 31, 2005

El efecto Incertidumbre

Luego de un largo periodo sin escribir, potenciado principalmente por temás más de Gestión que de Desarrollo, regreso a estas páginas, pero no a enfrentar a Mono y .NET 2.0 (temas sobre los cuales he principalmente hecho labor de lectura en todo este tiempo), sino para volver a .NET 1.0, a un antiguo proyecto, que por las cosas de la vida, regresa a mis manos.

No voy a entrar en detalles respecto al tema general, pero si a las problemáticas individuales.

En primer lugar, ¿cómo se mejora la performance de una aplicación? En particular, una aplicación ASP.NET. Métricas y recomendaciones de tunning hay varias (Microsoft tiene su propia guía de más de 1.200 páginas que he revisado en más de una ocasión). Pero a la larga, la más simple es considerar el tiempo de proceso (variable que no es tan difícil de medir como otras).

¿A qué me refiero con esto? Pues bien. Si uno tiene una función y esta demora 1 segundo en ejecutarse, si logramos que se demore 1 cuarto de segundo, el impacto sobre la máquina que la ejecuta se sentirá. En particular si estamos hablando de procesamiento de páginas Web.

Es decir, si el servidor se tarda un par de segundos en servir una página, entonces reducir a una cuarta parte tiene un impacto directo sobre la capacidad de este de servir a más usuarios.

Ok, pero, ¿qué pasa con el efecto de la medición? Un problema en el que facilmente se puede caer es que el proceso de medición tome un tiempo significativo, por lo tanto, las mediciones se vuelvan "erroneas". un efecto clásico de esto es que el tiempo asociado a un área de código medida comienza a aumentar al agregar más y más detalle en la medición.

por otra parte, una sola medición no tiene valor estadístico, es decir, si uno no repite el experimento varias veces, la verdad es que no sabe si realmente esta midiendo algo repetible (a veces, procesos específicos, como una recolección de "basura" a nivel del administrador de memoria, un acceso a disco, o la acción de otro usuario, pueden ensuciar una medición, en particular cuando no se tiene control respecto a los otros elementos del sistema).

Resumiendo, las reglas para mejorar la performance de una aplicación parten por medir ese rendimiento, y para ello los criterios son simples:

1) Definir linea de base
Para ello se requiere contar con una muestra estadísticamente representativa de la aplicación. También se requiere aislar el efecto de la medición.

2) Definir hipótesis de trabajo, implementarlas y testearlas

3) Evaluar el resultado. Si la mejora es significativa, implementar el cambio. En otro caso, descartarlo.
El cambio en si mismo no es necesariamente bueno, en particular por que impacta sobre la estabilidad de una aplicación.

Aunque nada de lo anterior no tiene nada de nuevo ni ingenioso, es impresionante como en este tipo de temas se pierde el foco y no se aplican los criterios indicados. En particular el primero y el último, así, finalmente se gasta en cosas que no tienen mayor impacto y que el sentido común muchas veces nos dice que es una pérdida de tiempo... pero bueno, el sentido común no deja de ser el menos común de los sentidos ;-)

No hay comentarios.: