47
Aglets e Agentes Móveis Aluno: Rodrigo Moreira Barbosa (aluno de mestrado) Orientador: Prof. Dr. Alfredo Goldman vel Lejbman DCC/IME/USP

Aglets e Agentes Móveis

Embed Size (px)

DESCRIPTION

Aglets e Agentes Móveis. Aluno: Rodrigo Moreira Barbosa (aluno de mestrado) Orientador : Prof. Dr. Alfredo Goldman vel Lejbman DCC/IME/USP. Projeto InteGrade. Demanda por soluções de problemas computacionalmente complexos. Abordagens tradicionais: Supercomputadores Máquinas Paralelas - PowerPoint PPT Presentation

Citation preview

Page 1: Aglets e Agentes Móveis

Aglets e Agentes Móveis

Aluno: Rodrigo Moreira Barbosa (aluno de mestrado)

Orientador: Prof. Dr. Alfredo Goldman vel Lejbman

DCC/IME/USP

Page 2: Aglets e Agentes Móveis

Projeto InteGrade

Demanda por soluções de problemas computacionalmente complexos.

Abordagens tradicionais:– Supercomputadores– Máquinas Paralelas– Recentemente: aglomerados

Page 3: Aglets e Agentes Móveis

Projeto InteGrade(cont.)

Aglomerados custam muito caro Em geral, passam a maior parte do tempo

ociosos Ocupam muito espaço Fazem muito barulho, esquentam Desperdício de recursos ambientais Somos um país pobre: não podemos nos dar

ao luxo de jogar recursos fora desta forma

Page 4: Aglets e Agentes Móveis

Qualquer empresa, universidade, instituição possui muitos computadores que ficam ociosos a maior parte do tempo.

Por que não disponibilizar esse tempo de processamento ocioso para execução de tarefas que exijam grande uso de recursos computacionais?

Projeto InteGrade(cont.)

Page 5: Aglets e Agentes Móveis

Projeto InteGrade(cont.)

Criação de um middleware para interligar estes computadores em uma grade.

InteGrade: Projeto da USP, PUC-Rio e UFMS.

Page 6: Aglets e Agentes Móveis

Linhas de Pesquisa:– Arquitetura geral do sistema (CORBA)– Segurança– Monitoração de recursos (processador, memória, disco,

rede, hardware específico etc.)– Identificação de padrões de uso e ociosidade

• entender o passado para prever o futuro

– Execução de diferentes classes de algoritmos paralelos– Integração com sistemas ubíquos– Criação de uma infra-estrutura para agentes móveis

Projeto InteGrade (cont.)

Page 7: Aglets e Agentes Móveis

Projeto InteGrade (cont.)

Por que agentes móveis no InteGrade?– Agentes móveis podem ser utilizados para

execução de tarefas que necessitem de recursos presentes em diferentes nós da grade.

– Diminuir ainda mais a ociosidade dentro de uma rede, permitindo que programas isolados possam ser executados como agentes móveis, executando em máquinas ociosas e migrando sempre que essas são requisitadas pelo usuário, reiniciando na próxima máquina a execução do ponto onde ela havia sido suspensa.

Page 8: Aglets e Agentes Móveis

Nossa proposta inicial

Utilizar agentes móveis para encapsular tarefas longas que não necessitem se comunicar com outras tarefas.

Essas tarefas constituiriam se tornariam agentes oportunistas, tentando diminuir ainda mais a ociosidade da grade e fariam a busca por máquinas ociosas de forma autônoma.

O ambiente de execução dos agentes móveis deve ser o mais leve possível e deve minimizar a sobrecarga da migração.

Page 9: Aglets e Agentes Móveis

O que são agentes móveis

Agentes móveis são programas que podem ser despachados de um computador e transferidos para outro computador, continuando sua execução.

Page 10: Aglets e Agentes Móveis

Por que Aglets?

Aglets é atualmente o sistema de agentes móveis mais utilizado.

Aglets é muito bem avaliado como plataforma para agentes móveis. [AGKSW2000]

Existem pessoas no IME já utilizando Aglets (Roberto Speicys Cardoso e Leo K. Ueda )

Page 11: Aglets e Agentes Móveis

Aglets

O Aglets foi desenvolvido inicialmente pela IBM, tendo à sua frente os pesquisadores Mitsuro Oshima, Guenter Karjoth, Kouichi Ono.

Atualmente é mantido por uma iniciativa de código aberto: (aglets.sourceforge.net)

Page 12: Aglets e Agentes Móveis

The Aglets Software Development Kit

O Aglets Software Development Kit é um ambiente para programação de agentes móveis em Java

Aglets são objetos Java que podem mover-se de uma máquina para outra na rede. Ou seja, um aglet que executa em um dado computador, pode repentinamente parar sua execução, despachar-se para uma uma máquina remota, e começar a executar de novo.

Page 13: Aglets e Agentes Móveis

The Aglets Software Development Kit (cont.)

Aglets fornece o mecanismo de migração fraca, já que não preserva pilha de execução das linhas de execução do aglet, devido a limitações da JVM. No entanto, o estado dos objetos do aglet são mantidos.

Page 14: Aglets e Agentes Móveis

Visão geral da API do Aglets

Diagrama

Page 15: Aglets e Agentes Móveis

Visão Geral da API do Aglets (cont.)

com.ibm.aglet.Aglet: A classe abstrata que define os métodos fundamentais usados para controlar a mobilidade e ciclo de vidas dos agentes móveis.

Alguns métodos elementares e sua semântica:– dispose (): Descarta o objeto– dispatch (URL): Despacha o aglet para o destino

especificado na URL– deactivate (long duration): Instrui o aglet para armazenar a

si mesmo em uma mídia persistente.– getAgletInfo (): Obtém informações sobre o aglet

Page 16: Aglets e Agentes Móveis

Visão Geral da API do Aglets (cont.)

com.ibm.aglet.AgletId: Objeto que mantém um identificador único, enquanto encapsula seus detalhes de representação.

com.ibm.aglet.AgletProxy: Essa interface age com um “gancho” para o aglet e fornece um modo comum de acessar o aglet por detrás dele. Garante a segurança do aglet e a transparência de localização.– AgletContext.getAgletProxies()

– AgletContext.getAgletProxy(AgletID)

– Aglets.getAgletProxy(String contextName, AgletID)

Page 17: Aglets e Agentes Móveis

Visão Geral da API do Aglets (cont.)

com.ibm.AgletContext: Provê uma interface para o ambiente de execução que o aglet ocupa. Quando o aglet é despachado, a referência para o contexto antigo é desfeita e a referência para o novo contexto é atada a ele quando de sua chegada.

Page 18: Aglets e Agentes Móveis

Visão Geral da API do Aglets (cont.)

com.ibm.aglet.Message: Os aglets se comunicam trocando objetos desta classe. Uma mensagem tem uma String para especificar o tipo da mensagem e um objeto arbitrário.

com.ibm.aglet.Ticket: Serve para especificar como um aglet é transferido: destino, protocolo, timeout, integridade, etc. Este objeto deve ser utilizado onde a URL é utilizada como meio de especificar destino.

Page 19: Aglets e Agentes Móveis

Visão Geral da API do Aglets (cont.)

com.ibm.aglet.FutureReply: Objeto retornado por uma transmissão assíncrona de mensagem. Serve para a verificação de chegada de alguma resposta.

Page 20: Aglets e Agentes Móveis

Estendendo a classe Aglet

Linhas gerais:– estender a classe com.ibm.aglet.Aglet– Pode estender outra classe que implementa Aglet– Não pode sobrescrever os métodos dispatch () e

getAgletContext(), declarados como final.– Não pode implementar um construtor, visto que a

classe Aglet é inicializada depois da instanciação. Deve-se utilizar o método onCreation (), ao invés do construtor.

Page 21: Aglets e Agentes Móveis

Estendendo a classe Aglet (cont.)

void Aglet.onCreation (Object init): Método chamado somente uma vez na vida do aglet, quando de sua criação. Utilizado para inicializar o aglet.

void Aglet.onDisposing (): Chamado depois do dispose (). Utilizado para desalocar os recursos locais utilizados pelo aglet antes de sua morte.

void Aglet.run (): Método chamado sempre que uma instância é criada ou reiniciada. Bom lugar para se definir a tarefa comum.

boolean Aglet.handleMessage (Message msg): Trata mensagens recebidas. Se a mensagem é tratada devolve true, caso contrário devolve false.

Page 22: Aglets e Agentes Móveis

Estendendo a classe Aglet (cont.)

public class HelloAglet extends Aglet { public void onCreation(Object init) {

System.out.println("created!"); }public void run() {

System.out.println("hello!"); } public boolean handleMessage(Message msg) {

if (msg.sameKind("sayHelloAgain") { System.out.println("hello!");

return true; } return false;

} public void onDisposing() {

System.out.println("bye!"); }

}

Page 23: Aglets e Agentes Móveis

Ciclo de vida dos Aglets

Page 24: Aglets e Agentes Móveis

Ciclo de vida dos Aglets (cont.)

AgletContext.createAglet (URL codebase, String name, Object init) -> Aglet.onCreation (Object init)

Aglet.clone () Aglet.dispatch

(atp://aglets.ibm.com:1434/context_name) Aglet.deactivate (long timeout) Aglets não podem ser recolhidos pela JVM. Sendo

assim, devem ser mortos explicitamente pelo dispose ().

Page 25: Aglets e Agentes Móveis

Eventos do Aglet e Modelo de Delegação Visto que a JVM não permite, por motivos de

segurança, que se acesse a pilha de execução de uma linha de execução, é impossível armazená-la para permitir o reinício da execução a partir dela.

Sendo assim, Aglets só suporta migração fraca, visto que não é interessante desviar-se da versão padrão da JVM.

Aglets usa um esquema de eventos para permitir a implementação de uma ação que emula a migração.

Page 26: Aglets e Agentes Móveis

Eventos do Aglet e Modelo de Delegação (cont.)

Page 27: Aglets e Agentes Móveis

Eventos do Aglet e Modelo de Delegação (cont.)import com.ibm.aglet.Aglet;import com.ibm.aglet.event.MobilityEvent; import com.ibm.aglet.event.MobilityListener; class MyListener implements MobilityListener {

public void onDispatching(MobilityEvent l) { closeWindow(); closeFile(); }

public void onReverting(MobilityEvent l) { openWindow(); donNextJob(); }

public void onArrival(MobilityEvent l) { }} public class MyAglet extends Aglet { public void onCreation(Object init) {

MobilityListener listener = new MyListener(); addMobilityListener(listener);

}}

Page 28: Aglets e Agentes Móveis

Eventos do Aglet e Modelo de Delegação (cont.)

When Event Object Listener Method called

Just before cloning CloneEvent CloneListener onCloning

When clone is created CloneEvent CloneListener onClone

After creation of clone CloneEvent CloneListener onCloned

Just before dispatch MobilityEvent MobilityListener onDispatching

Just before retraction MobilityEvent MobilityListener onReverting

After arrival at the

destination MobilityEvent MobilityListener onArrival

Just before deactivation PersistencyEvent PersistencyListener onDeactivating

After activation PersistencyEvent PersistencyListener onActivation

Page 29: Aglets e Agentes Móveis

Mobilidade de Objetos

Quando um aglet é despachado, clonado ou desativado, ele é transformado em um fluxo de bytes e então restaurado dele depois.

Aglets usa o mecanismo de serialização para criar o fluxo de bytes e recriar o objeto.

Estes objetos devem implementar então a interface java.io.Serializable ou java.io.Externalizable, ou referenciados como transient.

Page 30: Aglets e Agentes Móveis

Mobilidade de Objetos (cont.)

class ListingAglet extends Aglet { // result and its contents are transferred.

private Vector result = new Vector();

transient InputStream in = new InputStream(); // will not be

transferred

}

Page 31: Aglets e Agentes Móveis

Mobilidade de Objetos (cont.)

Objetos movidos por valores Objetos movidos por referência:

Page 32: Aglets e Agentes Móveis

Mobilidade de Objetos (cont.)

class Transferrable implements java.io.Serializable { Hashtable hash; // Hashtable is also serializable

}class NotTransferrable {

int dummy; } class MyClass extends Aglet {

transient FileDescriptor fd; // never get transferred. int value; // moved by value String str; // moved by value Object transferable = new Transferrable(); // move by value Object not_transferable = new NonTransferable(); // throws

NotSerializableException.AgletProxy proxy; // moved by reference

}

Page 33: Aglets e Agentes Móveis

Mobilidade de Objetos (cont.)

Variáveis de classe:public class MyAglet {

static int class_variable = 0; public void onCreation(Object init) {

class_variable = 10; dispatch("atp://next.place");

} public void run() { if (class_variable != 10) {

System.out.println("Class variable never get transferred!");

} }

}

Page 34: Aglets e Agentes Móveis

Mobilidade de Objetos (cont.)

Transferindo Objetos RMI: – Referências para objetos RMI não são

perdidas com a migração.– Todavia, Aglets não suporta migração de

servidores RMI.

Page 35: Aglets e Agentes Móveis

Passagem de mensagens

Aglet.handleMessage ():

MyAglet extends Aglet {public boolean handleMessage(Message msg) {

if (msg.sameKind("doJob")) {

doJob();

}

else if (msg.sameKind("shutdown")) {

deactivate(0);

}

}

}

Page 36: Aglets e Agentes Móveis

Passagem de mensagens (cont.)

Now-type:String answer = proxy.sendMessage(new Message("question"));

System.out.println(answer);

Future-type:FutureReply future = proxy.sendAsyncMessage(new Message("question"));

int num_task = 10; // do private job at most 10 times while waiting for the result.

while(future.isAvailable() == false && num_task-- >0) {

doPrivateJob();

}

System.out.println( (String)future.getReply() );

Page 37: Aglets e Agentes Móveis

Passagem de mensagens (cont.)

Oneway-type: Nos outros tipos de envio, se um objeto envia uma mensagem para si mesmo, ela é colocada no início da fila. Com a Oneway, a mensagem é colocada sempre no fim da fila.proxy.sendOnewayMessage (new Message (“question”));

Page 38: Aglets e Agentes Móveis

Passagem de mensagens (cont.)

Se o handleMessage () devolve false, o remetente da mensagem recebe uma NotHandledException.

Future future = proxy.sendAsyncMessage(); ... try {

Object reply = future.getReply();

}

catch (NotHandledException ex) { // the receiver didn't handled the message }

catch (MessageException ex) { // an exception has been thrown in the receiver's

handleMessage()

System.out.println(ex.getException());

}

Page 39: Aglets e Agentes Móveis

Passagem de mensagens (cont.)

Mensagens em Aglets suportam o recurso de enviar ciência, antes mesmo de terminar de tratar a mensagem.

public boolean handleMessage(Message msg) { if (msg.sameKind("accessDB")) { openDB(); // pseudo code

Object reply = accessDB(msg.getArg()); msg.sendReply(reply);

closeDB(); return true; // i know this

message... } return false; // false, otherwise

}

Page 40: Aglets e Agentes Móveis

Mensagens de Sincronização

public StackAglet extends Aglets { static int capacity = 10; Object stack[] = new Object[capacity]; int num = 0; public handleMessage(Message msg) {

if (msg.sameKind("push")) { push(msg); } else if (msg.sameKind("pop")) { pop(msg); } else if (msg.sameKind("isFull")) {

msg.sendReply( num == capacity); } else if (msg.sameKind("isEmpty")) {

msg.sendReply( num == 0 ); } else return false;

Page 41: Aglets e Agentes Móveis

Mensagens de Sincronização (cont.)

private void push(Message msg) { while (num == capacity) { waitMessage(); } stack[num++] = msg.getArg(); if (num==1) { notifyMessage(); // wake up "pop" message } }private void pop(Message msg) { while(num==0) { waitMessage(); } msg.sendReply(stack[--num]); if (num == (capacity -1)) { notifyMessage(); // wake up "push" message } }

}

Page 42: Aglets e Agentes Móveis

Visão Geral da Arquitetura

Page 43: Aglets e Agentes Móveis

Visão Geral da Arquitetura(cont.)

Camada de tempo de execução Aglets– Serialização e desserialização de aglets.– Carregamento de classes e transferência– Gerenciamento de referências e

recolhimento de lixo.

Page 44: Aglets e Agentes Móveis

Visão Geral da Arquitetura(cont.)

PersistenceManager CacheManager SecurityManager

Page 45: Aglets e Agentes Móveis

Visão Geral da Arquitetura(cont.)

Camada de comunicação:– Derivada do padrão OMG, MASIF (Mobile

Agent System Interoperability Facility)

Page 46: Aglets e Agentes Móveis

Visão Geral da Arquitetura(cont.)

Estrutura de objetos Aglets– Message Manager– Resource Management– Recolhimento de lixo

Page 47: Aglets e Agentes Móveis

Referências Javadoc da API do Aglets

Aglets Specification Draft 1.1

– http://www.trl.ibm.com/aglets/spec11.htm

Site do projeto Aglets

– http://aglets.sourceforge.net

[AGKSW2000]

– Using Mobile Agents in Real World: A Survey and Evaluation of Agents Plataforms (Josef Altmann et. al)

Site do InteGrade:

– http://gsd.ime.usp.br/integrade

Mobile Agents: Are they a good idea?

– http://citeseer.nj.nec.com/chess95mobile.html