270 likes | 375 Views
Efficient, Flexible, and Typed Group Comunications in Java. Laurent Baduel Françoise Baude Denis Caromel. http://mega.ist.utl.pt/~ajra/PADI. Por: Adriano Andrade 53811 Susana Rijo 53868 José Faustino Santos 53921. Motivação.
E N D
Efficient, Flexible, and Typed Group Comunications in Java Laurent Baduel Françoise Baude Denis Caromel http://mega.ist.utl.pt/~ajra/PADI Por: Adriano Andrade 53811 Susana Rijo 53868 José Faustino Santos 53921
Motivação “Invocação assíncrona de métodos sobre agrupamentos de objectos distribuídos…”
Desafios • Garantir transparência na invocação remota • Elevados requisitos de performance • Independência da plataforma • Suportar invocação assíncrona de métodos remotos • Suportar paralelismo
Trabalho Relacionado Group.setInvoke(stub, "double get()", Group.GROUP);1 • O modo de comunicação entre os vários membros do grupo tem de ser definido para cada método Avanço: • Na solução proposta no artigo todos os métodos da classe dos membros do grupo podem ser invocados de forma transparente sobre o grupo de objectos. 1J. Maassen, T. Kielmann, and H. Bal. Generalizing Java RMI to support ecient group Communication. In ACM Java Grande Conference, 2000.
ProActive - o que é? • Uma biblioteca para desenvolvimento de aplicações distribuídas • Suporta invocações assíncronas • Permite agrupamento de objectos em máquinas diferentes • Independente da plataforma (Java)
ProActive - Características I • Tipo de Objectos • Objectos Activos – podem ser referenciados fora da JVM onde se executam. • Objectos Passivos – não podem ser referenciados fora da JVM onde se executam. • Não há partilha de Objectos Passivos • Apenas os Objectos Activos são visíveis do exterior • Todos os objectos podem manter referências para objectos activos.
ProActive - Características II • Parâmetros de Invocação • Passagem por Valor (deep copy) – Objectos passivos • Passagem por Referência – Objectos Activos • Invocação Assíncrona • Funciona sobre o RMI do Java
Objectos Activos - Características • Unidade Básica de Construção de Aplicações distribuídas • Possuem uma thread própria. • São manipulados como objectos comuns. • Dentro de um objecto activo não há paralelismo.
Objecto Activo - Constituição • 2 classes • Body • invisível • gestão dos pedidos (requests) que chegam ao objecto activo sendo armazenados numa fila de prioridade. • configurável • Objecto • Objecto padrão do Java
Independente de B. • Cria o objecto futuro e retorna-o ao stub. • Forward dos request objects para o body. • Subclasse de B • Transforma a invocação do método num request object. • Armazena os Pedidos numa fila de Prioridade. • Processa os Pedidos Objectos Activos – Invocação • Grafo de Objectos gerado na invocação
Objectos Activos – Future Objects • Resulta de uma invocação remota • Gerado pelo Proxy • A thread que invoca o método não fica bloqueada à espera do resultado – invocação assíncrona • O objecto futuro representa o verdadeiro objecto retornado pelo método de forma transparente.
Objectos Activos – Future Objects Exemplo Um pedaço qualquer de código num instância da classe A vai precisar de invocar o método foo() sobre uma instância b da classe B (para a qual detém uma referência), este método retorna uma instância v da classe V, sobre a qual o nosso pedaço de código quer executar o método bar().
Objectos Activos - Restrições • Classes Final não podem dar origem a um objecto activo. • Classes não públicas não podem dar origem a um objecto activo. • Métodos Final não podem ser usados. • Não se pode invocar um método não público sobre um objecto activo.
Typed Group Communication O mecanismo apresentado no artigo chama-se typed group communication, typed porque apenas os métodos definidos na classe correspondente aos membros do grupo podem ser invocados.
Criação de um grupo • Criação de um grupo vazio • Especificar classe base do grupo • Adicionar elementos ao grupo posteriormente • Criação de um grupo com membros • Especificar as listas de parâmetros correspondentes aos construtores dos membros e os nós onde os membros vão ser criados. • Não são permitidos grupos polimórficos!
Representação de Grupos • Duas representações complementares • Representação com propósitos funcionais • Representação para efeitos de gestão de grupos • Deve ser possível obter uma representação a partir da outra • Há que manter a coerência entre as duas representações!
Invocação de métodos sobre Grupos I • A invocação é propagada assincronamente a todos os membros do grupo, usando multithreading • A invocação de um método sobre um grupo é não bloqueante • Os parâmetros a passar ao método que se pretende invocar são enviados a todos os elementos do grupo. • Disponibiliza de imediato um conjunto de objectos futuros (resultados)
Invocação de métodos sobre Grupos II • Quando é invocado um método sobre um grupo, o método vai ser invocado sobre todos os elementos, assim sendo, dado um qualquer elemento do grupo temos duas hipóteses: • objecto JAVA standard – invocação normal - o objecto tem de se encontrar na JVM onde o método é invocado. • objecto activo –invocação ProActive - o objecto pode existir noutra JVM.
Invocação de métodos sobre Grupos IV • Group Stub: • Objecto de uma subclasse comum ao grupo de objectos • Representa o grupo de objectos • Group Proxy: • Constituído por um conjunto de proxies. • Cada proxy envia o request object ao respectivo objecto activo.
Result Groups • Tem um objecto futuro por cada resultado elementar. • É dinamicamente actualizado à medida que os resultados chegam. • Pode ser utilizado mesmo que nem todos os resultados estejam disponíveis (wait by necessity). • O ProActive disponibiliza um conjunto de mecanismos para sincronização de grupos
Broadcasting vs Scattering • Default – Os argumentos são enviados por broadcasting a todos os elementos do grupo. • Pode ser preciso transmitir diferentes parâmetros a diferentes membros do grupo – Scattering. • É passado como argumento um grupo de objectos. • Para conseguir espalhar os argumentos há que invocar o método estático setScatterGroup (para voltar, unsetScatterGroup).
Performance I Tempo de criação de objectos activos considerando: • diferentes números de computadores na rede local. • Existência ou não de grupo. Invocação assíncrona não tem tempos de espera associados. • + computadores -> - objectos/computador -> - tempo
Performance II Tempo de invocação de métodos sobre objectos: • Com grupo; • Sem grupo. Com grupo demora menos tempo porque é lançada uma thread para tratar cada invocação.
Conclusão I • Comunicação em grupo • Crucial para a alta-performance • Grid Computing • Coordenação do grupo conseguida à custa de configurações (semântica de espera por todas as execuções dos elementos do grupo vs. abordagem default)
Conclusão II • Invocações Assíncronas • Evitam esperas, aumentando a eficiencia • Ideal em ambientes loosely coupled • Eliminam alguns deadlocks
Fim Questões? http://mega.ist.utl.pt/~ajra/PADI