La programación orientada a objetos representó en su tiempo un gran salto adelante con respecto a la programación estructurada. La teoría de agentes establece una serie de mecanismos que pretenden dar un paso más allá en el tratamiento informático distribuido, añadiendo características como la localización o la situación, y permitiendo la interacción dinámica de componentes autónomos y heterogéneos. La teoría de los agentes, y por extensión la asociada a los agentes móviles, va un paso más allá en el procesamiento entre módulos funcionales cooperantes y espacialmente separados, al permitir la programación de entidades computacionales móviles con capacidad de representación para ejecutar determinadas tareas en el ambiente citado y asociado con los sistemas distribuidos y las redes de computadoras.
Según los editores Imielinski y Korth, en el libro publicado el año 1996 titulado “Computación móvil”, un agente software es un módulo software que se ejecuta en un cierto lugar o contexto de ejecución. Un lugar es creado utilizando un sistema de agentes, el cual es una plataforma que puede crear, interpretar, ejecutar, transferir y liberar agentes. Un agente posee las siguientes propiedades principales, aclarando que en algunos contextos específicos no tienen porque concurrir todas las propiedades: (1) Autonomía, posee el control sobre sus propias acciones; (2) Finalidad, gestiona una agenda de objetivos; (3) Cooperación, un agente es capaz de comunicarse con otros agentes; (4) Aprendizaje, cambia su comportamiento de acuerdo a su experiencia previa; (5) Movilidad, puede viajar de una computadora a otra, en realidad de un lugar a otro; (6) Reactividad, siente los cambios de su entorno y reacciona ante ellos; (7) Persistencia, para interrumpir su ejecución y continuarla más adelante. Sin embargo, en el contexto de los sistemas de información distribuidos la movilidad se convierte en una de las características más interesantes. Algunos de los sistemas de agentes móviles más relevantes son Aglets y Voyager. Aglets es una biblioteca de clases Java empleada para el desarrollo de agentes móviles. Fue creada por el Laboratorio de Investigación IBM de Tokyo, por los investigadores Lange y Oshima, reportado en el libro escrito el año 1998 titulado “Programación y desarrollo de agentes móviles Java con Aglets”. Un aglet es un objeto Java transportable y persistente que se ejecuta de manera asíncrona en un nodo que posee un contexto de ejecución. El contexto de ejecución proporciona un ambiente seguro, protegiendo tanto al nodo como al aglet de aglets maliciosos. Un aglet refleja el modelo de applet en Java pero brindándole la propiedad de movilidad. Aglet es una palabra que resulta de la combinación de los términos agente y applet y representa el siguiente paso en la evolución de contenido ejecutable en Internet. Por su parte Voyager es una plataforma escrita en Java para el desarrollo de cómputo distribuido basada en agentes y fue creado por la empresa ObjectSpace el año 1999. Esta plataforma proporciona un extenso conjunto de objetos con capacidades de mensajería, así como objetos que se mueven como agentes en una red. De esta forma se puede decir que Voyager permite crear aplicaciones de red utilizando alguna técnica de programación convencional o bien fundada en agentes, mayores detalles pueden ser consultados en el sitio: http://www.objectspace.com.
Según Lange y Oshima, en la obra citada anteriormente, los agentes móviles se caracterizan por su capacidad para desplazarse entre los nodos de una red de aplicaciones distribuidas. En palabras de los investigadores Huhns y Singh, en las lecturas sobre agentes reportadas el año 1998, en el caso de agentes no móviles, todo el proceso que se desea o necesita realizar se completa en el propio nodo que inició su ejecución, en el que se mantendrá durante todo su tiempo de vida. La solicitud de información a otros nodos se realizará mediante los mecanismos habituales de comunicación como son las llamadas a procedimientos remotos. Los agentes móviles, con su capacidad para desplazarse, permitirán aprovechar las capacidades de los distintos nodos por los que se pueden desplazar para mejorar el rendimiento en la obtención del objetivo perseguido. Diversos autores, propugnan que los agentes móviles son una de las últimas etapas en la evolución de los sistemas distribuidos que en un futuro, podrían estar formados únicamente por una red compleja de agentes inteligentes móviles, lo que se considera un multiagente.
Según el investigador Karnik, en su tesis de doctorado escrita el año 1998 titulada “Seguridad en sistemas de agentes móviles”, el paradigma del agente móvil ha sido estudiado por muchos especialistas en diferentes campos. Por esta razón este concepto se encuentra en un abanico muy amplio de sistemas y aplicaciones aunque no siempre tratado del mismo modo. Algunas de las aplicaciones más características de este paradigma son el comercio electrónico y los sistemas que implican algún tipo de negociación. En general, se puede decir que desde el punto de vista de la transmisión de datos, el concepto del agente siempre resulta conveniente en los casos en los que se procesan datos remotos, el programa es mucho menor que los mismos, o las características del almacenamiento de esos datos hacen inconveniente su transmisión. Evidentemente en aplicaciones tales como las de comercio electrónico en las que se gestiona dinero, la confianza de los usuarios es un prerrequisito para su uso. Los agentes móviles son procesos software capaces de desplazarse dentro de redes de área amplia, como Internet, interactuando con hosts remotos, recogiendo información para el usuario y retornando al lugar de origen habiendo llevado a cabo las tareas solicitadas por el usuario.
Los agentes móviles también se denominan agentes transportables, agentes itinerantes, agentes de red, agentes ágiles y objetos móviles. Una definición de agente móvil es propuesta por Lange y Oshima, en la obra citada del año 1998, como: Un objeto de software que es capaz de migrar entre los nodos o dominios de una red en un sistema distribuido. Creado en un entorno de ejecución, el agente puede transportar su estado, valores de sus atributos que le sirven para determinar qué hacer cuando se reanuda la ejecución del mismo en el entorno destino, y su código, referido como instrucciones que forman lo que el agente debe ejecutar, a otro contexto en donde reanudará la ejecución. Estos agentes aprovechan los recursos del nodo destino en beneficio del nodo que los inició. También se considera por otros autores que un agente móvil puede entenderse como la unión del código del agente, los estados de ejecución, los datos y el itinerario. Todos estos elementos deben ser portables para migrar y ser ejecutados en distintos nodos. Las características de un agente móvil reseñadas en los distintos trabajos sobre estos, son las mismas que ya se vieron para los agentes en general pero extendidas y con matices respecto a la movilidad de la que disponen: (1) Autonomía de movimiento, ya que será un proceso autónomo o semiautónomo, capaz de decidir cuándo, cómo y en qué condiciones migrar desde el nodo de residencia actual a otro. (2) Persistencia en la movilidad, ya que el objeto agente se envía manteniendo su estado, código y datos al nodo destino. (3) Capaz de suspender su ejecución ante una migración y capaz de reanudarla tras la migración en el mismo punto donde se quedó. (4) Comunicativo con el medio, con otros agentes y con el usuario con el que trabaja, a pesar de los cambios. Es decir, es capaz de interactuar con los agentes de un nuevo nodo, con el propio nuevo nodo y con el usuario que ahora puede estar en otro nodo distinto, más alejado. (5) Enfocado a la realización de tareas, bien delegadas por su usuario o bien obtenidas a través del estado del entorno en el que se encuentra. (6) Independiente de la conexión, si esta cae por algún motivo, el agente podrá migrar a otro nodo con conexión si es necesario o esperar a que la conexión se reanude bien permaneciendo activo, bien desactivándose. (7) Ejecutable asíncronamente, mediante su propio hilo de ejecución, independiente del resto de procesos y agentes ejecutados en el mismo nodo. (8) Duplicable, o mejor autoduplicable mediante la creación de un clon de sí mismo, para que le ayude en la tarea ocupando así más recursos del nodo para completar una tarea que puede ser prioritaria.
Los agentes móviles deben: (1) Permitir el cómputo asíncrono y autónomo. Asíncrono por poseer su propio hilo de ejecución que les permite ejecutarse independientemente del resto de procesos del nodo y autónomo por su capacidad para decidir cuándo y cómo actuar según el estado de su entorno. (2) Ser heterogéneos. (3) Propiciar entornos robustos y a prueba de fallos, dada su habilidad para responder a los cambios en su entorno y realizar cambios en su forma de trabajar migrando, esperando o, permaneciendo activos, trabajando aun cuando no hay conexión. (4) Favorecer el procesamiento paralelo. Ya que una tarea compleja, podría ser descompuesta en varias por un agente y encargadas cada una de ellas a otro agente que la realiza, o bien utiliza su hijo para completarla o bien migra a otro nodo donde aprovecha la capacidad del mismo para realizar su tarea. Al final, todas las tareas parciales son reunidas por el agente principal para componer la solución al trabajo. (5) Reducir el tráfico de red. Ya que el uso de agentes permite la solicitud de un cierto servicio y la delegación en el agente de la solicitud que considere oportuna en el nodo de residencia. Sin el uso de agentes, cada servicio del nodo destino requiere una llamada a procedimientos remotos. (6) Mantener comunicación punto a punto. En el paradigma cliente-servidor, el más utilizado en Internet en la actualidad, los servidores no se caracterizan por la comunicación horizontal entre servidores del mismo tipo, que podría resultar muy beneficiosa. En cambio, los agentes son entidades que pueden servir como cliente servidor o bien comunicarse en su mismo nivel con otros agentes.
Referencias Bibliográficas
Según los editores Imielinski y Korth, en el libro publicado el año 1996 titulado “Computación móvil”, un agente software es un módulo software que se ejecuta en un cierto lugar o contexto de ejecución. Un lugar es creado utilizando un sistema de agentes, el cual es una plataforma que puede crear, interpretar, ejecutar, transferir y liberar agentes. Un agente posee las siguientes propiedades principales, aclarando que en algunos contextos específicos no tienen porque concurrir todas las propiedades: (1) Autonomía, posee el control sobre sus propias acciones; (2) Finalidad, gestiona una agenda de objetivos; (3) Cooperación, un agente es capaz de comunicarse con otros agentes; (4) Aprendizaje, cambia su comportamiento de acuerdo a su experiencia previa; (5) Movilidad, puede viajar de una computadora a otra, en realidad de un lugar a otro; (6) Reactividad, siente los cambios de su entorno y reacciona ante ellos; (7) Persistencia, para interrumpir su ejecución y continuarla más adelante. Sin embargo, en el contexto de los sistemas de información distribuidos la movilidad se convierte en una de las características más interesantes. Algunos de los sistemas de agentes móviles más relevantes son Aglets y Voyager. Aglets es una biblioteca de clases Java empleada para el desarrollo de agentes móviles. Fue creada por el Laboratorio de Investigación IBM de Tokyo, por los investigadores Lange y Oshima, reportado en el libro escrito el año 1998 titulado “Programación y desarrollo de agentes móviles Java con Aglets”. Un aglet es un objeto Java transportable y persistente que se ejecuta de manera asíncrona en un nodo que posee un contexto de ejecución. El contexto de ejecución proporciona un ambiente seguro, protegiendo tanto al nodo como al aglet de aglets maliciosos. Un aglet refleja el modelo de applet en Java pero brindándole la propiedad de movilidad. Aglet es una palabra que resulta de la combinación de los términos agente y applet y representa el siguiente paso en la evolución de contenido ejecutable en Internet. Por su parte Voyager es una plataforma escrita en Java para el desarrollo de cómputo distribuido basada en agentes y fue creado por la empresa ObjectSpace el año 1999. Esta plataforma proporciona un extenso conjunto de objetos con capacidades de mensajería, así como objetos que se mueven como agentes en una red. De esta forma se puede decir que Voyager permite crear aplicaciones de red utilizando alguna técnica de programación convencional o bien fundada en agentes, mayores detalles pueden ser consultados en el sitio: http://www.objectspace.com.
Según Lange y Oshima, en la obra citada anteriormente, los agentes móviles se caracterizan por su capacidad para desplazarse entre los nodos de una red de aplicaciones distribuidas. En palabras de los investigadores Huhns y Singh, en las lecturas sobre agentes reportadas el año 1998, en el caso de agentes no móviles, todo el proceso que se desea o necesita realizar se completa en el propio nodo que inició su ejecución, en el que se mantendrá durante todo su tiempo de vida. La solicitud de información a otros nodos se realizará mediante los mecanismos habituales de comunicación como son las llamadas a procedimientos remotos. Los agentes móviles, con su capacidad para desplazarse, permitirán aprovechar las capacidades de los distintos nodos por los que se pueden desplazar para mejorar el rendimiento en la obtención del objetivo perseguido. Diversos autores, propugnan que los agentes móviles son una de las últimas etapas en la evolución de los sistemas distribuidos que en un futuro, podrían estar formados únicamente por una red compleja de agentes inteligentes móviles, lo que se considera un multiagente.
Según el investigador Karnik, en su tesis de doctorado escrita el año 1998 titulada “Seguridad en sistemas de agentes móviles”, el paradigma del agente móvil ha sido estudiado por muchos especialistas en diferentes campos. Por esta razón este concepto se encuentra en un abanico muy amplio de sistemas y aplicaciones aunque no siempre tratado del mismo modo. Algunas de las aplicaciones más características de este paradigma son el comercio electrónico y los sistemas que implican algún tipo de negociación. En general, se puede decir que desde el punto de vista de la transmisión de datos, el concepto del agente siempre resulta conveniente en los casos en los que se procesan datos remotos, el programa es mucho menor que los mismos, o las características del almacenamiento de esos datos hacen inconveniente su transmisión. Evidentemente en aplicaciones tales como las de comercio electrónico en las que se gestiona dinero, la confianza de los usuarios es un prerrequisito para su uso. Los agentes móviles son procesos software capaces de desplazarse dentro de redes de área amplia, como Internet, interactuando con hosts remotos, recogiendo información para el usuario y retornando al lugar de origen habiendo llevado a cabo las tareas solicitadas por el usuario.
Los agentes móviles también se denominan agentes transportables, agentes itinerantes, agentes de red, agentes ágiles y objetos móviles. Una definición de agente móvil es propuesta por Lange y Oshima, en la obra citada del año 1998, como: Un objeto de software que es capaz de migrar entre los nodos o dominios de una red en un sistema distribuido. Creado en un entorno de ejecución, el agente puede transportar su estado, valores de sus atributos que le sirven para determinar qué hacer cuando se reanuda la ejecución del mismo en el entorno destino, y su código, referido como instrucciones que forman lo que el agente debe ejecutar, a otro contexto en donde reanudará la ejecución. Estos agentes aprovechan los recursos del nodo destino en beneficio del nodo que los inició. También se considera por otros autores que un agente móvil puede entenderse como la unión del código del agente, los estados de ejecución, los datos y el itinerario. Todos estos elementos deben ser portables para migrar y ser ejecutados en distintos nodos. Las características de un agente móvil reseñadas en los distintos trabajos sobre estos, son las mismas que ya se vieron para los agentes en general pero extendidas y con matices respecto a la movilidad de la que disponen: (1) Autonomía de movimiento, ya que será un proceso autónomo o semiautónomo, capaz de decidir cuándo, cómo y en qué condiciones migrar desde el nodo de residencia actual a otro. (2) Persistencia en la movilidad, ya que el objeto agente se envía manteniendo su estado, código y datos al nodo destino. (3) Capaz de suspender su ejecución ante una migración y capaz de reanudarla tras la migración en el mismo punto donde se quedó. (4) Comunicativo con el medio, con otros agentes y con el usuario con el que trabaja, a pesar de los cambios. Es decir, es capaz de interactuar con los agentes de un nuevo nodo, con el propio nuevo nodo y con el usuario que ahora puede estar en otro nodo distinto, más alejado. (5) Enfocado a la realización de tareas, bien delegadas por su usuario o bien obtenidas a través del estado del entorno en el que se encuentra. (6) Independiente de la conexión, si esta cae por algún motivo, el agente podrá migrar a otro nodo con conexión si es necesario o esperar a que la conexión se reanude bien permaneciendo activo, bien desactivándose. (7) Ejecutable asíncronamente, mediante su propio hilo de ejecución, independiente del resto de procesos y agentes ejecutados en el mismo nodo. (8) Duplicable, o mejor autoduplicable mediante la creación de un clon de sí mismo, para que le ayude en la tarea ocupando así más recursos del nodo para completar una tarea que puede ser prioritaria.
Los agentes móviles deben: (1) Permitir el cómputo asíncrono y autónomo. Asíncrono por poseer su propio hilo de ejecución que les permite ejecutarse independientemente del resto de procesos del nodo y autónomo por su capacidad para decidir cuándo y cómo actuar según el estado de su entorno. (2) Ser heterogéneos. (3) Propiciar entornos robustos y a prueba de fallos, dada su habilidad para responder a los cambios en su entorno y realizar cambios en su forma de trabajar migrando, esperando o, permaneciendo activos, trabajando aun cuando no hay conexión. (4) Favorecer el procesamiento paralelo. Ya que una tarea compleja, podría ser descompuesta en varias por un agente y encargadas cada una de ellas a otro agente que la realiza, o bien utiliza su hijo para completarla o bien migra a otro nodo donde aprovecha la capacidad del mismo para realizar su tarea. Al final, todas las tareas parciales son reunidas por el agente principal para componer la solución al trabajo. (5) Reducir el tráfico de red. Ya que el uso de agentes permite la solicitud de un cierto servicio y la delegación en el agente de la solicitud que considere oportuna en el nodo de residencia. Sin el uso de agentes, cada servicio del nodo destino requiere una llamada a procedimientos remotos. (6) Mantener comunicación punto a punto. En el paradigma cliente-servidor, el más utilizado en Internet en la actualidad, los servidores no se caracterizan por la comunicación horizontal entre servidores del mismo tipo, que podría resultar muy beneficiosa. En cambio, los agentes son entidades que pueden servir como cliente servidor o bien comunicarse en su mismo nivel con otros agentes.
Referencias Bibliográficas
- Imielinski T. and Korth H.F. (editors) (1996) Mobile Computing. Kluwer Academic Publishers.
- Karnik N. (1998) Security in Mobile Agents systems. PhD thesis, Department of Computer Science, University of Minnesota., 1998.
- Lange D. and Oshima M. (1999) Programming and Deploying Java Mobile Agents with Aglets. Addison Wesley.
- Object Space (1999) Voyager. http://www.objectspace.com/
Guillermo Choque Aspiazu
Artículo no publicado por El Diario
Artículo no publicado por El Diario