Palestrante: Eduardo Leal Guerra [email protected] Orientador: Alfredo Goldman [email protected]
description
Transcript of Palestrante: Eduardo Leal Guerra [email protected] Orientador: Alfredo Goldman [email protected]
ProActive:Um arcabouço para computação
Paralela, Distribuída e Concorrente com Segurança e
Mobilidade
Palestrante: Eduardo Leal [email protected]
Orientador: Alfredo [email protected]
ProActive
API Java para programação Concorrente, Paralela, Distribuída e Computação Móvel
Criado pelo consórcio ObjectWeb desde Abil de 2002 sob licença LGPL
Principais características: Padrão de programação Active Object Objetos remotos acessíveis via invocação de métodos (RMI,
JINI) Comunicação Assíncrona com sincronização automática Comunicação de Grupos Descritores de Implantação em XML Interface com vários protocolos: rsh, ssh, LSF, Globus Visualização e monitoração: IC2D
Agenda Por quê ProActive ? O Modelo Active Objects Exemplo: HelloWorld Chamadas Assíncronas Infra-estrutura de Componentes Descritores de Implantação Comunicação de Grupo Migração de Active Objects Exemplo: Processamento Paralelo Aplicação IC2D
ProActive: Justificativa
Separação entre o comportamento funcional e comportamento de baixo nível: distribuição
Transição de modelos facilitada Sequencial Multi-threaded Distributed Reuso do mesmo objeto
Prove: Transparência de localização Transparência de atividade Sincronização
Modificações apenas no código de criação das instâncias
ProActive: Modelo
Active Objects: subsistemas Cada Active Object:
Pode ter vários Passive Objects Tem exatamente um thread
Passive Object não-compartilhados parâmetros são passados por deep-copy
Comunicação Assíncrona entre os Active Objects Future Objects e wait-by-necessity Controle total na recepção de requisições
ProActive: Sistema em Execução
CA
B
Active Object
Passive Object
Chamada Síncrona
Chamada Assíncrona
Subsistema
Espaço Físico
Não
ProActive: Active Objects
Composto por 4 componentes: O objeto em si (1) O body: responsável pela sincronização e pelo serviço
de requisições (2) A pilha de requisições pendentes (3) O proxy: repassa invocações de métodos (4)
Proxy (4)
Object (1)Caller Body (2)
Remote Node Local Node
(3)
ProActive: Criando Active Objects Baseado em instância:
A a = (A) ProActive.newActive(“A”, params, nó)
Baseado em Objeto
A a = new A(“nome”, 7);
...
a = (A) ProActive.turnActive(a, nó);
Exemplo: HelloWorld
Hello.javapublic class Hello {
public Hello() {}...public void sayHello() { System.out.println(“Hello, from : ” +
getLocalHostName())}public static void main (String[] args) { myServer = (Hello) ProActive.newActive(
Hello.class.getName(),new Object[] {local});
}}
Exemplo: HelloWorld
HelloClient.javapublic class HelloClient {
...public static void main(String[] args) { if (args.length > 0) { System.out.println(“Servidor em : “ + args[0]); myServer = (Hello) ProActive.lookupActive(
Hello.class.getName(),args[0]);
} myServer.sayHello();}
}
ProActive: Chamadas Assíncronas Future Objects
A res = activeObject.foo();
Caller Stub_AFuture Proxy
O “caller” recebe um “Future”, e continua sua execução
Caso tente acessar o valor de res, fica bloqueado no Future Proxy (wait-by-necessity), até que o valor esteja disponível
res
ProActive: Chamadas Assíncronas Future Objects (cont.)
A res = activeObject.foo();
Caller Stub_AFuture Proxy
Quando o objeto chamado terminar a computação de “res”, o valor é retornado ao “caller”
A referência do Future Object é atualizada tranparentemente
res
Object
ProActive: Infra-estrutura de Componentes 3 tipos de componentes:
Primitive (A) Composite (C) Parallel (D)
A
A D
BC D
A
A
B
C
ProActive: Descritores de Implantação Virtual Nodes (VN)
Usado no código fonte Configurado em um arquivo XML
Operações nos descritores: Mapeamento de VN para JVM (que está em um host) Registro ou Busca de VNs Criação ou Obtenção de JVMs
ProActive: Descritores de Implantação Mapeando Virtual Nodes (no descritor)
<ProActiveDescriptor>
<componentDefinition>
<virtualNodesDefinition>
<virtualNode name="Dispatcher"/>
</virtualNodesDefinition>
<componentDefinition/>
…
</ProActiveDescriptor>
ProActive: Descritores de Implantação Mapeando Virtual Nodes (no descritor)
<ProActiveDescriptor>…<deployment> <mapping>
<map virtualNode="Dispatcher"> <jvmSet> <vmName value="Jvm1"/> </jvmSet> </map>
</mapping> <jvms>
<jvm name="Jvm1"> <acquisition method="rmi"/> <creation>
<processReference refid="jvmProcess"/></creation>
</jvm></jvms>
</deployment>…<infraestructure> /* Descreve a criação das JVMs */ </infraestructure>
</ProActiveDescriptor>
ProActive: Descritores de Implantação Uso de Virtual Nodes (no código)
Descriptor pad = ProActive.getDescritor(<path>);
VirtualNode vn = pad.activeMapping(“Dispatcher”);
Node node = vn.getNode();
...
C3D c3d = ProActive.newActive(“C3D”, param, node);
ProActive: Comunicação de Grupo Manipulação de grupos de Active Objects
Geração dinâmica de grupos de resultados
Capaz de expressar comunicação coletiva de alto nível
Broadcast Scatter, gather
Baseada no mecanismo do ProActive Comunicação Assíncrona
ProActive: Comunicação de Grupo Estrutura de Grupo:
Jvm2
Jvm3
Jvm1
ObjRemoto
ObjRemoto
Proxy do Grupo
Stub
Stub Proxy
Stub Proxy
ProActive: Migração de Active Objects Iniciada pelo próprio Active Object (AO) pela
primitiva “migrateTo”
Também pode ser iniciada de fora do AO,
através de um método público
A migração do AO é feita junto com : Todas as requisições pendentes
Todos os Passive Objects
Todos os Future Objects
Exemplo: Processamento Paralelo Aplicação C3D: usa vários “engines” para fazer o
“render” da imagem
ProActive: IC2D
Interactive Control e Debug for Distribution Características:
Visualização Gráfica de: Hosts JVMs Nós Active Objects Topologia Migração
Controle e Monitoração: Migração de tarefas usando drag and drop Criação de Nós e JVMs adicionais
ProActive: IC2D
Referências
Site ProActive - Documentationhttp://www-sop.inria.fr/oasis/ProActive/doc/index.html
Site ProActive – Applications
http://www-sop.inria.fr/oasis/ProActive/apps/index.html