Simulación y Modelación de Sistemas “Simulación sobre la utilización de un servidor de base de datos” Samuel Garrido Daniel, Dennis Bazán Sandoval sgarrido,[email protected] CINVESTAV-IPN Departamento de Ingeniería Eléctrica Sección de Computación México, D.F. 26/Abril/2004 Un servidor de base de datos recibe consultas remotas con interllegada de tipo exponencialmente distribuida . Cada consulta requiere una búsqueda en la base de datos. Esta operación toma log(n) unidades de tiempo, donde n es el número de registros en la base de datos. Hay también m usuarios conectados al servidor a través de la red de área local. Éstos generan peticiones de lectura, escritura o eliminación con probabilidades p1, p2 y p3, respectivamente ( p1 p2 p3 1) . Cada petición necesita el mismo monto de tiempo para ser completada como se mostró anteriormente. Aunado a esto, el resultado de una petición de escritura incrementa el tamaño de la base de datos en un registro, mientras que las peticiones de eliminación lo reducen en un registro. Las peticiones locales son exponencialmente distribuidas µ. Este tiempo corresponde sólo a un periodo entre la terminación de la petición previa y la generación de una nueva, así los usuarios locales no puede generar una nueva transacción antes de completar una que ha sido enviada. Todas las peticiones son puestas en una cola y su servicio se basa en el first-come first-server (primero en llegar, primero en ser servido) con prioridad a las peticiones locales. Las consultas externas son almacenadas en un buffer hasta de b items. Si una nueva petición encuentra que el buffer esta lleno, ésta es puesta en espera. Asumiendo que la base de datos inicialmente tiene R registros, determine la utilización del servidor, el coeficiente de consultas perdidas, y un porcentaje de tiempos de respuesta con respecto a las peticiones de los usuarios locales y las peticiones remotas. Introducción La primera parte de este trabajo muestra el modelo del sistema, la identificación de sus parámetros de entrada, los eventos y el diseño de los datos de salidas además de la forma en cómo deben ser interpretados, en tanto que la segunda parte del trabajo consiste en mostrar cómo se traslado el sistema modelado a un programa de software desarrollado con Visual Basic 6.0. 1. Análisis y diseño del modelo de simulación El sistema a simular trata sobre la utilización de un servidor de base de datos en cuanto a las consultas que recibe y que debe procesar para regresar resultados o realizar las operaciones necesarias en la base de datos. Para el sistema existen dos tipos de consultas, las remotas y las de usuarios conectados en la misma red local donde se encuentra el servidor de la base de datos. Todas las consultas son encoladas en una estructura de datos llamada cola de prioridad, en donde la prioridad la tienen las consultas locales. La figura 1, muestra una perspectiva general del modelo. Figura 1. Vista general del modelo. Se puede apreciar que se tienen dos distribuciones exponenciales que corresponden a la generación de consultas locales y a las remotas. Consideraciones sobre estos dos eventos son las siguientes: Las consultas locales, llegarán una a la vez. Podemos tomar en consideración que existe un bloque de la base de datos, para que esto suceda así. La distribución exponencial denota el tiempo en que tarda en completarse una consulta ya generada y la generación de otra, sucediendo esto hasta que la consulta en proceso es completada. Las consultas remotas, pueden llegar aunque no hayan sido atendidas previas consultas enviadas, por esta razón se cuenta con el buffer de consultas externas, ya que estas son colocadas en dicha estructura. Para su posterior incorporación a la cola de prioridad que recibe todas las consultas, tanto remotas como locales. Las consultas pueden ser de tres tipos, y generan diferentes acciones sobre la base de datos. Las consultas de lectura, no afectan el número de registros, únicamente son servidas y como se daría en un servidor de base de datos real, sólo devuelven los datos pedidos de acuerdo a la consulta de selección que en el lenguaje SQL son realizadas con la sentencia SELECT. Las consultas de eliminación, generan un decremento en 1 en el número de registros de la base de datos. La sentencia DELTE en SQL, realiza la acción generada por este tipo de consulta. Las consultas de inserción, generan un incremento en 1 en el número de registros de la base de datos. 1.2. Parámetros de entrada Los parámetros de entrada identificados al realizar el análisis del problema propuesto se detallan a continuación: Número de Usuarios Este parámetro se refiere al número de usuarios locales conectados al servidor de base de datos. Es un valor entero mayor a 0. Número de Registros de la Base de Datos Este parámetro indica la cantidad inicial de registros almacenados en la base de datos. Es un valor entero mayor a 0. Probabilidades de tipo de consultas Las consultas a la base de datos pueden ser de tres tipos, de lectura (consultas de datos), eliminación (eliminación de registros en la base de datos) y de tipo inserción (inserción de registros en la base de datos), la suma de estas tres probabilidades es p1 + p2 + p3 =1 Probabilidad consulta lectura Probabilidad p1. Probabilidad consulta eliminación Probabilidad p2. Probabilidad consulta inserción Probabilidad p3. Tamaño del buffer de consultas externas Este dato establece un límite para almacenar consultas externas, dentro del buffer que sirve para ese propósito. Es un valor entero. Tiempo de simulación Es el tiempo a simular de la utilización del servidor de base de datos. El tiempo se expresa en horas. 1.3. Variables Aleatorias En un problema de colas, los tiempos de ínter llegada y los tiempos de servicio suelen ser estocásticos[3]. Para el caso del modelo del servidor de base de datos esta especificado en la definición del problema que se utilizan distribuciones exponenciales. Precisamente es con las distribuciones exponenciales que generaremos variables aleatorias para generar los tiempos de ínter llegada de las consultas a la cola de prioridad del servidor de base de datos. Las distribuciones exponenciales se utilizan como modelo para representar tiempos de funcionamiento o tiempos de espera. Su función de densidad que depende de un parámetro k es de la forma f(x)=ke - kx La generación de consultas locales depende de una variable aleatoria generada con una distribución exponencial. La generación de consultas externas depende de otra variable aleatoria generada con una distribución exponencial propia. Por lo tanto se tienen dos distribuciones exponenciales que trabajan de manera paralela. En un modelo, se tendrán dos procesos generadores, que se ocuparan de generar las llegadas de las consultas locales y remotas respectivamente. El proceso de servir estas consultas generalmente se realiza con otra distribución exponencial que simula el tiempo de servicio. Para el caso del modelo diseñado, el tiempo de servicio es un tiempo constante por lo que no es necesario otra distribución exponencial. 1.4. Eventos Un evento puede ser definido como una ocurrencia instantánea que puede cambiar el estado del sistema. La identificación para sistemas complejos puede ser una tarea difícil y requiere de métodos de identificación como el método event-graph que es mencionado en [1]. Sin embargo como se menciona en la misma obra, la identificación para un sistema de colas relativamente sencillo puede no ser necesario el utilizar este tipo de métodos. Los eventos que se involucran en la presente simulación fueron fácilmente detectables y son los siguientes: Inicio de la simulación Este evento inicializa los eventos Generación de consulta externa y Generación de consulta local. La inicialización ocurre sólo si ya han sido establecidos los parámetros de entrada que afectan a la simulación, en caso contrario no se tendrán resultados válidos. Figura 2. Inicio de la simulación y el proceso en general de ésta. Finalización de la simulación La finalización de la simulación puede ocurrir por dos eventos; uno, que la simulación se lleve a cabo correctamente atendiendo al parámetro tiempoSimulación o que el usuario decida terminar la simulación. Para este evento no se presenta diagrama de flujo dado su sencillez de interpretación. Generación de una consulta externa La generación de una consulta externa se realiza con base en una distribución exponencial, Primero el tiempo de la próxima generación de una consulta externa es generado y puesto en la lista de eventos. Colocada en la cola de prioridad, sucede entonces que en el caso de que la cola de prioridad se encuentre llena, entonces ésta consulta es colocada en el buffer de consultas remotas, para esto se realiza una verificación del buffer, ya que este cuenta con un límite b. Si dicho buffer es sobrepasado de su capacidad máxima, la consulta se toma como una consulta perdida generándose el evento Consulta remota perdida. El diagrama de flujo de la siguiente figura muestra este evento. Figura 3. Evento desencadenado por la generación de una consulta externa. Generación de una consulta local Una consulta local es generada en base a las variables aleatorias generadas por una de las distribuciones exponenciales con media . Figura 4. Generación de una consulta local Generación de un tipo de consulta Al generarse cualquiera de los dos eventos mencionados anteriormente, se lleva a cabo este evento, el cual con base en las probabilidades p1, p2 y p3 genera el tipo de consulta. Figura 5. Evento para genera el tipo de consulta. Llegada de consultas remotas al servidor de base de datos Al llegar una consulta remota inmediatamente es colocada en el buffer de consultas remotas. En el diagrama del evento de generación de consultas remotas se aprecia este evento. Llegada de consultas locales al servidor de base de datos La llegada de una consulta local a la cola de prioridad del servidor de base de datos, es contemplada en este evento. Modificación del número de registros en la base de datos Cuando de la cola de prioridad sale una consulta para ser atendida, entonces es cuando se dispara el evento para modificar el número actual de registros en la base de datos, con base en el tipo de consulta que es atendida. En la figura 6 se muestra el diagrama de flujo para éste evento. Figura 6. Generación del tipo de consulta Pérdida de consultas externas La pérdida de una consulta es consecuencia del desborde del buffer que almacena las consultas externas debido a que la cola de prioridad se llena, este evento al generarse deber ser almacenado en el registro de consultas perdidas, para tener un estimado de cuántas consultas se pierden ante las que son atendidas al final de la simulación, ya que es uno de los resultados que se piden. Figura 7. Evento que se produce al tener consultas perdidas. 1.4. Análisis de Resultados Los resultados que se piden en la especificación del sistema a simular son los siguientes. Utilización del servidor de base de datos. Coeficiente de consultas perdidas. Porcentaje de tiempos de respuesta con respecto a las peticiones de los usuarios locales y las peticiones remotas. 2. Implementación del sistema Una vez obtenido el diseño, el modelo se trasladó al programa de software. El proceso se describe en los siguientes puntos. 2.1 Consideraciones sobre las herramientas de software utilizadas La decisión con respecto a que lenguaje de programación se debe de usar depende de varios factores, de los cuales el conocimiento y la disponibilidad son los más importantes [3]. Para el caso particular del trabajo aquí presentado, se optó por desarrollar el sistema con el entorno de programación MS Visual Basic 6.0 (VB 6.0). Y como se menciona anteriormente el conocimiento y la experiencia que el equipo de desarrollo posee utilizando el entorno de programación VB 6.0 fue determinante para decidir entre éste y el paquete de simulación ARENA. Cabe mencionar que el paquete de simulación ARENA incluye gráficos estándar para mostrar colas, estatus de recursos, flujo de información, flujo de entidades, entre otros. Por lo tanto es fácil crear animaciones, ya que incorpora herramientas de dibujo y soporte para integrar galerías clip art, AutoCAD, Visio y otros tipos de gráficos. Sin embargo todas estas características están disponibles para ser utilizadas con Visual Basic. Los datos históricos de las simulaciones realizadas, se almacenan en una base de datos de MS Access, con acceso a través del control DAO. Cabe mencionar que no es necesario configurar el acceso a la base de datos, es decir dicha característica es transparente para el usuario. Los reportes generados por el sistema son desarrollados con el control Crystal Reports versión 7.0. 2.2 Consideraciones sobre la programación del sistema Para la traslación a un programa de software del modelo diseñado que fue presentado en la primera parte de este trabajo, se trabajó con un enfoque orientado a objetos para la representación de las entidades y eventos y las relaciones entre estos. Sin embargo la codificación no se llevo a cabo mediante clases ya que se optó por codificar de la manera tradicional en Visual. 2.2.1 Identificación de objetos y características con respecto a la programación Objetos identificados dentro del sistema: BaseDatos Consultas ColaEspera BufferCExternas NumeroAleatorio DistribucionExponencial GeneradorConsultas Timers A continuación se muestran las variables que se utilizan en el código fuente y las funciones que se definieron. Estructuras de datos Type consulta id As Integer idGrupo As Integer usuarioM As Integer tipo As Integer tiempoResupuesta As Single tiempoLlegada As Single End Type Parámetros de entrada Public M As Integer Public r As Integer Public P1 As Single Public P2 As Single Public P3 As Single Public b As Integer Public T As Single Public C As Integer Public lambda1 As Single Public lambda2 As Single Public idGrupo As Single Public descSimulacion As String Variables del sistema Public idSimulacion As Integer Public regConsulta0 As consulta Public regConsulta1 As consulta Public temp As consulta Public aux As consulta Public t1 As Double Public t2 As Double Public regfinal As Integer Public usuarioAct As Integer Public totConsRemota As Integer Public totConsLocal As Integer Public totConsPerdidas As Integer Public numConsultas As Integer Public X1 As Double Public X2 As Double Public Xr1 As Single Public Xr2 As Single Public ColapLocal() As consulta Public ColapRemota() As consulta Public Frente1 As Integer Public Final1 As Integer Public Frente2 As Integer Public Final2 As Integer Public dbaccess As ADODB.Connection Public consulta As ADODB.Command Public rs As ADODB.Recordset Public avgLocal As Single Public avgRemota As Single Public sumaSimulation As Single Public Tsimulacion As Single Public coeficiente As Single Funciones globales Public Function Dexponencial(Lambda As Single, ByRef Na As Single) As Double Public Function EligeUsuario(M As Integer) As Integer Public Function ModificaBD(tipo As Integer) Public Function iniciaSimulacion() Public Function insertaColaRemota(regConsulta1 As consulta) Public Function eliminaColaLocal() As consulta Public Function eliminaColaRemota() As consulta Public Function ColaLocalvacia() As Boolean Public Function ColaRemotavacia() As Boolean Public Function ColaLocalllena() As Boolean Public Function ColaRemotallena() As Boolean Public Function registraConsPerdidas() Public Function generaTipoCons() As Integer Public Sub guardaGLocal() Public Sub guardaGRemota() Public Function guardaAtendidos(temp As consulta) Public Function BloqueaUsuario(User As Integer) As Boolean Public Function verificaParametrosEntrada() Public Function generaRepCorto() Public Function generaRepDetalleAct() Public Function generaRepDetalleHist() Public Function graficaDLambda2() Public Function graficaDLambda1() 2.6 Pantallas del Sistema y la animación Los opciones del menú del sistema son las siguientes: Contiene dos menús principales Sistema Reporte El menú sistema tiene los siguientes submenús: Parámetros de entrada Iniciar simulación Repetir simulación Nueva Actual El menú Reporte Reporte actual Historial El submenú parámetros de entrada le permite al usuario introducir los valores de los parámetros de entrada para poder iniciar la simulación como se ven en la figura siguiente Como podar observar en la figura se encuentra un botón que le permite al usuario activar los valores por default al sistema, para llevar a cabo una rápida prueba El submenú Iniciar Simulación con esta opción se inicia la simulación permitiendo al usuario ver gráficamente lo que esta sucediendo. Como se muestra en la figura siguiente: Al finaliza la simulación se muestra en la esquina inferior derecha los resultados de la simulación de una forma muy breve La opción repetir simulación nueva , le permite correr una simulación con diferentes parámetros, es decir una simulación diferente a la que realizo. La opción repetir simulación nueva , le permite ejecutar la misma simulación y los resultados son almacenados en un historial en la base de datos utilizada por este sistema, y estos puede ser consultados posteriormente a con las opciones de reporte 2.7 Pruebas del sistema Nota: Se utilizo Crystal Reports para la generación de reportes Ejecutando la primera simulación se muestran sus parámetros y sus salidas Ejecutan la segunda simulación Ejecutando una tercera simulación 5 veces 2.8 Requerimientos del sistema Sistema Operativo Windows 98 ó superior Memoria Ram: 32 mb Conclusiones Seguir los pasos que son sugeridos en la mayoría de la literatura acerca del tema, facilita la implementación de modelos de simulación. Este trabajo sirvió como motivación para aplicar los conocimientos adquiridos en la asignatura acerca de los eventos modelados por fenómenos de espera. Se presentaron las complicaciones habituales que todo proceso de simulación posee. En especial, en la fase de diseño del sistema, la abstracción de las interrelaciones entre las distintas variables y los tiempos asociados de respuesta. En general se puede concluir que la simulación de eventos estocásticos es una herramienta útil y poderosa para el estudio de los sistemas en tiempo discretos. Bibliografía [1] Averill Law, Kelton, “Simulation Moeling & Analysis” MacGrawHill (1991) [2] Robert E. Shanon, “Systems Simulation, the art and science”, Prentice Hall (1975) [3] George S. Fishman, “Conceptos y Métodos en la Simulación Digital de Eventos Discretos”, Edit. Limusa (1978)