Combinando Objetos Distribuídos e Arquiteturas Orientadas a ...
Tópicos em Sistemas Distribuídos - giulianoprado.xpg.com.br · encorajar a adoção de sistemas...
Transcript of Tópicos em Sistemas Distribuídos - giulianoprado.xpg.com.br · encorajar a adoção de sistemas...
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 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