DocumentsDate added
--
--
--
--
arquitectura, movilidad, Migración, comunicación, diseño, comercio electronico, tiempo, paquetes, Java, blackboard, Administrador de Comunicaciones, entre Agentes, Acceso a Servidores, Aplicaciones, Aplicación, Externa, Agente Móvil Inteligente, LogicRaptor, Brain Administrador, Módulo, lógico, confiabilidad, seguridad, directorios, servidor, inteligentes - Resumen del Documento: La tecnología orientada a agentes de software y sus diversas ramas aparecen hoy en día como una de las más importantes para construir el software de las futuras computadoras. El éxito creciente de esta nueva generación de servicios y aplicaciones basadas en agentes produce un potencial industrial y un impacto económico en diferentes áreas. Entre las principales podemos mencionar: el comercio, los medios de comunicación, y en general todas aquellas áreas en donde sea necesario la adquisición y el manejo de información. Uno de los dominios mas importantes hoy en día de las aplicaciones basadas en agentes es Internet, y aunque la tecnología de las comunicaciones ha tenido un notable crecimiento estos últimos años, no ha podido crecer a la misma velocidad en que lo ha hecho la cantidad de información disponible en toda la red. Por otro lado, al mismo tiempo que creció la cantidad de información, también se incrementó el número de usuarios que utiliza los servicios provistos en Internet. Por lo tanto, se puede inferir que pronto los canales de comunicación no serán suficientes para abastecer las demandas de todos los usuarios, y debido a eso es que paradigmas computacionales de redes clásicos como el paradigma Cliente-Servidor o el paradigma de código en Demanda, están siendo reemplazados por el paradigma de agentes móviles. Dentro de las tecnologías orientadas a agentes, particularmente los sistemas de agentes móviles representan actualmente uno de los paradigmas más prometedores para la programación de sistemas ampliamente distribuidos y heterogéneos [Chess 95]. Este tipo de sistemas involucra dos conceptos básicos: sitios servidores de recursos y agentes que poseen la habilidad de trasladarse a los sitios para acceder a sus recursos, o contactarse con otros agentes [Kotz 99]. La movilidad de agentes, es decir su habilidad de migrar de un sitio a otro, constituye la principal diferencia de enfoque con respecto a otras alternativas existentes para el desarrollo de sistemas distribuidos, como los de llamadas a procedimientos remotos, evaluación remota o código por demanda. Las principales ventajas identificadas en el uso de agentes móviles, radican en la potencial reducción de costos de comunicación global mediante la migración de las unidades de computación a los datos y la posibilidad de distribuir computaciones complejas en diferentes sitios, posiblemente heterogéneos. Adicionalmente, varios trabajos [Lange 99], [Gray 00], [Wong 97] han mostrado la utilidad de los agentes móviles para aplicaciones de comercio electrónico, recuperación de información distribuida, entre otras. Tales aplicaciones se benefician al utilizar agentes móviles al explotar sus capacidades de procesamiento autónomo y asincrónico, adaptabilidad dinámica a los cambios de su ambiente de ejecución y tolerancia a fallas. Los lenguajes de programación orientados a objetos poseen características que permiten satisfacer parte de los requerimientos de la programación orientada a agentes [Shoham 97] y en particular de agentes móviles [Wong 99]. Según estos enfoques, un agente puede modelarse mediante un objeto cuyos métodos representan sus habilidades, y las variables de instancia su estado mental. De esta forma, un objeto encapsulará en sus métodos capacidades comportamentales de un agente y su conocimiento estará dado por el estado de sus variables de instancia. Actualmente, se ha desarrollado un número importante de sistemas que utilizan el lenguaje orientado a objetos Java como soporte de programación de agentes móviles. Ejemplos de estos sistemas de soporte basados en Java, son: Aglets [Lange 98], SOMA [Bellavista 99] y MOLE [Strasser 96]. Las ventajas que Java provee a la tecnología de agentes móviles, son fundamentalmente su soporte multiplataforma y la ubicuidad de su máquina virtual, lo cual facilita la adopción de agentes móviles en Internet. Adicionalmente, Java presenta características no encontradas en otros lenguajes que permiten la implementación directa de agentes móviles [Wong 99]. Por ejemplo, Java facilita la migración del código del agente y su estado mediante mecanismos de serialización de objetos y carga dinámica de clases locales o remotas. Por otra parte, el soporte de comunicaciones en redes provisto por Java incluye sockets, comunicaciones mediante diversos protocolos y una infraestructura para el acceso a objetos distribuidos denominado remote method invocation (RMI). A pesar de las bondades que los lenguajes orientados a objetos presentan para la programación orientada a agentes en general, y Java en particular para agentes móviles, estos lenguajes adolecen sin embargo de limitaciones. Estas limitaciones se evidencian a la hora de tratar con las actitudes mentales de los agentes, debido a que se deben implementar distintos algoritmos de inferencia sobre las variables de instancia que representan el conocimiento del agente. Estos algoritmos, en caso de ser implementados en lenguajes orientados a objetos, son en general, costosos de programar y poco flexibles a cambios [Zunino 01]. Es ampliamente aceptado que el paradigma de programación lógica representa una alternativa apropiada para manejar actitudes mentales debido a su evidente soporte para representar e inferir relaciones [Wooldridge 99]. Los lenguajes de programación en lógica permiten representar actitudes mentales en forma declarativa por medio de cláusulas lógicas. Estas cláusulas son interpretadas por algoritmos deductivos que, en el contexto de la programación de agentes, dan origen a razonamientos dependientes del conocimiento propio de los agentes. Desafortunadamente, los lenguajes lógicos presentan deficiencias en la programación de agentes debido a su imposibilidad de encapsular información y tratar con conocimiento privado [Amandi et al. 99]. JavaLog es un lenguaje de programación multiparadigma que integra ambas, programación lógica y orientada a objetos, por lo tanto facilita y mejora el desarrollo Introducciónde sistemas de agentes inteligentes. Esto ayuda a solucionar las limitaciones mencionadas anteriormente, permitiendo a los agentes manejar actitudes mentales complejas. Para poder integrar las ventajas que proveen los sistemas de agentes móviles mencionadas anteriormente, principalmente la reducción de costos de comunicación con las ventajas de utilizar agentes programados en Prolog se necesita tener una arquitectura que brinde soporte para la movilidad de tales tipos de agentes. Entre todos los sistemas de agentes móviles existentes, el más similar a nuestro sistema de agentes móviles ideal es Jinni, el cual consiste de un interprete Prolog desarrollado en Java. Pero, aunque presenta las ventajas mencionadas anteriormente sobre el uso conjunto de los paradigmas orientado a objetos y lógico; presenta también varias desventajas. Sólo soporta un subconjunto muy reducido de Prolog, lo que limita considerablemente su potencia expresiva. Otro aspecto que dificulta enormemente la utilización de Jinni lo constituye su limitado esquema de migración de unidades de ejecución. A pesar de que las alternativas para solucionar estas deficiencias utilizando los recursos propios del lenguaje son variadas, todas ellas adolecen de dos problemas: no son transparentes para el programador y en ciertos casos generan más problemas que los que solucionan. Estudiaremos con más detalle este sistema en el capítulo 3. Nuestra propuesta consiste en una arquitectura que permite implementar sistemas de agentes móviles usando Javalog. Esto permite que los agentes sean programados usando el paradigma de programación en lógica y todos los mecanismos de comunicación estén implementados en Java. En esta propuesta se presenta un enfoque para soportar el diseño y programación de agentes móviles inteligentes basados en Prolog. Este enfoque es materializado esencialmente por una arquitectura de software basada en agentes móviles desarrollados en JavaLog [Amandi et al. 99], [Zunino 01], un lenguaje que integra los paradigmas de programación lógica y de orientación a objetos. 1.2.1 Infraestructura para el soporte de Agentes Móviles Inteligentes La Figura 1.1 presenta una arquitectura de software para el soporte de agentes móviles inteligentes. Esta se basa esencialmente en la arquitectura genérica de agentes móviles basados en Java descripta en [Belloni - Campo 01]. En el diagrama, que utiliza notación UML [Rumbaugh et al. 99], se pueden visualizar los diferentes componentes que forman parte de la arquitectura. Los principales componentes son el administrador de agentes, el administrador de comunicaciones entre agentes, el administrador de seguridad, el administrador de confiabilidad, el portal servidor de aplicaciones y un administrador de directorios. El administrador de agentes es responsable por la recepción de agentes para su ejecución en el sitio local y del envío de agentes para ser ejecutados en sitios remotos. Antes de efectuar la migración de un agente, este administrador lo serializa junto con su estado. Luego, delega el envío de esta representación serializada del agente al administrador de confiabilidad, el cual asegura que el agente es recibido por el administrador de agentes correspondiente en el sitio destino. Al recibirlo, este Introducción componente reconstruye el agente y los objetos que el referencia, a partir de su representación serializada, creando su contexto de ejecución. El administrador de seguridad es responsable por la autenticación del agente antes de que este comience su ejecución. La máquina virtual Java subyacente invocará automáticamente a este componente para autorizar cualquier intento de utilizar recursos del sistema por parte de los agentes. El administrador de comunicaciones entre agentes facilita la comunicación entre agentes móviles dispersos en diferentes sitios. Los agentes pueden utilizar el administrador de directorios para identificar la localización de un servidor de aplicaciones y luego migrar al sitio en el cual este servidor esta localizado. El portal servidor de aplicaciones representa para los agentes un punto de acceso a aplicaciones externas al sistema de agentes móviles, residentes en el sitio local, como por ejemplo acceso a servidores de bases de datos. - Glosario: Agente móvil: Entidad autónoma con capacidades comportamentales y con un conocimiento interno. Se lo puede definir como un componente de software (programa) activo que percibe, razona, se comunica y tiene la capacidad de migrar de un sitio a otro. Broker: Funciona como intermediario, permitiendo la comunicación entre diferentes componentes de software distribuidos en una red. Código en demanda: Paradigma de redes de computación. El cliente posee los recursos necesarios para la ejecución de un servicio, pero no sabe como usarlos para realizar dicho servicio. El código es obtenido de un servidor remoto. Este esquema es utilizado por los applets o por el mecanismo de pasaje de parámetros de RMI (en Java). CORBA: “Common Object Request Broker Architecture” es una arquitectura y especificación para crear, distribuir y administrar objetos distribuidos en una red. Permite que programas en diferentes lugares de la red se comuniquen en una red a través de una interfase común. DCOM (Distributed Component Object Model): Es un conjunto de interfaces en las cuales los objetos del programa cliente puede pedir servicios de programas servidores en otras computadoras dentro de una red. DCOM es generalmente equivalente a CORBA en cuanto a que provee un conjunto de servicios distribuidos. Espacio de datos (o estado): Es el conjunto de asociaciones de los recursos que están siendo compartidos con otros agentes. En la mayoría de las implementaciones de Java, esta constituido por los objetos asociados al agente. Estado de ejecución: El control y los datos internos asociados a la unidad de ejecución. Evaluación remota: Paradigma de redes de computación. El cliente tiene conoce como realizar el servicio, pero carece de los recursos necesarios, los cuales tiene el servidor. Luego de recibir el código en el servidor, la interacción procede como en el paradigma cliente-servidor, con el código accediendo a los recursos, ahora locales, y enviando los resultados de vuelta al cte.. Ejemplos: shells remotos y servidores SQL. Groupware: Se refiere a los programas que ayudan a la gente a trabajar colaborativamente mientras que pueden encontrarse físicamente apartadas entre ellas. Linkeo remoto dinámico (remote dynamic linking): Es la habilidad de resolver el nombre de una clase en tiempo de ejecución recuperando el bytecode de un nodo remoto y linkeándolo en el nodo local. Esta técnica está soportada por Java por el hecho de que el class loader es programable. Marshalling: Proceso de reunir datos de una o más aplicaciones en un mensaje y, organizar y convertirlos a un formato apropiado para el receptor del mensaje. Es usualmente requerido para el intercambio de mensajes entre aplicaciones escritas en diferentes lenguajes y/o corriendo en plataformas cuya representación interna de los datos es diferente entre sí. Migración débil: Los sistemas que soportan movilidad débil permiten la transferencia de código de aplicación de o hacia un sitio diferente. En el destino, el código puede ser corrido en una nueva unidad de ejecución o puede ser ligado a una existente. Comienza su ejecución desde el principio. Migración fuerte: Los sistemas que soportan movilidad fuerte permiten a una unidad de ejecución moverse como un todo, reteniendo su estado de ejecución. La migración es transparente, en el sentido de que la unidad de ejecución continúa en el nuevo sitio en la instrucción siguiente a la que disparó la migración. ORB (Object Request Broker): Es la lógica que actúa de intermediario entre un pedido del cliente de un servicio y la respuesta de dicho servicio. RMI (Remote Method Invocation): Se podría ver como la versión Java de RPC. RPC (Remote Procedure Call): Llamado a Procedimiento Remoto es un protocolo que un programa puede usar para pedir un servicio a un programa ubicado en otra computadora. RPC utiliza el modelo cliente / servidor; el programa que pide el servicio es el cliente y el programa que provee el servicio es el servidor. Al igual que un llamado a una función local, RPC es una operación síncrona. Sistemas Middleware: Un Sistema Middleware es software que conecta dos aplicaciones separadas. El término middleware es usado para describir productos separados que sirven como pegamento entre dos aplicaciones. Stub: Es un programa pequeño que sustituye a uno más grande, para que sea posiblemente cargado más tarde o que esté ubicado en un sitio remoto. Unidad de ejecución: Las unidades de ejecución representan flujos de computación. Los ejemplos típicos son procesos de un solo thread o threads individuales de un proceso con múltiples threads. Workflow: Es un termino usado para describir las tareas, pasos, organizaciones o personas involucradas, información de entrada y de salida, y las herramientas necesarias en cada paso de un proceso de negocios. Facultad de Ciencias Exactas, Universidad del Centro de la Provincia de Buenos Aires.