Tópicos em Sistemas Distribuídos - giulianoprado.xpg.com.br · encorajar a adoção de sistemas...

34
Tópicos em Sistemas Distribuídos Tópicos em Sistemas Distribuídos CORBA CORBA

Transcript of Tópicos em Sistemas Distribuídos - giulianoprado.xpg.com.br · encorajar a adoção de sistemas...

Tópicos em Sistemas DistribuídosTópicos em Sistemas Distribuídos

CORBACORBA

Introdução - Middleware

Middlewarecamada de software distribuído, ou plataforma que abstrai a complexidade e aheterogeneidade do ambiente distribuído formado por diversas tecnologias de rede,arquiteturas de máquinas, sistemas operacionais e linguagens de programação.

Objetivosfacilita a tarefa de projetar, programar egerenciar aplicações distribuídasprovê um ambiente de programação distribuído consistente e integrado

Introdução - Middleware

Middleware baseado em objetosaplicações são estruturadas em objetos distribuídos que interagem através da invocação de métodos

Funcionalidadeslinguagem de definição de interface (IDL)

abstração da linguagem de programaçãobroker de requisições de objetos

direciona as invocações de métodos para oobjeto alvo apropriado de forma transparente

conjunto de serviçosnomeação, transações, replicação

OMGHistórico

OMG (Object Management Group -http://www.omg.org/ ) - formado em 1989

Objetivosencorajar a adoção de sistemas de objetos distribuídosutilizar os benefícios da programação orientada a objetosutilizar os sistemas distribuídos que estavam tornando-se comuns na época

Focoutilização de sistemas distribuídos abertos eheterogêneos baseados em interfacesorientadas a objetos.

OMGMotivação principal

suporte a diversas linguagens, possibilitando a comunicação entre módulos escritos em linguagens distintas

Conceito de ORB (Object Request Broker)componente que auxilia o cliente a invocar um método em um objeto de forma trasparente(transparência de acesso)

localização do objetoativação do objeto se necessário (objetos persistentes)comunicar ao objeto sobre a requisição do cliente

CORBACORBA (Common Object Request Broker Architecture)

proposto pela OMG em 1991descreve uma interface com mapeamento padronizado para diversas linguagens e um conjunto de serviços básicos

CORBA 2 (1996)interoperabilidade entre desenvolvedores: definição de padrões (GIOP – General Inter-ORB protocol)protocolo IIOP (Internet Inter-ORB Protocol): implementação do GIOP para Internet (TCP/IP)

CORBA

CORBA 3 (2002)CORBA Component Model: modificações realizadas no CORBA para inclusão de componentes (mudanças na IDL, repositóriode interfaces, etc) – CIDL (Component Interface Definition Language)Novos serviços: Fault-Tolerant CORBA, Quality of Service, Real-Time CORBA, Asynchronous Messaging, etc

ArquiteturaObjetivo: possibilitar que clientes invoquem métodos a objetos remotos (objetos CORBA), e que ambos possam ser implementados em linguagens distintasA linguagem de implementação do cliente não precisa ser necessariamente orientada a objetosFuncionalidades

invocações estáticasinterface remota do objeto CORBA é conhecida em tempo de compilação (utilização dos stubs e skeletons)

invocações dinâmicasinterface remota do objeto CORBA não é conhecida emtempo de compilação

Arquitetura

Representação externa de dadosCDR (Common Data Representation)

Semântica de invocaçãosemântica at-most-once (default)semântica maybe (palavra-chave oneway na IDL)

métodos sem resultados ou callbacks, o cliente não bloqueia na espera de uma resposta

Objeto CORBA: objeto remotoimplementa uma interface IDLpossui uma referência de objeto remotocapaz de responder a invocações aos métodos de sua interface

Arquitetura

client server

proxy

or dynamic invocation

implementationrepository object

adapter

ORBORB

skeleton

or dynamic skeleton

clientprogram

interfacerepository

Request

Replycorecorefor A

ServantA

ArquiteturaAdaptador de objeto (Object Adapter)

interliga os objetos CORBA e as classes do servidorcria as referências a objetos remotos para os objetos CORBAdespacha cada RMI através de um skeleton para o servidor apropriadoativa objetos (se necessário)CORBA 2.2: POA (Portable Object Adapter)

permite que aplicações e servidores sejam executados em ORBs produzidos por desenvolvedores diferentes

ArquiteturaSkeleton (servidor)

geradas na linguagem do servidor por um compilador IDLRMIs são despachadas através do skeleton apropriado a um servidormarshaling e unmarshaling

Stubs/proxies (cliente)geradas na linguagem do cliente por um compilador IDLproxy (linguagens orientadas a objeto)stub (linguagens procedurais)marshaling e unmarshaling

ArquiteturaRepositório de implementação

ativa por demanda os servidores registrados, e localiza os servidores em execuçãoarmazena tabela com o mapeamento dos nomesdos adaptadores de objetos para suas implementaçõesna ativação de objeto remoto, o hostname e o número da porta no servidor são adicionados na tabelapossibilita armazenar outras informações sobre os servidores (e.g. controle de acesso)permite replicação

aumento de disponibilidade e tolerância a falhas

Arquitetura

Repositório de interfaceprovê informações sobre interfaces IDL registradas (e.g. métodos, argumentos, exceções)cliente sem proxy de objeto pode obter informações necessárias (métodos e argumentos)necessário para invocações dinâmicasnem todos os ORBs provêm um repositório de interfaces

Arquitetura

Interface de invocação dinâmicapermite que clientes façam invocações dinâmicasa objetos CORBA desconhecidoscliente obtém informações necessárias sobre um objeto CORBA a partir do repositório de interfaces, e utiliza esta informação para construir uma invocação e enviá-la ao servidorCORBA não permite o download de uma classe durante a execução como em Java RMI

Arquitetura

Interface skeleton dinâmicapermite um objeto CORBA aceitar invocações em uma interface sem skeleton

interface não era conhecida em tempo de compilação

skeleton dinâmicorecebe a invocaçãoinspeciona o conteúdo da requisição para descobrir o objeto destino, o método para ser invocado e os argumentosinvoca o destino

CORBA IDL

facilidades para definir módulos, interfaces, tipos, atributos e métodossintaxe similar a C++ incluindo mais algumas palavras-chavesMódulos IDL

permite agrupar interfaces e outros tipos IDL em unidades lógicasmódulo define um nome de escopo (evita conflito entre nomes)

Interfaces IDLdescrevem os métodos e atributos que são disponíveis por objetos CORBA que implementam a interface

CORBA IDLMétodos IDL

[oneway] <return_type> <method_name> (parameter1, ..., parameterL)[raises (except1, ..., exceptN)]

parâmetros: <in | out | inout> <type> <parameter_name>oneway: semântica mayberaises: sinaliza que pode causar exceção

Tipos IDL15 tipos primitivos: short, long, unsigned short, unsigned long, float, double, char, boolean, octet, anytipos derivados: sequence, string, array, record, enumerated, uniontipo Object: objeto CORBA

Exemplo - CORBA IDL

exception DivisionByZero{};

interface calc{long soma(in long a, in long b);long subtrai(in long a, in long b);long multiplica(in long a, in long b);long divide(in long a, in long b) raises

(DivisionByZero);};

Exemplo - objeto CORBA

public class calcImpl extends _calcImplBase {

public int soma(int a, int b){return a+b;

}

public int subtrai(int a,int b) {return a-b;

}

public int multiplica(int a,int b) {return a*b;

}

public int divide(int a,int b) throws DivisionByZero {if (b==0)throw new DivisionByZero();

return a/b;}

}

Exemplo - servidorimport org.omg.CosNaming.*;public class calcServer{public static void main(String args[]) {try {// inicializa o ORBorg.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(args,null);// cria o objetocalcImpl calcimpl = new calcImpl();// registra no ORBorb.connect(calcimpl);// Registra no servico de nomesorg.omg.CORBA.Object obj =

orb.resolve_initial_references("NameService");NamingContext ncontext = NamingContextHelper.narrow(obj);NameComponent ncomp = new NameComponent("Calc", "");NameComponent path[] = {ncomp};ncontext.rebind(path,calcimpl);System.out.println("Calculadora ...");orb.run();

} catch (Exception e) { e.printStackTrace(); }}

}

Exemplo - clienteimport org.omg.CORBA.*;import org.omg.CosNaming.*;

public class calcClient {calc c = null;public calcClient(String[] args) {try {// inicializa o ORBORB orb = org.omg.CORBA.ORB.init(args,null);// localiza o servico de nomesorg.omg.CORBA.Object obj =

orb.resolve_initial_references("NameService");// localiza o objeto destinoNamingContext ncontext = NamingContextHelper.narrow(obj);NameComponent ncomp = new NameComponent("Calc", "");NameComponent path[] = {ncomp};c = calcHelper.narrow(ncontext.resolve(path));

}catch (Exception e) {e.printStackTrace();System.exit(-1);

}}

Exemplo - cliente

public int operacao(int a, int b, String op) {if (op.equals("+"))return c.soma(a,b);

else if (op.equals("-"))return c.subtrai(a,b);

else if (op.equals("*"))return c.multiplica(a,b);

else if (op.equals("/")) {try{return c.divide(a,b);

}catch(DivisionByZero e) {System.out.println("Division by zero!");return -1;

}}elsereturn -1;

}

Exemplo - cliente

public static void main(String[] args) {calcClient cclient = new calcClient(args);int a = 10;int b = 20;int result;System.out.println("soma="+cclient.operacao(a,b,"+"));System.out.println("subtracao="+cclient.operacao(a,b,"-"));System.out.println("multiplicacao="+cclient.operacao(a,b,"*"));System.out.println("divisao="+cclient.operacao(a,b,"/"));

}}

Referência de Objeto Remoto -CORBA

IORs – Interoperable Object References (CORBA 2)

formato de referência a objetos remotos

IDL interface type name: nome da interface remota,igual ao identificador da interface no repositório de interfacesProtocol and address details: protocolo (IIOP –Internet Inter-ORB protocol – usa TCP/IP), endereço eportaObject key: identificação do objeto CORBA – nome doadaptador e nome do objeto

Serviços CORBA

Serviço de nomesmapeamento de nomes a referências a objetos remotos de objetos CORBAprovê operações para:

registrar referências de objetos remotos de objetosCORBA por nomeresolver referências de objetos remotos para clientes através do nome

definição de contextos: permite estrutura hierárquica

Serviços CORBA

Serviço de nomes

Serviços CORBAServiço de eventos

define interfaces permitindo objetos deinteresse, chamados fornecedores,comunicarem notificações a consumidores.Propagação de notificações

push pelo fornecedorpull pelo consumidor

Canais de eventos: objetos CORBA que são utilizados para permitir diversos fornecedores secomunicarem com diversos consumidores de forma assíncrona

atua como um buffer entre fornecedores econsumidorespode usar multicast

Serviços CORBA

consumersupplier

proxy consumer

notification

proxy supplier

event channel

notificationnotification

Serviços CORBAServiço de notificação

extensão do serviço de eventos com novas funcionalidadesutilização de filtros pelos consumidores de eventos definindo exatamente os eventos de interessepublicação dos eventos desejados pelos consumidores

fornecedores podem gerar somente os eventos desejados pelos consumidores

publicação dos eventos oferecidos pelos fornecedorespossiblita a “assinatura” a eventos assim que se tornam disponíveis

configuração de um canal ou evento particularconfiança de entrega de eventosprioridade dos eventos

Serviços CORBA

Serviço de notificaçãoStructured Event Type: estrutura de dados para eventos

header

body

i l i li d i ã d filt

domaintype

event type event nam e requirem ents

“home” “burglaralarm”

“27/04/ 2005 –21:15”

“priority”,1000

filterable partname, value name, value name, value remainder“bell”,“ringing”

“door”, “open” “cat”,“outside”

Serviços CORBA

Serviço de segurançaautenticação dos usuários e servidores,geração de credenciais para os usuários eservidores (certificados garantindo seus direitos)controle de acesso a objetos CORBA

Serviços CORBA

Serviço de tradingpermite que objetos sejam localizados a partir deatributospossui uma base de dados com mapeamento dostipos de serviço e atributos para referências aobjetos remotosclientes podem realizar consultas

tipo de serviço e atributospreferências de ordem de recepção de ofertas que mapeiam as características desejadas

Serviços CORBA

Serviço de transaçõespermite que objetos CORBA participem de transaçõeso cliente especifica uma transação como uma seqüência de chamadas RMI, iniciadas por begin eterminadas por commit ou rollback (abort)ORB anexa um identificador de transações para cada invocação remota e lida com requisições de begin, commit e rollbackclientes podem suspender ou resumir transações

Serviço de controle de concorrênciautilização de locks para aplicar controle de concorrência aos acesso realizados ao objeto CORBAutilizado com transações ou de forma independente