• No se han encontrado resultados

2 P ROPUESTA Este capítulo contiene la propuesta que se ha introducido y justificado en el capítulo

2.3.2 P ROTOCOLOS NECESARIOS

2.3.2.4 T RÁNSITO DE A GENTES ENTRE CA

Esta es la segunda misión de los canales de comunicación entre CA. En este caso se trata de conseguir que un agente se transporte con todo su bagaje a un nuevo CA.

Esta situación debe ser soportada sin penalización de ningún tipo para el agente que migra para posibilitar el pleno desarrollo de sus funciones.

Los motivos que pueden hacer que un agente decida la migración a otro contenedor son varios, pero nos quedamos principalmente con:

• Situación de poco rendimiento en un contenedor saturado. Un cierto agente puede determinar que en el contenedor en el que se encuentra está demasiado saturado y decidir la migración consultando el estado de un CA adyacente menos saturado.

• Falta de recursos apropiados. Un contenedor que no de acceso a suficientes recursos o que tenga recursos de poco interés para un agente, puede provocar la migración del agente a otro contenedor más prometedor.

• Decisión del contenedor. Por motivos de la gestión del contenedor o de los agentes, el propio CA puede decidir que un cierto agente debe migrar, informándole de esta decisión que puede ser pospuesta durante un periodo de tiempo establecido si el agente está en mitad de una operación con un Recurso, pero que no podrá ser rechazada. Este tipo de acción puede ir acompañada de la elección del contenedor destino o dando la opción al agente de elegir el contenedor al que migrar

129

El último motivo posible de la migración es muy interesante, pues se trata de la gestión del propio contenedor que debe asegurar que tiene agentes de los tipos necesarios para cada operación. Pero ¿qué ocurre si un contenedor tiene varios agentes del mismo tipo que están ociosos? En esta situación, el CA puede decidir la migración de alguno de sus agentes en lugar de destruirlo.

De esta forma se liberan recursos pero no se elimina un agente cuyo conocimiento por la experiencia es valioso ya que pasará a dar servicio en otro contenedor. Una vez decidido el envío, necesitamos un protocolo que asegure la integridad del agente como un bien precioso.

El protocolo será el siguiente: • El agente determina el CA destino.

Mediante el estudio de los valores de información asociados a cada uno de los canales, el agente determinará el CA destino al que desea migrar. Esta decisión dependerá en gran medida del motivo por el que decida migrar y es muy importante que la información de control intercambiada entre los CA aporte suficientes datos para la decisión del agente.

• El agente detiene todas sus operaciones.

Antes de enviarse a través de un determinado canal, el agente detendrá y terminará sus operaciones. Las operaciones globales no dependientes del CA no es necesario que acaben, es posible que la migración se produzca para poder completar en otro CA alguna operación global. Las que deben terminar obligatoriamente son las operaciones dependientes del CA local ya que sus recursos no estarán disponibles en el nuevo. • El agente serializa su contenido.

Esta operación la realiza el agente, convirtiendo su información a un formato fácilmente intercambiable por una conexión. La idea es vaciar toda la información no estructural del objeto agente que permita recomponer el objeto en el destino mediante la instanciación de un objeto y su relleno con estos datos que han sido serializados. La serialización incluirá los datos de estado y la información de conocimiento aprendido por la experiencia del agente. Esto debe generar necesariamente dos resultados de serialización, uno para cada tipo de datos procesados.

• El agente se pone en manos del Control del Canal (CC)

El agente está preparado para el envío y se lo hace saber al CC. En este momento el agente pasa a un estado disgregado e inerte en el cual no es un agente sino un objeto y

dos conjuntos de datos serializados. Estos tres elementos que serán transmitidos, aseguran la posibilidad de regenerar el agente a su estado anterior sin ningún problema. • El CC inicia una transacción de transmisión.

El envío debe realizarse mediante un protocolo que asegure el envío sin problemas del agente. Este envío debe considerarse y tratarse transaccionalmente, lo que quiere decir que o toda la transmisión y recomposición del agente se completa o ésta se cancela volviendo a generar el agente en CA origen.

• El CC transmite código, estado y datos del agente.

Una vez iniciada la transacción y establecida con el extremo opuesto, los dos CC intercambiarán tanto el código como el estado y los datos del agente, es decir los datos de estado y los datos de conocimiento almacenados.

• El CA destino recrea el agente.

Si toda la información ha sido recibida correctamente y verificada, el CC destino pone en manos del CA destino los tres elementos para que se recree el agente que ha sido transmitido. Para hacerlo, el CA instanciará un objeto utilizando los datos de conocimiento y estado para hacerlo. Una vez que el agente ha sido recreado, pero antes de ponerlo en funcionamiento, el CA informará al CC y este comunicará por el canal que el agente ya es responsabilidad del CA destino. Con esto se cerrará la transacción. • El CC de origen el agente una vez completada la transmisión y termina la transacción

iniciada.

En este último paso, el agente original se elimina ya que ahora hay una copia en el CA destino y no se necesitan duplicados. Si no se borrara este agente, sería un problema porque tendríamos dos agentes que hacen el mismo trabajo sin coordinación ya que no se decidió su duplicidad sino que fue producto del error.

Queda decidir que tipo de protocolo de bajo nivel debe soportar esta comunicación.

Debido a las necesidades técnicas, de velocidad y de control sobre la comunicación necesitaremos un protocolo de bajo nivel y elevadas prestaciones, siendo la elección mejor la utilización directa de sockets para implementar estos canales y toda la comunicación que hemos descrito.

131