Title: Sistemas Distribu
1Sistemas DistribuídosPrincípios de Middleware
para Objetos Distribuídos
- Especialização em Redes de Computadores
- Prof. Fábio M. Costa
- Instituto de Informática - UFG
2Visã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
3Redes de Computadores
4O Modelo de Referência ISO/OSI
- Modelo da rede em 7 camadas
- Hoje finalidade didática
- Internet 5 camadas
- Três camadas superiores podem ser implementadas
sob a forma de uma plataforma de middleware - Três camadas inferiores tipicamente invisíveis
ao middleware
Aplicação
Apresentação
Sessão
Transporte
Rede
Enlace de Dados
Física
5A 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
Aplicação
Apresentação
Sessão
Transporte
Rede
Enlace de Dados
Física
6Transmission 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
7Uso de TCP para Implementação de Requisições
Client
Server
Aplicação
Aplicação
Apresentação
Apresentação
Sessão
Sessão
Requisições
Transporte
Transporte
Fluxo de Entrada
Fluxo de Saída
Resultados
8User 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
9Uso de UDP na Implementação de Requisições
Cliente
Servidor
Apliicação
Aplicação
Apresentação
Apresentação
Sessão
Sessão
Datagramas de Requisição
Transporte
Transporte
Datagramas de Resultado
10Tipos de Middleware
11Implicaçõ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
12Middleware
- 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
13Tipos de Middleware
- Orientado a Transações
- IBM CICS
- BEA Tuxedo
- Encina
- Orientado a Mensagens
- IBM MQSeries
- DEC Message Queue
- NCR TopEnd
- Sistemas de RPC
- ANSA
- Sun ONC
- OSF/DCE
- Orientado a objetos
- OMG/CORBA
- DCOM
- Java/RMI
- Vamos primeiro estudar RPC para entender as
origens de middleware orientado a objetos
14Remote 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
15Exemplo de IDL (Sun RPC)
- const NL64
- struct Player
- struct DoB int day int month int year
- string nameltNLgt
-
- program PLAYERPROG
- version PLAYERVERSION
- void PRINT(Player)0
- int STORE(Player)1
- Player LOAD(int)2
- 0
- 105040
16Funcionalidade 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
dinâmico
17Marshalling e Unmarshalling
- char marshal()
- char msg
- msgnew char4(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 charname_len1
- sscanf(msg,"d d d d s",
- dob.day,dob.month,
- dob.year,name_len,name)
- 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
18Chamada de Método Local vs. Requisição de Objeto
Chamador
Stub
Camada de Transportd (TCP ou UDP)
19Stubs
- 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
20Sincronizaçã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
21Tipagem 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
22Provendo Tipagem Segura
Definição de Interface
Servidor
Requisição
Cliente
Resposta
23Camada de Sessão
- Implementa
- Identificação de servidores de RPC
- Ativação de servidores de RPC
- Despacho de operações no servidor
- Binding ligar clientes a servidores
Aplicação
Apresentação
Sessão
Transporte
Rede
Enlace de Dados
Física
24Exemplo 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)
25Middleware Orientado a Objetos
26Linguagem 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
27Exemplo 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)
28Implementaçã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)
29Implementação da Camada de Sessão
Referências de Objeto
Hosts
Processos
Objetos
30Desenvolvendo comMiddleware Orientado a Objetos
31Etapas no Desenvolvimento
Design
Definição de Interfaces
Codificação dos Servidores
Codificação dos Clientes
Registro dos Servidores
32Provendo 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)
33Provendo 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?
34Geração dos Stubs
35Implementação de Clientes e Servidores
36Registrando 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
37Registrando 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
38Pontos-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