sistemas distribuídos princípios de middleware para objetos distribuídos
DESCRIPTION
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. Visão Geral. Redes de computadores Tipos de Middleware Transaction-Oriented Middleware Message-Oriented Middleware - PowerPoint PPT PresentationTRANSCRIPT
Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 1
Sistemas Distribuídos
Princípios de Middleware para Objetos Distribuídos
Especialização em Redes de Computadores
Prof. Fábio M. CostaInstituto de Informática - UFG
Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 2
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 3
Redes de Computadores
Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 4
O 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 Física
Aplicação
Apresentação
Sessão
Transporte
Rede
Enlace de Dados
Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 5
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
Física
Aplicação
Apresentação
Sessão
Transporte
Rede
Enlace de Dados
Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 6
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 7
Uso de TCP para Implementação de Requisições
Aplicação
Apresentação
Sessão
Transporte
Aplicação
Apresentação
Sessão
TransporteFluxo de Entrada
Fluxo de Saída
Requisições
Client Server
Resultados
Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 8
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 9
Uso de UDP na Implementação de Requisições
Datagramas de Resultado
Apliicação
Apresentação
Sessão
Transporte
Aplicação
Apresentação
Sessão
Transporte
Datagramas de Requisição
Cliente Servidor
Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 10
Tipos de Middleware
Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 11
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 12
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 13
Tipos 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
Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 14
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 15
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 16
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 dinâmico
Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 17
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
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);};
Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 18
Chamada de Método Local vs. Requisição de Objeto
ChamadoChamadoChamadoChamado
StubStub
CallerCaller
ChamadoChamadoChamadoChamado
ChamadorChamador
StubStubStubStub
ChamadorChamador
Camada de Transportd (TCP ou UDP)Camada de Transportd (TCP ou UDP)Camada de Transportd (TCP ou UDP)Camada de Transportd (TCP ou UDP)
Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 19
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 20
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 21
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 22
Provendo Tipagem Segura
Definição deInterface
ServidorCliente
RequisiçãoRequisição
RespostaResposta
Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 23
Camada 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
Física
Aplicação
Apresentação
Sessão
Transporte
Rede
Enlace de Dados
Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 24
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 25
Middleware Orientado a Objetos
Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 26
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 27
Exemplo de IDLinterface 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 28
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 29
Implementação da Camada de Sessão
Referênciasde Objeto Hosts Processos Objetos
Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 30
Desenvolvendo comMiddleware Orientado a Objetos
Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 31
Etapas no Desenvolvimento
Definição deInterfaces
Design
Codificaçãodos Servidores
Codificaçãodos Clientes
Registro dosServidores
Geração deStubs Servidores
Geração deStubs Cliente
Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 32
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 servidorTudo 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 33
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 34
Geração dos Stubs
Team.idlTeam.idl
incluído emgeralê
IDL-Compiler
Teamcl.hh
Teamcl.cc Teamsv.cc
Teamsv.hh
Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 35
Implementação de Clientes e Servidores
C++ Compiler, Linker
Server
Client.ccClient.cc Server.ccServer.cc
C++ Compiler, LinkerC++ Compiler, Linker
Client
Team.idlTeam.idl
included ingeneratesreads
IDL-Compiler
Teamcl.hh
Teamcl.cc Teamsv.cc
Teamsv.hh
Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 36
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 37
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 38
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