Friday, May 15, 2009

Modelos de espera

Por motivos que no vienen al caso, el otro día estaba repasando las herramientas y papers que tengo en mi notebook y que pueden llegar a ser útiles en el trabajo. Pienso que hay una, que he usado en los proyectos de mejora de performance (mi pasión oculta, y algo así como el premio consuelo: puedo jugar a detective sin trabajar para House o sin dedicarme a la investigación) que bien vale un post.

La herramienta es tan simple como una planilla excel que se basa en la idea de que un sistema que atiende transacciones en, en definitiva, un modelo de colas. La idea del modelo de colas es bastante simple:
  • Existen una cantidad variable de recursos que atienden peticiones (canales).
  • Los clientes arriban al sistema y si no hay un recurso que atienda espera poniéndose en una cola.
  • Los canales demoran en atender cada cliente un tiempo variable descrito por una función de probabilidad.
  • Los clientes arriban al sistema en intervalos variables descriptos por una función de probabilidad
Los cálculos que yo conozco se basan en sistemas donde la disciplina de la cola es FIFO, la distribución de los arribos se describe como un proceso Poisson caracterizado por la tasa de clientes arribados sobre unidad de tiempo. Los tiempos de servicio de los canales (lo que tarda cada canal desde que la petición entra el canal, no a la cola, hasta que sale) se describen por medio de una distribución exponencial. Se puede complicar más ( impaciencia de los clientes, otras disciplinas de espera ) pero usualmente el modelo básico es suficiente para analizar un software up&running.

Prácticamente, no me he encontrado con un sistema que no pueda ser modelado como un sistema de colas:
  • Un sistema web recibe peticiones (los GET y POST HTTP) que son atendidas por threads que corren en el application server. Los threads son los canales de atención y si no hay un thread disponible, la petición espera.
  • Un proceso batch procesa peticiones (transacciones) que esperan en cola hasta que el proceso puede atender a la próxima.
  • Una base de datos que recibe DML es tiene una serie de procesos que atienden las peticiones
Encuentro particularmente útil el modelo de colas no para reemplazar al test de stress de un sistema, sino para complementarlo. Así, luego de terminar el test de stress o de mirar en producción un rato puedo contestar fácilmente preguntas del tipo:
  • Que sucedería si mi sistema recibe el doble de peticiones y hago un esfuerzo (en rediseño) para que el tiempo de servicio no aumente más del 10%?
  • Si espero un determinado incremento en la carga de transacciones, cual debería ser mi optimización del tiempo de servicio para obtener un determinado tiempo libre del canal (para tareas administrativas, por ejemplo).
Craig Shallahamer tiene un excel de un modelo de colas en su web (en el link hasta que Craig decida rediseñar su página). Es una modesta maravilla que en la primer solapa requiere la introducción de los valores característicos y en las siguientes muestra la evolución del sistema con variaciones de los valores característicos.

Así que la próxima vez que un cliente, con cara de ‘ahá, acá te cagué, consultor’ pregunte: 'y de donde sacaste que si la carga de transacciones aumenta un 20% me quedo sin tiempo para el backup', uno puede sacar las planillas y agobiarlo con una clase de investigación operativa ligera.

Y como bien saben los economistas, mostrar números y matemática razonablemente avanzada da un aura de respetabilidad. Aunque todo esté construido sobre nada. En realidad, el modelo de colas sí funciona para el análisis de performance de los sistemas informáticos, simplemente tenía ganas de hablar mal de los economistas. Porque (y con el solo objeto de divertirse un rato con una buena lectura y sin que tenga relación con el post) como bien señala Leonardo Moledo, con la economía es otra historia.

No comments: