Você está na página 1de 31

RPC e Objetos Distribuídos

Motivação
● Você desenvolve um programa cujos objetos
trocam mensagens entre si
● Funciona muito bem se o programa executa
em um único processo
● O que acontece se você subdividir seu
programa em múltiplos objetos?
– O objeto1 pode invocar objeto2.metodoA()?
– Por que?
– Solução:
● RMI: Invocação de método remoto (baseado em
objetos)
Camadas de middleware

Applications

RPCs and RMIs, e.g., CORBA


Middleware
Request reply protocol camadas=
Fornecem
External data representation suporte a
aplicação
Operating System
Executam em quaisquer
Servidores
No nível de usuário

RPC = Remote Procedure Call (Procedure = Function)


RMI = Remote Method Invocation
CORBA = Common Object Request Brokerage Architecture
Objetos locais
● Acessam espaço de endereçamento de um
processo
● Objeto
– Consiste de um conjunto de dados e métodos
– Exemplo: objeto C++, Java
● Referência de objeto
– Identificador no qual um obj pode ser acessado
– Ou seja, um ponteiro (end. virtual dentro do
processo)
● Interface
Objetos remotos
● Acessam espaço de endereçamento de
múltiplos processos
● Invocação de método remoto
– Invocações de métodos entre objetos em
diferentes processos (processos podem residir no
host local ou remoto)
– RPC: chamada de procedimento entre funções
em diferentes processos em sistemas não
orientado a objetos
● Objeto remoto
– Objetos que podem receber invocações remotas
Objetos remotos
● Referência de objeto remoto
– Um identificador que pode ser usado globalmente
através de um sistema distribuído para referenciar
um objeto remoto específico de forma única
● Interface remota
– Todo objeto remoto tem uma interface remota que
especifica quais métodos podem ser invocados
remotamente, p.ex. CORBA IDL (Linguagem de
Definição de Interface)
Objeto e interface remota

remoteobject

Data
remote
interface
m1 m4

{
Implement. m5
m2
dos métodos m6
m3

Exemplo de referência de Objeto Remoto = (IP,port,objectnumber,signature,time)


Invocação de método local e remoto
Object Process
Process Process
Host A
remote local C
E
invocation invocation local
remote
invocation invocation F
B local
A
invocation D
Host B

Invocação Local = entre objetos no mesmo processo.


Tem exatamente uma semântica
Invocação Remota = entre objetos em processos diferentes.
Busca-se também uma únca semântica p/ invocações remotas
Porém é mais difícil
Modos de falhas: RMI/RPC
Request

correct lost
Execute
function request

Reply

Request Channel
Execute fails
during
Execute, crash reply
Crash before Reply
reply

Request Client
machine
Execute
fails
crash
Crash before
before
Reply receiving
execution
reply

(e se a requisição é recebida mais de uma vez?)


Semânticas de invocação
Transparência = invocação remota tem o mesmo comportamento
de invocação local
[Birrell and Nelson, inventors of RPC, 1984]
Altamente complexo de se implementar em redes assíncronas…

Retransmissão ou Manter histórico


não da requisição qdo retransmissões de resultados de
até uma resposta são usadas, se é mensagens p/ permitir
ser recebida ou o necessária filtragem retransmissão de
Servidor indicar de pedidos resultados perdidos
falha duplicados.

Métricas de tolerância a falhas Invocation


semantics

Retransmit request Duplicate Re-execute procedure


message filtering or retransmit reply
CORBA No Not applicable Not applicable Maybe

Sun RPC Yes No Re-execute procedure At-least-once


Java RMI, Yes Yes Retransmit old reply At-most-once
CORBA
Proxy em skeleton em invocação de
métodos remotos
Process P1 Process P2

client server
remote
object A proxy for B skeleton
object B
Request & dispatcher
for B’s class

Reply

Remote Communication Communication Remote reference


reference module module module module

MIDDLEWARE
Proxy em skeleton em invocação de
métodos remotos
Process P1 (“client”) Process P2 (“server”)

client server
remote
object A proxy for B skeleton
object B
Request & dispatcher
for B’s class

Reply

Remote Communication Communication Remote reference


reference module module module module
Proxy
● Responsável por deixar RMI transparente p/
clientes
– Comporta-se como um obj local na invocação
– Implementa os métodos da interface remota que
representa
● Ao invés de realizar uma invocação, o proxy a
repassa para o obj remoto
– Na chamada, o método do proxy marshals os
seguintes itens na msg de requisição:
● Referência para o obj destino
● Id dos métodos
● Valores dos argumentos
Marshalling e Unmarshalling
● Um cliente Windows envia um RMI p/ um
servidor Unix/Mac
– Não funciona, pois Windows tem representação
little-endian, enquanto Mac big-endian
● Representação externa de dados
– Acordo independente de plataforma, padrão para
representação de estruturas e dados primitivos
● Corba CDR, Sun XDR
Módulo de referência remota
● Responsável pela tradução entre referências locais e
remotas, tem uma tabela de obj
– Uma entidade p/ cada obj remoto, p.ex.: B em P2
– Uma entidade p/ cada proxy local, p.ex.: proxy-B
em P1
● Qdo um novo obj remoto aparece no módulo, ele cria
uma referência e add na tabela
● Qdo uma referência chega em uma msg de
requisição ou resposta, o módulo verifica
correspondência do obj entre proxy ou obj local
● Se a referência de obj remoto não está na tabela,
RMI cria um novo proxy, e verifica no módulo sua
presença ou não, add na tabela
Proxy e skeleton em invocação de
método remoto

Process P1 (“client”) Process P2 (“server”)

client server
remote
object A proxy for B skeleton
object B
Request & dispatcher
for B’s class

Reply

Remote Communication Communication Remote reference


reference module module module module
O que acontece no lado do
servidor?
● Todo processo tem um dispatcher e um
skeleton p/ cada obj local (classe)
● Dispatcher recebe todas requisições do
módulo de comunicação
– Para cada msg. usa id. p/ selecionar método
apropriado no skeleton
● Skeleton implementa os métodos da interface
remota
– Skeleton un-marshal args e invoca método
correspondente no obj local
– Aguarda finalização e marshal os resultados,
incluindo exceções, em msg de resposta.
Resumo RMI

Client Proxy Proxy object is a hollow


Process Object container of Method
B names.
Object A Remote
Reference Remote Reference
Module Module translates
Comm.
between local and
Module
remote object
references.

Server Dispatcher sends the


Process Comm. Remote
request to Skeleton
Module Reference
Module Object

Dispatcher Skeleton unmarshals


Object parameters, sends it
Skeleton
B to the object, &
for B’s
Class marshals the results
for return
MIDDLEWARE
Geração de proxies, dispatchers e
skeletons
● Programador escreve somente implementações
de objetos e interfaces
● Proxies, dispatchers e skeletons são gerados
automaticamente a partir de interfaces
● Em CORBA, isso é feito na IDL. Compilador de
interface, automaticamente, gera proxies,
dispatchers e skeletons
● Em Java RMI
– Programador define conj. de métodos
disponibilizados p/ obj remotos
– Compilador Java RMI gera classes proxy, dispatcher,
e skeleton a partir de classes do obj remoto
Chamada de procedimento remoto
(RPC)
● Similar ao RMI, porém destinada a cenários
não orientados a objetos
● Chamada a procedimentos que avançam as
fronteiras dos processos
● Processo cliente invoca um procedimento em
um processo servidor
– Semântica similar ao RMI
– Formato de mensagem padrão, usa requisição-
resposta
Procedimentos Stub Cliente e
Servidor em RPC

client process server process

Request

Reply
client stub server stub
procedure procedure
client service
procedure Communication Communication procedure
module module dispatcher
Stubs
● Stubs são gerados automaticamente a partir
de especificações de interfaces
– Ocultam detalhes de (un)marshalling dos
programadores
● Stubs clientes realizam marshalling em msgs
de requisisção e unmarshalling em respostas
● Stubs servidores realizam unmarshalling em
msgs de requisisção e marshalling em
respostas
Processo de geração de stubs

Compiler / Linker
gcc
Server
.o, .exe Program
.c Server Server .c
Stub Source

.h
Interface Stub Common RPC
RPC
Specification Generator Header LIBRARY
LIBRARY
e.g., in SUN XDR e.g., rpcgen
Client Client .c
Stub Source
Client .c
.o, .exe Program

Compiler / Linker gcc


Arquivos de interface Sun XDR
const MAX = 1000; Disponível em sistemas Sun e NFS
typedef int FileIdentifier;
typedef int FilePointer;
typedef int Length; struct readargs {
struct Data { FileIdentifier f;
int length; FilePointer position;
char buffer[MAX]; Length length;
}; Somente um argumento
};
Pode ser definido como estrutura
struct writeargs {
FileIdentifier f; program FILEREADWRITE {
FilePointer position; version VERSION {
Data data; void WRITE(writeargs)=1; 1
}; Data READ(readargs)=2; 2
}=2; Número de versão
} = 9999; Número do Programa
Localizando RPCs
Finding An RPC:
CLIENT
RPCs live on specific hosts
Client
Stub at specific ports.
Client
Program Port mapper on the host
Comm.
Module maps from RPC name to
port#
When a server process is
initialized, it registers its
SERVER
RPCs (handle) with the port
Comm.
Module
mapper on the server
A client first connects to
Dispatcher port mapper (daemon on
Server
procedure standard port) to get this
Server
Stub handle
The call to RPC is then
made by connecting to the
corresponding port
Arquitetura de notificação
distribuída de eventos

Event service
object of interest subscriber

1. notification

object of interest observer subscriber

2. notification notification

object of interest observer subscriber

3. notification
Binder e ativador
● Binder: um serviço separado que mantém
uma tabela que mapeia nomes em referências
de objetos remotos
– Usado por servidores p/ registrar seus objs
remotos por nome. Java RMI Registry, Corba
Naming
● Ativação de objetos remotos
– Um obj remoto está ativo qdo está disponível p/
invocação dentro de um processo em execução
– Um obj passivo consiste de:
● Implementação de métodos
● Seus estados em formato marshalled
Binder e ativador
● Ativação
– Cria uma instância de classe de um obj passivo e
inicializa sua variáveis, sob demanda
– Ativador é responsável por:
● Registrar obj passivos no binder
● Iniciar processos de servidor de nomes e seus obj
remotos
● Manter os locais dos servidores p/ obj remotos já
ativados
– Exemplo:
● Ativador = Inetd
● Objeto/serviço passivo = FTP
Outros serviços
● Objeto persistente: um obj que “sobrevive” a
invocações simultâneas de um processo
– Persistência em Java (JPA), PerDIS, Khazana
● Se um obj migra, pode ser uma boa solução
ter uma referência de obj remoto (IP, porta,...)
– Serviço de localização: mapeia uma referência de
obj remoto p/ sua localização atual
– Permite a migração de obj entre hosts, sem alterar
referência de obj remoto
– Exemplo:
● Akamai é um serviço de localização p/ objetos Web.
Migra obj Web por meio do serviço de localização DNS
Exercícios
● Descreva um cenário no qual um cliente pode
receber uma resposta de um chamada
previamente realizada
● Descreva meios pelos quais protocolos
requisição-resposta mascaram a
heterogeneidade de sistemas operacionais e
tecnologias de redes de computadores
Exercícios
● Uma interface Eleição fornece dois métodos
remotos:
– Voto: este método tem dois parâmetros em que o
cliente fornece o nome do candidato e o nº título
(garante que o eleitor vota apenas 1 vez)
– Resultado: também dois parâmetros no qual o
servidor fornece ao cliente o nome do candidato e
a quantidade de votos
● Quais desses parâmetros são de entrada e
quais são de saída?

Você também pode gostar