Você está na página 1de 51

1

CURSO: Tecnologia em Análise e Desenvolvimento de Sistemas (TADS)


DISCIPLINA: Sistemas Distribuídos

Sistemas Distribuídos

Invocação Remota (Cap 5 – Couloris)

PROFESSOR: Cláudio Roberto de Lima Martins


claudiomartins2000@gmail.com
2

Agenda

• Introdução
• Protocolos de requisição-resposta
• Chamada de procedimento remoto
• Invocação a método remoto
• Estudo de caso: RMI Java
3

Introdução
• Esta aula trata de como os processos (ou entidades,
em um nível de abstração mais alto, como objetos ou
serviços) se comunicam em um sistema distribuído,
examinando, em particular, os paradigmas de
invocação remota.
▫ Os protocolos de requisição-resposta: troca bilateral de mensagens,
ex: cliente-servidor.

▫ Chamada de procedimento remoto (RPC, Remote Procedure Call):


permite aos programas clientes chamarem procedimentos em programas
servidores.

▫ Invocação a método remoto (RMI, Remote Method Invocation):


permite que um objeto que está em um processo chame os métodos de
um objeto que está em outro processo.
4

Localização da Chamada Remota


5

Protocolos de requisição-resposta
• Projetada para suportar as funções e as trocas de
mensagens em interações cliente e servidor
típicas.
• Normalmente é síncrona, pois o processo cliente é
bloqueado até que a resposta do servidor chegue.
• Mas pode ser assíncrona em alguns casos.
▫ útil em situações em que os clientes podem
recuperar as respostas posteriormente.
6

O protocolo de requisição-resposta

O protocolo Req/Resp é baseado em 3 primitivas de


comunicação:
• doOperation,
• getRequest e
• sendReply
Esse protocolo combina pedidos com respostas.
7

Operações do protocolo de requisição-resposta.


8

HTTP: um exemplo de protocolo de requisição-resposta


HTTP (HyperText Transfer Protocol) – protocolo da WWW sob TCP, no qual
servidores Web gerenciam recursos (arquivos HTML, CSS, imagens, etc).

HTTP especifica as mensagens envolvidas em uma troca de requisição-


resposta, os métodos, os argumentos, os resultados e as regras para
representá-los (empacotá-los) nas mensagens.
Suporta um conjunto fixo de métodos (GET, PUT, POST, DELETE, HEAD,
etc.) que são aplicáveis a todos os seus recursos.
Na versão original era Stateless. Na versão atual (HTTP 1.1) usa conexões
persistentes (com tempo fixo p/sessão aberta sem atividade - timeout).
9
10

Chamada de procedimento remoto


• O objetivo de tornar a programação de sistemas
distribuídos semelhante (se não idêntica) à
programação convencional.
▫ isto é, obter transparência de distribuição de
alto nível.
• Na RPC, os procedimentos em máquinas remotas
podem ser chamados como se fossem
procedimentos no espaço de endereçamento local.
11
12

Questões de projeto para RPC

• Três questões são importantes para se entender o


conceito da RPC:
• o estilo de programação promovido pela RPC –
programação com interfaces;
• a semântica de chamada associada à RPC;
• o problema da transparência e como ele se
relaciona com as chamadas de procedimento remoto.
Programação com Interfaces
• Uma Interface define um contrato no qual um
módulo especifica os procedimentos e as
variáveis que podem ser acessadas a partir de
outros módulos.
• Os módulos são implementados de forma a
ocultar todas as informações sobre eles, exceto
o que está disponível por meio de sua interface.
• Contanto que sua interface permaneça a
mesma, a implementação pode ser alterada
sem afetar os usuários do módulo.
Interface em sistemas distribuidos
• Interfaces remotas
▫ Uma interface remota especifica métodos
disponiveis de um objeto passíveis de
invocações para que seja feita por outros
processos.
▫ Define quais serão os tipos de argumentos de
entradas e saídas.
• Os métodos das interfaces remotas podem
passar objetos como argumentos e
resultados de métodos, ou referencias para
os mesmos.
Linguagens de definição de interface

• O Mecanismo de RMI pode ser integrado a


linguagens de programação particulares caso
inclua notações adequadas para definir
interfaces, permitindo que os parâmetros de
entrada e saída sejam mapeados no uso
normal de parâmetros da linguagem.

• As linguagens de definição de interface (IDLs)


são projetadas para permitir que objetos
implementados em diferentes linguages
invoquem uns aos outros.
Linguages de definição de interface
Exemplo de IDL do CORBA
- PersonList especifica métodos
disponíveis para RMI em um
objeto remoto.
- addPerson especifica seu
argumento como de entrada (in)
- getPerson recupera uma
instância de Person pelo nome e
define seu segundo argumento
como de saída (out)
- (CORBA (abreviado de Common
Object Request Broker
Architecture))
Comunicação entre objetos distribuídos
MODELO DE OBJETO
• Programas orientados a objetos consistem em
conjuntos de objetos que interagem entre si.
• Os objetos podem ser acessados por meio de
referências.
• Uma interface fornece a definição das assinaturas de
um conjunto de métodos.
• Uma ação é iniciada por um objeto invocando um
método de outro objeto.
• Os programas podem encontrar muitos tipos de erros
e condições inesperadas, de diversos graus de
gravidade.
• É necessário fornecer uma maneira de liberar espaço
ocupado pelos objetos, quando eles não são mais
necessários
Comunicação entre objetos distribuídos
OBJETOS DISTRIBUIDOS
• O estado de um objeto consiste nos valores
de suas variáveis de instância.
• Podem adotar arquitetura cliente-servidor. Os
objetos são gerenciados pelos servidores e
seus clientes invocam seus métodos usando
invocação a método remoto, RMI.
• Podem adotar outros modelos para usufruir
de vantagens.
• Objetos clientes e servidores em diferentes
processos impõe encapsulamento.
Comunicação entre objetos distribuídos
MODELO DE OBJETO DISTRIBUÍDO
• Cada processo contém um conjunto de objetos, que podem
receber invocações locais e remotas, e outros podem receber
apenas invocações locais.
Comunicação entre objetos distribuídos
MODELO DE OBJETO DISTRIBUÍDO
• Uma referencia de objeto remoto é um identificador que
pode ser usado por todo um sistema distribuído para se referir
a um único objeto remoto.
• Interface remotas: A classe de um objeto remoto implementa
os métodos de sua interface remota.
Comunicação entre objetos distribuídos
MODELO DE OBJETO DISTRIBUÍDO
• Ações em um sistema distribuído: Em sistemas não
distribuídos, uma ação é iniciada por uma invocação ao
método.
▫ No distribuído, os objetos envolvidos podem ser localizados em
diferentes processos ou computadores.
• Os aplicativos distribuídos podem fornecer objetos remotos
com métodos para instanciar objetos que podem ser
acessados pela RMI.
Comunicação entre objetos distribuídos
PROBLEMAS DE PROJETO PARA RMI

• Escolha da semântica de aplicação:


▫ Invocação Talvez:
 Falhas por omissão, se a mensagem de invocação ou resultado
for perdida;
 Falhas por colapso, quando o servidor que contem o objeto
falha.

▫ Invocação pelo menos uma vez:


 Falhas por colapso, quando o servidor que contem o objeto
falha.
 Falhas arbitrarias. Múltipla execução do mesmo método
criando valores errados.

▫ Invocação máximo uma vez:


 O ativador recebe um resultado quando o método foi
executado exatamente uma vez.
Comunicação entre objetos distribuídos

IMPLEMENTAÇÃO RMI
• Modulo de comunicação:
▫ Cooperam para executar o protocolo requisição-
resposta, que tramite mensagens de requisição e
resposta entre o cliente e servidor.
• Modulo de referencia remota:
▫ Responsável pela transformação entre referencias
de objeto local e remoto e pela criação de
referencias de objeto remoto.
• Serventes:
▫ Uma instancia de uma classe que fornece o corpo
do objeto remoto. É o servente que trata as
requisições remotas repassadas pelo
correspondente.
Comunicação entre objetos distribuídos
IMPLEMENTAÇÃO RMI
• Programas clientes e servidores:
▫ Contem as classes para os despachantes, junto com as
implementações das classes de todos os serventes.
• Vinculador:
▫ É um serviço separado que mantem uma tabela contendo
mapeamentos dos nomes textuais para referencias de um
objeto remoto.
• Threads no servidor:
▫ Evitam a execução de uma invocação remota que atrase
uma outra, geralmente os servidores criam uma thread para
cada invocação remota.
• Invocação de objetos remotos:
▫ Para evitar desperdício de recursos e execução, os
servidores de objetos remotos serão iniciados somente
quando necessários ao cliente.
Chamada de procedimento remoto(RPC)

• Processo cliente chama um procedimento que


está sendo executado em um processo
servidor.
• Não suporta referências de objeto remoto.
• Implantado sobre o protocolo requisição-
resposta.
Função dos procedimentos stub no cliente e no servidor na RPC
Estudo de caso: RPC da Sun

• RPC Sun – Projetado para comunicação


cliente-servidor no sistema de arquivos de
rede NFS (Network File System).
• Opção de chamada de procedimento remoto
sobre UDP ou TCP.
• RPC Sun – Fornece uma linguagem de
interface XDR e um compilador de interface
rpcgen.
Estudo de caso: RPC da Sun

• XDR – Linguagem de definição de interface.


(Notação primitiva)
▫ Não permite a especificação de nomes de
interface.
▫ Definição de procedimento especifica a
assinatura e o número identificador de
procedimento.
▫ Apenas um parâmetro de entrada.
▫ Parâmetro de saída retornado em apenas um
resultado.
▫ Assinatura de saída consiste no tipo de
resultado, no nome do procedimento e no tipo
de parâmetro de entrada.
const MAX = 1000;
struct readargs{
typedef int FileIdentifier;
FileIndentifier f;
typedef int FilePointer;
FilePointer position;
typedef int Lenght;
Length length;
};
struct Data{
int length;
Program FILEREADWRITE{
char buffer[MAX];
version Version{
};
void WRITE(writeargs) =1;
Data READ(readargs) = 2;
struct writeargs{ } = 2;
FileIdentifier f; } = 9999;
FilePointer position;
Data data;
};
Estudo de caso: RPC da Sun

• Notação para definir constantes, typedefs,


estruturas, tipos enumerados, uniões e
programas, são fornecidos pela linguagem de
definição de interface.
• Compilador de interface rpcgen gera:
▫ Procedimento stub no cliente;
▫ Procedimento main, despachante e procedimento
stub no servidor.
▫ Procedimentos de empacotamento e
desempacotamento de XDR no servidor.
Estudo de caso: RPC da Sun

• Vinculação (binding) – Serviço de vinculação local


chamado de mapeador de porta (port mapper),
executado em cada computador.
• Autenticação – Campos adicionais nas
mensagens de requisição e resposta para
autenticação das informações passadas entre
cliente e servidor. Suporta protocolos de
autenticação diferentes.
▫ Nenhum.
▫ Estilo UNIX.
▫ Baseado em uma chave de compartilhada para
assinar as mensagens RPC.
▫ Autenticação Kerberos.
32

Invocação a método remoto

Estudo de caso: RMI Java


33

RMI em Java

• Java RMI (Remote Method Invocation) estende o


modelo de objeto Java para dar suporte para
objetos distribuídos na linguagem Java.
• Em particular, RMI permite que os objetos
invoquem métodos em objetos remotos usando a
mesma sintaxe das invocações locais.
• Pode ser implementado usando protocolos e
infraestrutura próprios do Java (JRMP e RMI
Registry) ou usando IIOP e ORBs, próprios do
CORBA.
▫ Pacote JRMP – Java Remote Method Protocol
34

Visão geral do RMI


35

Mecanismo RMI
• Quando pensamos em uma aplicação cliente-servidor, é
comum que no programa servidor haja objetos receptores.
Entretanto, é possível que haja uma situação em que objetos
do programa cliente também sejam receptores; ou seja, que
recebam mensagens vindas do programa servidor.
• Assim, a especificação destes passos se refere aos objetos que
recebem as mensagens remotas; estes podem estar no
programa servidor ou no programa cliente.
• Para cada objeto que receber mensagens remotas (receptor),
deve-se criar uma interface que contenha a especificação
destes métodos.
• A interface deverá ser especialização da interface Remote.
• Os métodos deverão indicar que throws
RemoteException (ou seja, podem disparar a
exceçãoRemoteException)
36

Exemplo: HelloWorld Distribuído com RMI


• Este exemplo serve para ilustrar o funcionamento do RMI,
para exemplificar trocas de objetos de mensagens.
• Contém os seguintes componentes:
▫ Aplicação Servidor: com a interface estendendo a
classe Remote do pacote java.rmi.*.
▫ RmiServidorExemplo: Classe com a implementação dos
métodos de nossa aplicação servidora.
▫ RmiServidor: classe responsável por publicar o Servidor RMI
▫ Aplicação cliente: usa a mesma interface definida na
aplicação servidor para estabelecer um contrato de
comunicação entre as duas partes.
 IRmiServidorExemplo
 ProgramaClienteRMI (programa principal cliente)
Em: http://www.webcodefree.com.br/blog/?p=1187
37

Aplicação Servidor
38

Aplicação Servidor
Logo após criar a classe com a implementação dos métodos de nossa
aplicação servidora, a classe de Implementação dos métodos deve
estender UnicastRemoteObject e implementar a interface do Servidor.
39

Aplicação Servidor
40

Aplicação Cliente
41

Aplicação Cliente
42

Exemplo do Livro: Quadro branco de figuras

• O “quadro branco compartilhado” é um


programa distribuído que permite a um grupo de
usuários compartilhar uma vista comum de uma
superfície de desenho contendo objetos gráficos,
como retângulos, linhas e círculos, cada um dos
quais desenhado por um dos usuários.
• O servidor mantém o estado corrente de um
desenho, fornecendo uma operação para os
clientes informarem-no sobre a figura mais
recente que um de seus usuários desenhou e
mantendo um registro de todas as figuras que
tiver recebido.
43

Exemplo: quadro branco compartilhado


• O servidor também fornece operações que permitem
aos clientes recuperarem as figuras mais recentes
desenhadas por outros usuários, fazendo uma
consulta sequencial no servidor.
• O servidor tem um número de versão (um inteiro),
que é incrementado sempre que uma nova figura
chega.
• O servidor fornece operações que permitem aos
clientes perguntarem seu número de versão e o
número de versão de cada figura, para que eles
possam evitar a busca de figuras que já possuem.
44
Interfaces remotas na RMI Java
As interfaces remotas são definidas pela ampliação de uma interface chamada
Remote, fornecida no pacote java.rmi.
Os métodos devem disparar a exceção RemoteException, mas exceções
específicas do aplicativo também podem ser disparadas.
A Figura 5.16 mostra um exemplo de duas interfaces remotas chamadas
Shape e ShapeList.
45

Passagem de parâmetros e resultados

• Na RMI Java, supõe-se que os parâmetros de


um método são parâmetros de entrada e o resultado
de um método é um único parâmetro de saída.
• A serialização Java é usada para empacotar
argumentos e resultados na RMI Java.
• Qualquer objeto que seja serializável – isto é, que
implemente a interface Serializable – pode ser
passado como argumento ou ser resultado
na RMI Java.
• Todos os tipos primitivos e objetos remotos são
serializáveis. As classes de argumentos e valores de
resultado são carregadas por download no destino
pelo sistema RMI, quando necessário.
46
47
48
49
50

Resumo
• Vimos três paradigmas da programação distribuída –
protocolos de requisição-resposta, chamadas de procedimento
remoto e invocação a método remoto.
• Os programas de requisição-resposta fornecem suporte leve e
mínimo para a computação cliente-servidor. Sua função mais
comum é dar suporte para RPC ou RMI.
• A "chamada de procedimento remoto" é um avanço para
programação distribuída, mas, possuir restrições
(falhas,desempenho, acesso concorrente) que limitam o seu
uso. Fornecem diversidade nas semânticas de invocação.
• O modelo de objeto distribuído é uma ampliação do modelo
de objeto local usado nas linguagens de programação
baseadas em objetos.
• As implementações de middleware da RMI fornecem
componentes (incluindo proxies, esqueletos e despachantes)
que ocultam aos programadores do cliente e do servidor os
detalhes do empacotamento, da passagem de mensagem e da
localização de objetos remotos.
Referências

• Sistemas Distribuícos: Conceitos e Projetos


(Coulouris, Dollimore, Kindberg) – Cap. 5

• Chamada de procedimento remoto


(Wikipédia):
https://pt.wikipedia.org/wiki/Chamada_de_procedimento_remoto

Você também pode gostar