Você está na página 1de 38

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 Apresentação
– Internet: 5 camadas
• Três camadas superiores Sessão
podem ser implementadas Transporte
sob a forma de uma
plataforma de middleware Rede
• Três camadas inferiores: Enlace de Dados
tipicamente invisíveis ao
middleware Física

Original: Wolfgang Emmerich, 2000 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 Aplicação
• Lida com o transporte de Apresentação
informações fim-a-fim
através da rede Sessão
• Base para a construção de Transporte
plataformas de middleware
Rede
• Dois protocolos mais
usados na Internet: Enlace de Dados
– TCP
– UDP
Física

Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 5
Transmission Control Protocol
(TCP)
• Provê suporte para um fluxo de dados bi-
direcional 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 Requisições Sessão


Fluxo de Entrada
Transporte Transporte
Fluxo de Saída

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 Datagramas de Requisição Sessão

Transporte 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 • Orientado a objetos
– IBM CICS – OMG/CORBA
– BEA Tuxedo – DCOM
– Encina – Java/RMI
• Orientado a Mensagens
– IBM MQSeries • Vamos primeiro estudar
– DEC Message Queue
RPC para entender as
– NCR TopEnd
origens de middleware
• Sistemas de RPC orientado a objetos
– ANSA
– Sun ONC
– OSF/DCE

Original: Wolfgang Emmerich, 2000 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 Transmissão da
dados comum declaração dos dados

Marshalling e Unmarshalling
estático dinâmico

Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 16
Marshalling e Unmarshalling
char * marshal() {
char * msg;
• Marshalling: msg=new char[4*(sizeof(int)+1) +
strlen(name)+1];
– Converter estruturas sprintf(msg,"%d %d %d %d %s",
de dados em um dob.day,dob.month,dob.year,
strlen(name),name);
formato no qual return(msg);
possam ser };
transmitidas void unmarshal(char * msg) {
int name_len;
– Seqüência de bytes sscanf(msg,"%d %d %d %d ",
&dob.day,&dob.month,
• Unmarshalling: &dob.year,&name_len);
name = new char[name_len+1];
– Remontar a sscanf(msg,"%d %d %d %d %s",
estrutura de dados &dob.day,&dob.month,
&dob.year,&name_len,name);
original a partir do };
formato serializado
Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 17
Chamada de Método Local vs.
Requisição de Objeto

Caller
Chamador Chamado
Chamador

Stub
Stub
Chamado
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 Apresentação
servidores de RPC
– Ativação de servidores Sessão
de RPC Transporte
– Despacho de operações Rede
no servidor
Enlace de Dados

– Binding – ligar clientes a Física


servidores
Original: Wolfgang Emmerich, 2000 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 Hosts Processos Objetos
Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 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 Geração de
Stubs Servidores Stubs Cliente

Codificação Codificação
dos Servidores 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

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 Teamsv.cc

C++ Compiler, Linker C++ Compiler, Linker

included in
generates
Client Server
reads
Original: Wolfgang Emmerich, 2000 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

Você também pode gostar