Documentos de Académico
Documentos de Profesional
Documentos de Cultura
GGalache PDF
GGalache PDF
Facultad de Ingeniera
Alumna:
Directores:
Ao 2012
Resumen
En la presente Tesis se desarrolla una plataforma de software para posibilitar la adaptacin
automtica y autnoma de Sistemas Informticos ante una degradacin en su calidad de servicio.
La metodologa Self-Healing ofrece ventajas particulares cuando se aplican tcnicas de control
a lazo cerrado. Primero se acepta la no idealidad del sistema y el dbil conocimiento de la dinmica de
su entorno y sus usuarios. Luego, se agrega una capa de supervisin que detecta estados o tendencias
no deseables y reacciona controlando parmetros de operacin en pos de mitigar la degradacin del
servicio.
Un factor que limita su adopcin en entornos industriales es la fuerte dependencia de cada
estrategia de control particular con la herramienta especfica que lo implementa, dificultando la
convergencia hacia una plataforma estndar.
Para contrarrestar esta situacin, desarrollamos una herramienta genrica para disear e
implementar distintas estrategias de control en un contexto flexible y modular. Sus tres funciones
centrales: monitoreo, control y actuacin se logran mediante componentes independientes integrados
mediante una red de datos.
Los controladores se implementan en un entorno de modelado y simulacin basado en el
formalismo DEVS (Discrete Event System Specification) que permite especificar de forma
matemticamente robusta controladores de cualquier naturaleza: continuos, a tiempo discreto, a
eventos discretos, y/o combinaciones de ellos (hbridos).
Esto facilita el desarrollo de estrategias de control acorde al enfoque System-In-The-Loop
(sistema dentro del lazo): los modelos son desarrollados, ensayados y verificados mediante
simulaciones desacopladas del sistema real a controlar (sistema fuera del lazo); luego, cuando el
desempeo es aceptable, las entradas y salidas del controlador son simplemente redireccionadas
hacia el sistema real (sistema dentro del lazo) para su validacin.
Mediante un proceso iterativo los modelos de simulacin pasan a ser ejecutados en tiempo real
convirtindose directamente en el producto final.
Demostramos la eficacia de la plataforma diseando un control sencillo tipo on-off para regular
el consumo de CPU y memoria de una aplicacin Web sobre Java EE. Los ensayos expusieron
dinmicas inesperadas de la aplicacin controlada, y la plataforma mostr flexibilidad para adaptar el
control incorporando los nuevos conocimientos adquiridos.
Esperamos que nuestro desarrollo contribuya a disminuir la brecha existente entre la Ingeniera
de Software y la Ingeniera de Control en el contexto del aseguramiento de la calidad de servicio de
aplicaciones industriales.
Agradecimiento
Quiero agradecerles a mis directores, Dr. Rodrigo Castro e Ing. Osvaldo Clua, por haberme
orientado en la realizacin del presente trabajo.
A Lic. Adriana Echeverria, Ing. Hugo Pagona y Lic. Alejandro Turri por haber aceptado ser
jurados del presente trabajo y por su buena predisposicin para definir rpidamente la fecha de la
defensa.
A mi familia, en especial a mi mam y a Martin, por haberme apoyado durante toda mi carrera
e hicieron posible que pudiera llevarla adelante.
A mis amigos y especialmente a Julia por haberme ayudado con la preparacin de la defensa y
en los ensayos.
Por ltimo, quiero dedicarle este trabajo a mi hija Micaela que es quien me inspira en todo lo
que hago, y es la personita ms importante en mi vida.
Contenido
Captulo 1: Introduccin................................................................................................................8
1.1 - Contexto.............................................................................................................................9
1.2 - Motivacin .......................................................................................................................10
1.3 - Definicin del Problema .................................................................................................. 11
1.4 - Objetivos ..........................................................................................................................12
1.5 - Estructura del Informe .....................................................................................................12
Captulo 2: Conceptos Preliminares ............................................................................................14
2.1 - JVM .................................................................................................................................15
2.1.1 - Componentes Principales de la JVM .......................................................................16
2.2 - Servidores de Aplicaciones JEE ......................................................................................18
2.3 - Confiabilidad y Sistemas Self-Healing............................................................................21
2.3.1 - Qu se entiende por confiabilidad de un sistema? .................................................21
2.3.1.1 - Las Amenazas a la Confiabilidad del Sistema..............................................22
2.3.1.2 - Formas de Lograr la Confiabilidad de un Sistema .......................................26
2.3.2 - Elementos de los Sistemas Self-Healing .................................................................28
2.3.2.1 - Fault Model o modelo de defectos ...............................................................28
2.3.2.2 - System Response o respuesta del sistema .....................................................29
2.3.2.3 - System Completeness o completitud del sistema ..........................................30
2.3.2.4 - Desgin Context o contexto de diseo ...........................................................30
2.4 - Monitoreo y Actuacin ....................................................................................................31
2.4.1 - Tcnicas de Monitoreo .............................................................................................33
Captulo 3: Estado del Arte .........................................................................................................34
3.1 - Principales enfoques en sistemas Self-Healing ...............................................................35
3.1.1 - Self-Healing basado en Modelos de Arquitecturas ..................................................36
3.1.2 - Self-Healing basado en Ingeniera de Control .........................................................39
3.2 - Trabajos previos relevantes .............................................................................................43
3.2.1 - JVMMon ..................................................................................................................43
3.2.2 - Aqua .........................................................................................................................45
3.2.3 - Arco Iris ...................................................................................................................47
3.2.3.1 - Extensiones Realizadas a Rainbow ..............................................................49
3.2.3.2 - Principio de Funcionamiento de Arco Iris....................................................50
3.2.3.3 - Eleccin de Estrategias Rainbow vs Arco Iris..............................................51
3.2.4 - Teora de control aplicada a un servidor Web ..........................................................51
4
Captulo 1: Introduccin
1.1 - Contexto
La importancia de las disciplinas de aseguramiento de la calidad de servicio y de la
confiabilidad de Sistemas Informticos crece acorde a su incremento en complejidad y adopcin
masiva. Al mismo tiempo, aumentan las dificultades para implementar exitosamente dichas disciplinas
dentro de las restricciones impuestas por el mercado en trminos de tiempo y costos de desarrollo.
Surge entonces la necesidad de disear estrategias que le otorguen a los Sistemas Informticos
capacidades para administrarse en forma autnoma y automtica en fase de produccin, partiendo
exclusivamente de especificaciones de objetivos de calidad definidos en la fase de diseo. Esto implica
que posean la capacidad de reaccionar ante fallas propias y/o cambios en su entorno de ejecucin que
impliquen un desvo del objetivo de calidad estipulado, sin necesidad de intervencin humana y de
forma transparente para el usuario.
Diversos esfuerzos realizados tanto en el mbito acadmico como industrial han propuesto
distintos enfoques para obtener lo que se conoce como sistemas Self-Healing [Ghosh et al, 2007,
Koopman, 2003]. En el mbito privado IBM es una de las empresas que ms esfuerzos ha dedicado a
la investigacin en el tema (cf. [Ganek & Corbi, 2003] y [Kephart & Chess, 2003]).
La consideracin a priori, en fase de diseo, de todas las posibles condiciones de falla de un
sistema y el consecuente diseo de medidas explcitas para prevenirlas, presenta grandes dificultades
cuando los sistemas tienen una complejidad tan solo levemente mayor a casos triviales, haciendo a los
problemas intratables en la prctica (explosin de estados).
En cambio, el enfoque Self-Healing acepta la no idealidad del sistema y el dbil
conocimiento previo del comportamiento dinmico de su entorno y de sus usuarios, para luego
agregarle una capa de supervisin que detecte anomalas o situaciones que puedan conducir al sistema
supervisado a un estado no deseable, y reaccione controlando parmetros de operacin en pos de
contrarrestar el estado de falla. Esta estrategia es ms eficiente en trminos de escalabilidad ya que
depende en mucho menor medida (o en ninguna medida, dependiendo del caso) del tamao del
sistema. De hecho, una determinada estrategia de control puede ser directamente reutilizable
aplicndola a distintos Sistemas de Software de escala muy variada, siempre y cuando compartan
aquellas propiedades de su arquitectura para las cuales fue diseada la estrategia de control.
Existen diferentes enfoques para el desarrollo e investigacin de sistemas Self-Healing. En
[Ghosh et al., 2007] los autores relevan y clasifican varios de dichos enfoques.
Uno de los ms evolucionados y difundidos es el propuesto por los autores en [Garlan &
Schmerl, 2002]. Utiliza el modelo de arquitectura del sistema a controlar para evaluar la dinmica del
mismo durante su ejecucin y tomar decisiones acerca de la necesidad o no de aplicar acciones de
adaptacin. El modelo de arquitectura utilizado representa al sistema a travs de un grafo equivalente
que consta de componentes del sistema, sus interconexiones (conectores) y sus propiedades relevantes.
Este modelo es conocido en la literatura como C&C (componentes y conectores).
Otro enfoque muy distinto es el basado en modelos matemticos de ciertas dinmicas del
sistema y de lazos de realimentacin aptos para la aplicacin de la Ingeniera de Control (ver
[Patikirikorala et al., 2012] para un relevamiento sistemtico y el libro de texto [Hellerstein et al.,
1.2 - Motivacin
A pesar de la caracterizacin unificada aplicable a todo sistema de Self-Healing -mencionada
en la seccin precedente-, y de tratarse siempre de enfoques basados fundamentalmente en modelos aunque de distinta naturaleza-, es notable la gran dispersin de herramientas que proliferan.
Si bien la variedad de modelos surgidos de distintos enfoques puede interpretarse como una
virtud para una disciplina incipiente y en crecimiento, la consecuente diversidad de herramientas
especializadas para experimentacin y/o implementacin de soluciones prcticas aparece, en la
realidad, como una traba en al menos tres sentidos:
1. Difcil reutilizacin de tcnicas de monitoreo y actuacin, usualmente implementadas
de modo ad-hoc para situaciones particulares.
2. Difcil convergencia hacia una plataforma robusta y de aceptacin amplia que permita
permear la barrera de la investigacin para transferirse como tecnologa usable en la
industria de software.
10
11
1.4 - Objetivos
La presente Tesis se propone disear una infraestructura genrica y reutilizable para incorporar
rpidamente capacidades de Self-Healing a Sistemas de Software y a su infraestructura de hardware.
Como caso prctico de demostracin se adoptar como Sistema de Software a ser controlado a
un Servidor de Aplicaciones JEE JBoss, incluyendo la Mquina Virtual Java (JVM - Java Virtual
Machine) sobre la cual se ejecuta.
Nuestra nueva infraestructura deber permitir:
A. Recolectar informacin de la JVM, del Servidor de Aplicaciones y del su entorno de
ejecucin (e.g. recursos de hardware, red, etc.)
B. Prevenir la ocurrencia de fallas y/o de situaciones anmalas que puedan comprometer la
confiabilidad del sistema, o en caso de ocurrencia pueda sobreponerse a las mismas.
C. Adoptar diversas posibles estrategias de control de manera flexible y sencilla sin que ello
implique la necesidad de realizar modificaciones de bajo nivel en la plataforma.
Se relevar y documentar el estado del arte de las tecnologas existentes que permiten obtener
informacin tanto de la JVM como del Servidor de Aplicaciones as como tambin de aquellas que
posibiliten actuar sobre los mismos.
Las tecnologas para lograr lo tems A, B y C descriptos arriba debern ofrecer la mayor
generalidad posible: su pertinencia para el caso prctico seleccionado (JBoss+JVM) deber
representar slo un caso particular.
12
13
Captulo 2: Conceptos
Preliminares
14
El objetivo del captulo es introducir los conceptos necesarios para comprender el alcance del
presente trabajo. Los cuales involucran la descripcin de la JVM, los Servidores de Aplicaciones, la
especificacin JEE, los sistemas Self-Healing y los conceptos que ellos implican as como tambin una
descripcin acerca de los conceptos de monitoreo y actuacin.
2.1 - JVM
La JVM (del ingls Java Virtual Machine) es una computadora abstracta, o mquina virtual
(tambin llamada VM del ingls Virtual Machine) que, al igual que una real, consta de un conjunto de
instrucciones y maneja varias reas de memoria en tiempo de ejecucin. Pertenece a la categora de las
mquinas virtuales HLL-VM, del ingls High Level Language Virtual Machine (Mquinas Virtuales
de Lenguaje de Alto Nivel) del tipo de Process Virtual Machine (Mquinas Virtuales de Procesos).
Este tipo de mquina virtual se ejecuta como un proceso normal dentro de un sistema operativo y
soporta la ejecucin de un slo proceso dentro de la misma. Por otro lado, la mquina se inicia
automticamente cuando se lanza el proceso que se desea ejecutar (una aplicacin Java en el caso de
una JVM) y se termina cuando ste ltimo finaliza. Su objetivo es el de proporcionar un entorno de
ejecucin independiente de la plataforma de hardware y del sistema operativo, que oculte los detalles
de la plataforma subyacente y permita que un programa se ejecute siempre de la misma manera sobre
cualquier plataforma. Es decir que este tipo de mquina virtual da soporte para la programacin
multiplataforma. Para ms detalle acerca de la arquitectura y tipos de mquinas virtuales consultar
[Smith & Nair, 2005].
En una mquina virtual HLL-VM existe un compilador que genera cdigo en un determinado
conjunto o juego de instrucciones virtual especfico de la VM, es decir en un determinado ISA (del
ingls Instruction Set Architecture). En el caso de la JVM a este conjunto de instrucciones se lo llama
bytecode. Este cdigo, junto con informacin de la estructura (metadata), es lo que es distribuido para
que pueda ser ejecutado en las distintas plataformas (archivos .class para el caso de la JVM), para lo
cual se debe contar con una mquina virtual, capaz de cargarlo y ejecutarlo, para cada una de las
mismas. La ejecucin del cdigo puede ser ya sea mediante un intrprete (forma ms simple) o a travs
de un compilador que lo compila en el cdigo de maquina (cdigo nativo) de la plataforma para que
sea directamente ejecutado en la misma (ejecucin ms rpida). El esquema del funcionamiento
descripto se encuentra resumido en la Figura 1.
Existen diferentes implementaciones de la JVM para distintas plataformas y de distintas
organizaciones, adems la misma puede ser desarrollada en software, hardware, en web browser, pero
todas tienen que cumplir con la especificacin dada por Sun (Oracle en la actualidad), la cual est
descripta en [Lindholm & Yellin, 1999].
15
16
vinculadas con errores ocurridos dentro de la VM. Mientras que las primeras son
definidas como checked, es decir excepciones chequeadas.
OS Virtualization Layer Unit o Capa de virtualizacin del sistema operativo: este mdulo es
una capa de abstraccin que provee un punto de entrada para todos los componentes de la JVM
a los recursos del sistema operativo.
Memory Management Unit o Unidad de manejo de memoria: se encarga del manejo de la
memoria Heap y la memoria stack de la JVM. La memoria Heap es un rea de memoria
compartida por todos los threads donde se almacenan las instancias de las clases, es decir los
objetos, y las colecciones creados durante la ejecucin de la aplicacin Java. Mientras que la
memoria stack es el espacio de memoria dado a cada nuevo thread creado y es donde se
almacenan las variables locales y los resultados parciales durante la ejecucin de una funcin,
esta memoria juega un rol fundamental en la invocacin de mtodos y en la devolucin de los
resultados. Para ms detalle acerca del tema se puede consultar [Venners, 2000a]. Entre las
funcionalidades de este componente se encuentra la administracin de: la creacin de objetos, la
referencia entre ellos, la finalizacin y la eliminacin de los mismos de la memoria. Adems
contiene mecanismos de creacin de memoria rpida para la asignacin de reas de memoria
para operaciones internas de la JVM (Fast Allocation Mechanisms). Una parte principal de este
componente es el Garbage Collector:
o Garbage Collector: debido a que en el lenguaje de programacin Java, a diferencia de
otros lenguajes de programacin, no es responsabilidad del programador la liberacin
de la memoria que dej de ser utilizada, existe este componente encargado de hacerlo.
El Garbage Collector es el componente de la JVM encargado de revisar la memoria y
desalojar los objetos que ya no estn siendo utilizados. Existen diferentes estrategias de
implementacin de este algoritmo. Para ms detalle se puede consultar [Venners,
2000b].
System Services Unit o Unidad de servicios del sistema: est formada por componentes que
ofrecen servicios de alto nivel a las aplicaciones Java, entre los cuales se encuentran:
o Thread Management o Administracin de los threads: se encarga del manejo de la
creacin y finalizacin de los threads, as como tambin de los mecanismos de
sincronizacin de los mismos de acuerdo a la especificacin de la JVM [Lindholm &
Yellin, 1999] y a la especificacin del lenguaje Java [Gosling et al., 2005].
o Class Loader o Cargador de clases: es el responsable de la carga de las clases a
memoria. Dado el nombre de una clase, este componente se encarga de localizar la
definicin de la misma.
o Management and Debugging o Depurador y Administrador: incluye funcionalidades
para debugging (depuracin) de las aplicaciones y para la administracin de la JVM.
17
ambiente de ejecucin estandarizado que provee diversos servicios, por ejemplo el contenedor web
provee el servicio de atender los pedidos de los clientes, procesarlos y devolver las respuestas,
mientras que el contenedor EJB provee soporte para el manejo automtico de la transaccin y del ciclo
de vida de los componentes EJB, como tambin proveen una manera estndar de acceso a la base de
datos.
El contenedor web, tambin llamado contenedor Servlet/JSP, es responsable de manejar el
ciclo de vida de los servlets y las pginas JSP as como tambin de mapear las URLs a los respectivos
servlets.
Un servlet es una clase Java que se ejecuta del lado del servidor y, o bien implementa la
interfaz javax.servlet.Servlet o hereda de alguna de las clases ms convenientes para un protocolo
especfico, como por ejemplo la clase javax.servlet.http.HttpServlet. Reciben peticiones y devuelven
los resultados siguiendo el protocolo HTTP, siendo el formato ms comn de salida una pgina HTML
o un archivo XML.
Una pgina JSP o Java Server Pages es, desde el punto de vista funcional, similar a un servlet
ya que el contenedor la convierte en un servlet la primera vez que es ejecutada. Son un hbrido entre
HTML y Java que nacieron como una simplificacin del estndar Java Servlet. En sus primeras
versiones eran una combinacin de HTML con cdigo Java embebido luego, con el uso de XML,
surgieron las JSP Tag Libs (bibliotecas de etiquetas XML que permiten el acceso a cdigo Java
compilado) para luego pasar a ser el estndar JSTL (JSP Standard Tag Libraries), es decir que las
pginas JSP permiten mezclar HTML esttico con HTML generado dinmicamente.
Cuando un navegador invoca un aplicacin lo hace mediante el protocolo HTTP y quien recibe
dicha peticin es el servidor web, un componente del contenedor web1, quien es el responsable de
trasladar la solicitud al contenedor web propiamente dicho quien invoca el servlet correspondiente.
Si bien el funcionamiento de un contenedor web es algo complejo existen tres pasos
principales que realiza al recibir un pedido para un determinado servlet:
1. Crea un objeto ya sea de la interfaz javax.servlet.ServletRequest o de la interfaz
javax.servlet.http.ServletRequest, llamado request y lo llena con la informacin del pedido
que ser utilizada por el servlet, entre ella se encuentra: los parmetros, el header del
mensaje, los cookies, etc.
2. Crea un objeto de la interfaz javax.servlet.ServletResponse o de la interfaz
javax.servlet.http.ServletResponse, llamado response que ser utilizado por el servlet para
enviarle la respuesta del pedido al cliente.
3. Invoca el servlet correspondiente pasndole como parmetro los objetos creados. ste utiliza
el objeto request para tomar conocimiento del pedido realizado y luego de procesarlo
cargara en el objeto response la respuesta al mismo.
El contenedor EJB gestiona la ejecucin de los EJB. Los EJB o Enterprise Java Beans son
componentes escritos en Java que encapsulan, de una forma integrada, la lgica del negocio de una
aplicacin, es decir la funcionalidad que cumple con los objetivos principales de la misma [Jendrock et
al, 2010]. El contenedor, adems de manejar el ciclo de vida de estos componentes, se encarga de otras
1
20
21
entendindose como servicio entregado por un sistema como el comportamiento percibido por el
usuario del mismo.
En [Avizienis et al., 2004] proponen una definicin alternativa basada en el criterio que un
sistema puede fallar y usualmente lo hace, frente a lo cual surge el interrogante el sistema sigue
siendo confiable a pesar de haber ocurrido una falla? En base a esto, la definicin propuesta indica que
la confiabilidad es la capacidad de un sistema de evitar que ocurran fallas ms frecuentemente o con
ms gravedad que lo aceptable. Esta definicin provee un criterio para decidir si, a pesar de la falla
ocurrida, un sistema puede considerarse confiable. En el trabajo [Avizienis et al., 2000] puede
encontrarse los orgenes del concepto de confiabilidad.
El grado de confiabilidad de un sistema puede ser evaluado o expresado a travs de los
atributos del mismo listados a continuacin, muchos de los cuales pueden ser expresados como
funciones de probabilidad ([Verssimo & Rodrigues, 2001]):
Availability o disponibilidad: indica el grado en que el sistema se encuentra operable y puede
ser expresado como la probabilidad que el sistema se encuentre operativo en un determinado
tiempo.
Realiability o exactitud: se refiere a la continuidad en el correcto funcionamiento del sistema y
puede ser expresado como la probabilidad que el sistema no falle durante el perodo de
produccin del mismo. Para sistemas de perodo de produccin continuo, este atributo puede ser
expresado como el tiempo medio entre fallas o el tiempo promedio hasta que se produzca una
falla.
Safety o seguridad: indica el grado de ausencia de consecuencias catastrficas, en los usuarios
y en el ambiente, cuando el sistema falla. Puede expresarse como la probabilidad condicional de
que, dada una falla, la misma no sea catastrfica.
Integrity o integridad: indica la ausencia de alteraciones en el sistema.
Maintainability o mantenibilidad: mide la capacidad de experimentar modificaciones y
reparaciones del sistema y puede expresarse como el tiempo necesario para recuperarse.
Algunos de estos atributos pueden no ser necesarios en todos los sistemas, pero cuando lo son
deben ser considerados en un sentido probabilstico y no determinstico, ya que es inevitable la
presencia u ocurrencia de fallas.
Failure o Falla
Se dice que se produce una falla cuando el sistema no brinda su servicio en forma correcta, ya
sea porque no cumple con la especificacin funcional, es decir la descripcin acordada del servicio
esperado, o porque la cumple pero la misma no es correcta, lo que significa que no es aceptable para el
usuario.
22
Las fallas pueden ser calificadas de acuerdo a los siguientes puntos de vista:
Dominio: segn el punto de vista del dominio del efecto del dao provocado por la falla se
puede tener dos tipos:
o las que afectan al contenido de la informacin entregada, las cuales son llamadas
content failure o fallas de contenido.
o las que afectan al tiempo de respuesta del sistema, llamadas timing failures o fallas
temporales.
Puede suceder el hecho que una falla sea de ambos tipos, es decir que afecte el contenido de la
informacin entregada y a la vez los tiempos de respuesta del sistema. En este caso tenemos dos
escenarios posibles: que el sistema deje de funcionar, ante lo cual estamos frente a una falla por
cada o halt failure o que siga funcionando pero de manera errnea, siendo la sucedida una falla
llamada falla errtica o erratic failure.
Deteccin: cuando el dao producido por la falla es detectado e indicado al usuario, estamos en
presencia de signaled failures o fallas sealizadas, en caso contrario se la llama unsigned
failures o fallas no sealizadas.
Consistencia: desde el punto de vista de como los usuarios del servicio brindado por el sistema
perciben al mismo en presencia de una falla, podemos tener los siguientes casos:
o el servicio del sistema es percibido idnticamente por todos los usuarios, en cuyo caso
estamos en presencia de una falla consistente o consistent failure.
o algunos o todos los usuarios perciben diferentes servicios por parte del sistema, en este
caso de dice que la falla es inconsistente o inconsistent failure, este tipo de fallas
tambin es conocido como Byzantines failures o falla Bizantinas.
Consecuencias: desde el punto de vista de las consecuencias de la falla producida sobre el
entorno del sistema, se pueden definir dos niveles de severidad lmites, en relacin al beneficio
de proveer el servicio en ausencias de fallas y las consecuencias de la ocurrencia de las mismas
o minor failures o fallas menores, en el caso donde los costos del dao son similares al
beneficio de proveer el servicio sin fallas.
o catastrophic failures o fallas catastrficas, para el caso donde el costo de las
consecuencias es mucho mayor.
Error
Un error es la parte del estado del sistema que es susceptible de producir una falla, es decir que
una falla es el efecto externo observable del error. Es por eso que fallas similares pueden ser
ocasionadas por diferentes errores.
Que un error pueda conducir a la presencia de una falla depende de dos factores:
la estructura del sistema, en especial de la redundancia que exista.
el comportamiento del sistema, la parte del mismo que contiene el error puede nunca ser
necesitada o ejecutada para brindar el servicio o un error puede ser eliminado antes de que
23
produzca la falla.
Se dice que un error es detectado si su presencia es indicada por algn mensaje indicativo o se
percibe alguna seal del mismo, si est presente pero no es detectado se dice que el error es latente.
Una forma de clasificar los errores es de acuerdo a las fallas que ellos pueden causar.
Fault o Defecto
Un defecto es la causa de un error, es decir que un error es una manifestacin de un defecto en
el sistema. Se dice que un defecto est latente cuando no genera una falla y se dice que se activa
cuando la causa.
Todos los defectos que pueden afectar a un sistema durante su ciclo de vida son clasificadas
segn los siguientes puntos de vista:
Punto de vista
Defectos
defectos de desarrollo
defectos operacionales
internos
externos
Segn la dimensin
defectos de hardware
defectos de software
Segn el objetivo
maliciosos
no maliciosos
Segn la intensin
intencionados
no intencionados
Segn la capacidad
defectos accidentales
defectos causados por incompetencia
Segn su persistencia
permanentes
transitorios
24
25
Fault handling o manejo de los defectos: evitar que los defectos se activen
nuevamente a travs de los siguientes pasos:
1. Diagnstico del defecto: se identifican las causas del error, registrando
su ubicacin y tipo.
2. Aislamiento del defecto: luego de identificar las causas del error se
aslan, lgica o fsicamente, los componentes defectuosos para evitar que
los mismos participen en la entrega del servicio del sistema.
3. Reconfiguracin del sistema: luego del aislamiento de los componentes
defectuosos se realiza la reconfiguracin del sistema, que puede consistir
en la conmutacin a componentes de repuesto o en la reasignacin de
tareas entre los componentes que permanecen sanos.
4. Reinicializacin del sistema: por ltimo, se reinicia el sistema y se
chequea, actualiza y graba la nueva configuracin actualizando las tablas
y registros del mismo.
27
Fault removal o remocin de fallas: esta tcnica puede aplicarse tanto en la fase de desarrollo
como en la de produccin.
o En la fase de desarrollo consiste de tres pasos:
1. Verificacin: se chequea que el sistema cumpla determinadas propiedades
llamadas condiciones de verificacin.
2. Diagnstico: si la verificacin resulta negativa, es decir que no se cumplen las
condiciones de verificacin, se pasa a diagnosticar los defectos que hacen que no
se cumplan dichas condiciones.
3. Correccin: luego del diagnstico se pasa a realizar las correcciones necesarias.
o Para la fase de produccin las tcnicas a aplicar pueden ser:
Fault forecasting o prediccin de fallas: esta tcnica se realiza mediante una evaluacin del
comportamiento del sistema con respecto a la ocurrencia o activacin de defectos. Esta
evaluacin tiene dos formas:
o Evaluacin cualitativa u ordinal: identificar, clasificar y categorizar los tipos de fallas
o la combinacin de eventos que pueden generar una falla en el sistema.
o Evaluacin cuantitativa o probabilstica: evaluar en trminos de probabilidades la
medida en que algunos de los atributos de confiabilidad son satisfechos.
28
29
transferencia del estado del sistema a determinados recursos o llevar el sistema hasta un estado
conocido.
Time constants o constantes de tiempo: se determinan los tiempos que tiene el sistema para
responder ante una falla. En caso de defectos intermitentes el proceso de deteccin-respuestarecuperacin debe ser ms rpido que el perodo de arribo de los defectos, para as evitar la
cada del sistema. La constante de tiempo de ocurrencia de los defectos puede determinar la
frecuencia en la cual se deben realizar los checkpoint.
Assurance o garanta: garantas que debe mantener el sistema durante y despus del proceso de
recuperacin ante la ocurrencia de una falla: garantizar el tiempo transcurrido entre el momento
en que ocurre el defecto y el momento en el cual se lo detecta, mantener ciertas garantas
necesarias durante el modo de operacin degradado y durante la operacin de recuperacin, etc.
30
System scope o alcance del sistema: alcance del sistema al cual se desea aplicar el mecanismo
de Self-Healing: un nico componente, una parte del sistema, todo el sistema, etc.
31
El nfasis de toda aplicacin de monitoreo es el de ser pro activa, por ejemplo ser capaz de
alertar al administrador de posibles problemas antes que los mismos se hagan evidente a los usuarios.
Hay dos consideraciones claves que determinan cuan pro activa es una aplicacin de monitoreo: el
grado y amplitud de mtricas que provee y la habilidad de configurar automticamente los umbrales de
las mtricas en base a experiencias adquiridas por la herramienta. Algunas contienen la inteligencia
suficiente para poder analizar el estado del sistema y el de sus componentes e identificar la posible
causa de un problema.
Existen distintos aspectos a monitorear en una infraestructura de IT, pudiendo cada una de las
aplicaciones de monitoreo estar orientadas a uno slo o a ms de uno de ellos, siendo estos los
siguientes:
Red: algunas permiten conocer la disponibilidad de la red as como tambin los niveles de
trfico de la misma en distintas ubicaciones. Mientras que otras ms completas ofrecen una vista
de la topologa de la red mostrando sus interconexiones, y algunas ms especializadas permiten
ver el flujo de trfico sobre la misma, permitiendo as conocer que protocolos estn ocupando el
mayor ancho de banda, entre otras cosas.
32
33
34
Habiendo presentado los conceptos generales necesarios para comprender el desarrollo del
presente trabajo, se expondr ahora un relevamiento del estado del arte de tcnicas y mtodos de
relevancia en relacin a los objetivos planteados en la Seccin 1.4 -Objetivos.
Por ello, se har foco en:
Los principales enfoques de Self-Healing.
Una seleccin de trabajos previos relacionados con i) los enfoques de Self-Healing antes
mencionados y ii) las tecnologas del dominio de aplicacin elegido: la JVM, un Servidor de
Aplicaciones Java, y su correspondiente entorno de hardware.
Las tcnicas ms modernas disponibles para monitoreo y actuacin relacionadas al dominio de
aplicacin mencionado.
Se espera obtener una visin integral que permita tomar mejores decisiones de diseo para
nuestra propuesta de solucin en el Captulo 4: Solucin Propuesta e Implementacin
36
El enfoque propuesto por Garlan y Schermerl utiliza modelos de arquitectura del sistema en
tiempo de ejecucin, representados como grafos de componentes interactuantes, donde cada nodo
del grafo es llamado componente y representa cualquier elemento del sistema, y los arcos son
llamados conectores y representan los caminos de interaccin entre los componentes. El diagrama de
dicho enfoque se muestra en la Figura 7 (obtenida de [Garlan & Schmerl, 2002]), donde se observa el
esquema de funcionamiento: el sistema (1) es monitoreado para observar su comportamiento (2). Los
valores obtenidos del monitoreo son abstrados y relacionados con las propiedades del modelo de
arquitectura (3), si existen cambios en estas propiedades se procede a una evaluacin para determinar
si el sistema se encuentra operando dentro del rango de valores aceptables (4), de no ser as se pone en
marcha un mecanismo de reparacin (5) para determinar las acciones necesarias para adaptar la
arquitectura del sistema, las cuales, una vez determinadas, son propagadas al mismo (6).
Figura 7 - Esquema del enfoque basado en modelos de arquitectura [Garlan & Schmerl, 2002]
37
que comparten ciertas propiedades semnticas y estructurales y est definido por: los componentes y
tipo de conectores, las restricciones sobre la composicin de dichos componentes, sus propiedades y
los anlisis que pueden realizarse sobre el sistema. Rainbow ampla este concepto incorporando
atributos dinmicos del sistema: las operaciones de adaptacin que pueden realizarse sobre los
elementos del sistema para alterar su configuracin y las estrategias de adaptacin que pueden
aplicarse para sacarlo de un estado indeseable. Estos atributos determinan el estilo de adaptacin.
39
40
El control de Sistemas de Software en tiempo real es una disciplina joven que aplica tcnicas
clsicas de control sobre Sistemas Informativos considerando a stos ltimos como los objetos de
control. El objetivo de control suele ser mantener las mtricas de performance (rendimiento) dentro de
41
rangos aceptables especificados por requerimientos de calidad de servicio. Las acciones de control son
eventos discretos que modifican la asignacin de los recursos disponibles a las entidades que compiten
por ellos. Si bien estos sistemas de control son tpicamente diseados con tcnicas adhoc (i.e. sin
seguir ninguna metodologa formal), la Teora de Control es cada vez ms utilizada por su robustez
terica y metodolgica [Arzen et al, 2006] que permite garantizar propiedades de performance y
estabilidad del sistema controlado ante condiciones impredecibles.
Problemas de los Sistemas Informticos que pueden ser abordados por la teora de control:
Traduccin de los requerimientos de SLOs (Service Level Objectives) deseados en los valores
necesarios para casa uno de los efectores mediante los cuales el sistema es controlado (e.g.
tamao de pool).
Optimizacin del uso de algn recurso (e.g. aplicacin la tcnica de balanceo de carga).
Cumplimiento de los SLAs (Service Level Agreement) establecidos, an en presencia de alta
carga de trabajo.
Para la aplicacin de la teora de control en los Sistemas Informticos existen algunos
obstculos que se deben afrontar, a diferencia de otras ingenieras en donde dicha teora se encuentra
madura [Hellerstein, 2003].
El primer paso es la seleccin de la/s entrada/s de control y de la/s salida/s del sistema. Como
entrada de control se suele utilizar alguno/s de los parmetros que exponen los sistemas para su
optimizacin de acuerdo a las necesidades del negocio. Los parmetros seleccionados deben poder ser
modificados dinmicamente y su efecto debe ser inmediato, es decir no deben necesitar del reinicio del
sistema para que el nuevo valor surta efecto. Por otro lado, deben afectar significativamente a las
mtricas elegidas como salidas del sistema. Con respecto a la seleccin de las salidas del sistema,
deben ser elegidas de manera tal que sean significativas y que a la vez puedan ser medidas.
Por otro lado, el diseo sistemtico de controladores requiere un modelo de la relacin entre la
entrada y la salida del sistema, al cual se lo llama modelo del sistema y es la base del diseo del
controlador. La construccin de este modelo es uno de los principales desafos para la aplicacin de
forma satisfactoria de la teora de control a los Sistemas Informticos. Debido a que en dichos sistemas
no suele estar claramente definida la relacin entre las entradas de control y la salida del sistema.
Segn explica Hellerstein en [Hellerstein, 2003], existen cuatro enfoques a seguir para su
construccin:
Utilizacin del mtodo numrico llamado ajuste a curvas: enfoque puramente emprico que
genera modelos estticos.
Modelar al sistema utilizando la metodologa de caja negra: se requiere elegir un punto de
operacin y, en base a la realizacin de varios experimentos, desarrollar un modelo emprico,
generalmente utilizando los modelos ARX (Auto Regressive with Exogenous input).
Utilizacin de procesos estocsticos, e.g. teora de colas: provee una manera de calcular los
efectos producidos por las entradas de control del estilo de tamao de buffers, cantidad, nmero
de servidores, etc, en las salidas controladas que son del tipo tiempos de respuesta, tasa de
transferencias, etc, asumiendo la distribucin de los tiempos de llegada de los pedidos y de la
velocidad con la cual los servicios pueden atenderlos.
42
Construccin del modelo del sistema en base al conocimiento de algunas de las caractersticas
especficas del mismo: slo puede ser aplicado cuando se tiene conocimiento de dichas
caractersticas.
Respecto a los sensores tambin existen algunos posibles problemas a enfrentar al aplicar teora
de control:
Intervalos de muestreos distintos o no sincronizados al tomar mtricas desde distintas fuentes,
hecho que frecuentemente resulta en la prdida de datos.
Mtrica a controlar no disponible o de difcil o costosa obtencin.
La operacin del sensor no debe interferir significativamente en el funcionamiento del sistema,
i.e. no debe producir una sobre carga o interferencia en el normal funcionamiento del sistema.
Demora en la obtencin de la informacin por parte del sensor, debido a que la tarea de
monitoreo suele ser de menor prioridad y puede ser relegada cuando existe otra de mayor
prioridad. Esto provoca que el controlador no reciba la informacin en el tiempo necesario para
actuar.
Uno de los principales problemas existente al aplicar teora de control a los
Sistemas Informticos radica en que el conjunto de los efectores disponibles tiene una relacin algo
compleja con la salida controlada y tienen un efecto indirecto en la misma.
Existen varios trabajos donde se ha aplicado teora de control a Sistemas Informticos
[Patikirikorala et al., 2012]. En la presente Tesis se selecciona como gua a [Hellerstein, 2003] y
[Hellerstein et al, 2004, 2005] y en particular la aplicacin especfica descripta en mayor detalle en
3.2.4 - Teora de control aplicada a un servidor Web.
3.2.1 - JVMMon
En [Orlando & Russo, 2006] los autores presentan una infraestructura de monitoreo de la
JVM, llamada JVMMon y cuya arquitectura se muestra en la Figura 11, que mantiene la evolucin
del estado de la misma en conjunto con los errores y fallas producidas, a travs de un proceso de tres
pasos:
1. Mediante un agente de monitoreo, desarrollado utilizando JVMTI y ByteCode
Instrumentation (BCI), se interceptan los eventos generados dentro de la JVM y se recolecta
los datos acerca de su estado.
43
2. Luego existe un demonio que se ejecuta en una JVM separada de la monitoreada que recibe y
procesa los datos recolectados por el agente de monitoreo y enva al recolector de datos las
fallas producidas y los cambios relevantes en el estado de la JVM.
3. Por ltimo se tiene el recolector de datos que almacena la informacin recibida del demonio
en una base de datos, lo que permite realizar un anlisis on-line y off-line de la evolucin del
estado de la JVM monitoreada.
Adicionalmente se mantiene un archivo de log donde se registra cada evento generado desde la
JVM, que es utilizado para reconstruir su estado cuando la misma se cae.
El prototipo que desarrollaron fue evaluado por sus autores midiendo el costo introducido en el
tiempo de ejecucin y la cantidad de memoria utilizada durante su ejecucin (memory footprint). La
evaluacin fue llevada a cabo ejecutando, tanto con la JVM en modo cliente como en modo servidor,
las aplicaciones del benchmarks SPEC JVM98 [SPEC JVM98] y un Productor/Consumidor
desarrollado para tal fin. Los resultados de dicha evaluacin fueron los siguientes: en lo relacionado
con el uso de memoria no encontraron ningn impacto notable en el Heap de la JVM, mientras que en
lo referido al overhead (sobrecarga) introducido los resultados variaron dependiendo de la
caracterstica de cada aplicacin, obtenindose valores razonables para los programas que no
consumen mucha memoria mientras que para los que si lo hacen resultaron en valores altos, desde 3 a
8 veces mayor al tardado sin la infraestructura.
Por otro lado realizaron una comparacin de la sobrecarga introducida por JVMMon contra la
generada por HProf [HPROFSUN]: obtuvieron como resultado que HProf en general produce una
sobre carga mucho mayor que JVMMon y al igual que con este ltimo, el monitoreo del Heap es el
principal cuello de botella.
Por ltimo cabe mencionar que, segn los autores, JVMMon est siendo utilizada para la
44
3.2.2 - Aqua
En [Diaconescu & Murphy, 2005] y en [Diaconescu & Murphy, 2003] se presenta un
framework llamado AquA, de Automatic Quality Assurance, que permite a los sistemas basados en
componentes adaptarse de manera automtica a los cambios en su ambiente de ejecucin, con la
finalidad de optimizar su rendimiento. Dicho framework est basado en el uso de componentes
redundantes, se utilizan distintas versiones de cada uno de los componentes del sistema que se
quieren adaptar, proveyendo la misma o similar funcionalidad pero optimizadas para distintas
caractersticas del entorno de ejecucin. La diferencia entre las distintas versiones de un componente
puede ser ya sea a nivel de configuracin como a nivel de implementacin. El conjunto de los
componentes redundantes que proveen similar funcionalidad se lo llama grupo redundante.
La funcionalidad bsica del framework es: (1) monitorear el funcionamiento del sistema, en lo
que respecta a su rendimiento y disponibilidad y a las caractersticas de su entorno de ejecucin; (2)
analizar las mtricas recolectadas para detectar algn cambio considerable en el entorno o en el
rendimiento del sistema; (3) en caso de que as sea, adaptar el sistema a las nuevas caractersticas del
entorno, seleccionando el o los componente/s (uno de cada grupo) redundante que ms se adecue/n a
las nuevas condiciones optimizando el funcionamiento del sistema. En [Diaconescu & Murphy, 2003]
se describe un escenario simple de utilizacin del framework.
45
La Figura 13, obtenida de [Diaconescu & Murphy, 2005], muestra la integracin del framework
con el JBoss donde se ve que existe una instancia del framework por cada componente manejado, es
decir por grupo redundante, cada una de ellas realiza el mismo ciclo de funcionalidades: monitoreo y
deteccin (M), evaluacin y decisin (E) y activacin del componente (A).
Los componentes redundantes utilizados para la prueba de AQuA J2EE son los EJB que forman
parte de la aplicacin Dukes Bank, los cuales estn desarrollados de manera tal que mantienen su
estado mientras dure la sesin del usuario que accedi a los mismos. Las distintas versiones de los EJB
se difieren en el valor del parmetro de configuracin max-bean-age, que indica la cantidad de tiempo
que un EJB inactivo es mantenido en la memoria cache antes que el mismo sea desalojado.
46
AQuA J2EE se reconfigura dinmicamente segn la carga del sistema: para alta carga es ms
conveniente un valor alto para el parmetro max-bean-age, ya que en estos casos es frecuente que los
EJBs se encuentren inactivos por un tiempo largo pero aun as estn siendo utilizados, porque se
encuentran esperando por la respuesta de otro EJB o por la liberacin de algn recurso. Con poca carga
es ms conveniente un valor bajo del parmetro en cuestin, en caso contrario los EJB que ya no son
necesarios igualmente permanecern inactivos mucho tiempo en el cache, produciendo as un consumo
de memoria ineficiente.
Para ms detalle acerca de la implementacin y los resultados de las pruebas puede consultarse
[Diaconescu, 2006].
47
Para entender las extensiones realizadas a Rainbow se comentarn los siguientes componentes
de la Figura 14:
Target System: sistema a adaptar.
Probes: componentes que obtienen informacin del sistema a adaptar necesaria para la auto
reparacin del mismo.
Gauges: componentes encargados de interpretar la informacin recolectada por los Probes y
traducirla a pares del tipo <Propiedad,Valor>, donde Propiedad se refiere al nombre de una
propiedad correspondiente a un componente o conector de la arquitectura del sistema a adaptar y
Valor es el nuevo valor que poseer dicha propiedad .
Gauge Coordinator: coordina la informacin provista por todos los Gauges y notifica al
Rainbow Model de los cambios en el sistema en ejecucin.
Rainbow Model: actualiza los valores de las propiedades de los componentes, conectores,
subsistemas o sistemas del modelo de arquitectura y detecta violaciones a las restricciones o
invariantes configuradas en dicho modelo.
Architecture Evaluator: consulta peridicamente al Rainbow Model por ocurrencia de
violaciones en el modelo de arquitectura y en caso de existir alguna dispara el mecanismo de
adaptacin invocando al Adaptation Manager.
Adaptation Manager: ejecuta la estrategia de reparacin ms adecuada para dejar al sistema en
48
49
50
Arco Iris incorpor la posibilidad de priorizar escenarios asignndole a cada uno prioridades
relativas, de esta forma al momento de elegir una estrategia de auto reparacin la seleccionada no
comprometa alguna otra funcionalidad del sistema considerada ms importante.
51
52
En la seleccin de las entradas de control los autores encontraron un obstculo: ninguno de los
parmetros de configuracin del Apache pueden ser modificados dinmicamente. Esto requiri
modificar el cdigo fuente de Apache para permitir que KeepAlive y MaxClients sean manipulados sin
requerir reinicios, permitiendo su control en tiempo real.
53
Los autores eligieron construir, utilizando los datos recolectados mostrados en la Figura 18, un
modelo ARX lineal de primer orden de la forma dada por la ecuacin de la Figura 19. All, los
parmetros A y B son matrices de 2x2 que fueron estimadas utilizando el mtodo de regresin por
mnimos cuadrados.
+ = . + . : = [
] , = [ ],
Figura 20 - Resultados de las evaluaciones: (a) y (b) utilizando prediccin de un paso para CPU y MEM
respectivamente. (c) utilizando prediccin multipaso
Los autores concluyeron que el modelo predice satisfactoriamente la respuesta del sistema,
especialmente de la salida controlada MEM donde se observa poca variabilidad, pero que sin embargo,
existen regiones en las cuales la precisin del modelo se degrada, especialmente cuando KA=6 y
MC=800. Se observa que el modelo es ms preciso cerca del centro de la regin de operacin, KA=11
y MC=600, y menos preciso en los bordes de dicha regin o fuera de ella.
54
+ = . + .
=
55
56
57
El depurador que se desarrolle utilizando esta arquitectura puede construirse sobre cualquiera
de las capas de JDPA indicadas eligiendo la que ms convenga segn el caso del que se trate, es decir
puede ser hecho sobre JDI que es la capa de mayor nivel de abstraccin como as tambin construirse
sobre JDWP o JVMTI, dependiendo de las necesidades especficas del mismo. Para mayor
informacin se puede consultar [JPDA].
58
funcin callback a una funcin que es pasada como parmetro a otra funcin y que es ejecutada
cuando esta ltima es invocada.
memoria asignada.
Los agentes pueden ser escritos en cualquier lenguaje nativo que soporte la convencin de
llamadas de C y las definiciones de C o C++, suelen ser programas pequeos y estar controlados
mediante un proceso externo que implementa la mayor parte de la funcionalidad de la herramienta de
monitoreo, de esta forma no interfiere ni genera sobrecarga en la aplicacin monitoreada.
Al estar JVMTI basada en la habilitacin de las propiedades de las cuales un agente est
interesado en utilizar, el impacto en la performance o rendimiento de las aplicaciones por la
introduccin del agente puede ser reducido seleccionando solamente las capacidades que se necesiten,
a diferencia del API JVMPI que era ms que todo un enfoque de todo o nada.
Bytecode Instrumentation
JVMTI provee soporte para BCI a travs de las siguientes maneras:
Static Instrumentation o instrumentacin esttica: la clase es instrumentada antes de ser
cargada en la JVM, i.e. lo que se instrumenta es el archivo .class. Este mtodo es bastante
impracticable y en general un agente no puede conocer el origen del archivo que ser cargado.
Load-Time Instrumentation o instrumentacin en tiempo de carga: la instrumentacin se
realiza en el momento en que clase se carga en la JVM, cuando el archivo se carga se enva al
agente los bytecodes para que sean instrumentados. Este mecanismo de instrumentacin es ms
eficiente.
Dynamic Instrumentation o instrumentacin dinmica: la clase instrumentada es una clase ya
cargada en la VM, en este caso es posible modificarla varias veces y hasta volver a llevarla a su
estado original. Este mecanismo permite instrumentacin que vara durante la ejecucin de la
aplicacin.
La instrumentacin puede ser restringida a porciones de cdigos y puede tambin ser
condicional. Cabe destacar que a causa que la instrumentacin BCI consta de agregar bytecodes, la
JVM es capaz de optimizar el cdigo instrumentado y de esta forma minimizar el overhead (sobre
carga) introducido por el agente.
59
compilacin del mismo y no pueden ser modificados en tiempo de ejecucin. En [SUN, 2008b]
se puede encontrar un ejemplo de implementacin de este tipo de MBean.
Dynamic MBean: debe implementar una determinada interfaz y exponer su interfaz de
administracin en tiempo de ejecucin, se lo utiliza para instrumentar recursos en tiempo de
ejecucin. Los mtodos toman entre sus argumentos: el nombre del atributo cuyo valor se desea
obtener, para la lectura de un atributo o el nombre del atributo y el nuevo valor, para el caso de
escritura.
Open MBean: es un Dynamic MBean donde los tipos de datos utilizados para los atributos,
constructores y operaciones estn restringidos a un conjunto limitado [Kreger et al, 2002a]. Es
posible utilizarlos remotamente sin necesidad de importar clases especficas.
Model MBean: es un Dynamic MBean genrico y altamente configurable en tiempo de
ejecucin. Pueden ser usados para instrumentar dinmicamente casi cualquier recurso ya que
proveen una clase MBean genrica con un comportamiento por defecto. No hay que
implementarlo sino que configurarlo indicndole las caractersticas del recurso instrumentado a
travs del uso de metadatas. Se diferencia de los otros Dynamic MBean en que este tipo es
creado y mantenido por el MBean Server [Kreger et al, 2002b].
MXBean: es un tipo de MBean que referencia nicamente a un conjunto predefinido de tipos de
datos llamados Open Types, definidos en el paquete javax.management.openmbean, todo
atributo ser mapeado a los mismos siguiendo las reglas que se encuentran en la especificacin
de los MXBeans [MXBEANESP]: cualquier cliente podr ser capaz de utilizarlo sin necesidad
de que el mismo acceda a clases especficas del modelo. Sigue las mismas convenciones y se
define de manera similar a los Standard MBeans. Fueron introducido en la J2SE 5 pero en ella
se encontraban disponibles slo los MXBeans predefinidos que permiten monitorear la JVM
(3.4.3.2 - Platform MBeans), mientras que en la J2SE 6 se incorpor la posibilidad de poder
definir los propios. En [SUN, 2008b] se puede encontrar un ejemplo de implementacin.
61
MXBean
ClassLoadingMXBean
Class Loader
CompilationMXBean
Compiler
Memoria
y MemoryMXBean
OperatingSystemMXBean Sistema Operativo donde se encuentra ejecutando la JVM
RuntimeMXBean
ThreadMXBean
62
informacin especificada por la JSR 163 (JavaTM Platform Profiling Architecture) siendo el MIB
que la describe el JVM-MANAGEMENT-MIB [JVMMIB]. Este agente, construido sobre las APIs de
monitoreo y administracin de la plataforma Java ([SUNMONandMAN]), no es extensible, slo puede
exponer los datos que estn definidos en el MIB indicado, si se desea exhibir informacin propia se
debe escribir un nuevo MIB, si es que no existe algn estndar que ya lo haga y agregar a la JVM un
nuevo agente que lo exponga, lo cual requiere un cierto conocimiento de SNMP. Por otro lado, el
poder de expresin de SNMP es limitado siendo la descripcin de datos complejos bastante engorrosa.
Para administrar la JVM a travs de SNMP es necesario contar ya sea con una consola de
administracin o con un API que entienda dicho protocolo, para tal fin Sun provee el API Java
Dynamic Management Kit, existen otras herramientas y APIs, tanto open source como comerciales
[SNMPLINKS]. En [SNMPJVM] se puede encontrar ms informacin acerca del monitoreo de la
JVM a travs de SNMP.
64
65
Todo este mecanismo sucede sin que la/s aplicacin/es Java que se estn ejecutando en el
servidor tengan conocimiento que la JVM, el servidor JBoss y su entorno estn siendo monitoreados.
Con este esquema, pueden configurarse en el Monitor Global que mtricas del entorno, del
servidor de aplicaciones y de la JVM se desea recolectar, segn el tipo de fallas deseen prevenirse.
El uso de un control externo posibilita su intercambio fcilmente as como tambin la
incorporacin de nuevos aspectos a controlar, lo que da lugar a la posibilidad de aplicar distintas
estrategias de control sin necesidad de modificar el resto de los componentes de la infraestructura,
66
67
La arquitectura del JBoss est compuesta por el microcontainer y por un conjunto de servicios
con funcionalidades especficas, siendo el primero el componente principal de la misma y es quien
integra a los servicios que forman parte del JBoss AS.
El microcontainer no es ms que un framework de inyeccin de dependencias, es decir que
inyecta los objetos necesarios segn las relaciones plasmadas en los archivos de configuracin. Los
servicios estn desarrollados usando POJOs2 (Plain Old Java Objects), es decir mediante clases Java
simples y que no dependen de ningn framework en particular [Jamae & Johnson, 2009a]. Esta
arquitectura posibilita el escalamiento del servidor mediante la adhesin de nuevos servicios as como
tambin permite desactivar los servicios que no se desean utilizar, obtenindose as un servidor de
aplicaciones personalizado conteniendo nicamente los servicios necesarios segn las necesidades del
negocio.
El trmino POJO fue creado por Martin Fowler, Rebecca Parsons y Josh Mackenzie en el 2000 con el objetivo de
revalorizar la programacin simplemente orientada a objetos en contraposicin al uso de frameworks cada vez ms
complejos.
68
4.2 - Monitor
Para la eleccin de la aplicacin de monitoreo a utilizar como monitor de la infraestructura, se
tuvieron en cuentas los siguientes requerimientos:
Debe ser open source o estar bajo alguna licencia libre tipo GNU GPL [GGPL].
Debe permitir el monitoreo del servidor de aplicaciones, de la JVM y del ambiente en donde
ellos se estn ejecutando.
Debe permitir la correlacin temporal de las mtricas recolectadas.
Debe persistir las mtricas obtenidas en una base de datos y adems es deseable que las
mismas puedan ser enviadas al sistema de control directamente, es decir sin tener que acceder
a la base de datos ni al disco rgido.
De las aplicaciones investigadas, openNMS [OPENNMS], Nagios [NAGIOS], Zabbix
[ZABBIX] y Zennos [ZENNOS], se eligi utilizar Nagios, debido a que su arquitectura, permite
extenderlo y/o realizarle las modificaciones necesarias para cumplir con los requerimientos
mencionados, sin necesidad de tocar los componentes core del mismo, es decir los componentes que
contienen la funcionalidad bsica del monitoreo. Por otro lado existen una gran variedad de plugins
que extienden sus funcionalidades como por ejemplo el almacenaje de las mtricas en distintas base de
datos (MySQL, rrdb, etc), generacin de grficos, interfaz grfica para hacer su configuracin ms
amigable, etc. Cabe destacar tambin que cuenta con muy buena documentacin, tanto oficial como de
la comunidad lo que permite una rpida curva de aprendizaje del producto.
Por otro lado es importante recalcar que Nagios es una aplicacin madura altamente utilizada
en el mercado por parte de importantes empresas, como puede verse en [NAGIOSUSERS] y de la cual
se han escrito numerosos libros, algunos de los cuales son listados en [NAGIOSBOOKS].
4.2.1 - Nagios
Nagios es una herramienta de monitoreo open source o de cdigo abierto altamente utilizada en
el mercado. Naci en 1999 bajo el nombre de NetSaint que debi ser cambiado en el 2002 a causa de
coincidir con una marca comercial existente, tomando entonces el nombre de Nagios. Actualmente
adems de la versin open source denominada Nagios Core, existe una versin comercial basada en
esta ltima, llamada Nagios XXI. En los prximos prrafos se va a profundizar en la arquitectura de la
versin Nagios Core que fue la utilizada en el presente trabajo.
4.2.1.1 - Arquitectura
Nagios est construido sobre una arquitectura de agentes/servidor, es decir que est conformado
por varios agentes que recolectan informacin de los hosts remotos que se quieren monitorear y se la
envan a un proceso que funciona como servidor y que centraliza la recepcin y procesamiento de los
datos recolectados. En la Figura 26 se encuentra el esquema de la arquitectura de Nagios, donde puede
observarse los distintos componentes del mismo:
69
70
4.2.1.2 - Plugins
Nagios, a diferencia de otras aplicaciones de monitoreo, no incluye ningn mecanismo interno
para chequeo de estado de hosts y servicios ni de recoleccin de mtricas, sino que se basa en
programas externos, llamados plugins que realizan dicha tarea. Estos programas pueden ser ejecutables
o scripts. Cuando Nagios lo cree conveniente ejecuta estos plugins, quienes realizan la accin
correspondiente y devuelven el resultado a Nagios para que lo procese y, en caso que corresponda,
tome alguna accin necesaria. De esta forma los plugins actan como una capa de abstraccin entre la
lgica de monitoreo que se encuentra en Nagios y los recursos que son monitoreados
[NAGIOSCOREPLUGINS].
Todo script y programa ejecutable que se quiere que funcione como plugin de Nagios debe
cumplir como mnimo con los siguientes requisitos:
Devolver un cdigo que indique el estado del host o servicio que monitorea, Nagios determina
su estado segn este cdigo devuelto siguiendo el Listado 2 (para ms detalle consultar
[NAGIOSPLUGINAPI] o [NAGIOSPLUGINDEV]):
Listado 2 - Cdigo de retorno de los plugins de Nagios
Cdigo
de
retorno
Estado para
los servicios
Descripcin
OK
UP
WARNING
CRITICAL
DOWN/UNREACHABLE
UNKNOWN
DOWN/UNREACHABLE
Devolver a STDOUT al menos una lnea de texto que describa el estado devuelto a travs del
cdigo de retorno.
Adems del cdigo de retorno y de la descripcin del estado del host o servicio monitoreado, se
puede obtener informacin adicional acerca del funcionamiento de un plugin, esta informacin es
llamada performance data y puede ser de dos tipos (ver [NAGIOSPERFDATA] para ms detalle):
Informacin interna relacionada con la ejecucin del monitoreo, como por ejemplo el nmero de
71
segundos que dur su ejecucin. Esta informacin est disponible para todos los plugins.
Mtricas del host o servicio monitoreado, esta informacin es opcional pero si se encuentra debe
ser retornada a continuacin de la lnea de texto obligatoria y separada de la misma con "|". Las
mtricas retornadas deben respetar el siguiente formato:
'etiqueta'=valor[UOM];[warn];[crit];[min];[max] donde:
o [warn];[crit]: son los valores de los umbrales de alerta y crtico de la mtrica.
o [min];[max]: son los valores mnimos y mximos posibles de la mtrica.
o UOM: es la unidad de medida de la mtrica.
Este ltimo tipo de performance data puede ser enviada a aplicaciones externas para su
procesamiento. Esto hace que pueda elegirse libremente que aplicacin o aplicaciones se quiere utilizar
para el tratamiento y/o almacenamiento de las mtricas. Esta flexibilidad es una de las principales
ventajas de Nagios sobre las otras aplicaciones de monitoreo investigadas, ya que permite realizar
personalizaciones sin tener que tocar el componente core de Nagios.
4.2.1.3 - Macros
En Nagios, la manera de indicar que script, programa, etc se debe ejecutar para la recoleccin
de cada una de las mtricas es mediante la definicin de comandos [NAGIOSCOMMANDS] y de
servicios [NAGIOSSERVICIOS]. Los macros permiten referenciar informacin de hosts, servicios,
etc; para ser utilizadas en dichas definiciones. Antes que Nagios ejecute un comando remplaza todos
los macros que se encuentren en su definicin con su valor correspondiente [NAGIOSMACROS].
En [NAGIOSMACROSSTAND] se encuentra la lista de los macros disponibles de los cuales
cabe destacar los siguientes:
$LASTSERVICECHECK$: timestamp que indica cuando fue la ltima vez que se monitoreo el
servicio.
$HOSTNAME$: nombre corto del host, es el valor dado al atributo host_name de la definicin
del mismo.
$SERVICESTATE$: indica el estado actual del servicio ("OK", "WARNING", "UNKNOWN",
o "CRITICAL").
$SERVICEEXECUTIONTIME$: nmero real que indica cuanto tiempo dur la ejecucin del
programa, script, etc que se invoca para realizar el monitoreo del servicio.
$SERVICEDESC$: es la descripcin indicada en la definicin del servicio.
$SERVICEOUTPUT$: es la primera lnea del resultado del ltimo monitoreo del servicio.
$SERVICEPERFDATA$: es la informacin de performance data del resultado del ltimo
monitoreo del servicio.
72
Se le agreg un parmetro opcional a travs del cual recibe la unidad de medida de la mtrica, que
ser la utilizada dentro de la informacin de performance data devuelta por el plugin. Si este
parmetro no es indicado, el valor de la mtrica devuelto no estar acompaado de ninguna unidad
de medida.
Se configuraron cuatro comandos para la utilizacin de dicho plugin los cuales son mostrados
en el Listado 3 y se diferencian entre ellos en si lo que se quiere monitorear es un atributo simple del
MBean o es un atributo compuesto, es decir si lo que se quiere obtener es el valor de una propiedad de
un atributo del MBean que es un objeto. Por otro lado para cada uno de los casos se tiene uno que
acepta como parmetro la unidad de medida y otro que no lo hace.
Listado 3 - Comandos configurados para el plugin check_jmx
#Definicin del check_jmx comando para el caso de un atributo compuesto sin unidad
define command{
command_name
command_line
-w $ARG5$ -c $ARG6$
check_jmx_comp
/usr/local/nagios/libexec/check_jmx -U $ARG1$ -O $ARG2$ -A $ARG3$ -K $ARG4$ -vvvv
}
#Definicin del check_jmx comando para el caso de un atributo compuesto pasando la unidad
define command{
command_name
check_jmx_comp_uom
command_line
/usr/local/nagios/libexec/check_jmx -U $ARG1$ -O $ARG2$ -A $ARG3$ -K $ARG4$ -vvvv
-w $ARG5$ -c $ARG6$ -u $ARG7$
}
#Definicin del check_jmx comando para el caso de un atributo simple
define command{
command_name
check_jmx_simple
command_line
-c $ARG5$
}
#Definicin del check_jmx comando para el caso de un atributo simple con unidad
define command{
command_name
command_line
-c $ARG5$ -u $ARG6$
check_jmx_simple_uom
/usr/local/nagios/libexec/check_jmx -U $ARG1$ -O $ARG2$ -A $ARG3$ -vvvv -w $ARG4$
73
En lo que respecta a la recoleccin de mtricas del entorno se pueden utilizar cualquiera de los
plugins oficiales de Nagios disponibles en [NAGIOSPLUGINS] como tambin cualquiera de los
desarrollados por terceros que se pueden obtener en [NAGIOSEXCHANGEPLUGINS], dependiendo
de qu mtrica se desee medir.
En este punto cabe destacar que entre los distintos accesorios que tiene Nagios existen dos muy
tiles para el monitoreo de hosts remotos, ellos son el NRPE - Nagios Remote Plugin Executor
[NRPE] y el NSCA - Nagios Service Check Acceptor [NSCA].
EL NRPE permite ejecutar plugins de Nagios de manera remota, as como tambin permite
comunicarse con algunos agentes Windows, de esta forma es posible el monitoreo de mquinas
remotas an aquellas que tengan Windows. En la Figura 27 se muestra el esquema de funcionamiento
del NRPE.
El NSCA permite realizar monitoreo pasivo, es decir que utilizando NSCA Nagios no decide
cuando interrogar a los recursos monitoreados, es decir cuando recolectar las mtricas, sino que en
cambio se queda esperando la recepcin de las mismas, las cuales son enviadas remotamente por el
agente NSCA. En la Figura 28 se muestra el esquema de funcionamiento del mismo
74
Para cumplir con la funcionalidad descrita se decidi utilizar un plugin de Nagios llamado
BrainyPDM [BRAINYPDM] debido a que su arquitectura permite expandirlo fcilmente sumado al
hecho que est desarrollado en Java lo que hace que la comunicacin va JMX de la accin correctiva a
aplicar es directa. Por otro lado almacena las mtricas recibidas de Nagios en una base de datos, ya
sean en rrdb o en MySQL y provee una interfaz grfica web mediante la cual pueden configurarse
cuales mtricas se desea almacenar.
4.3.1 - BrainyPDM
BrainyPDM es ms que un plugin Nagios, es un programa desarrollado en Java que se ejecuta
independientemente de Nagios cuya funcin principal es la de procesar la informacin de performance
data recibida de este ltimo a travs de TCP/IP y almacenarla en una base de datos rrdb interna o en
una base de datos externa, dependiendo de cmo se lo configure.
Para poder ser utilizado en la infraestructura desarrollada se le debi modificar la funcionalidad
del mismo as como tambin agregarle nueva funcionalidad que consiste principalmente en i) la
transmisin de las mtricas, ya procesadas al control en tiempo real, ii) la recepcin de parte de este
ltimo de las acciones correctivas a aplicar, y iii) la aplicacin de las mismas a travs de JMX.
4.3.1.1 - Arquitectura
En la Figura 29 se presenta la arquitectura de BrainyPDM y la interaccin de este con el resto
de la infraestructura, en dicha figura puede observarse que el mismo est compuesto por mdulos,
donde cada mdulo representa una funcionalidad particular, por otro lado cada uno de ellos tiene cero
o ms dependencias de otro mdulo, se llama hijo a aquel que tiene una o ms dependencia de otro y
padre a aquel que tiene uno o ms hijos, es decir a aquel del cual dependen uno o ms mdulos. Un
mdulo hijo no funcionar si no lo hace su padre [BRAINYPDMARQ].
75
cmp modulos
BrainyPDM
graph module
web module
use
Usuario
datastore
(from
Actores)
snaphshot
dodo module
authorization module
ACL
control module
actuacion transmision
dbembedded
Nagios
flow
nagios module
flow
JBoss/JVM
flow
modulemgr
Sistema de Control
Externo:
PowerDEVS
76
llamado control module el cual se encarga de enviar las mtricas al control de tiempo real externo y
de aplicar la accin correctiva que este ltimo determine. A este mdulo se lo hizo depender del
Nagios module ya que si no se tienen mtricas no tiene sentido tener la funcionalidad de control
activa.
donde send.sh es un shell script que enva a BrainyPDM, va TCP, la informacin definida
mediante los macros.
El procesamiento y anlisis de la informacin recibida de Nagios est basada en plugins,
llamados procesadores, los cuales son configurados en el archivo nagios-def.xml, ubicado en el
directorio $BRAINY_HOME/plugins/nagios/3, donde se indica los procesadores disponibles indicando
para cada uno de ellos el nombre con el cual se lo va a identificar, la clase que lo implementa, la
descripcin, los parmetros que definen su comportamiento y, en caso que corresponda, los parmetros
propios de cada uno.
Entre los parmetros que definen el comportamiento deseado de un plugin, se encuentran los
siguientes:
serviceFilter: el plugin slo ser utilizado para procesar aquella informacin proveniente de
Nagios cuyo nombre de servicio coincida con el filtro indicado en este parmetro.
hostFilter: el plugin slo ser utilizado para procesar aquella informacin proveniente de
Nagios cuyo nombre del host coincida con el filtro indicado en este parmetro.
parsePerfData: indica si el plugin debe procesar o no la informacin de performance data es
decir los datos provenientes del macro SERVICEPERFDATA.
parseOutput: indica si el plugin procesar o no los datos provenientes del macro
SERVICEOUTPUT.
overwriteOrder: este valor indica que plugin ser quien almacenar la informacin de
performance data recibida en caso que exista ms de uno con posibilidades de hacerlo y quien lo
har ser el que tenga el valor ms chico.
De esta forma cuando BrainyPDM arranca carga en memoria todas las definiciones de los
plugins procesadores configurados y cada vez que recibe informacin desde Nagios la procesar con
3
77
Se pueden desarrollar plugins propios o utilizar algunos de los tres que BrainyPDM trae, entre
los cuales se encuentra el llamado DefaultPerformanceData, implementado por la clase
org.brainypdm.plugins.nagios.RegExpr y que utiliza una expresin regular para determinar que
formato de performace data procesar. Es este plugin el utilizado para el presente trabajo y el mismo
fue configurado para procesar informacin del tipo:
label=value[UOM];[warn];[crit];[min];[max].
Al proceso descripto se le agreg la funcionalidad que enva los datos de performance data
procesados al control de tiempo real externo, mecanismo que ser explicado ms en detalle en la
prxima seccin.
78
labelType: tipo de etiqueta a enviar, dependiendo del valor configurado en este atributo, el
formato del mensaje a enviar al control externo ser: [[host;]servicio;]mtrica=valor
respectivamente:
o C: completa
o S: servicio + nombre de la mtrica
o M: slo el nombre de la mtrica
params: parmetros propios de cada transmisor, por ejemplo para el transmisor implementado
para la prueba de concepto realizada, el cual transmite las mtricas a travs de UDP se tienen los
siguientes parmetros:
o ip y port: ip y puerto a donde se va a transmitir las mtricas.
Al igual que sucede con los plugins que procesa la informacin recibida de Nagios, cuando
BrainyPDM arranca carga en memoria los transmisores configurados creando una instancia de cada
uno de ellos.
Luego que la informacin recibida desde Nagios es procesada, si la misma contiene la seccin
de performance data, adems de almacenarla en la base de datos correspondiente (externa o
embebida) se obtienen todos los transmisores configurados para transmitir las mtricas recibidas,
segn host, servicio y/nombre de la mtrica de la cual se trate, y se enva los datos a travs de ellos
mediante la ejecucin de su mtodo enviar.
79
Figura 31 - Diagrama de secuencia del proceso de recepcin de mtricas y transmisin de las mismas al
sistema de control externo
80
De esta forma la responsabilidad de conocer cmo y dnde, es decir a que control externo se
debe enviar la informacin, recae nicamente en los transmisores, sin que BrainyPDM tenga
conocimiento de ello. En caso de querer agregar un nuevo enfoque, lo nico que hay que hacer es
configurar el transmisor correspondiente y si los existentes no son adecuados para la comunicacin con
el nuevo sistema de control que se quiere utilizar, slo se debe desarrollar uno nuevo hacindolo
heredar de la clase abstracta TransmisorBase e implementando su mtodo enviar con la lgica
adecuada para la transmisin.
Para poder transmitir las mtricas al sistema de control externo seleccionado con el fin de
desarrollar una solucin completa y mostrar el funcionamiento de la infraestructura armada, se
desarroll el transmisor TransmisorByUDP el cual enva la informacin a travs del protocolo UDP al
cual se le debe configurar la direccin IP y el puerto a travs de los cuales se enviaran los datos. En la
Figura 32 se muestra el diagrama de clases de los transmisores, en ella se ve la clase base abstracta
mencionada y la clase implementada, as como tambin la interfaz que define el comportamiento de
todo transmisor.
81
4.3.3.2 - Actuacin
El proceso de actuacin sigue el mismo criterio que el de transmisin de las mtricas al sistema
de control externo, en el sentido que existe un archivo XML llamado actuadores-def.xml ubicado en
$BRAINY_HOME/plugins/control5, en el cual se configuran los actuadores disponibles, siendo un
actuador el encargado de recibir del control en tiempo real la accin correctiva definida y de aplicarla.
Para cada uno de los actuadores se le deben configurar los siguientes parmetros:
name: identificacin unvoca del actuador
className: clase que implementa el actuador que est siendo configurado, esta clase debe
heredar de la clase abstracta ActuadorBase la cual contiene la funcionalidad comn a todos los
actuadores, debindose implementar en las clases concretas el mtodo recibir que es a travs del
cual se recibe la accin correctiva a aplicar.
description: descripcin del actuador.
idle: true/false, sirve para habilitar/deshabilitar al actuador.
url: url donde se encuentran los MBeans sobre los cuales se actuar.
params: parmetros propios de cada actuador, por ejemplo para el caso del actuador
implementado para ser utilizado en la prueba de concepto, el cual recibe la indicacin de la
accin correctiva a aplicar a travs del protocolo UDP, se tiene que configurar:
o port: puerto en el cual va a estar escuchando por directivas de actuacin
La clase ActuadorBase, clase padre de todo actuador, implementa la interfaz Actuador la cual
hereda de Runneable [RUNNEABLE], es decir que cada uno de los actuadores se ejecuta como un
thread independiente del resto. Cuando BrainyPDM arranca levanta las definiciones de los actuadores
configurados creando una instancia para cada uno de ellos y pone en ejecucin el thread asociado. En
el mtodo run de cada uno de ellos se ejecuta el mtodo recibir del actuador quien se queda a la espera
de recibir alguna directiva del control externo. Cuando este ltimo determina que se debe aplicar una
accin correctiva, le enva al actuador correspondiente la directiva acerca de cul accin debe aplicar.
De manera similar a lo que sucede con los transmisores, la responsabilidad de conocer cmo y
de dnde proviene la accin correctiva a aplicar, es decir de qu control externo se recibir la directiva,
recae nicamente en los actuadores, sin que BrainyPDM tenga conocimiento de ello. En caso de querer
agregar un nuevo enfoque, lo nico que hay que hacer es configurar el actuador correspondiente y si
los existentes no son adecuados para la comunicacin con el nuevo sistema de control que se quiere
utilizar, slo se debe desarrollar uno nuevo hacindolo heredar de la clase abstracta ActuadorBase
implementando su mtodo recibir con la lgica adecuada para la recepcin de la informacin.
Para recibir la accin correctiva a aplicar desde el control externo seleccionado con el fin de
desarrollar una solucin completa y mostrar el funcionamiento de la infraestructura armada, se
desarroll el transmisor ActuadorByUDP que recibe la informacin a travs del protocolo UDP y al
82
metodos: se configuran todos los mtodos del MBean que se quieren exponer, indicando para
cada uno de ellos:
o id: identificador unvoco del mtodo, se lo utiliza junto con el id del MBean para
indicar el MBean y el mtodo que recibe la accin a aplicar.
o name: nombre del mtodo a invocar en caso de ser una operacin o el nombre del
atributo.
o type: 'o' indica que es una operacin y 's' o 'S' si el mtodo es para cambiar el valor de
un atributo.
o signatura: indica como es la signatura del mtodo, es decir el tipo de dato de los
parmetros del mismo. La signatura de los mtodos a invocar debe cumplir con las
siguientes condiciones:
contener clases que tengan un constructor que tome como parmetro un string al
cual debe convertirlo en un objeto de la clase indicada.
no tener arrays, esta restriccin est relacionada con la manera en que el MBean
es invocado.
Una vez configurado correctamente un MBean, este ya puede ser invocado desde cualquier
actuador.
Ejemplo de configuracin de un MBean.
<mbean id="jbosswebConn" name="jboss.web:type=Connector,port=8080, address=%2F127.0.0.1">
<metodos>
<metodo id="acceptCountAttr" name="acceptCount" type="s">
<signatura>
<class>int</class>
</signatura>
</metodo>
</metodos>
</mbean>
El sistema de control externo le indicar al actuador correspondiente que MBean y que mtodo
de este ltimo se debe ejecutar, a travs de un mensaje con el siguiente formato:
mbean1|operacion|arg1,arg2,...,argn||mbean2|operacion|arg1,arg2,...,argn||....
donde MBeani es el id del MBean correspondiente.
El actuador buscar la definicin del/los MBean/s indicados y ejecutar el mtodo
correspondiente de cada uno de ellos en el orden en el cual fueron enviados.
84
85
Se busca que los modelos de controladores, cualquiera sea su naturaleza (continuos, a tiempo
discreto, a eventos discretos, o hbridos), se implementan dentro de un nico entorno de modelado y
simulacin.
Esto permite seguir la estrategia conocida como System-In-The-Loop (sistema dentro del lazo):
los modelos son desarrollados, ensayados y verificados mediante simulaciones standalone,
desconectadas del sistema real a controlar (sistema fuera del lazo). Luego, las entradas y salidas del
controlador son redireccionados hacia el sistema real (en nuestro caso, hacia/desde plugins de
monitoreo y actuacin) y son ejecutados en tiempo real (sistema dentro del lazo).
Asimismo se busca que el tipo de modelos a obtener incluya de manera natural la categora de
modelos naturalmente utilizada en Ingeniera de Control digital (ecuaciones en diferencia) y as
disminuir la brecha existente con la Ingeniera de Software a la hora de seguir el enfoque que aplica
Teora de Control a Sistemas Informticos.
Se elige para esto a la herramienta de Modelado y Simulacin de cdigo abierto PowerDEVS
([POWERDEVS]), de propsito general, pero nativamente concebida para control en tiempo real.
Asimismo, por el hecho de estar basado en DEVS permite la especificacin de modelos de cualquier
naturaleza, tal como se pretende. Esta decisin se basa en dos experiencias exitosas recientes: una
aplicando PowerDEVS en el diseo de controladores para sistemas informticos [Castro et al, 2009] y
otra aplicando otro simulador basado en DEVS operando en tiempo real para la implementacin
prctica de un controlador de calidad de servicio para una red de datos [Castro et al, 2012].
Para lograr nuestros objetivos se debi realizar modificaciones a PowerDEVS para que pueda
integrarse a la infraestructura desarrollada a la vez que permanezca siendo una herramienta autnoma.
Esto se logr incorporando a PowerDEVS capacidades de comunicacin va red. Estas sern
explicadas luego de una pequea introduccin al formalismo DEVS.
86
87
4.4.2 - PowerDEVS
PowerDEVS ([POWERDEVS]) es un entorno de simulacin de modelos DEVS desarrollado
por un grupo de investigacin de la Facultad de Ciencias Exactas, Ingeniera y Agrimensura de la
Universidad Nacional de Rosario. En el presente trabajo se utiliz la versin 2.0 del mismo.
La descripcin que sigue brinda el conocimiento necesario para comprender las modificaciones
realizadas a PowerDEVS, que tienen relevancia mas all de la presente Tesis ya que permitir a
PowerDEVS interactuar con elementos externos va red para cualquier propsito.
Editor de modelos: es el programa principal, desde el punto de vista del usuario, ya que provee la
interfaz grfica y el acceso al resto de las aplicaciones. Mediante este editor es posible construir y
editar los diagramas en bloques de los modelos as como tambin crear y editar libreras. Este
editor posibilita que pueda utilizarse PowerDEVS sin necesidad de tener conocimientos acerca del
formalismo DEVS, ya que adems cuenta con una completa biblioteca de atmicos. Slo es
necesario un conocimiento bsico del formalismo en caso de necesitarse la creacin de nuevos
atmicos. En la Figura 37 se muestra la interfaz del editor principal, ventana de la izquierda y un
ejemplo de armado de un modelo DEVS, ventana de la derecha.
88
Figura 37 - Interfaz del editor de PowerDEVS: Editor principal (izquierda). Editor de un modelo (derecha)
Editor de modelos atmicos: permite la edicin del cdigo C++ de cada uno de los atmicos del
modelo. Mediante este editor se programan el contenido de las funciones de salida, de avance de
tiempo, de transicin interna y de transicin externa de cada atmico. Adems de estas funciones
del formalismo DEVS hay 2 funciones adicionales, la de inicializacin y la de terminacin las
cuales son ejecutadas antes de que la simulacin comience y al finalizar la misma,
respectivamente. Cuando el modelo es guardado se generan los archivos .cpp y .h. En la Figura 38
se muestra la edicin del cdigo que define el comportamiento del atmico marcado, en particular
en dicha imagen se ve la funcionalidad de la funcin de transicin externa del mismo.
El preprocesador: genera los archivos ejecutables a partir de los creados a travs del editor.
89
Simulator: es una clase abstracta de la cual deben heredar las clase asociada a cada atmico, quien
debe implementar los mtodos que representan a las funciones definidas en el formalismo DEVS,
es decir las funciones de transicin interna, transicin externa, de salida y la de avance de tiempo
ms dos mtodos adicionales que define Simulator, llamados init y exit y que son ejecutados al
comienzo y al final de la simulacin, respectivamente y cuyas finalidades son la de inicializacin y
liberacin de los recursos utilizados por los atmicos.
Event: esta clase es utilizada para informar la ocurrencia de un evento, a la funcin de transicin
externa le llega como entrada con la informacin del evento externo ocurrida, mientras que la
funcin de salida la utiliza para enviar informacin a otros atmicos. Contiene las siguientes
propiedades:
o port: es un nmero entero que indica el puerto de entrada por donde se recibi un
evento, o el puerto por donde se debe enviar el evento.
o value: contiene el dato que se recibe o que se quiere propagar.
o realTimeMode: es un nmero entero que determina si el evento debe ser o no
sincronizado con el tiempo real.
Connection: esta clase es utilizada para representar las conexiones entre los modelos que
conforman la estructura de los acoplados.
RootCoupling: esta clase hereda de la clase Coupling y est asociada al acoplado principal del
modelo, es decir al acoplado superior de la estructura jerrquica que representa al modelo. Se hizo
esta diferencia ya que este acoplado se difiere de los dems en que no tiene a un padre a quien
90
notificarle los cambios de los tiempos sino que se lo debe notificar al RootSimulator.
Adems de estas clases se tienen una serie de archivos que contienen, para cada uno de los
sistemas operativos soportados, las funciones y tipos de datos tiles para los atmicos y/o para el
mismo PowerDEVS, estas bibliotecas son: pdevslib.cpp, pdevs.linux.cpp, pdevs.win.cpp y
pdevs.rtai.cpp.
91
92
puerto de red, es decir debe registrarse como listener de dicho puerto. Luego, cuando se recibe
informacin a travs del puerto, los modelos registrados son notificados desde el motor de simulacin
de la misma manera que cuando ocurre un evento externo, es decir ejecutando su funcin de transicin
externa.
Al registrarse, un modelo atmico puede hacerlo para ser notificado de todos los datos
recibidos a travs de un determinado puerto o tambin tiene la posibilidad de indicar el tipo de mensaje
que le interesa, es decir que en este ltimo caso no ser notificado de todos los datos recibidos por ese
puerto, sino solamente de aquellos que vienen identificados con el tipo indicado (mensajes tipificados).
93
Esquema de funcionamiento
En la Figura 42 se muestra el esquema del mecanismo de subscripcin en ella se pueden ver los
distintos componentes que forman parte del mismo, mientras que en la Figura 43 se muestra un
diagrama de secuencia que representa el proceso del registro de un atmico como listener de un
determinado puerto.
El proceso de subscripcin ocurre cuando se inicia la simulacin en PowerDEVS, cuando el
94
simulador comienza su ejecucin ejecuta el mtodo init() de todos los atmicos del modelo, si alguno
de ellos llama a la funcin RequestNET para registrase como listener de algn puerto, se crean los
recursos necesarios para el mecanismo de notificacin de la informacin recibida a travs de la red.
Como se puede ver en las figuras citadas, estos pasos se ejecutan una sola vez y entre los recursos
creados se encuentran el objeto PortListenerList y la MSQueue. Por otro lado, por cada puerto
involucrado, es decir por cada puerto para el cual se registr por lo menos un modelo atmico, se crea
un objeto PortListener que contendr todos los modelos atmicos registrados y un thread (pthread_t)
en donde se ejecutar la funcin net_handler, cuya funcionalidad principal es esperar por la llegada de
datos a travs del puerto asociado.
En el diagrama de la Figura 44 se muestra el proceso de recepcin de informacin, donde se
puede ver que cuando esto sucede se enva a la cola los datos recibidos junto con el nmero de puerto
por el cual se los recibi.
95
sd Comunicacion v ia red
Este diagrama muestra la secuencia de pasos necesaria para que un atmico se registre como listener de
un determinado port.
RootSimulator
Atomico
library
pdevslib.linux
init(Time, ...)
RequestNET(port,this)
opt Inicializacin de recursos
[si no fueron inicializados los recursos de red ]
PortListenersList
listeners= create()
MsgQueue
create()
createNode(port, atomic,
[typeMsg])
PorListeners
[si existed=false]:
addListener([msgType], atomic)
[si existed=false]:
create(net_handler, port)
linux thread
pthread_t
ref
Recepcion de Datos
96
97
98
99
100
5.2 - Control
Antes de entrar en detalle acerca de la estrategia de control utilizada, se va a repasar como es el
funcionamiento del JBoss en lo que respecta al procesamiento de los pedidos de los clientes Web.
Como ya se describi antes, JBoss AS utiliza, como servidor web embebido, al JBoss Web
Server el cual es un producto de Red Hat desarrollado utilizando como base al Apache Tomcat
[JBOSSWEB], siendo este ltimo quien le provee la funcionalidad bsica al primero.
El Apache Tomcat puede ser visto, a grandes rasgos, como dos mdulos principales: el
connector (conector) y el container (contenedor). Siendo el conector el encargado de manejar la
conexin entre los clientes (generalmente browsers) y el servidor, recibe los pedidos de los clientes
(requests) y se los enva al contenedor quien realiza el procesamiento adecuado [Kurniawan & Deck,
101
2004].
Existen diversos tipos de conectores disponibles con el Tomcat, entre los cuales se encuentra el
HTTP Connector y el AJP Connector. El primero est basado en el protocolo HTTP/1.1 y es el que se
utiliza cando el Tomcat funciona como un web server autnomo, es decir sin utilizar uno externo, a
esta modalidad de trabajo se la llama standalone. El AJP connector es el conector que se suele usar
cuando se quiere tener un web server externo trabajando junto con el Tomcat. Para la prueba de
concepto realizada se utiliz el conector HTTP ya que se us al JBoss AS en la modalidad stand-alone.
El comportamiento de los conectores puede ser determinado mediante la configuracin de
distintos atributos, algunos de los cuales son comunes para todos los conectores y otros son propios de
cada uno. En particular para el HTTP Conector existen dos atributos, listados a continuacin, que
determinan el comportamiento de ste en lo que respecta al mecanismo de recepcin de los pedidos de
los clientes [Jamae & Johnson, 2009b]:
maxThreads: es la cantidad mxima de threads dedicados al procesamiento de los pedidos de
los clientes (threads de procesamiento o request processor threads) que sern creadas por este
conector. Este valor determina la cantidad mxima de usuarios que podrn estar conectados
concurrentemente en un determinado instante.
acceptCount: determina la longitud mxima de la cola en donde se encolan las nuevas
peticiones cuando todos los threads de procesamiento se encuentran ocupados. Cuando esta cola
se llena toda nueva conexin ser rechazada.
Es decir que el funcionamiento es el siguiente: cuando un cliente realiza una peticin al JBoss
web, si hay algn thread de procesamiento disponible ser este quien atender el pedido, en caso de
estar todos ocupados el pedido ser encolado hasta que alguno se libere, si dicha cola se encuentra
llena, es decir que la cantidad de pedidos encolados es igual al valor del atributo acceptCount, el
nuevo pedido ser rechazado.
Estos atributos, que definen el comportamiento del control de acceso concurrente del conector,
pueden ser accedidos y modificados a travs de JMX por tal motivo son los atributos ajustados en la
accin correctiva, es decir las entradas de control del sistema.
5.2.1 - Controlador
La estrategia de control aplicada no es ms que una simple mquina de estados que traslada al
JBoss entre dos estados distintos, uno denominado estado saturado o sobrecargado y que ocurre
cuando el porcentaje de Heap Utilizado (HU) o el porcentaje de CPU utilizada cruzan los umbrales
de saturacin (us) y el otro denominado estado normal que es cuando ambas mtricas estn por
debajo de los llamados umbrales normales (un) (o de restablecimiento).
102
(a)
HUun
CPUun
Estado
Estado
Saturado
HU, CPU
Estado
Normal
HUus
CPUus
(b)
Figura 47 - Controlador: (a) Mquina de estados. (b) Espacio de estados (con histresis).
103
5.3.1 - Nagios
Nagios fue configurado para que recolecte las mtricas deseadas cada 15 segundos.
Para obtener el porcentaje de uso de CPU del proceso JVM se utiliz un plugin llamado
check_process_resources el cual est escrito en script shell y permite conocer el porcentaje de uso de
memoria y de CPU de un determinado proceso local a Nagios, es decir de un proceso ejecutndose en
la misma mquina que este ltimo. Este plugin, que se obtiene de [CHECKPROCPLUGIN], puede ser
utilizando en conjunto con check_by_ssh, para monitorear un proceso remoto, es decir uno que se
encuentre ejecutndose en una maquina distinta a la cual se encuentra el Nagios, ver
[CHECKSSHPLUGIN] para ms detalle de cmo se realiza.
Al plugin check_process_resources se le debieron realizar las siguientes modificaciones:
Se le agreg la informacin de performance data.
Se le agreg un parmetro opcional que recibe un texto que es utilizado internamente para filtrar
el proceso deseado en caso de que exista ms de uno con el mismo nombre indicado. Por
ejemplo si se tienen dos procesos JAVA ejecutndose en la misma mquina, se le puede pasar
como valor de este parmetro el texto JBoss para identificar la JVM en la cual se est ejecutando
el JBoss. Dicho parmetro agregado es el -f.
El plugin original utilizaba el comando de Linux ps [PSLINUXCOMMAND] para obtener el
porcentaje de uso de CPU del proceso, el problema con dicho comando es que el valor devuelto
no es en tiempo real ya que lo calcula como el tiempo de uso de CPU dividido por el tiempo
durante el cual el proceso se encuentra en ejecucin. De esta forma, en los casos de picos de
carga este hecho no es reflejado rpidamente en el valor devuelto o en caso de estabilizarse
nunca lo har. Por lo tanto se lo cambio para que utilice el comando top [TOPLINUXCOMMAND]
el cual da informacin de uso de memoria y CPU en tiempo casi real, ya que utiliza la
informacin desde la ltima actualizacin que por defecto es de un segundo.
En lo que respecta al porcentaje de memoria Heap utilizada, no hay forma de obtener dicha
mtrica en forma directa, lo que se hizo fue obtener mediante JMX la cantidad de memoria Heap libre
y la total, y se envan estos valores al sistema de control para que este realice el clculo
correspondiente.
Adems de las mtricas correspondientes a las salidas controladas del sistema, se configur a
Nagios para monitorear las variables de control, acceptCount y maxThreads y los parmetros del
conector currentThreadsBusy y currentThreadsCount. Para as tenerlas disponibles y poder observar
cmo se van modificando sus valores en el transcurso del tiempo, pudiendo de esta forma graficarlos y
correlacionarlos en el tiempo con las otras mtricas recolectadas.
104
Todas las mtricas anteriormente mencionadas fueron configuradas en Nagios a travs de los
servicios mostrados en el Listado 4, los cuales a su vez utilizan los comandos mostrados antes en el
Captulo 4: Solucin Propuesta e Implementacin - 4.2.2 - Recoleccin de mtricas.
Listado 4 - Servicios configurados para la recoleccin de las mtricas.
#Memoria heap total
define service{
use
tesis-service
host_name
localhost
service_description
jboss-heap-total
check_command
check_jmx_simple!service:jmx:rmi:///jndi/rmi://localhost:9003/jmxrmi!jboss.system:type=ServerInfo!TotalMemory!0!0
}
#Memoria heap libre
define service{
use
tesis-service
host_name
localhost
service_description
jboss-heap-free
check_command
check_jmx_simple!service:jmx:rmi:///jndi/rmi://localhost:9003/jmxrmi!jboss.system:type=ServerInfo!FreeMemory!0!0
}
#Valor de acceptCount
define service{
use
tesis-service
host_name
localhost
service_description
jboss-accept-count
check_command
check_jmx_simple!service:jmx:rmi:///jndi/rmi://localhost:9003/jmxrmi!jboss.web:type=Connector,port=8080,address=%
2F0.0.0.0!acceptCount!0!0
}
#Valor de maxThreads
define service{
use
tesis-service
host_name
localhost
service_description
jboss-maxTrheads
check_command
check_jmx_simple!service:jmx:rmi:///jndi/rmi://localhost:9003/jmxrmi!jboss.web:type=ThreadPool,name=http-0.0.0.08080!maxThreads!0!0
}
#Porcentaje de uso de CPU
define service{
use
tesis-service
host_name
localhost
service_description
jboss-cpu-used
check_command
check_process_resources_local!java!JBoss!cpu!50!70!org.jboss.Main
105
tesis-service
host_name
localhost
service_description
jboss-currentTrheadsBusy
check_command
check_jmx_simple!service:jmx:rmi:///jndi/rmi://localhost:9003/jmxrmi!jboss.web:type=ThreadPool,name=http-0.0.0.08080!currentThreadsBusy!-1!-1
}
#Cantidad de threads creadas
define service{
use
tesis-service
host_name
localhost
service_description
jboss-currentTrheadsBusy
check_command
check_jmx_simple!service:jmx:rmi:///jndi/rmi://localhost:9003/jmxrmi!jboss.web:type=ThreadPool,name=http-0.0.0.08080!currentThreadCount!-1!-1
}
5.3.2 - BrainyPDM
En lo que respecta a BrainyPDM, las configuraciones que son necesarias realizar para la
ejecucin de la prueba de concepto comprenden a los MBeans disponibles para la actuacin sobre el
JBoss y a los transmisores y actuadores utilizados para la comunicacin de las mtricas recolectadas y
de la accin correctiva a aplicar, respectivamente.
106
</metodo>
</metodos>
</mbean>
<mbean id="jbosswebTPool" name="jboss.web:type=ThreadPool,name=http-0.0.0.0-8080">
<metodos>
<!-- type indica si es una operacin: o, un setter:s o un getter:g -->
<metodo id="maxThreadsAttr" name="maxThreads" type="s">
<signatura>
<class>int</class>
</signatura>
</metodo>
</metodos>
</mbean>
<mbean id="javalangMemory" name="java.lang:type=Memory">
<metodos>
<!-- type indica si es una operacion: o, un setter:s o un getter:g -->
<metodo id="gc" name="gc" type="o">
</metodo>
</metodos>
</mbean>
107
<service name="jboss-heap-free">
<metrics>
<metric name="FreeMemory" />
</metrics>
</service>
<service name="jboss-heap-total">
<metrics>
<metric name="TotalMemory" />
</metrics>
</service>
</services>
</host>
</hosts>
<labelType>M
<!-- tipo de la label a transmitir:
C: completa
S: service + nombre de la mtrica
M: slo el nombre de la mtrica
-->
</labelType>
<params>
<param>
<name>ip</name>
<value>127.0.0.1</value>
</param>
<param>
<name>port</name>
<value>8000</value>
</param>
</params>
</transmisor>
108
]]>
<name>port</name>
<value>10500</value>
</param>
</params>
</actuador>
5.3.3 - PowerDEVS
Se implementaron dos controladores llamados control simple y control con ejecucin del
Garbage Collector (control con gc). Ambos tienen el mismo esquema y slo difieren en las acciones
correctivas que aplican. La Figura 48 muestra el diagrama en bloques de los mismos, en l se puede
observar tres modelos atmicos cuyas funcionalidades son bien especficas: el sensor, quien es el que
recibe las mtricas; el procesador quien es el atmico que contiene la lgica de control y el efector
quien es el encargado de aplicar la accin de actuacin, cuando el procesador as lo determina. En
dicha figura tambin se muestran las pantallas de configuracin de los parmetros de cada uno de
ellos. En los prximos prrafos se explica el funcionamiento de estos tres atmicos.
Antes de entrar en detalle con cada uno de los atmicos del modelo cabe recalcar un
funcionamiento comn a los tres: en todos existe una variable llamada sigma la cual mide el tiempo
que resta hasta que se dispare la transicin interna del modelo atmico. De esta forma cuando se quiere
que un determinado atmico ejecute su transicin interna inmediatamente se debe colocar sigma en
cero, y cuando se quiere que el modelo no cambie nunca de estado por s mismo (a menos que ingrese
un evento externo) se coloca sigma en infinito (equivale a pasivar el modelo, y en la prctica se
logra asignando a sigma un valor muy grande).
Adems es importante destacar que la lgica individual e integral de los tres modelos que se
109
5.3.3.1 - Sensor
El sensor es el mismo para los dos controladores implementados y es el encargado de recibir las
mtricas de parte de BrainyPDM, para ello se utiliz el mecanismo agregado a PowerDEVS que
permite a los atmicos registrarse como interesados en ser notificados de la recepcin de mensajes a
travs de un determinado puerto.
En el Listado 8 se detalla la descripcin de las funciones de inicializacin del modelo (init), la
de avance de tiempo (ta), la de transicin interna, la de transicin externa y la de salida del Sensor,
en el Anexo B: Cdigo Fuente de los Modelos DEVS (B.1 - Sensor) se muestra el cdigo fuente
completo de dichas funciones.
En la funcin init el sensor se registra, mediante la funcin RequestNET, para ser notificado
de mensajes recibidos a travs del puerto pasado como parmetro y se coloca un valor alto en la
variable sigma.
Cuando se recibe un mensaje a travs del puerto indicado, se ejecuta la funcin de transicin
externa en donde se verifica que el mensaje sea del formato esperado y de ser as se guarda el mensaje
recibido en una variable global y luego se coloca un cero en la variable sigma, forzando de esta forma
a que se ejecute la transicin interna del sensor.
En la funcin de salida, recordemos que dicha funcin se ejecuta cuando se produce una
transicin interna, se genera un evento de salida que contiene el mensaje recibido.
Listado 8 - Descripcin de las funciones del modelo Sensor
Inicializacin del
Modelo:
Funcin de Transicin
Externa:
Funcin de Transicin
Interna:
Funcin de Salida:
Funcin de Avance de
Tiempo:
5.3.3.2 - Procesador
El procesador es donde se encuentra la lgica de control propiamente dicha. Este atmico
recibe siete parmetros: los umbrales de saturacin, los umbrales de restablecimiento, el valor de
110
Funcin de Transicin
Externa:
111
Funcin de Avance de
Tiempo:
Generar un evento de salida con los nuevos valores de las variables de control (y para el caso del
controlador con gc con el nuevo estado del sistema).
Aplicar sigma
5.3.3.3 - Efector
Por ltimo se tiene el efector que es quien le enva la orden de actuacin al actuador cuando el
procesador as lo determina. Este atmico recibe como parmetros el puerto y la IP que definen la
direccin a la cual se debe enviar la orden de actuacin.
Cuando el efector recibe un evento externo enva a la direccin y puerto definidos, un mensaje
indicando el identificador los MBeans y de los mtodos de cada uno de ellos que se requiere ejecutar,
junto con los valores a colocar en caso que corresponda. Para esto utiliza la funcin sendNET la cual
fue una de las funcionalidades agregadas a PowerDEVS.
La funcin de transicin externa de este atmico difiere entre los dos controladores
implementados ya que en el control con gc adems de colocar los nuevos valores para las variables de
control, si lo que se produjo fue un cambio al estado saturado, se fuerza la ejecucin del Garbage
Collector. En el Listado 10 se muestran las descripciones de las funciones de inicializacin del modelo
(init), la de avance de tiempo (ta), la de transicin interna, la de transicin externa y la de salida del
Efector, en el Anexo B: Cdigo Fuente de los Modelos DEVS (B.3 - Efector) se muestra el cdigo
fuente completo de dichas funciones.
Listado 10 - Descripcin de las funciones del modelo Efector
112
Funcin de Transicin
Externa
Funcin de Transicin
Interna:
Funcin de Salida:
Funcin de Avance de
tiempo:
Aplicar sigma
113
Es decir que JMeter le gener carga a la aplicacin durante 30 minutos simulando el acceso de
20 usuarios concurrentes ejecutando las transacciones indicadas. Lo usuarios se fueron incorporando
progresivamente durante los primeros 10 minutos del test hasta alcanzar la poblacin de rgimen.
114
Figura 50 - Prueba 1: Caso de Test 0 (ejecucin sin la plataforma). (a) Consumo de CPU (b) Memoria Heap
libre
Figura 51 - Prueba 1: Caso de Test 0 (ejecucin sin la plataforma). (a) Cantidad de threads creados. (b)
Cantidad de threads ocupados
115
En el marco del escenario de prueba presentado se considera que un uso de CPU superior al
60% es una indicacin de sobrecarga de JBoss. Con el fin de mantener ese porcentaje en valores
menores, se realizaron dos casos de test exploratorios aplicando la plataforma desarrollada en el
presente trabajo, utilizando distintos parmetros y lgicas del control y aplicndole al sistema la misma
carga que la aplicada en la Lnea de base.
Saturacin:
HUus=60%
CPUus=55%
Restablecimiento:
HUun=55%
CPUun=50%
PARn:
maxThreadn=80
Estado saturado:
acceptCountn=10
PARs:
maxThreads=5 acceptCounts=1
En este caso el JBoss entr en su estado saturado en dos oportunidades, tal como se observa en
los grficos de las Figura 52 y Figura 53 donde se muestran debajo del eje de tiempo barras
horizontales en color naranja claro para los perodos transcurridos en Estado Normal, y en color
naranja oscuro para los correspondientes al Estado Saturado.
En particular en el grfico de la Figura 52 (a), se puede ver como en el primer perodo se
observa un consumo de CPU menor al 60%, tal como se esperaba, mientras que en el segundo se
obtiene un comportamiento similar al caso del sistema a lazo abierto. Esta asimetra no es deseable y
ocurre debido a que al regresar al estado normal, luego del primer ciclo en su estado saturado, el
controlador vuelve a subir el valor de la variable maxThread permitiendo al JBoss crear nuevos threads
cuando lo necesita. Sin embargo, cuando dicha variable es restringida nuevamente segundo ciclo en
estado saturado el JBoss no disminuye la cantidad de threads creados para cumplir con la nueva
restriccin, tal como se esperara que ocurra (ver Figura 53 (a)), lo cual es considerado como un
problema de la aplicacin.
En cuanto al consumo de memoria Heap no se observaron diferencias con el comportamiento al
caso sin la plataforma aplicada (Figura 52 (b)).
116
Figura 52 - Prueba 1: Caso de Test 1. (a) Consumo de CPU (b) Memoria Heap libre6
Figura 53 - Prueba 1: Caso de Test 1. (a) Cantidad de threads creados. (b) Cantidad de threads ocupados
En el grfico de la memoria Heap libre los valores de los umbrales estn expresados en trmino de la memoria
ocupada es por eso que el umbral de saturacin se muestra por debajo del umbral de restablecimiento.
117
Saturacin:
HUus=60%
CPUus=50%
Restablecimiento:
HUun=55%
CPUun=45%
PARn:
maxThreadn=5 acceptCountn=10
Estado saturado:
PARs:
maxThreads=5 acceptCounts=1
En este caso hubo mltiples cambios de estado del JBoss, el cual oper durante todo el test
acorde a los objetivos de calidad estipulados, es decir, respetando los umbrales para el consumo de
CPU y el porcentaje de memoria Heap utilizada (Figura 54). Sin embargo, esto sucede en detrimento
de la flexibilidad del control, debiendo mantener siempre un valor bajo (muy restrictivo) para la
cantidad de pedidos posibles de ser atendidos concurrentemente (Figura 55).
118
Figura 54 - Prueba 1: Caso de Test 2. (a) Consumo de CPU (b) Memoria Heap libre7
Figura 55 - Prueba 1: Caso de Test 2. (a) Cantidad de threads creados. (b) Cantidad de threads ocupados
7
En el grfico de la memoria Heap libre los valores de los umbrales estn expresados en trmino de la memoria
ocupada es por eso que el umbral de saturacin se muestra por debajo del umbral de restablecimiento.
119
Para lograr la carga variable descripta se cre un script de JMeter que contiene tres grupos de
usuarios cuyas caractersticas se detallan a continuacin:
120
Caractersticas
Poblacin total de usuarios: 40.
Tiempo de subida: 450 seg.
Duracin: 2850 seg.
Retardo: 0 seg.
Transacciones ejecutadas: login al sistema, listado de
cuentas, consulta de detalles de una cuenta, extraccin,
transferencia, consulta de detalles de una cuenta, logout.
Grupo Usuarios-2
Grupo Usuarios-3
121
Figura 57 - Prueba 2: Caso de Test 0 (ejecucin sin la plataforma). (a) Consumo de CPU (b) Memoria Heap
libre
Figura 58 - Prueba 2: Caso de Test 0 (ejecucin sin la plataforma). (a) Cantidad de threads creados. (b)
Cantidad de threads ocupados
122
Saturacin:
HUus=60%
CPUus=45%
Restablecimiento:
HUun=55%
CPUun=40%
PARn:
maxThreadn=120
Estado saturado:
acceptCountn=10
PARs:
maxThreads=10
acceptCounts=1
En los grficos de la Figura 59 se muestra el comportamiento del JBoss durante este caso de
test en lo que respecta a las salidas del sistema. En (a) se observa como el consumo de CPU se
mantuvo por debajo del 60% durante el primer perodo en estado saturado, el cual coincide con el
primer ciclo de carga alta. Cuando la cantidad de usuarios concurrentes disminuye, se puede ver como
el sistema alterna entre el estado normal y el saturado, quedndose en este ltimo estado al volver al
aumentar la carga del sistema. En este ltimo caso el consumo de CPU supero los 60% en varias
oportunidades, esto se debe al mismo problema detectado en el caso de test 1 de la prueba 1, cuando el
JBoss se encuentra en el estado normal, el controlador sube el valor de la variable maxThread
permitiendo as que se creen nuevos threads frente al crecimiento de la cantidad de usuarios. De esta
forma, y debido al comportamiento del JBoss ya observado, cuando dicha variable es restringida
nuevamente, no se disminuye la cantidad de threads creados para as cumplir con la restriccin
impuesta por el controlador. Este ltimo comportamiento se muestra en los grficos de la Figura 60, en
(a) se tiene la cantidad de threads creados a lo largo de la duracin del test, mientras que en (b) se
pueden ver cules de estos estn siendo utilizados en cada instante.
En lo que respecta al consumo de memoria Heap, se observa una leve disminucin al aplicar el
controlador y, tal como suceda en el Caso de test base, no se evidencia la ejecucin del Garbage
Collector durante la ejecucin del presente test (Figura 59-(b)).
123
Figura 59 - Prueba 2: Caso de Test 1. (a) Consumo de CPU (b) Memoria Heap libre8
Figura 60 - Prueba 2: Caso de Test 1. (a) Cantidad de threads creados. (b) Cantidad de threads ocupados
8
En el grfico de la memoria Heap libre los valores de los umbrales estn expresados en trmino de la memoria
ocupada es por eso que el umbral de saturacin se muestra por debajo del umbral de restablecimiento.
124
125
126
6.1 - Conclusiones
En el presente trabajo se present una plataforma flexible y extensible que permite la
incorporacin de capacidades de Self-Healing a Sistemas de Software. Si bien la misma fue pensada
para ser utilizada en sistemas de tipo Servidor de Aplicaciones JEE y su JVM subyacente, puede ser
aplicada a cualquier sistema que pueda ser administrado a travs de JMX.
Su arquitectura modular basada en plugins accesibles va protocolos de red permite una sencilla
adaptacin y/o remplazo de las tecnologas de monitoreo, control o actuacin, acorde a distintas
necesidades. Esto permite la libre eleccin de diversos enfoques de arquitecturas de Self-Healing,
incluyendo varios sistemas de control cooperando simultneamente y en tiempo real.
Para ofrecer la mayor flexibilidad posible respecto del tipo de modelo usado para definir
criterios de control, se dise una solucin basada en modelado y simulacin en tiempo real.
Los modelos de controladores, cualquiera sea su naturaleza (continuos, a tiempo discreto, a
eventos discretos, o hbridos), se implementan dentro del entorno de modelado y simulacin
PowerDEVS. Esto permite seguir la estrategia conocida como System-In-The-Loop (sistema dentro
del lazo): los modelos son desarrollados, ensayados y verificados mediante simulaciones standalone,
desconectadas del sistema real a controlar (sistema fuera del lazo). Luego, las entradas y salidas del
controlador son redireccionados hacia el sistema real (en nuestro caso, hacia/desde plugins de
monitoreo y actuacin) y son ejecutados en tiempo real (sistema dentro del lazo).
Esta estrategia elimina los riesgos de introducir errores al pasar de la fase de diseo a la fase de
implementacin de cualquier lgica de control que se implemente, ya que el controlador ser
finalmente ejecutado por el mismo motor de simulacin sobre el cual fue desarrollado.
Una particularidad saliente de nuestro diseo es que incorpora naturalmente el enfoque de SelfHealing basado en Ingeniera de Control, ya que PowerDEVS incluye de forma nativa todos los
algoritmos necesarios para el modelado de controladores mediante ecuaciones en diferencias y/o
ecuaciones diferenciales. Otras formas de definir modelos, como por ejemplo mediante autmatas
finitos, mquinas de estado, etc. son implementados de manera trivial en el contexto de PowerDEVS.
La herramienta construida fue aplicada exitosamente para desarrollar un controlador sencillo
del tipo on-off, cuyo diseo se bas en ejercicios previos realizados, tambin con la herramienta ac
presentada, para ganar conocimiento de la dinmica del sistema (el JBoss 5.1.0.GA + JVM) y sus
respuestas ante acciones de control.
Al aplicar la herramienta al servidor de aplicaciones JBoss, surgi un problema relativamente
comn: el comportamiento real del Sistema de Software difiere del esperado segn su documentacin,
y no se consta de un modelo lgico-matemtico que describa su dinmica. Este problema no es menor,
y representa uno de los principales escollos a enfrentar al pretender aplicar capacidades de SelfHealing a Sistemas de Software. Su superacin fue lograda exitosamente mediante ejercicios de prueba
y error tendientes a caracterizar heursticamente la dinmica del sistema y ajustar los parmetros del
controlador acorde al conocimiento adquirido.
La plataforma desarrollada puede ser aplicada en sistemas industriales (i.e. en sistemas no
acadmicos) debido a que utiliza JMX tanto para el monitoreo como para la actuacin. JMX es una
127
tecnologa estndar parte de la plataforma JEE, diseada nativamente para ser utilizada en aplicaciones
productivas de alta performance, previendo bajos niveles de intrusividad.
Las principales limitaciones de aplicacin estn dadas por la naturaleza del sistema a controlar,
acorde a lo que permita monitorear y a los parmetros que exponga para poder ejercerle acciones de
control en tiempo real.
128
MODELO
DE
DEFECTOS
RESPUESTA
DEL
SISTEMA
Plataforma
Caso de Prueba
COMPLETI
TUD DEL
SISTEMA
129
CONTEXTO
DEL
SISTEMA
130
131
A.1 - Compilacin
Antes de proceder con la instalacin de la plataforma aqu presentada, se deben compilar y
generar los archivos JAR de los siguientes componentes que conforman la misma y que fueron
modificados y adaptados para poder formar parte de ella. Para poder generarlos se debe tener instalado
el utilitario apache-ant, el cual puede ser obtenido de [ANT].
cliente-jmx: componente creado para acceder a los MBeans, es utilizado por BrainyPDM para
la aplicacin de la accin correctiva. Para generar el archivo JAR de este componente hay que
ubicarse dentro de la carpeta principal del mismo (cliente-jmx) y ejecutar el siguiente comando:
ant jar.
check_jmx: plugin de Nagios utilizado para la recoleccin de las mtricas del JBoss y de la
JVM. Para generar el archivo JAR se debe ejecutar ant all estando ubicados dentro de la carpeta
que contiene el cdigo modificado del plugin, check_jmx. Este comando generar dos archivos,
check_jmx y jmxquery.jar.
BrainyPDM: aplicacin Java utilizada como actuador. Est compuesta por varios mdulos,
algunos de los cuales fueron modificados mientras que otros fueron creados exclusivamente
para adicionarle funcionalidad necesaria para la plataforma presentada en este trabajo. Para
generar todos los archivos JAR de estos mdulos modificados o agregados, hay que ubicarse
dentro de la carpeta build que se encuentra dentro del directorio principal del componente, y
ejecutar ant all-jars. Este comando generar los siguientes archivos:
o brainypdm-actuadores-1.0.1.jar: mdulo agregado que contiene los actuadores
disponibles, actualmente slo contiene el ActuadorByUDP creado para utilizar en la
prueba de concepto realizada.
o brainypdm-modules-commons-1.0.2.jar y brainypdm-commons-1.0.2.jar: contienen
funcionalidad utilizada por todos los mdulos de BrainyPDM.
o brainypdm-control-1.0.1.jar: mdulo agregado que contiene la funcionalidad principal
que permite que BrainyPDM pueda funcionar como actuador y sensor de la plataforma
desarrollada.
o brainypdm-main.jar y brainypdm-core-1.0.2.jar: contienen la funcionalidad principal
de BrainyPDM.
o brainypdm-nagios-1.0.2.jar: contiene la funcionalidad necesaria para la comunicacin
con el Nagios.
o brainypdm-plugins-1.0.2.jar: contiene los plugins disponibles que procesan la
informacin proveniente de Nagios.
o brainypdm-transmisores-1.0.1.jar: mdulo agregado que contiene los transmisores
disponibles, actualmente slo contiene el TransmisorByUDP creado para utilizar en la
prueba de concepto realizada.
132
A.2 - Instalacin
Una vez compilados y generados los componentes necesarios podemos proceder a la
instalacin de todos los elementos que forman parte de la plataforma desarrolla.
Si bien el desarrollo de la plataforma fue pensado para poder ser utilizada en cualquier
distribucin de Linux, la misma fue realizada y probada nicamente en Ubuntu 9.04. En los prximos
prrafos se detalla el proceso de instalacin de todos los componentes de la misma, cabe destacar que a
pesar de indicar la ubicacin de donde se pueden obtener cada uno de ellos, junto con el presente
informe se entregan tanto el software original utilizado como las modificaciones realizadas a los
mismos.
Al finalizar los pasos descriptos en la presente seccin se tendr tanto la plataforma instalada
como las configuraciones necesarias para la ejecucin de la prueba de concepto realizada.
A.2.1 - Nagios
Como primer paso se tiene que instalar el Nagios y sus plugins principales, ambos pueden ser
obtenidos de [NAGIOSDOWNLOADS], la versin de Nagios Core utilizada para la prueba de
concepto fue la 3.2.0. Para el proceso de instalacin se puede seguir la gua de instalacin rpida que
se encuentra en [NAGIOSINSTALL] y que esta detallada para varias distribuciones de Linux.
Una vez instalado el Nagios se deben instalar los plugins modificados chek_jmx y
check_process_resources, para ello basta con copiar los archivos del primero previamente generados,
check_jmx y jmxquery.jar, y el archivo check_process_resources.sh, del segundo, dentro del
directorio de plugins del Nagios, por ejemplo $NAGIOS_HOME/nagios/libexel, siendo
$NAGIOS_HOME la ubicacin de la carpeta principal donde se encuentra instalado el Nagios.
A.2.2 - BrainyPDM
Para la instalacin del BrainyPDM se pueden seguir las indicaciones dadas en
[BRAINYPDMINSTALL] o en el archivo INSTALL.txt que acompaa a la versin utilizada (1.0.1),
las cuales son resumidas a continuacin:
1. Instalar la JVM, para la prueba de concepto se utiliz la jdk 6.0 de Sun, ahora de Oracle.
2. Descomprimir los archivos dentro del directorio deseado, de ahora en ms llamado
$BRAINY_HOME. Ejemplo /usr/local/brainypdm.
3. Darle permisos de ejecucin a los archivos shell script ubicados dentro de la carpeta
$BRAINY_HOME, para eso ejecutar: chmod ugo+x *.sh
4. Editar el archivo $BRAINY_HOME/conf/brainy.properties y configurar el puerto de donde
BrainyPDM espera recibir la informacin desde Nagios (nagios.listener.port). Ejemplo:
nagios.listener.port=13200
5. Crear la base de datos embebida, para lo cual se deben realizar los siguientes pasos:
a. Abrir una terminal de Linux, ubicarse en $BRAINY_HOME y arrancar el BrainyPDM
133
dentro
de
brainypdm-modules-commons-1.0.1-jar
1.0.2.jar
por
la
carpeta
brainypdm-modules-commons-
o service_perfdata_command=process-service-perfdata
A.2.3 - PowerDEVS
PowerDEVS necesita de wine [WINE] para su ejecucin. Wine es una aplicacin que permite
ejecutar en Linux software que fue desarrollado para windows, la misma tiene que estar instalada antes
de proceder con la instalacin de PowerDEVS. Con el presente trabajo se entrega la versin utilizada.
Para instalar PowerDEVS se debe ubicar en la carpeta donde se encuentra el paquete de
PowerDEVS a instalar y ejecutar el siguiente comando: dpkg -i powerdevs.deb
Cabe destacar que si PowerDEVS ya estuvo instalado anteriormente, y qued algn contenido
dentro del disco virtual de Wine (drive_c) antes de ejecutarlo por primera vez se debe eliminar la
carpeta
PowerDEVS
que
exista
dentro
de
wine,
generalmente
ubicada
en
/home/$USER_HOME/.wine/drive_c, donde $USER_HOME es la carpeta personal del usuario de
Linux.
La versin de PowerDEVS entregada junto con el presente trabajo ya contiene tanto las
modificaciones realizadas para poder ser utilizado como parte de la infraestructura desarrollada como
los modelos utilizados en la prueba de concepto. La misma fue basada en la versin 2.0 para Linux.
A.2.4 - JBoss
Para que el JBoss pueda ser utilizado con la infraestructura desarrollada se debe habilitar el
acceso remoto a los MXBeans, para ello se debe configurar lo siguiente en el archivo run.conf:
#Setup jmx remoting
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.authenticate=false"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.ssl=false"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.port=9003"
# Use the JBoss MBeanServerBuilder
JAVA_OPTS="$JAVA_OPTS -Djboss.platform.mbeanserver"
JAVA_OPTS="$JAVA_OPTS -Djavax.management.builder.initial=org.jboss.system.server.jmx.MBeanServerBuilderImpl"
135
136
En este apndice se presenta el cdigo fuente de las cuatro funciones dinmicas que definen a
un modelo atmico DEVS para cada modelo desarrollado en el Sistema Controlador: ta() (funcin de
avance de tiempo), delta_int() (funcin de transicin interna), delta_ext (funcin de transicin
externa) y lambda (funcin de salida), y la funcin auxiliar init() (Funcin de inicializacin).
B.1 - Sensor
En el Listado 11 se muestra el cdigo fuente de las funciones del modelo DEVS atmico:
Sensor.
Listado 11 - Cdigo fuente del modelo atmico Sensor
Variables globales:
double sigma;
char y[1024]; //salida
Funcin init:
int port=(int)va_arg(parameters,double);
sigma=10e10;
RequestNET(port,this);
Funcin de avance de
tiempo:
return sigma;
Funcin de transicin
externa:
char* aux=strchr((char*)x.value,'=');
if(aux == NULL){
printLog("Mensaje recibido con formato erroneo: %s\n",x.value);
return;
}
printLog("Mensaje recibido: %s\n",x.value);
strcpy(y,(char*)x.value);
sigma=0;
Funcin de salida:
sigma=10e10;
Event out = Event(&y,0);
out.setRealTimeMode(REALTIME);
return out;
B.2 - Procesador
En el Listado 12 se muestra el cdigo fuente de las funciones del modelo DEVS atmico:
Procesador
Listado 12 - Cdigo fuente del modelo atmico Procesador
Variables globales
principales:
double sigma;
//estado
double cpu;
double heap;
long freeHeap;
long totalHeap;
137
//salida
int newAC;
int reseted;
int newMaxThread;
char salida[228];
//parametros
double umbCpuInf;
double umbHeapInf;
double umbCpuSup;
double umbHeapSup;
int acDefault;
int maxtDefault;
int mintDefault;
Funcin init
sigma=10e8;
cpu=0;
memory=0;
heap=0;
freeHeap=0;
totalHeap=0;
reseted=false;
acDefault=0;
umbCpuInf=va_arg(parameters,double)*100;
umbHeapInf=va_arg(parameters,double)*100;
umbCpuSup=va_arg(parameters,double)*100;
umbHeapSup=va_arg(parameters,double)*100;
acDefault=va_arg(parameters,double);
maxtDefault=va_arg(parameters,double);
mintDefault=va_arg(parameters,double);
debug=va_arg(parameters,double);
cambioEstado=0; -->nicamente en el control con gc
Funcin de avance de
tiempo:
return sigma;
Funcin de transicin
interna:
freeHeap=0;
totalHeap=0;
sigma=10e8;
Funcin de transicin
externa:
int typeMsgSize=200;
int msgSize=512;
char typeMsg[typeMsgSize];
char msg[msgSize];
char* aux=strchr((char*)x.value,'=');
int typeMsgLen=strlen((char*)x.value)-strlen(aux);
bool isCpu=false;
bool isHeap=false;
strncpy(typeMsg,(char*)x.value,typeMsgLen);
typeMsg[typeMsgLen]='\0';
aux++;
strcpy(msg,aux);
138
if (debug==1) printLog("typeMsg=%s\n",typeMsg);
if (debug==2) printLog("msg=%s\n",msg);
if (strcmp(typeMsg,"JBoss.cpu")==0){
if (debug==2) printLog("cpu\n");
cpu=atof(msg);
isCpu=true;
isHeap=false;
if (debug==1) printLog("cpu=%s\n",msg);
}
if (strcmp(typeMsg,"FreeMemory")==0){
if (debug==2) printLog("freememory\n");
freeHeap=nctof(msg);
if (debug==1) printLog("freememory=%d\n",freeHeap);
if(totalHeap!=0){
heap=100-((float)(freeHeap*100.00/totalHeap));
isHeap=true;
isCpu=false;
}
}
if (strcmp(typeMsg,"TotalMemory")==0){
if (debug==2) printLog("totalmemory\n");
totalHeap=nctof(msg);
if (debug==1) printLog("totalmemory=%d\n",totalHeap);
if(totalHeap!=0 && freeHeap!=0){
heap=100-((float)(freeHeap*100.00/totalHeap));
isHeap=true;
isCpu=false;
}
}
if(heap!=0 || cpu!=0 ){
//lgica del control
if (isHeap ){
if(heap<umbHeapInf){
cantMetHeapRecibidas++;
cantMetHeapRecibidas2=0;
if (debug==1) {
printLog("cantMetHeapRecibidas=%d\n",cantMetHeapRecibidas);
printLog("cantMetCPURecibidas=%d\n",cantMetCPURecibidas);
}
}else{
cantMetHeapRecibidas=0;
cantMetHeapRecibidas2++;
if (debug==1) {
printLog("cantMetHeapRecibidas2=%d\n",cantMetHeapRecibidas2);
printLog("cantMetCPURecibidas2=%d\n",cantMetCPURecibidas2);
}
139
}
}
if(isCpu ){
if(cpu<umbCpuInf){
cantMetCPURecibidas++;
cantMetCPURecibidas2=0;
if (debug==1) {
printLog("cantMetHeapRecibidas=%d\n",cantMetHeapRecibidas);
printLog("cantMetCPURecibidas=%d\n",cantMetCPURecibidas);
}
}else{
cantMetCPURecibidas=0;
cantMetCPURecibidas2++;
if (debug==1) {
printLog("cantMetHeapRecibidas2=%d\n",cantMetHeapRecibidas2);
printLog("cantMetCPURecibidas2=%d\n",cantMetCPURecibidas2);
}
}
}
if(((heap>=umbHeapSup ) || (cpu>= umbCpuSup && cantMetCPURecibidas2 >=
cantMetCambio2)) && !reseted){
newAC=1;
reseted=true;
sigma=0;
printLog("Actuar: heap= %f - cpu= %f \n",heap,cpu);
newMaxThread=mintDefault;
cambioEstado=1; -->unicamente en el control con gc
}
if(heap<umbHeapInf && cpu<umbCpuInf && reseted ){
if(cantMetCPURecibidas >= cantMetCambio){
newAC=acDefault;
newMaxThread=maxtDefault;
reseted=false;
sigma=0;
cantMetCPURecibidas=0;
cantMetHeapRecibidas=0;
isCpu=false;
isHeap=false;
cambioEstado=1; -->unicamente en el control con gc
}
}
}
Funcin de salida:
Control simple:
char aux[10];
sprintf(salida,"%d",newAC);
sprintf(aux,"%d",newMaxThread);
140
strcat(salida,"|");
strcat(salida,aux);
strcat(salida,"\0");
if (debug==1) printLog("Salida procesador: %s\n",salida);
Event event=Event(&salida,0);
return event;
Control con gc:
if(cambioEstado){
if(reseted){//pasa a estado saturado
sprintf(salida,"%s","es");
}else{//pasa a estado normal
sprintf(salida,"%s","en");
}
sprintf(aux,"%d",newAC);
strcat(salida,aux);
sprintf(aux,"%d",newMaxThread);
strcat(salida,"|");
strcat(salida,aux);
}else{
sprintf(salida,"%s","gc");
}
strcat(salida,"\0");
if (debug==1) printLog("Salida procesador: %s\n",salida);
Event event=Event(&salida,0);
return event;
B.3 - Efector
En el Listado 13 se muestra el cdigo fuente de las funciones del modelo DEVS atmico:
Efector.
Listado 13 - Cdigo fuente del modelo atmico Efector
Variables globales:
double sigma;
//parmetros
int port;
char ip[16];
Funcin init
char* pip=(char*)va_arg(parameters,char*);
strcpy(ip,pip);
sigma=10e10;
Funcin de avance de
tiempo:
return sigma;
Funcin de transicin
interna:
sigma=10e10;
Funcin de transicin
Control simple:
141
142
strcat(msg,"\0");
}
}
if (debug==2) printLog("Actuacion: %s longitud %d\n",msg,strlen(msg));
sendNET(port,ip,msg,strlen(msg));
if (debug==1) printLog("Enviado por ip=%s port=%d\n",ip,port);
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
Glosario
ABI: del ingls Application Binary Interface (interfaz binaria de aplicacin), describe la interfaz de bajo nivel
entre una aplicacin y el sistema operativo, entre una aplicacin y sus bibliotecas, o entre partes componentes
de una aplicacin. Un ABI es distinto de una API, en que este ltimo define la interfaz entre el cdigo fuente y
bibliotecas, por esto ese mismo cdigo fuente compilar en cualquier sistema que soporte esa API, mientras que
un ABI permite que un cdigo objeto compilado funcione sin cambios sobre cualquier sistema usando un ABI
compatible.
ACL: del ingls Access Control List (lista de control de acceso) es un concepto de seguridad informtica y es
una manera de determinar los permisos de acceso apropiados a un determinado objeto, dependiendo de ciertos
aspectos del proceso que hace el pedido de autenticacin. [ACLWIKI]
API: del ingls Application Programming Interface (interfaz de programacin de aplicaciones), es el conjunto
de funciones y procedimientos (o mtodos si se refiere a programacin orientada a objetos) que ofrece cierta
biblioteca para ser utilizado por otro software como una capa de abstraccin. [APIWIKI]
Arquitectura: en el contexto de sistemas informticos se llama arquitectura de software a la definicin de la
estructura, funcionamiento e interaccin entre las partes del mismo. Es decir que define, de manera abstracta,
los componentes que llevan a cabo alguna tarea de computacin, sus interfaces y la comunicacin ente ellos.
Base de datos rrd: del ingls Round-Robin Database, se trata de una base de datos, orientadas al
almacenamiento de datos basados en series temporales, y que garantizan el espacio final ocupado por sus
elementos.
Browser: tambin llamado navegador o explorador web, es un programa que le permite al usuario navegar por
internet.
Callbacks: en programacin, un callback es una porcin de cdigo ejecutable que es pasado como un
argumento a otro cdigo, permitiendo de esta forma construir cdigo de bajo nivel como capas de abstraccin
que pueden ser llamadas desde una subrutina (o funcin) definida en una capa de nivel superior.
Conjunto de Instrucciones: es una especificacin que detalla las instrucciones que una CPU de una
computadora puede entender y ejecutar. [ISAWIKI]
Cuello de botella o bottleneck: es un trmino utilizado para describir el fenmeno por el cual el desempeo o
capacidad de un sistema se ve gravemente limitada por un slo componente del mismo.
Deadlock: se llama as a la situacin donde dos o ms procesos estn cada uno esperando que el otro libere un
recurso en una cadena circular.
Demonio: un demonio o daemon, de sus siglas en ingls Disk And Execution Monitor, es un tipo especial de
proceso que se ejecuta en segundo plano en vez de ser controlado directamente por el usuario, es decir es un
proceso no iterativo Este tipo de programa se ejecuta de forma continua.
Excepciones chequeadas: son excepciones que deben ser capturadas explcitamente mediante el bloque trycatch-finally o propagadas.
Excepciones no chequeadas: son excepciones que no es obligatorio que sean capturadas o propagadas.
161
Framework: se llama as a un conjunto estandarizado de conceptos, prcticas, criterios y/o componentes para
enfocar un tipo de problemtica particular que sirve como referencia, para enfrentar y resolver nuevos
problemas de ndole similar. Dentro del contexto del desarrollo de software, es una estructura de soporte
definida mediante la cual otro proyecto de software puede ser organizado y desarrollado, tpicamente puede
incluir bibliotecas, componentes, etc para ayudar a desarrollar y unir diferentes componentes de un proyecto.
GNU GPL: es una licencia creada a mediados de los aos 80, orientada a proteger la libre distribucin,
modificacin y uso de software, protegindolo de intentos de apropiacin. El software cubierto por esta licencia
es el llamado software libre [GPL].
Heap: es la porcin de memoria en la cual se almacenan los objetos creados durante la ejecucin de las
aplicaciones Java.
Infraestructura de IT: se denomina as al conjunto de elementos o servicios tecnolgicos, es decir
relacionados con la tecnologa de la informacin, que se consideran necesarios para el funcionamiento de una
organizacin o el desarrollo de una actividad.
Instruccin o cdigo nativo: se llama as al cdigo ya compilado, es decir que puede ser ejecutado en una
plataforma en particular.
Instrumentar: se llama as a la funcin de adosar un mecanismo a una aplicacin, JVM, o cualquier otro
recurso con el fin de monitorearla, es decir de observar su comportamiento cuando se est ejecutando.
IT: siglas del ingls Information Technologies (tecnologas de la informacin), que se utilizan para denominar
todo lo relacionado con el diseo, desarrollo, fomento, mantenimiento y administracin de la informacin por
medio de sistemas informticos, para informacin, comunicacin o ambos. Esto incluye todos los sistemas
informticos no solamente las computadoras sino tambin las redes de telecomunicaciones, telemtica, los
telfonos celulares, la televisin, la radio, los peridicos digitales, faxes, dispositivos porttiles, etc.
JAR: del ingls Java Archive, son archivos comprimidos que contienen componentes y/o aplicaciones escritas
en Java.
Java Platform, Standard Edition (J2SE): es una plataforma altamente utilizada para desarrollar programas en
el lenguaje de programacin Java, consiste de una VM junto con un conjunto de bibliotecas necesarias para
facilitar el uso, dentro de las aplicaciones desarrolladas, de la red, el file system, la interfaz grfica entre otras
cosas.
Listener: es un trmino utilizado en la disciplina de desarrollo de software para llamar a los objetos que se
quedan esperando por la ocurrencia de un determinado evento.
Log: es un registro de los eventos producidos en un determinado perodo de tiempo.
Open source o cdigo abierto: es el trmino con el que se conoce al software distribuido junto con su cdigo
fuente. Un programa open source puede ser software libre, es decir que puede ser distribuido libremente, semi
libre o directamente no libre. Sin embargo, por lo general, un programa de cdigo abierto es libre, como
igualmente un programa software libre es open source. Esto ocurre dado que ambos movimientos reconocen el
mismo conjunto de licencias y mantienen principios equivalentes. [OSWIKI]
Overhead: se llama as a la sobrecarga de los recursos necesarios, como por ejemplo el tiempo de ejecucin, la
memoria utilizada, para lograr un determinado objetivo.
Patrn de diseo: se llama as a una solucin a un problema de diseo comn de la cual est comprobada su
efectividad resolviendo problemas similares.
162
Plugin (plug-in): es una aplicacin que se relaciona con otra para aportarle una funcin nueva y generalmente
muy especfica. Esta aplicacin adicional es ejecutada por la aplicacin principal e interactan por medio de la
API. Es una forma de expandir programas de forma modular, de manera que se puedan aadir sin afectar a las
ya existentes ni complicar el desarrollo del programa principal.
Protocolo HTTP/1.1: el protocolo HTTP/1.1 es la versin 1.1 del protocolo HTTP (Hypertext Transfer
Protocol) el cual es el protocolo utilizado para navegar por internet.
Script: los scripts son un conjunto de instrucciones generalmente almacenadas en un archivo de texto que
deben ser interpretados lnea a lnea en tiempo real para su ejecucin, se distinguen de los programas, en que
estos ltimos deben ser compilados y traducidos a lenguaje mquina para luego poder ser utilizados.
Shell script: es un script escrito para un intrprete de comando de un determinado sistema operativo.
Signatura: la signatura o firma de un mtodo define su entrada y su salida. Incluye por lo menos el nombre de
la funcin o mtodo y el nmero de sus parmetros. En algunos lenguajes de programacin, puede incluir el
tipo que devuelve la funcin o el tipo de sus parmetros.
Sistemas de eventos discretos: se llama as a los sistemas donde las seales que transportan la informacin
existen o son consideradas slo a intervalos discretos de tiempo.
SLA: los SLAs son contratos escritos entre el proveedor de un servicio y su cliente en el cual se fija el nivel
acordado para la calidad de dicho servicio.
SLO: se llama SLOs a los valores deseados para las distintas mtricas del sistema, como por ejemplo para el
tiempo de respuesta del mismo.
Socket: designa un concepto abstracto por el cual dos aplicaciones pueden intercambiar cualquier flujo de
datos, generalmente de manera confiable y ordenada. Este trmino tambin es utilizado como el nombre de una
API para la familia de protocolos de Internet TCP/IP.
Stack trace: es un reporte de las llamadas a funciones hechas por un programa.
Stack: es el rea de memoria donde se almacena el estado de invocacin del mtodo Java (no nativo) que se
est ejecutando en el thread. Este estado incluye sus variables locales, los parmetros con los cuales fue
invocado, su valor de retorno (si existe) y clculos intermedios.
Stakeholders: es un trmino que utilizado en el contexto del desarrollo de sistemas de software se refiere a las
personas o entidad interesada/s o involucrada/s en la realizacin de un proyecto o tarea, auspiciando el mismo
ya sea mediante su poder de decisin o de financiamiento, o a travs de su propio esfuerzo.
STDOUT: se llama as a la salida estndar de un programa generalmente la misma esta direccionada a la
terminal del usuario.
Test de carga: test que tiene la finalidad de ver cmo se comporta el sistema frente a la carga normal que
soportar una vez que se encuentre productivo.
Test de stress: test que se le realiza a un sistema con el objetivo de llevarlo al lmite para descubrir la existencia
de fallas en el mismo.
Thread: un thread es un hilo de ejecucin, es decir es una bifurcacin de un programa en dos o ms tareas
concurrentes. La implementacin de threads y procesos difieren de un sistema operativo a otro, pero en la
mayora de los casos un thread est contenido dentro de un proceso. La diferencia bsica entre un proceso de
sistema operativo y un thread es que los threads corren dentro del proceso del sistema operativo que las cre, la
JVM en el caso de Java, y por tanto comparten todos los recursos, incluida la memoria y las variables y objetos
all definidos. Mientras que los procesos no comparten sus datos.
163
Timestamp: es una secuencia de caracteres, que denotan la hora y fecha (o alguna de ellas) en la cual ocurri
determinado evento.
Web Server: o servidor web, tambin llamado servidor HTTP, es un sistema que utiliza el modelo de
arquitectura cliente/servidor y el protocolo HTTP (Hypertext Transfer Protocol) para servir los archivos que
forman parte del contenido de las pginas web accedidas mediante internet.
164
Referencias
[ACLWIKI]
Abdelzaher, T., Diao, Y., Hellerstein, J.L., Yu. C. y Zhu, X. 2008. Introduction to
control theory and its application to computing systems. In Z. Liu and C. Xia,
editors, Performance Modeling and Engineering.
[ABLE]
[ANT]
[APACHEARP]
[APACHEHTTP]
[APACHETOMCAT]
[APIWIKI]
Arzen K., Robertsson A., Henriksson A., Johansson M., Hjalmarsson H., y
Johansson K.H. 2006. Conclusions of the ARTIST2 Roadmap on Control of
Computing Systems. SIGBED Rev., Vol. 3 Nro. 3, Pginas 1120
Avizienis A., Laprie J.C., Randell B. y Landwehr C. 2004. Basic Concepts and
Taxonomy of Dependable and Secure Computing. IEEE Transactions on
Dependable and Secure Computing, Vol. 1, Issue 1. Pginas 11- 33.
[BRAINYPDM]
[BRAINYPDMARQ]
[BRAINYPDMINSTALL]
Castro, R., Kofman, E. y Wainer, G.2009.A DEVS based end to end Methodology
for Hybrid Control of Embedded Networking Systems. In Proceedings of
ADHS'09: 3rd IFAC Conference on Analysis and Design of Hybrid Systems,
165
Zaragoza, Spain.
[Castro et al, 2012]
[CHECKPROCPLUGIN]
[CHECKSSHPLUGIN]
[Cheng, 2008]
Cheng S.W.,2008. Rainbow: Cost-Eective Software Architecture-Based SelfAdaptation. School of Computer Science, Carnegie Mellon University,
Pittsburgh, PA, USA. ProQuest.
[Cheng et al,2009]
Cheng, B.H., Lemos, R., Giese, H., Inverardi, P., Magee, J., Andersson, J.,
Becker, B., Bencomo, N, Brun, Y.,Cukic, B., Serugendo Marzo, G., Dustdar, S.,
Finkelstein, A.,Gacek, C.,Geihs, K., Grassi, V., Karsai, G., Kienle, H.M., Kramer,
J., Litoiu, M., Malek, S., Mirandola, R., Muller, H.A., Park, S., Shaw, M., Tichy,
M.,Tivoli, M., Weyns, D. y Whittle, J. 2009. Software engineering for selfadaptive systems. chapter Software Engineering for Self-Adaptive Systems: A
Research Roadmap. Springer-Verlag, Berlin, Heidelberg. Pginas 1-26.
[Diaconescu, 2006]
166
Diao Y., Gandhi N., Hellerstein J.L., Parekh S, y Tilbury D. M. 2002. Using
MIMO feedback control to enforce policies for interrelated metrics with
application to the Apache Web server. Network Operations and Management
Symposium. Pginas 219-234
Diao Y., Hellerstein J.L., Parekh S., Griffith R., Kaiser G. y Phung D. 2004. SelfManaging Systems: A Control Theory Foundation. 1St Workshop on Operating
System and Arquitecturaal Support.
Gandhi N., Tilbury D. M., Diao Y., Hellerstein J y Parekh S. 2001. MIMO
Control of an Apache Web Server: Modeling and Controller Design. Submitted to
the 2002 American Control Conference. IBM Research Division.
http://domino.watson.ibm.com/library/cyberdig.nsf/papers/BCB8701FD6FC46C
A85256AEE0074B9F1/$File/RC22216.pdf. Pgina vigente al 16/01/2012
Garlan D. y Schmerl B. Noviembre 2002. Model-based Adaptation for SelfHealing Systems. WOSS 02: Proceedings of the first workshop on Selfhealing
systems. New York, NY, USA: ACM Press, 2002. Pginas 2732
Garlan, D., Cheng, S.W., Huang, A.C., Schmerl, B. y Steenkiste, P. Octubre 2004.
Rainbow: Architecture-based self-adaptation with reusable infrastructure. IEEE
Computer, Vol. 37, Issue 10. Pginas 4654.
[GGPL]
Ghosh D., Sharman R., Raghav R., Rao H. y Upadhyaya S.2007. Self-healing
systemssurvey and synthesis. Vol. 42, Nro.4. Pginas 2164-2185
Gosling J., Joy B., Steele G. y Bracha.G. The Java Language Specification. Sun
Microsystems, 3ed Edition.
http://java.sun.com/docs/books/jls/third_edition/html/j3TOC.html. Pgina vigente
al 07/10/2011.
Hellerstein J.L., Diao Y., Parekh S.y Tilbury D.M. 2004. Feedback Control of
Computing Systems. IEEEJohn Wiley & Sons, Inc.
Hellerstein J.L., Diao Y., Parekh S.y Tilbury D.M. 2005. Control Engineering for
Computing Systems. IEEE Control Systems Magazine
[Hellerstein, 2003]
[Hinnelund, 2004]
[HPROFSUN]
167
[ISAWIKI]
[JBOSSWEB]
[JCP]
[JDIAPI]
Jendrock E., Ball J., Carson D., Evans I., Fordin S. y Haase K. 2010.The Java EE
5 Tutorial. http://docs.oracle.com/javaee/5/tutorial/doc/ . Oracle Parkway. Pgina
vigente al 01/08/2012
[JMETER]
[JMXESP,2006a]
[JMXNAGIOSPLUGIN]
[JPDA]
[JVMMIB]
JVM-MANAGEMENT-MIB.
http://download.oracle.com/javase/6/docs/jre/api/management/JVMMANAGEMENT-MIB.mib. Pgina vigente al 07/10/2011.
[JVMTI]
[JVMTIEVENT]
[JVMTIFUN]
Sun Microsystems, Inc. Java Virtual Machine Tools Interface: Functions Index
http://java.sun.com/javase/6/docs/platform/jvmti/jvmti.html#FunctionIndex.
Pgina vigente al 07/10/2011.
Kephart J.O. y Chess D.M. Enero 2003. The Vision of Autonomic Computing.
IBM Thomas J. Watson Research Center. IEEE Computer. Pginas 41-50.
168
[Kofman,2000a]
[Kofman,2000b]
[Kofman,2000c]
[Koopman, 2003]
[Kreger et al,2002a]
Kreger, H., Harold, W. y Williamson L. December 2002. Java and JMX: Building
Manageable Systems. Addison Wesley. Captulo 3.
[Kreger et al,2002b]
Kreger, H., Harold, W. y Williamson L. December 2002. Java and JMX: Building
Manageable Systems. Addison Wesley. Captulo 4.
[MXBEANESP]
MXBean Specification.
http://java.sun.com/javase/6/docs/api/javax/management/MXBean.html#MXBea
n-spec. Pgina vigente al 07/10/2011.
[NAGIOS]
[NAGIOSBOOKS]
[NAGIOSCOMMANDS]
[NAGIOSCOREPLUGINS]
[NAGIOSDOWNLOADS]
vigente al 03/10/2011
[NAGIOSINSTALL]
169
10/07/2012.
[NAGIOSMACROS]
[NAGIOSMACROSSTAND]
[NAGIOSOBJECTS]
[NAGIOSPERFDATA]
[NAGIOSPLUGINAPI]
Nagios Plugin
API. http://nagios.sourceforge.net/docs/3_0/pluginapi.html. Pgina vigente al
05/10/2011.
[NAGIOSPLUGINDEV]
[NAGIOSPLUGINS]
[NAGIOSSERVICIOS]
[NAGIOSUSERS]
[NRPE]
[NSCA]
[OPENNMS]
Oreizy, P., Gorlick, M.M., Taylor, R.N., Heimhigner, D., Johnson, G.,
Medvidovic, N., Quilici, A., Rosenblum, D.S. y Wolf, A.L.1999. An ArchitectureBased Approach to Self-Adaptive Software. IEEE Intelligent Systems. Vol. 14,
Nro. 3, Pginas 54-62.
[OSWIKI]
Park J., Jung J. , Piao S. y Lee E. 2008. Self-Healing Mechanism for Reliable
Computing. IJMUE International Journal of Multimedia and Ubiquitous
170
[PLATMBEANS]
[POWERDEVS]
[PSLINUXCOMMAND]
[RUNNEABLE]
Smith J.E. y Nair R. Mayo 2005. The Architecture of Virtual Machines. IEEE
Computer, Vol. 38, Issue 5. Pginas 3238.
[SNMPJVM]
[SNMPLINKS]
[SPEC JVM98]
[SUN, 2008a]
[SUN,2008b]
[SUNJEETutorial]
[SUNMONandMAN]
[SUNVISUALVM]
171
vigente al 03/05/2009
[TOPLINUXCOMMAND]
[Venners, 2000a]
[Venners, 2000b]
[Vuori, 2007]
[WINE]
[ZABBIX]
[ZENNOS]
172
ndice de Figuras
Figura 1 - Esquema de funcionamiento de una HLL-VM ......................................................................16
Figura 2 - Arquitectura de la JVM obtenida de [Orlando & Russo, 2006] .............................................18
Figura 3 - Arquitectura de JEE (obtenida de [Singh et al, 2002]) ...........................................................19
Figura 4 - Clases de defectos combinados Parte 1 ...............................................................................25
Figura 5 - Clases de defectos combinados Parte 2 ...............................................................................25
Figura 6 - Control de bucle cerrado ........................................................................................................37
Figura 7 - Esquema del enfoque basado en modelos de arquitectura [Garlan & Schmerl, 2002] ..........37
Figura 8 - Esquema del framework Rainbow. [Garlan et al, 2004] ........................................................38
Figura 9 - Diagrama en bloques de un sistema de control de lazo cerrado tipo SISO ............................39
Figura 10 - Respuesta de un sistema estable ...........................................................................................41
Figura 11 - Arquitectura de JVMMon .....................................................................................................44
Figura 12 - Arquitectura de AQuA ..........................................................................................................45
Figura 13 - Integracin de AQuA J2EE con el JBoss .............................................................................46
Figura 14 - Arquitectura de Rainbow ......................................................................................................48
Figura 15 - Arquitectura de Arco Iris ......................................................................................................50
Figura 16 - Arquitectura del Apache HTTP Server .................................................................................52
Figura 17 - Control tipo MIMO para el Apache HTTP Server ...............................................................53
Figura 18 - Entradas de control y resultados de los experimentos..........................................................53
Figura 19 - Ecuacin del modelo ARX para el Apache Server ...............................................................54
Figura 20 - Resultados de las evaluaciones: (a) y (b) utilizando prediccin de un paso para CPU y
MEM respectivamente. (c) utilizando prediccin multipaso ...............................................54
Figura 21 - Ecuacin en diferencias finitas que rige a un control PI ......................................................55
Figura 22 - Arquitectura de JPDA...........................................................................................................57
Figura 23 - Arquitectura JMX .................................................................................................................60
Figura 24 - Esquema de la solucin propuesta .......................................................................................66
Figura 25 - Arquitectura del JBoss Web Server (obtenida de [JBOSSWEB].) .......................................68
Figura 26 - Arquitectura de Nagios .........................................................................................................70
Figura 27 - Esquema de funcionamiento del NRPE [NRPE] .................................................................74
Figura 28 - Esquema de funcionamiento del NSCA [NSCA] .................................................................74
Figura 29 - Arquitectura de BrainyPDM.................................................................................................76
Figura 30 - Esquema del proceso del sensor ...........................................................................................80
Figura 31 - Diagrama de secuencia del proceso de recepcin de mtricas y transmisin de las
mismas al sistema de control externo...................................................................................80
Figura 32 - Diagrama de clases de los transmisores ...............................................................................81
Figura 33 - Diagrama de clases de los actuadores ..................................................................................83
Figura 34 - Diagrama de secuencia del proceso de actuacin sobre el sistema controlado ....................85
Figura 35 - Esquema del proceso de actuacin .......................................................................................85
Figura 36 - Simulador jerrquico (derecha) asociado a un modelo (izquierda) ......................................88
Figura 37 - Interfaz del editor de PowerDEVS: Editor principal (izquierda). Editor de un modelo
173
(derecha) ...............................................................................................................................89
Figura 38 - Interfaz de edicin de cdigo de los atmicos de PowerDEVS ...........................................89
Figura 39 - Interfaz de simulacin de PowerDEVS ................................................................................90
Figura 40 - Modelo de clases principales de PowerDEVS. ....................................................................91
Figura 41 - Ejemplo de uso de la funcin sendNET ...............................................................................92
Figura 42 - Esquema del mecanismo de subscripcin ............................................................................95
Figura 43 - Diagrama que muestra el registro de un atmico como listener de un puerto .....................96
Figura 44 - Diagrama de secuencia ante la llega de datos por un puerto ................................................97
Figura 45 - Diagrama de secuencia que muestra la comunicacin de los datos recibidos .....................98
Figura 46 - Esquema de recepcin y envo de datos ...............................................................................99
Figura 47 - Controlador: (a) Mquina de estados. (b) Espacio de estados (con histresis). .................103
Figura 48 - Diagrama en bloques de la estrategia de control utilizada .................................................109
Figura 49 - Diseo de la carga de la prueba 1 y su poblacin de usuarios concurrentes ...................... 114
Figura 50 - Prueba 1: Caso de Test 0 (ejecucin sin la plataforma). (a) Consumo de CPU (b)
Memoria Heap libre ........................................................................................................... 115
Figura 51 - Prueba 1: Caso de Test 0 (ejecucin sin la plataforma). (a) Cantidad de threads creados.
(b) Cantidad de threads ocupados ...................................................................................... 115
Figura 52 - Prueba 1: Caso de Test 1. (a) Consumo de CPU (b) Memoria Heap libre ......................... 117
Figura 53 - Prueba 1: Caso de Test 1. (a) Cantidad de threads creados. (b) Cantidad de threads
ocupados ............................................................................................................................. 117
Figura 54 - Prueba 1: Caso de Test 2. (a) Consumo de CPU (b) Memoria Heap libre ......................... 119
Figura 55 - Prueba 1: Caso de Test 2. (a) Cantidad de threads creados. (b) Cantidad de threads
ocupados ............................................................................................................................. 119
Figura 56 - Diseo de la carga de la prueba 2 y su poblacin de usuarios concurrentes ......................120
Figura 57 - Prueba 2: Caso de Test 0 (ejecucin sin la plataforma). (a) Consumo de CPU (b)
Memoria Heap libre ...........................................................................................................122
Figura 58 - Prueba 2: Caso de Test 0 (ejecucin sin la plataforma). (a) Cantidad de threads creados.
(b) Cantidad de threads ocupados ......................................................................................122
Figura 59 - Prueba 2: Caso de Test 1. (a) Consumo de CPU (b) Memoria Heap libre .........................124
Figura 60 - Prueba 2: Caso de Test 1. (a) Cantidad de threads creados. (b) Cantidad de threads
ocupados .............................................................................................................................124
174
ndice de Listados
Listado 1 - Platform MBeans .................................................................................................................62
Listado 2 - Cdigo de retorno de los plugins de Nagios .........................................................................71
Listado 3 - Comandos configurados para el plugin check_jmx ..............................................................73
Listado 4 - Servicios configurados para la recoleccin de las mtricas. ..............................................105
Listado 5 - Configuracin de los MBeans utilizados en la prueba de concepto ..................................106
Listado 6 - Configuracin del transmisor TransmisorByUDP .............................................................107
Listado 7 - Configuracin del actuador ActuadorByUDP ...................................................................108
Listado 8 - Descripcin de las funciones del modelo Sensor .............................................................. 110
Listado 9 - Descripcin de las funciones del modelo Procesador........................................................ 111
Listado 10 - Descripcin de las funciones del modelo Efector ............................................................ 112
Listado 11 - Cdigo fuente del modelo atmico Sensor ......................................................................137
Listado 12 - Cdigo fuente del modelo atmico Procesador ...............................................................137
Listado 13 - Cdigo fuente del modelo atmico Efector .....................................................................141
175