Objetos Distribuídos Nazareno Andrade.

Slides:



Advertisements
Apresentações semelhantes
Sistemas Operacionais II N Aula prática Java Sockets, RPC e RMI Eduardo Bezerra.
Advertisements

Sistemas Distribuídos Baseados em Objetos
I/O Carlos Bazilio Depto de Ciência e Tecnologia
Java Remote Method Invocation Java RMI
Sistemas distribuídos
Sockets Marco Antonio – marcoreis.net Arquiteto de Software Dezembro/2007.
Marco A. S. Reis EJB Acesso Remoto Marco A. S. Reis
Comunicação entre processos distribuídos
Tratamento de Exceções
Programa de Pós-Graduação Lato Sensu MBA em Gestão de Software
RMI - Remote Method Invocation
Chain of Responsibility
Java RMI Alcides Calsavara. Objetivos Permitir que um método de uma classe Java em execução em uma máquina virtual JVM chame um método de um objeto (instância.
Comunicação Distribuída
Objetos Distribuídos e Invocação Remota
Desenvolvimento de Aplicações Distribuídas
Invocação de Métodos Remotos RMI
1 Comunicação Inter-Processos -> RMI -> RPC -> TCP -> UDP (Abstração de passagem de mensagem)
1 Arquitetura CORBA Repositório de Implementação Repositório de Interface cliente programa cliente proxy ORB Core ou invocação dinâmica servidor ORB Core.
Comunicação Entre Objetos Distribuídos
1 Serviços CORBA. Serviços CORBA. Funcionalidades que podem ser utilizadas por objetos distribuídos. Naming Service (Serviço de Nomes) Event and Notification.
Comunicação Inter-Processos
PROGRAMAÇÃO DISTRIBUÍDA EM JAVA Verão/2001
Remoting 3 a aula prática de PADI 2004/05 Rodrigo Miragaia.
A linguagem C#.
Estrutura de Dados em Java
Objetos Distribuídos para WEB Prof. Paulo Fernando da Silva FURB – Universidade Regional de Blumenau Pós-Graduação em Desenvolvimento WEB.
Middleware e Sistemas Distribuídos
Concorrência em Java Threads em Java.
METODOLOGIA PARA DESENVOLVIMENTO DE SISTEMAS Prof. Dr. rer. nat. Daniel D. Abdala 1.
Arquitetura CORBA e Objetos Distribuídos
Chamada Remota de Procedimentos
Desenvolvimento de Aplicações CORBA
Sistemas Distribuídos Carlos A. G. Ferraz DI/UFPE Aula 07.
Remote Method Invocation RMI
Concorrência e Java RMI
Conceitos de J2EE para a WEB
1 Mobilidade de Código com μcode Projeto Giga Alexandre Lages
Objetos Distribuídos e invocação remota
Cristiano Soares Rafael di Lego Roberto Nemirovsky Thiago Nascimento
T. D. S. I. PARA WEB Prof. Emmanuel Nolêto. Java RMI.
Objetos Distribuídos para WEB Prof. Paulo Fernando da Silva FURB – Universidade Regional de Blumenau Pós-Graduação em Desenvolvimento WEB.
Tecgraf PUC-Rio maio de 2011 Principais conceitos de CORBA.
Concorrência e thread Petrônio Júnior(pglj) Márcio Neves(mmn2)
RMI x C# Remote Emilena Specht – 1113/01/9 2004/01
Integrações de Aplicações Empresariais Prof. Paulo Fernando da Silva UNC – Universidade do Contestado Pós-Graduação em Sistemas de Informação Aplicados.
Tratamento de Exceções
Java RMI João Gabriel (jggxm).
RMI - JAVA.
Coleções, Genéricos, Threads Marco Antonio. Collection Principais métodos da interface Collection.
Exceções Suzana Fragoso (smpf) Adaptado do material de Guilherme Carvalho (gvc)
T. D. S. I. PARA WEB Prof. Emmanuel Nolêto
Objetos Distribuídos para WEB Prof. Paulo Fernando da Silva FURB – Universidade Regional de Blumenau Pós-Graduação em Desenvolvimento WEB.
RMI (Remote Method Invocation) Bruno Edson Plínio Tadeu
RMI Objetos Distribuídos Luiz C. D´oleron SCJP
Coleções em Java - Parte 2
Socket em Java.
Chamada Remota de Procedimentos. Remote Procedure Call O fluxo de informações em uma implementação de clientes e servidores por passagem de mensagem requer.
JR: Flexible Distributed Programming in an Extended Java Elmário Gomes Dutra Jr. Gustavo Romano.
Modelos de Comunicação em Sistemas Distribuídos
Modelos de Comunicação em Sistemas Distribuídos
FORMI Integrating Adaptive Fragments Objects into Java RMI Kapitza, Rüdiger; Domaschka, Jörg; Hauck, Franz J.; Reiser, Hans P. ;Schmidt, Holger. IEEE Distributed.
Camada de Aplicação Prof. Horácio. Objetivo Apresentar os detalhes específicos dos tipos de aplicação; Apresentar o modelo cliente-servidor; Apresentar.
RMI Java Remote Method Invocation em Java. Introdução Java Remote Method Invocation (Java RMI) permite desenvolver sistemas distribuídos baseados em Java.
Sistemas Distribuídos Prof. Marcus Rodrigues
Desenvolvimento WEB II Professora: Kelly de Paula Cunha Apresentação baseada no material didático elaborado pelo Prof. Pasteur Ottoni de Miranda Junior.
Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI) Especialista : Sistema distribuídos
UNIVERSIDADE FEDERAL DE GOIÁS INSTITUTO DE INFORMÁTICA Sistemas Distribuídos Ciência da Computação 2o. Semestre / 2006 Prof. Fábio M. Costa
Transcrição da apresentação:

Objetos Distribuídos Nazareno Andrade

O Problema Orientação a objetos é um paradigma poderoso Modularidade, extensibilidade, manutenibilidade Porque distribuir os objetos: Localidade dos objetos Tolerância a falhas Performance Como estender o modelo OO para sistemas distribuídos? Referências, invocações de métodos, erros, ... Porque distribuir Localização dos componentes Tolerância a falhas Performance Porque OO Abstrações poderosas para o programador Facilita extensão e manutenção Sistemas OO são naturalmente segmentados

O Modelo invocation remote local A B C D E F Um Objeto Remoto é aquele que pode receber uma invocação remota (RMI) Referências remotas Interfaces remotas Começar com exemplo do quadro negro distribuído aqui. O terceiro processo é de persistência. * Não é só jogar os objetos pra lá e pra cá. É preciso projetar como objetos distribuídos e não simplesmente orientado a objetos.

Referências e Interfaces Remotas Referências remotas Identificador único para um objeto no sistema distribuído Transparência de localidade para o cliente Interfaces remotas Definem os métodos de um objeto que podem receber invocações remotas Linguagem de definição de interface (IDL) C Interface remota m1 m2 m1 A m2 m3 L

Semântica de Invocações remotas Invocações locais são executadas exatamente uma vez Isso não é possível em Objetos Distribuídos Falhas Outras semânticas: talvez, pelo menos uma vez, no máximo uma vez

Mais sobre semânticas Mecanismo de tolerância a falhas Semântica Retransmissão de request Filtro de duplicatas Re-execução do método ou retransmissão do reply Não --- Sim Re-execução do método Retransmissão do reply

Mais sobre semânticas Mecanismo de tolerância a falhas Semântica Retransmissão de request Filtro de duplicatas Re-execução do método ou retransmissão do reply Não --- Talvez Sim Re-execução do método No mínimo uma vez Retransmissão do reply No máximo uma vez

RMI e transparência 100% de transparência é impossível Falhas de comunicação RMIs possuem exceções intrínsecas Transparência pode não ser desejada Explorar diferentes semânticas Cancelamento de requisições

Um exemplo: Quadro negro distribuído Clientes compartilham um quadro negro Todos podem adicionar e modificar figuras Todos se mantém atualizados via polling DrawingBoard, Shape e GraphicalObject createShape, getAllShapes DrBd Cliente shape shape getState, setState

Tecnologias Java RMI .Net remoting CORBA Java apenas Integração com a linguagem .Net remoting Solução proprietária da Microsoft Integrada com a linguagem CORBA Independente de linguagem Diferentes implementações

Exemplo: Java RMI import java.rmi.*; public interface DrawingBoard extends Remote { Shape createShape(GraphicalObject g) throws RemoteException; List getAllShapes() throws RemoteException; } public interface Shape extends Remote { GraphicalObject getState() throws RemoteException; void setState(GraphicalObject g) throws RemoteException public class DrawingBoardServer extends UnicastRemoteObject implements DrawingBoard {...}

Exemplo: CORBA interface DrawingBoard { Shape createShape(in GraphicalObject g); All getAllShapes(); } Typedef sequence<Shape, 100> All; interface Shape { GraphicalObject getState(); void setState(in GraphicalObject g) struct GraphicalObject { ... }

Serialização x Referência Remota Objetos não-remotos são passados por cópia Objetos remotos têm uma referência remota passada getAllShapes Ref remota para shape DrBd Cliente GraphicalObject setState cópia serializada shape referência remota

Até agora... Porque Objetos Distribuídos Conceitos Básicos Tecnologia Exemplo Arquitetura de um sistema de Objetos Distribuídos Limitações e alternativas Conclusões

Arquitetura de um Sistema de Objetos Distribuídos cliente servidor Skeleton e Dispatcher da classe de B Proxy p/ B B Request C S Reply Skeleton: Implementa métodos da interface remota Desserializa requests e serializa replys Implementa interface remota Torna o RMI transparente Serializa requests e desserializa replys Dispatcher: Recebe msgs do módulo de comunicação e invoca o skeleton apropriado Implementa o protocolo de reply response Cria referências remotas e locais envolvidas no RMI Módulo de Ref. remota Módulo de comunicação Módulo de comunicação Módulo de Ref. remota Primeiro A recebe como resultado de algum método (que vamos ignorar), uma referência remota pra B. Pq Skeleton E dispatcher??

Binder Objetos precisam descobrir referências remotas Nome Ref DrawingBd refToDrBd Object2 redToObj2 Nome Ref Object2 refToObj2 Objetos precisam descobrir referências remotas O binder mapeia nomes para referências remotas bind(), rebind(), unbind() O binder precisa rodar em um nome bem conhecido CORBA Naming Service e RMIregistry lookup bind C Proxy DrBd

Um exemplo funcional, cliente public class Client { public void main(String args[]){ DrawingBoard db = null; try{ // o servidor se registrou com WELLKNOWN_NAME db = (DrawingBoard) Naming.lookup(WELLKNOWN_NAME); }catch(Exception e){ // Esta exceção pode ser Remote, Malformed ou // NotBoundException System.err.println(“Could not lookup server. Reason: ” + e.getMessage()); System.exit(1); } … //continua

Exemplo funcional, cliente … // ainda dentro do main() try{ List allShapes = db.getAllShapes(); Iterator it = allShapes.iterator(); while(it.hasNext()){ Shape s = (Shape) it.next(); display(s.getState()); } }catch(RemoteException e){ System.err.println(“comm. error:” + e.getMessage()); } } // main } // class

public class DrawingBoardServer { public static void main(String args[]){ System.setSecurityManager(new RMISecurityManager()); try{ DrawingBoard db = new DrawingBoard(); Naming.rebind(“Drawing Board XPTO", db); System.out.println(“DB server ready"); }catch(Exception e) { ... } }

public class DrawingBoardImpl extends UnicastRemoteObject implements DrawingBoard{ private List<Shape> theList; public Shape newShape(GraphicalObject g) throws RemoteException{ version++; Shape s = new ShapeImpl(g); theList.addElement(s); return s; } public Vector getAllShapes()throws RemoteException{ return theList;

public class GraphicalObject implements Serializable{ … }

Mais questões práticas E se queremos adicionar novas classes que implementam Shape no sistema? Como os objetos não-remotos são passados? E se queremos adicionar novas classes que extendem GraphicalObject? De onde os clientes obterão o código? E se o código não for em apenas uma linguagem?

Outras questões Garbage collection distribuído Threads no servidor Coordenação entre cliente e servidor, detecção de falhas Uma alternativa são leases Threads no servidor Multithreading precisa ser tratado pelo programador Activation service Redução do custo de manter serviços rodando

Limitações de Objetos Distribuídos Invocações de métodos são síncronas Escalabilidade Conexão intermitente Componentes são fortemente acoplados Extensibilidade Alternativas: RMI assíncrono (conexão intermitente) Sistemas baseados em eventos (escalabilidade, extensibilidade) Arquiteturas orientadas a serviços (todos os pontos)

RMI assíncrono A partir de CORBA 2.3 Implementado no lado cliente Callback Cliente informa objeto que receberá resposta Polling Cliente recebe um handle para requisitar resposta mais tarde

RMI vs. Mensagens RMI é uma boa idéia para um cliente-servidor simples? E em um sistema de transferência de arquivos? E em um sistema onde posso ter milhões de clientes? E quando quero desempenho? E quando quero desenvolver rápido?

Sumário Objetos distribuídos oferecem abstrações poderosas para o programador Transparência total é impossível Falhas O programador pode ou deve lidar com outros serviços Ex.: descoberta e ativação Limitações do paradigma e alternativas

Para mais Sobre objetos distribuídos Objetos Distribuídos x Serviços Distributed Systems Concepts and Design, Coulouris, Dollimore e Kindberg Estudos de caso com Java RMI e Corba Mais sobre Sistemas baseados em eventos Objetos Distribuídos x Serviços Web Services are not Distributed Objects, Vogel, IEEE Computing ou no blog dele .Net Remoting .Net Remoting, Strawmyer (http://www.developer.com/net/cplus/article.php/1479761)

Exemplo .Net Remoting: 1 using System; using System.Runtime.Remoting; using System.Runtime.Remoting.Channels; using System.Runtime.Remoting.Channels.Tcp; namespace CodeGuru.Remoting { public class SampleObject : MarshalByRefObject{ public SampleObject() { } public string HelloWorld() { return "Hello World!"; }

Exemplo .Net Remoting: 2 public class SampleServer { public static int Main(string [] args) { TcpChannel channel = new TcpChannel(8080); ChannelServices.RegisterChannel(channel); RemotingConfiguration.RegisterWellKnownServiceType( typeof(SampleObject), "HelloWorld", WellKnownObjectMode.SingleCall ); System.Console.WriteLine("Press the enter key to exit..."); System.Console.ReadLine(); return 0; }