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