Sistemas Distribuídos Prof. Marcus Rodrigues [email protected] Comunicação em Sistemas Distribuídos Capítulo 2 – Aula 8 Comunicação em Sistemas Distribuídos Prof. Marcus Rodrigues Material baseado no livro Distributed Systems: Principles and Paradigms Prentice Hall Copyright © Andrew S. Tanembaum, Maarten van Steen, 2001 Sistemas Distribuídos – Capítulo 2 – Invocação de Método Remoto Invocação de Método Remoto Uso de vantagens do paradigma de orientação à objetos em comunicação distribuída Prof. Marcus Rodrigues • Encapsulamento! RPC aplicada a objetos Invocação de Método Remoto (RMI – Remote Method Invocation) • Invocação de um método entre objetos localizados em diferentes processos, estejam estes na mesma máquina ou não. Sistemas Distribuídos – Capítulo 2 – Invocação de Método Remoto Objetos Distribuídos (1) Prof. Marcus Rodrigues Estado Método ... e Interface • Um objeto pode implementar múltiplas interfaces. Da mesma forma que, dada uma definição de interface, podem haver vários objetos que oferecem uma implementação para essa interface. Sistemas Distribuídos – Capítulo 2 – Invocação de Método Remoto Objetos Distribuídos (2) Prof. Marcus Rodrigues 2-16 Sistemas Distribuídos – Capítulo 2 – Invocação de Método Remoto Objetos Distribuídos (3) “O estado de objetos distribuído não é distribuído” Prof. Marcus Rodrigues • Apenas as interfaces implementadas pelo objeto • são disponibilizadas em outras máquinas Objetos remotos Objetos persistentes x Objetos transientes Sistemas Distribuídos – Capítulo 2 – Invocação de Método Remoto Associando um cliente a um objeto (1) Prof. Marcus Rodrigues Referência a objeto remoto • • • • outros objetos podem invocar métodos de um objeto remoto somente se tiverem acesso a sua referência de objeto remoto identificador único do objeto no sistema pode ser utilizado como parâmetro ou resultado de uma invocação de método remoto Interface remota: • todo objeto remoto possui uma interface remota que • especifica qual dos métodos pode ser invocado remotamente implementada pela classe do objeto remoto. Associação de objetos (binding) • • Binding implícito Binding explícito Sistemas Distribuídos – Capítulo 2 – Invocação de Método Remoto Associando um cliente a um objeto (2) Distr_object* obj_ref; obj_ref = …; obj_ref-> do_something(); //Declare a systemwide object reference // Initialize the reference to a distributed object // Implicitly bind and invoke a method Prof. Marcus Rodrigues (a) Distr_object objPref; Local_object* obj_ptr; obj_ref = …; obj_ptr = bind(obj_ref); obj_ptr -> do_something(); //Declare a systemwide object reference //Declare a pointer to local objects //Initialize the reference to a distributed object //Explicitly bind and obtain a pointer to the local proxy //Invoke a method on the local proxy (b) a) b) Um exemplo com binding implícito usando apenas referência global Um exemplo com binding explícito usando referências locais e globais Sistemas Distribuídos – Capítulo 2 – Invocação de Método Remoto Invocação estática x Invocação dinâmica (1) Prof. Marcus Rodrigues RMI x RPC? • Referência de objeto Suporte a RMI • • Invocação estática • Uso de linguagens de definição de interfaces (IDL) para especificação da interface do objeto Invocação dinâmica • Geração automática do stub usando alguma linguagem • • orientada a objetos A invocação do método é composta em tempo de execução A aplicação seleciona em tempo de execução qual o método será invocado no objeto remoto Sistemas Distribuídos – Capítulo 2 – Invocação de Método Remoto Invocação estática x Invocação dinâmica (2) Suporte a RMI • Invocação dinâmica x Invocação estática • Exemplo: Prof. Marcus Rodrigues invoke(objeto, metodo, parametros_de_entrada, parametros_de_saida); append(int) Atributos: ... ... Invocação estática fobject.append(int); Invocação dinâmica invoke(fobject, id(append), int); fobject Sistemas Distribuídos – Capítulo 2 – Invocação de Método Remoto Passagem de parâmetros Prof. Marcus Rodrigues 2-18 Passando um objeto por referência ou por valor Sistemas Distribuídos – Capítulo 2 – Invocação de Método Remoto Considerações de projeto Transparência • A latência de uma chamada local é bastante Prof. Marcus Rodrigues • • menor que de uma chamada remota. Chamadas remotas são mais vulneráveis a falhas do que chamadas locais. As invocações de métodos remotos são iguais as invocações aos métodos locais, porém as diferenças entre os objetos remotos e locais devem estar expressos nas suas interfaces. (e.g. as classes de objetos remotos em Java implementam a interface Remote) Sistemas Distribuídos – Capítulo 2 – Invocação de Método Remoto Modelo de objetos distribuídos DCE a) Prof. Marcus Rodrigues b) Objetos dinâmicos distribuídos no DCE Objetos nomeados distribuídos Sistemas Distribuídos – Capítulo 2 – Invocação de Método Remoto Java RMI Prof. Marcus Rodrigues Utiliza mesma sintaxe para invocação de métodos de objetos locais ou remotos Todo objeto remoto implementa uma interface remota: • extende a interface java.rmi.Remote public interface MyRemoteClass extends java.rmi.Remote • todos os métodos da interface devem prever a exceção java.rmi.RemoteException (cláusula throws) além das exceções próprias da aplicação Sistemas Distribuídos – Capítulo 2 – Invocação de Método Remoto Java RMI – IDL sintaxe e semântica de Java • desvantagem: não suporta outras linguagens! Prof. Marcus Rodrigues Sistemas Distribuídos – Capítulo 2 – Invocação de Método Remoto Prof. Marcus Rodrigues Exemplo - objeto remoto Sistemas Distribuídos – Capítulo 2 – Invocação de Método Remoto Exemplo - compilação Compilando a implementação do objeto remoto • javac CalculatorImpl.java Prof. Marcus Rodrigues Geração dos stubs • rmic CalculatorImpl • gera os arquivos • CalculatorImpl_Skel.class • CalculatorImpl_Stub.class Sistemas Distribuídos – Capítulo 2 – Invocação de Método Remoto Prof. Marcus Rodrigues Exemplo - servidor Sistemas Distribuídos – Capítulo 2 – Invocação de Método Remoto Prof. Marcus Rodrigues Exemplo - cliente Sistemas Distribuídos – Capítulo 2 – Invocação de Método Remoto Exemplo - execução Compilando servidor e cliente e executando a aplicação Prof. Marcus Rodrigues Sistemas Distribuídos – Capítulo 2 – Invocação de Método Remoto Java RMI Passagem de parâmetros e resultados • objetos remotos: referência do objeto remoto • objetos não-remotos: cópia do objeto (classe deve estender a classe Serializable) Prof. Marcus Rodrigues Carga de classes • carregamento automático de classes de objetos • • desconhecidos na JVM flexibilidade (e.g. extensão de funcionalidades de um módulo) servidor deve criar RMISecurityManager para segurança Sistemas Distribuídos – Capítulo 2 – Invocação de Método Remoto Java RMI rmiregistry (Binder) • deve ser executado em toda máquina que Prof. Marcus Rodrigues • • hospeda objetos remotos mantém uma tabela para mapeamento da representação textual dos objetos aos objetos localizados na máquina representação textual rmi: //computerName:port/objectName • acessado pelos métodos da classe Naming Sistemas Distribuídos – Capítulo 2 – Invocação de Método Remoto Desenvolvimento usando Java RMI Prof. Marcus Rodrigues Passos • Projetar e implementar os componentes da aplicação distribuída • definição das interfaces remotas • implementação dos objetos remotos • implementação do servidor e clientes • Compilação dos códigos-fontes e geração dos stubs • Iniciar a aplicação • geração das classes do servidor e cliente (javac) • criação dos stubs (rmic) • iniciar o binder para guardar os objetos remotos • (rmiregistry) iniciar o servidor e cliente(s) Sistemas Distribuídos – Capítulo 2 – Invocação de Método Remoto