Anda di halaman 1dari 36

Invocação Remota e Objectos

Distribuídos
Licenciatura em Engenharia Informática
3º Ano – 5º Semestre
Ano lectivo 2010-2011

Alexandre Fonte Material de Apoio a AD, ESTCB Edição 2010-2011


1
Sumário

  Invocação Remota e Objectos Distribuídos


  Motivação
  Propriedades
  Objectos Distribuídos
  Detalhes de Implementação
  Como são escondidos os detalhes de Implementação?
  Especificação de Interfaces e suporte ao Desenvolvimento
  Servidores de Nomes

Alexandre Fonte Material de Apoio a AD, ESTCB Edição 2010-2011


Invocação Remota - Motivação

  As aplicações distribuídas podem ser implementadas sobre interfaces de


mensagens tipo Sockets. Em termos das noções habituais de redes estas
interfaces de programação são bastante intuitivas, mas originam alguns
problemas:
  Os programas C-S incluem muitos detalhes sem significado aplicacional
especifico
  Muitas das linhas de código estão relacionadas com as comunicações
  Criação dos Sockets
  Criação e preenchimento e interpretação das mensagens
  Envio e recepção de mensagens
  Selecção do código a executar tendo em conta a mensagem recebida
  Os programas C-S ficam estruturados em função dos protocolos C-S
  Os servidores ficam estruturados em função da lista de mensagens que sabem
processar
  Além disto, os programadores estão habituados às linguagens
tradicionais cujo fluxo de um programa normalmente corresponde à
chamada de procedimentos (ou funções) de forma lógica e encadeada ou
à invocação de métodos sobre objectos
Alexandre Fonte Material de Apoio a AD, ESTCB Edição 2010-2011
Invocação Remota - Motivação
  Será que não se podem automatizar as interacções
cliente-servidor?

  Uma extensão natural aos ambientes distribuídos será


permitir:
  a execução de procedimentos noutra máquina

  E.g., Sun RPC, Microsoft RPC, DCE


  a execução de métodos sobre objectos remotos, isto
se os procedimentos forem definidos no âmbito de
um objecto
  E.g., Java RMI, CORBA, DCOM

Alexandre Fonte Material de Apoio a AD, ESTCB Edição 2010-2011


Invocação Remota de Procedimentos
Remote Procedure Calls (RPC)
•  Método que permite a chamada de procedimentos remotos sobre outros
espaços de endereçamento
•  Usa uma interface remota idêntica à interface local
•  Os dados são passados como parâmetros (transferência de dados entre
espaços de endereçamento.)
•  Geralmente, a chamada de um RPC bloqueia até à chegada dos resultados
da execução do RPC (transferência de controlo entre espaços de
endereçamento).

Cliente Servidor
... Dados como parâmetros
A=servfunc(p1,p2); r_type
... servfunc(p1_type p1, p2_type p2)
{
...
}
Dados como
valores de retorno
Processo A Processo B
Alexandre Fonte Material de Apoio a AD, ESTCB Edição 2010-2011
Invocação Remota de Métodos
Remote Method Invocation (RMI)
•  Semelhante aos RPCs, mas para um ambiente Orientado ao Objecto
•  Método que permite a invocação de métodos sobre objectos em execução
numa máquina remota (num espaço de endereçamento diferente)
cliente A Objecto Remoto
metodo(Obj1 a,Obj2
C=Objecto.metodo Dados como parametros b) {
(A,B) //Implementação do
método
.
.
Dados como .
}
valores de retorno

Alexandre Fonte Material de Apoio a AD, ESTCB Edição 2010-2011


Invocação Remota

Legenda:

  Cliente RPC/RMI: processo que invoca um procedimento/método em tudo


semelhante a um procedimento/método local normal.

  Servidor RPC/RMI: processo que executa o procedimento/método.

  O envio e recepção de mensagens são escondidos dos programas cliente e


servidor RPC/RMI.

Alexandre Fonte Material de Apoio a AD, ESTCB Edição 2010-2011


Propriedades dos Sistemas RPC/RMI
  Encapsula os mecanismos de IPC convencionais na forma
de chamadas de procedimentos ou métodos remotos
  Utiliza outros métodos IPC para manipular as comunicações C/S
  E.g., Sockets, ou NetBIOS

  Simplifica o desenvolvimento e torna as aplicações


independentes dos protocolos de comunicação utilizados

  Simplifica a disponibilização de serviços


  Interface bem definida, documentada e independente dos protocolos de
transporte
  Sistema de registo e procura de serviços
  Nos RPCs o sistema de registo fornece o porto do servidor RPC
  Nos RMIs o sistema de registo fornece a referência do Objecto remoto

Alexandre Fonte Material de Apoio a AD, ESTCB Edição 2010-2011


Objectos Distribuídos

remote
local
C

E

invocation
invocation
local

remote

invocation
invocation
F

B
local

A

invocation
D

  Cada processo contêm objectos, alguns dos objectos podem receber invocações
remotas de métodos, outros apenas invocações locais
  Os objectos que podem receber invocações remotas de métodos são chamados de
objectos remotos
  Dois conceitos fundamentais:
  Para invocação de métodos remotos os objectos clientes precisam de conhecer
as referências dos objectos remotos
  A interface remota de um objecto especifica quais os métodos que podem ser
invocados remotamente

Alexandre Fonte Material de Apoio a AD, ESTCB Edição 2010-2011


Conceitos Fundamentais do Modelo Obj. Dist:
Referências de Objectos Remotos
32 bits
32 bits
32 bits
32 bits

Endereço IP do
Interface do

Porto
Tempo
Número do Obj

Servidor
Obj. remoto

  Uma referência de objecto remoto constitui o identificador do


objecto durante um processamento de um pedido, evitando
ambiguidades na identificação e localização de um objecto (no
espaço e no tempo).
  Conjuntamente com o nome do método e os argumentos são
usadas para invocar métodos sobre objectos remotos
  Tipicamente inclui:
  o endereço do servidor e o porto para localização do objecto,
  o número do objecto no processo remoto e a interface do objecto
remoto que indica os seus métodos.

Alexandre Fonte Material de Apoio a AD, ESTCB Edição 2010-2011


Conceitos Fundamentais do Modelo Obj. Dist:
Interface Remota
  A interface remota de um objecto especifica quais os
métodos que podem ser invocados remotamente.
  As interfaces remotas oferecem também a definição das assinaturas dos
métodos, i.e., os tipos de entrada e saída de cada método.
  Um objecto remoto implementa os métodos da sua
interface remota.
  Os objectos locais (ao objecto “remoto”)) podem invocar estes e outros
métodos não descritos na interface remota.
  Os objectos remotos (ao objecto “remoto”) podem invocar apenas o
métodos descritos na interface remota.
  As interfaces remotas não possuem métodos
construtores.

Alexandre Fonte Material de Apoio a AD, ESTCB Edição 2010-2011


Conceitos Fundamentais do Modelo Obj. Dist:
Interface Remota

Alexandre Fonte Material de Apoio a AD, ESTCB Edição 2010-2011


Conceitos Fundamentais:
Invocação Remota de Métodos (RMI)
  É uma extensão do mecanismo de Invocação local de métodos.
Permite a invocação de métodos em objectos que “vivem” noutros
processos.
  Uma vez obtida a referência do objecto remoto, por parte do
cliente, é possível invocar os métodos desse objecto.
  Para invocar um método particular de um objecto remoto, é
necessário enviar o identificador do método através da rede para o
computador remoto (e.g., m1, m2, m3).
  Em resumo, o objecto cliente pode invocar o método de um
objecto remoto enviando simplesmente, para o computador
remoto, o identificador do objecto e o identificador do método a
chamar

Alexandre Fonte Material de Apoio a AD, ESTCB Edição 2010-2011


Como são escondidos os
detalhes da implementação das
comunicações RPC/RMI?

Alexandre Fonte Material de Apoio a AD, ESTCB Edição 2010-2011


14
Detalhes da Implementação RPC/RMI:
Lado Cliente
  (1) Estabelecimento da Ligação Cliente-Servidor
  O cliente necessita de saber:
  O modo de comunicação (stream ou datagrama) ou
protocolo de transporte a utilizar (e.g, UDP ou TCP).
  Endereço da máquina servidor.
  Identificador do porto do servidor.

  Soluções para Localizar o Servidor:


  Codificação no programa cliente do porto do servidor (má!)
  Utilização de um ficheiro local onde são registados os nomes
e endereços dos servidores RPC/Objectos RMI
  Utilização de um serviço de nomes (melhor!)

Alexandre Fonte Material de Apoio a AD, ESTCB Edição 2010-2011


Detalhes da Implementação RPC/RMI:
Lado Cliente

  Passos do Estabelecimento de uma ligação C-S


(Resumo)
  Localização do servidor (consulta de um servidor de nomes)
  Estabelecimento de um canal de transporte
  Autenticação do C-S (Apenas do C ou de ambos)

3- Estabelecimento da ligação
Cliente Servidor

2- Localizar o Servidor 1- Registar o serviço

Serviço de
Nomes

Alexandre Fonte Material de Apoio a AD, ESTCB Edição 2010-2011


Detalhes da Implementação RPC/RMI:
Lado Cliente
  (2) Invocação de um procedimento/método remoto
  Conversão dos parâmetros de entrada e construção da mensagem;
  Envio da mensagem e bloqueio aguardando resposta;
  Recepção da mensagem do Servidor.
  Conversão dos campos da mensagem para os parâmetros de saída;

CLIENTE SERVIDOR CLIENTE SERVIDOR

Bloqueia-se Invocação do Procedimento Bloqueia-se


Invocação do Procedimento
Remoto Remoto

Cliente Execução Cliente Execução


Bloqueado do Bloqueado do
pedido
pedido
Retorna a Devolução dos
Devolução dos
parâmetros da Resposta Retorna a
Execução parâmetros da Resposta
Execução

Alexandre Fonte Material de Apoio a AD, ESTCB Edição 2010-2011


Detalhes da Implementação RPC/RMI:
Lado Servidor
(1). Registo no Serviço de Nomes

(2). Esperar pela criação de ligações


  Estabelecimento de um canal de transporte

  Autenticação do cliente e/ou do servidor

(3). Esperar por pedido de execução de procedimentos/invocação de métodos


  Recepção da mensagem do pedido do cliente.

  Invocação da rotina/objecto de despacho;

  Conversão dos campos da mensagem nos parâmetros do


procedimento/método a invocar;
  Chamada do procedimento/método local ao servidor;

  Conversão dos parâmetros de saída e construção da mensagem de


resposta;
  Envio da mensagem de resposta;

(4). Fecho da ligação


  Eliminação do canal de transporte

Alexandre Fonte Material de Apoio a AD, ESTCB Edição 2010-2011


Como são escondidos os detalhes não
relacionados com a parte aplicacional?(1)
  Um Stub cliente:
  É o código associado a cada procedimento chamado.
  No caso RMI é um objecto que representa o objecto remoto, é um proxy, e
trata das comunicações.
  É responsável por converte uma chamada/invocação local em remota.
  Funções:
1.  Converter e empacotar os argumentos na mensagem a transmitir
2.  Criar a mensagem para o servidor (identificador do procedimento +
argumentos)
3.  Enviar a mensagem para o servidor
4.  Esperar pela resposta do servidor
5.  Desempacota os resultados e converte-os na forma de representação local
6.  Devolver os resultados ao programa local
Cliente Servidor
... Stub Cliente Stub Servidor r_type
A=servfunc(p1,p2); servfunc(p1_type p1, p2_type p2)
... StubC(...) StubS(...) {
{ { ...
... ... }
} }

Alexandre Fonte Material de Apoio a AD, ESTCB Edição 2010-2011


Como são escondidos os detalhes não
relacionados com a parte aplicacional? (2)
  Um stub servidor
  É o código associado a cada procedimento/método chamado/invocado
  É responsável por:
1.  Desempacota o identificador do procedimento/objecto+método e parâmetros.
2.  Converte os parâmetros na forma local e chama pelo procedimento/método
solicitado devidamente parametrizado.
3.  Espera pela execução do serviço
4.  Converte os resultados e empacota-os na mensagem de resposta.
Stub Servidor Código Servidor

Rotina de despacho do
proc 1(a , b)
proc 1
(Dispatcher)
Porto
Proc 1 a,b Rotina de despacho do proc 2(a , b)
proc 2
(Dispatcher)

Fig: Mensagem agulhada para o Rotina de despacho do


proc n(a , b)
procedimento de serviço proc n
(Dispatcher)

Alexandre Fonte Material de Apoio a AD, ESTCB Edição 2010-2011


Como são escondidos os detalhes não
relacionados com a parte aplicacional? (3)

  Ilustração pragmática dos RPCs que utilizam sockets


Cliente Servidor
...
Res_type servfunc(P1 p1,P2 p2)
A=servfunc(p1,p2);
{
...
//executa alguma operação
return resultado
}

Stub Cliente Stub Servidor


res_type servfunc(P1 p1,P2 p2) S = new ServerSocket
{ for(;;) {
S = new Socket(host,port) Socket C = S.accept();
S.send(msg(“serverfunc”,p1,p2)) C.receive(msg(op,params))
S.receive(msg(resultado)) If (op == “serverfunc”)
S.close { resultado=serverfunc(params[0],params[1]);
return resultado else if(op==…) {…}
} C.send(msg(resultado))}
C.close }

Camada de Transporte
Alexandre Fonte Camada
Material de Apoio a AD,deESTCB
Transporte
Edição 2010-2011
Ilustração RPC (em acção)

Máquina Cliente Máquina Servidor

Processo Servidor
Processo Cliente 6. O stub servidor faz
1. O cliente chama o Implementação uma chamada local ao
Procedimento add “add”

5. O stub servidor
“desempacota” a
2. O stub cliente mensagem
constrói a mensagem
4. O SO servidor
despacha a mensagem
SO Cliente SO Servidor
para o stub servidor

3. A mensagem é enviada através da Rede

Alexandre Fonte Material de Apoio a AD, ESTCB Edição 2010-2011


Implementação RMI

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

  Módulo de Comunicações: Garante a troca de mensagens entre o


cliente e o servidor.
  Módulo de Referências (binder): Traduz as referências locais em
referências remotas
  Servant (servidor): Instância de uma classe que trata os pedidos

Alexandre Fonte Material de Apoio a AD, ESTCB Edição 2010-2011


Componentes de Software RMI
  RMI software – Camada de Software entre os objectos
aplicacionais (C/S) e ambos os módulos de Comunicação e de
Referências
  Proxy (ou stub cliente): Torna a invocação remota transparente ao
Cliente. Aparentemente comporta-se como o objecto remoto. Na
realidade passa as invocações para o objecto remoto enviando uma
mensagem através da rede. Existe um proxy por cada objecto remoto.
  Dispatcher: Um servidor possui um dispatcher e um skeleton para
cada objecto remoto. O primeiro recebe as mensagens dos módulos de
comunicação e selecciona o método apropriado, usando os
identificadores dos métodos.
  Skeleton (ou stub servidor): Prepara os argumentos a passar ao
método e invoca o método. Espera pelos resultados e prepara-os e
envia a resposta ao proxy

  Resumidamente, estes componentes/objectos (proxies, skeletons e


dispatchers) escondem os detalhes envolvidos no marshalling e
unmarshalling, na passagem de mensagens e na localização dos
objectos
Alexandre Fontedos programadores
Material de Apoio a AD, ESTCB Edição 2010-2011
Automatização do Processo de
Geração dos
Stubs e Dispatchers

Alexandre Fonte Material de Apoio a AD, ESTCB Edição 2010-2011


25
Automatização do processo
  Nos sistemas RPC/RMI geralmente são fornecidas
ferramentas próximas de compiladores para geração
automática do código dos stubs e dispatchers (e.g.,
rmic)
  Em java RMI, estes são gerados, directamente a partir, da interface
remota Java do objecto remoto
  Em CORBA, estão são gerados a partir das interfaces remotas
especificadas em CORBA IDL

Obj/procedimento

IDL
Repositório
RIF
de Interfaces
Compilador
IDL

Alexandre Fonte Material de Apoio a AD, ESTCB Edição 2010-2011


Stubs c/C++/Java
Exemplo IDL: DCE – Distributed Computing
Environment (adoptado pelo Microsoft RPC)

  Exemplo especificação de uma interface de para leitura/escrita em


ficheiros remotos

PASSO 1: Geração do identificador universal da interface banco


O utilitário uuidgen gera um ficheiro com o uuid e estrutura inicial do
interface.
[
uuid(00918A0C-4D50-1C17-9BB3-92C1040B0000), /*Universal Unique ID*/
version(1.0)
]
interface lecrescrevefs O uuid permite identificar
{
univocamente o servidor
}

Alexandre Fonte Material de Apoio a AD, ESTCB Edição 2010-2011


Exemplo IDL: DCE – Distributed Computing
Environment (adoptado pelo Microsoft RPC)

PASSO 2: Edição da descrição IDL (Sistema RPC da Microsoft, a


MIDL) do interface
[
uuid(00918A0C-4D50-1C17-9BB3-92C1040B0000), /*Universal Unique ID*/
version(1.0)
]
Interface leescrevefs {
const long FILE_NAME_SIZE = 16; Podem-se definir constantes
const long BUFFER_SIZE = 1024; e tipos auxiliares
typedef char FileName [ FILE_NAME_SIZE ];
typedef char Buffer [ BUFFER_SIZE ]
void read (
[in] FileName filename;
[in] long position; Os parâmetros podem ser de
[in, out] long nbytes; entrada, saída ou ambos.
[out] Buffer buffer; );
void write (
[in] FileName filename;
[in] long position;
A indicação da direcção é essencial
[in, out] long nbytes;
[out] Buffer buffer; ); para o compilador IDL durante
} Alexandre Fonte aMaterial
geração dosastubs.
de Apoio AD, ESTCB Edição 2010-2011
Exemplo IDL – Java RMI
  Exemplo de uma interface remota em Java RMI

Alexandre Fonte Material de Apoio a AD, ESTCB Edição 2010-2011


Exemplo Interface em C# para .NET Remoting

using System;
namespace IRemoting;
No .Net não é preciso distinguir
{ a interface remota da local
public interface ContaBancaria É inferida durante a
double SaldoActual {get;} implementação do servidor

void depositar ( float quantia );


void levantar (float quantia);
}
} Um objecto remoto deve
estender MarshalByRefObject

Alexandre Fonte Material de Apoio a AD, ESTCB Edição 2010-2011


30
Exemplo CORBA IDL

module banco {
interface conta {
readonly attribute string titular;
attribute float saldo;
void deposito(in float quantia, out float novosaldo);
void levantamento (in float quantia, out float novosaldo);
};
}

Alexandre Fonte Material de Apoio a AD, ESTCB Edição 2010-2011


Ligação ao Servidor RPC/RMI

Alexandre Fonte Material de Apoio a AD, ESTCB Edição 2010-2011


32
Obtenção do porto do servidor RPC
  Em cada servidor remoto deve estar em execução um
serviço chamado port mapper (RPC)
  Cada port mapper guarda o número do programa/
procedimento, versão e porto em uso por cada servidor
RPC
  Esta informação é fornecida pelo servidor RPC quando
este arranca
  Quando um cliente arranca procura o porto do servidor,
no port mapper da máquina servidor, passando-lhe esta
informação

Alexandre Fonte Material de Apoio a AD, ESTCB Edição 2010-2011


Obtenção das Referências Remotas
p/ Objectos remotos: Serviço Binder (1)
  Semelhante ao port mapper dos RPC
  Um binder é um processo separado que mantêm uma tabela
contendo os mapeamentos entre nomes textuais e referências de
objectos remotos.
  É usado pelos servidores para registo do seu objecto remoto pelo
nome.
  É usado pelos clientes na procura dos objectos remotos.
  Java RMI possui um binder chamado RMIregistry
  CORBA possui um serviço de nomes dedicado (Naming Service)

Alexandre Fonte Material de Apoio a AD, ESTCB Edição 2010-2011


Obtenção das Referências Remotas
p/ Objectos remotos: Serviço Binder (2)
Cenário
1)  O servidor regista o objecto no Binder (este associa-lhe uma referência).
2)  O cliente obtém a referência do objecto passando o nome deste ao Binder.
3)  O cliente invoca um método sobre o objecto remoto.

RMI Binder (e.g., Java Object


Registry)

2) RMI
Cliente RMI 1)
3)
RMI Servidor
RMI

Alexandre Fonte Material de Apoio a AD, ESTCB Edição 2010-2011


Activadores de Objectos (Activators)
  Os Processos que arrancam os processos servidores que
alojam os objectos remotos são chamados de
activadores
  Registam os objectos disponíveis para activação
guardando os nomes dos servidores
  Evita-se gastar recursos, os objectos & e os servidores
são activados à medida das necessidades dos clientes
  A activação consiste na criação de uma nova instancia e
inicialização das váriaveis de estado do objecto, a partir
duma forma passiva do objecto (i.e., os métodos e o
seu estado numa forma marshalled)

Alexandre Fonte Material de Apoio a AD, ESTCB Edição 2010-2011

Anda mungkin juga menyukai