Sistemas Distribuídos
Princípios de Middleware para
Objetos Distribuídos
Especialização em Redes de
Computadores
Prof. Fábio M. Costa
Instituto de Informática - UFG
Original: Wolfgang Emmerich, 2000
Prof. Fábio M. Costa - Instituto de Informática / UFG
1
Visão Geral
• Redes de computadores
• Tipos de Middleware
– Transaction-Oriented Middleware
– Message-Oriented Middleware
– Remote Procedure Calls
• Middleware orientado a objetos
• Exemplos: CORBA, COM, Java RMI
Original: Wolfgang Emmerich, 2000
Prof. Fábio M. Costa - Instituto de Informática / UFG
2
Redes de Computadores
Original: Wolfgang Emmerich, 2000
Prof. Fábio M. Costa - Instituto de Informática / UFG
3
O Modelo de Referência ISO/OSI
• Modelo da rede em 7
camadas
Aplicação
– Hoje: finalidade didática
– Internet: 5 camadas
Apresentação
• Três camadas superiores
podem ser implementadas
sob a forma de uma
plataforma de middleware
• Três camadas inferiores:
tipicamente invisíveis ao
middleware
Sessão
Original: Wolfgang Emmerich, 2000
Transporte
Rede
Enlace de Dados
Física
Prof. Fábio M. Costa - Instituto de Informática / UFG
4
A Camada de Transporte
• Nível 4 do modelo de
referência ISO/OSI
• Lida com o transporte de
informações fim-a-fim
através da rede
• Base para a construção de
plataformas de middleware
• Dois protocolos mais
usados na Internet:
– TCP
– UDP
Original: Wolfgang Emmerich, 2000
Aplicação
Apresentação
Sessão
Transporte
Rede
Enlace de Dados
Física
Prof. Fábio M. Costa - Instituto de Informática / UFG
5
Transmission Control Protocol
(TCP)
• Provê suporte para um fluxo de dados bidirecional entre dois componentes distribuídos
• Serviços do tipo “terminal remoto” (ex.: rsh,
rlogin) são baseados neste protocolo
• Confiável mas lento
– Orientado a conexões, com retransmissões em caso de
erros
• Realiza buferização em ambos os extremos da
conexão: controle de fluxo para permitir a
comunicação entre computadores com velocidades
diferentes
Original: Wolfgang Emmerich, 2000
Prof. Fábio M. Costa - Instituto de Informática / UFG
6
Uso de TCP para Implementação
de Requisições
Client
Server
Aplicação
Aplicação
Apresentação
Apresentação
Sessão
Transporte
Sessão
Requisições
Fluxo de Entrada
Fluxo de Saída
Transporte
Resultados
Original: Wolfgang Emmerich, 2000
Prof. Fábio M. Costa - Instituto de Informática / UFG
7
User Datagram Protocol (UDP)
• Habilita um componente a passar uma mensagem
contendo uma seqüência de bytes para outro
componente
– Mensagem = Datagrama
– Cada datagrama é transmitido independentemente
• O componente de destino da mensagem é
identificado dentro da própria mensagem
• Não-confiável, mas rápido
• Comprimento restrito de mensagens
• Mensagens são enfileiradas no receptor
Original: Wolfgang Emmerich, 2000
Prof. Fábio M. Costa - Instituto de Informática / UFG
8
Uso de UDP na Implementação
de Requisições
Cliente
Servidor
Apliicação
Aplicação
Apresentação
Apresentação
Sessão
Transporte
Sessão
Datagramas de Requisição
Transporte
Datagramas de Resultado
Original: Wolfgang Emmerich, 2000
Prof. Fábio M. Costa - Instituto de Informática / UFG
9
Tipos de Middleware
Original: Wolfgang Emmerich, 2000
Prof. Fábio M. Costa - Instituto de Informática / UFG
10
Implicações do Uso Direto de
Protocolos de Rede
• Mapeamento manual de parâmetros (complexos) de
requisições para fluxos de bytes
• Resolução manual de problemas de heterogeneidade de
dados
• Identificação manual dos componentes
• Implementação manual da ativação de componentes
• Nenhuma garantia de tipagem segura (type safety)
• Sincronização manual das interações entre objetos
distribuídos
• Nenhuma garantia (automática) de qualidade de serviço
Original: Wolfgang Emmerich, 2000
Prof. Fábio M. Costa - Instituto de Informática / UFG
11
Middleware
• Camada de software entre as aplicações e o
sistema operacional / rede
• Torna transparente a distribuição
• Resolve heterogeneidade de:
–
–
–
–
Hardware
Sistemas Operacionais
Redes
Linguagens de programação
• Provê um ambiente de desenvolvimento e de
tempo de execução para sistemas distribuídos
Original: Wolfgang Emmerich, 2000
Prof. Fábio M. Costa - Instituto de Informática / UFG
12
Tipos de Middleware
• Orientado a Transações
– IBM CICS
– BEA Tuxedo
– Encina
• Orientado a objetos
– OMG/CORBA
– DCOM
– Java/RMI
• Orientado a Mensagens
– IBM MQSeries
– DEC Message Queue
– NCR TopEnd
• Sistemas de RPC
– ANSA
– Sun ONC
– OSF/DCE
Original: Wolfgang Emmerich, 2000
• Vamos primeiro estudar
RPC para entender as
origens de middleware
orientado a objetos
Prof. Fábio M. Costa - Instituto de Informática / UFG
13
Remote Procedure Calls
• Permite que chamadas de procedimentos
cruzem os limites entre máquinas diferentes
• Interfaces são definidas usando uma
Linguagem de Definição de Interfaces (IDL)
– Especifica os procedimentos disponíveis
remotamente
• Um compilador RPC gera a funcionalidade de
camada de apresentação e de sessão a partir
do código IDL
Original: Wolfgang Emmerich, 2000
Prof. Fábio M. Costa - Instituto de Informática / UFG
14
Exemplo de IDL (Sun RPC)
const NL=64;
struct Player {
struct DoB {int day; int month; int year;}
string name<NL>;
};
program PLAYERPROG {
version PLAYERVERSION {
void PRINT(Player)=0;
int STORE(Player)=1;
Player LOAD(int)=2;
}= 0;
} = 105040;
Original: Wolfgang Emmerich, 2000
Prof. Fábio M. Costa - Instituto de Informática / UFG
15
Funcionalidade da Camada de
Apresentação
Resolução de Heterogeneidade de Dados
Representação de
dados comum
Transmissão da
declaração dos dados
Marshalling e Unmarshalling
estático
Original: Wolfgang Emmerich, 2000
dinâmico
Prof. Fábio M. Costa - Instituto de Informática / UFG
16
Marshalling e Unmarshalling
• Marshalling:
– Converter
estruturas de dados
em um formato no
qual possam ser
transmitidas
– Seqüência de bytes
• Unmarshalling:
– Remontar a
estrutura de dados
original a partir do
formato serializado
Original: Wolfgang Emmerich, 2000
char * marshal() {
char * msg;
msg=new char[4*(sizeof(int)+1) +
strlen(name)+1];
sprintf(msg,"%d %d %d %d %s",
dob.day,dob.month,dob.year,
strlen(name),name);
return(msg);
};
void unmarshal(char * msg) {
int name_len;
sscanf(msg,"%d %d %d %d ",
&dob.day,&dob.month,
&dob.year,&name_len);
name = new char[name_len+1];
sscanf(msg,"%d %d %d %d %s",
&dob.day,&dob.month,
&dob.year,&name_len,name);
};
Prof. Fábio M. Costa - Instituto de Informática / UFG
17
Chamada de Método Local vs.
Requisição de Objeto
Caller
Chamador
Chamador
Chamado
Stub
Chamado
Stub
Camada de Transportd (TCP ou UDP)
Original: Wolfgang Emmerich, 2000
Prof. Fábio M. Costa - Instituto de Informática / UFG
18
Stubs
• A criação de código para marshalling e
unmarshalling é tediosa e passível de erros
• Este código pode ser gerado automaticamente a
partir de definições de interface
• Código gerado é embutido em stubs para cliente e
servidor
– Stub cliente: representa o servidor para o cliente
– Stub servidor: representa o cliente para o servidor
• Stubs implementam tipagem segura
• Também realizam sincronização de requisições
Original: Wolfgang Emmerich, 2000
Prof. Fábio M. Costa - Instituto de Informática / UFG
19
Sincronização
• Objetivo: obter sincronização similar à
chamada de métodos locais
• Papel dos stubs:
– Stub cliente envia a requisição e espera até que
o servidor termine
– Stub servidor espera por requisições e chama o
objeto servidor quando a requisição chega
Original: Wolfgang Emmerich, 2000
Prof. Fábio M. Costa - Instituto de Informática / UFG
20
Tipagem Segura (Type Safety)
• Como verificar que:
– servidores são capazes de realizar as operações
requisitadas pelos clientes
– argumentos fornecidos pelos clientes estão de acordo
com os parâmetros esperados pelo servidor
– resultado fornecido pelo servidor está de acordo com as
expectativas dos clientes
• A plataforma de middleware age como um
mediador entre o cliente e o servidor para garantir
a tipagem segura das requisições
• Através de definições de interfaces em uma
linguagem padrão
Original: Wolfgang Emmerich, 2000
Prof. Fábio M. Costa - Instituto de Informática / UFG
21
Provendo Tipagem Segura
Requisição
Cliente
Servidor
Resposta
Definição de
Interface
Original: Wolfgang Emmerich, 2000
Prof. Fábio M. Costa - Instituto de Informática / UFG
22
Camada de Sessão
• Implementa:
Aplicação
– Identificação de
servidores de RPC
– Ativação de servidores
de RPC
– Despacho de operações
no servidor
– Binding – ligar clientes a
servidores
Original: Wolfgang Emmerich, 2000
Apresentação
Sessão
Transporte
Rede
Enlace de Dados
Física
Prof. Fábio M. Costa - Instituto de Informática / UFG
23
Exemplo: Identificação de
Servidor de RPC
print_person(char * host, Player * person) {
CLIENT *clnt;
//Cria stub cliente:
clnt = clnt_create(host, 105040, 0, "udp");
if (clnt == (CLIENT *) NULL) exit(1);
//Se criação bem sucedida, chama o stub:
if (print_0(person, clnt)==NULL)
clnt_perror(clnt, "call failed");
clnt_destroy(clnt);
}
Original: Wolfgang Emmerich, 2000
Prof. Fábio M. Costa - Instituto de Informática / UFG
24
Middleware Orientado a Objetos
Original: Wolfgang Emmerich, 2000
Prof. Fábio M. Costa - Instituto de Informática / UFG
25
Linguagem de Definição de
Interfaces
• Cada plataforma de middleware orientada a objetos
possui uma linguagem de definição de interfaces (IDL)
própria
• Além das características suportadas por uma IDL de
RPCs, IDLs orientadas a objetos oferecem suporte para:
– tipos de objetos como parâmetros
– tratamento de falhas (via exceções)
– herança (de interface)
• Compiladores IDL (providos pela plataforma) criam os
stubs cliente e servidor para implementar as
funcionalidades de camada de sessão e apresentação
Original: Wolfgang Emmerich, 2000
Prof. Fábio M. Costa - Instituto de Informática / UFG
26
Exemplo de IDL
interface Player : Object {
typedef struct Date {
short day; short month; short year;
} Date;
attribute string name;
readonly attribute Date DoB;
};
interface PlayerStore : Object {
exception IDNotFound{};
short save (in Player p);
Player load(in short id) raises(IDNotFound);
void print(in Player p);
};
Original: Wolfgang Emmerich, 2000
Prof. Fábio M. Costa - Instituto de Informática / UFG
27
Implementação da Camada de
Apresentação
• Além da funcionalidade de camada de
apresentação típica de RPCs, plataformas de
middleware orientadas a objetos precisam:
– definir uma representação para referências de
objetos que seja apropriada para transmissão
– lidar com exceções
– fazer o marshalling de atributos herdados (de
outras interfaces)
Original: Wolfgang Emmerich, 2000
Prof. Fábio M. Costa - Instituto de Informática / UFG
28
Implementação da Camada de
Sessão
Referências
de Objeto
Original: Wolfgang Emmerich, 2000
Hosts
Processos
Prof. Fábio M. Costa - Instituto de Informática / UFG
Objetos
29
Desenvolvendo com
Middleware Orientado a Objetos
Original: Wolfgang Emmerich, 2000
Prof. Fábio M. Costa - Instituto de Informática / UFG
30
Etapas no Desenvolvimento
Design
Definição de
Interfaces
Geração de
Stubs Servidores
Geração de
Stubs Cliente
Codificação
dos Servidores
Codificação
dos Clientes
Registro dos
Servidores
Original: Wolfgang Emmerich, 2000
Prof. Fábio M. Costa - Instituto de Informática / UFG
31
Provendo Transparência de
Acesso
• Stubs cliente possuem as mesmas operações que os
respectivos objetos servidores
– embora com diferentes implementações
• Portanto, clientes podem
– fazer chamadas locais aos stubs cliente, ou
– fazer chamadas locais ao objeto servidor
 Tudo isto sem precisar alterar a sintaxe de chamada
• A plataforma de
• A plataforma de middleware pode acelerar a
comunicação se os objetos são locais aos clientes
(não usando o stub)
Original: Wolfgang Emmerich, 2000
Prof. Fábio M. Costa - Instituto de Informática / UFG
32
Provendo Transparência de
Localização
• Identidade de objetos
• Referências de objetos
• Clientes requisitam operações ao objeto
servidor identificado por uma referência de
objeto
• Nenhuma informação sobre a localização
física do objeto é necessária
• Como obter referências de objetos?
Original: Wolfgang Emmerich, 2000
Prof. Fábio M. Costa - Instituto de Informática / UFG
33
Geração dos Stubs
Team.idl
IDL-Compiler
Teamcl.hh
Teamsv.hh
Teamcl.cc
Teamsv.cc
incluído em
gera
lê
Original: Wolfgang Emmerich, 2000
Prof. Fábio M. Costa - Instituto de Informática / UFG
34
Implementação de Clientes e Servidores
Team.idl
Client.cc
Server.cc
IDL-Compiler
Teamcl.hh
Teamsv.hh
Teamcl.cc
C++ Compiler, Linker
Client
Original: Wolfgang Emmerich, 2000
Teamsv.cc
C++ Compiler, Linker
included in
generates
reads
Server
Prof. Fábio M. Costa - Instituto de Informática / UFG
35
Registrando o Objeto Servidor
Adaptador de objetos
– Componente da plataforma responsável por
adaptar uma mensagem recebida através da
rede para uma chamada local a um objeto
servidor específico
– Efetua a localização e ativação/inicialização do
objeto servidor
– Isto é: funcionalidade de camada de sessão
Original: Wolfgang Emmerich, 2000
Prof. Fábio M. Costa - Instituto de Informática / UFG
36
Registrando o Objeto Servidor
(cont.)
• Objetos servidores são registrados em um
repositório de implementações
• O processo de registro depende de cada
plataforma de middleware específica
• O adaptador de objetos faz uma busca no
repositório de implementações antes de
ativar o objeto
– Para obter a implementação do objeto
Original: Wolfgang Emmerich, 2000
Prof. Fábio M. Costa - Instituto de Informática / UFG
37
Pontos-Chave
• Plataformas de middleware são construídas sobre a
camada de transporte
• Há vários tipos/formas de middleware
• Plataformas de middleware orientadas a objetos
provêem IDLs
• Plataformas de middleware orientado a objetos
implementam as camadas de sessão e apresentação
• Implementação da camada de apresentação é feita
através de stubs clientes e servidores, derivados de
definições de interfaces em IDL
• A camada de sessão é implementada em adaptadores
de objetos
Original: Wolfgang Emmerich, 2000
Prof. Fábio M. Costa - Instituto de Informática / UFG
38
Download

Sistemas Distribuídos Princípios de Middleware para Objetos