Post on 17-Apr-2015
CORBA
Alcides Calsavara
Arquitetura Cliente-Servidor: CORBA
Sistemas Distribuídos- objetivos -
• Melhor relação custo/benefício
• Capacidade de processamento além dos limites práticos de sistemas centralizados (velocidade da luz, aquecimento)
• Maior domínio de aplicações
• Maior confiabilidade e disponibilidade
• Crescimento gradativo da capacidade de processamento
Arquitetura Cliente-Servidor: CORBA
Sistemas Distribuídos- objetivos -
• Compartilhamento de dados comuns entre usuários
• Compartilhamento de recursos de hardware e software
• Comunicação entre pessoas
• Flexibilidade na distribuição de tarefas de acordo com as aplicações
Arquitetura Cliente-Servidor: CORBA
Sistemas Distribuídos- requisitos -
• Controle de concorrência
• Consistência
• Extensibilidade (openness)
• Escalabilidade (crescimento gradativo suave)
• Tolerância a falhas
• Transparência
Arquitetura Cliente-Servidor: CORBA
Sistemas Distribuídos- transparência -
• Acesso
• Localizacão
• Concorrência
• Replicação
• Falha
• Migração
• Desempenho
• Escala
• Paralelismo
Arquitetura Cliente-Servidor: CORBA
Sistemas Distribuídos- componentes básicos -
• Comunicação
• Sistema de nomes
• Manutenção de consistência
• Alocação de carga de trabalho
Arquitetura Cliente-Servidor: CORBA
Comunicacão
• modelo:– cliente/servidor
– grupo
• abstracão:
– processos e mensagens
– objetos e operacões (RPC)
• sincronismo:
– síncrona
– assíncrona
Arquitetura Cliente-Servidor: CORBA8
Sistemas Distribuídos- consistência: transacões -
• Atômica: para o mundo externo, a transação ocorre de forma indivisível.
• Consistente: a transação não viola invariantes de sistema.
• Isolada: transações concorrentes não interferem entre si (serializable).
• Durável: os efeitos de uma transação terminada com commit são permanentes.
CORBAConceitos e Exemplos
Arquitetura Cliente-Servidor: CORBA10
CORBA- contexto -
• OMG: Object Management Group
• OMA: Object Management Architecture (1992)
• ORB: Object Request Broker
– facilidade para envio e recebimento de mensagens entre diferente objetos e componentes
• CORBA: Common Object Request Broker Architecture
– arquitetura que permite interoperação entre os participantes na OMA (objetos diversos)
– Adotado por: Digital, HP, Hyperdesk, NCR, Object Design, SunSoft, ...
Arquitetura Cliente-Servidor: CORBA
CORBA- produtos -
• Orbix (IONA)
• VisiBroker (Visigenic - Borland)
• ObjectBroker (Digital - Compaq)
• ILU Freeware ORB
• Orbacus
• OmniBroker (Object-Oriented Concepts)
• CORBUS (BBN - governo EUA)
Arquitetura Cliente-Servidor: CORBA
CORBA- referências básicas -
• Orfali & Harkey & Edwards. The Essential Distributed Objects Survival Guide. 1995
• Mowbray & Zahavi. The Essential CORBA. 1995
• Mowbray & Ruh. Inside CORBA. 1997
• OMA Guide. OMG. 1995
• CORBA Revision 2. OMG.1995
• CORBAservices. OMG. 1995
• CORBAfacilities. OMG. 1995
• Distributed Object Computing Magazine. OMG
• www.omg.org
Arquitetura Cliente-Servidor: CORBA
CORBA - referências disponiveis na biblioteca da PUCPR
• Advanced CORBA programming with C++ • Client/ server programming with Java and CORBA - 2nd
ed. • CORBA : a guide to the common object request broker
architecture • CORBA fundamentals and programming • Essential CORBA : systems integration using distributed
objects, The • Understanding CORBA : common object request broker
architecture
Arquitetura Cliente-Servidor: CORBA
CORBA- objetivos -
• construcão de sistemas distribuídos:– criacão de novos componentes– integracão de componentes existentes
• middleware– não inclui modelagem de aplicacões– não inclui implementacão de aplicacões– inclui mecanismos que auxiliam na
implementacão, a partir do modelo e do projeto
Arquitetura Cliente-Servidor: CORBA
CORBA- abordagem -
• orientacão a objetos
• modelo cliente/servidor
• comunicacão via RPC
• mecanismos disponíveis através de:– servicos, facilidades e domínios
• independência de:– hardware, SO, linguagem
Arquitetura Cliente-Servidor: CORBA16
ORB
ClienteImplementação
do Objeto
ORB
Request
Arquitetura Cliente-Servidor: CORBA17
Modelo de objetos• Clientes são entidades que requisitam serviços.• Uma requisição inclui uma operação, o objeto destino,
parâmetros da operação.• Uma operação denota um serviço que pode ser requisitado.• Um objeto é um encapsulamento de serviços que podem
ser requisitados por clientes.• Um valor é qualquer coisa que pode ser parâmetro em uma
requisição; valores podem identificar um objeto.• Uma referência a objeto é um nome que identifica um
certo objeto de maneira consistente.
Arquitetura Cliente-Servidor: CORBA18
Operações
• A assinatura de uma operação define os valores que podem ser usados como parâmetros e resultados em sua requisição.
• Cada parâmetro tem um modo e um tipo.• Os modos de parâmetro são: in, out, inout• O resultado de uma requisição pode ser uma exceção,
denotando serviço anormal.• Uma exceção é usada para passar informação para o
originador da requisição.• Semânticas: at-most-once; oneway (best-effort, cliente não
tem resultados)
Arquitetura Cliente-Servidor: CORBA19
Arquitetura ORB
ClienteImplementação
do objeto
InvocaçãoDinâmica
StubsIDL
InferfaceORB
EsqueletoIDL
Adaptadordo Objeto
Núcleo ORB
Arquitetura Cliente-Servidor: CORBA20
Componentes ORB• Interface de Invocação Dinâmica: clientes fazem requisições
independentemente da interface do objeto; cliente sabe o tipo do objeto a assinatura da operação.
• Stubs IDL: clientes fazem requisições de acordo com a interface do objeto (IDL: Interface Definition Language); cliente tem uma referência para o objeto e sabe a assinatura da operação.
• Esqueleto IDL: a implementação do objeto recebe uma requisição através do esqueleto IDL. (Há stubs e esqueletos para cada tipo de objeto.)
• Adaptador do Objeto: a implementação do objeto pode chamar um adaptador do objeto durante o processamento de uma requisição (resolver referências, segurança, ...)
Arquitetura Cliente-Servidor: CORBA21
IDL
DefiniçõesIDL
IDL stub
Repositóriode Interfaces
EsqueletoIDL
Implementação(em linguagem)
Repositório deImplementação
Arquitetura Cliente-Servidor: CORBA
IDL - exemplomodule Escola {
interface Curso; // declarado, mas não definido
interface Estudante {
attribute string nome;
attribute unsigned long matricula;
exception ClasseLotada;
void registra (in Curso curso) raises (ClasseLotada);
exception ReqIncompleto;
void gradua ( ) raises (ReqIncompleto);
typedef sequence<Curso> ListaCursos;
ListaCursos cursos_registrados(); } }
Arquitetura Cliente-Servidor: CORBA
Aplicacão - exemplo
//c++
#include <iostream.h>
int main ( )
{
cout << “Hello World”;
return 0;
}
Arquitetura Cliente-Servidor: CORBA
Aplicacão - exemplo
// Java
public class Welcome
{
public static void main ( String args [ ] )
{
System.out.println ( “Hello, world!”);
}
}
Arquitetura Cliente-Servidor: CORBA
Aplicacão - exemplo
// IDL - arquivo Hello.idl
interface Hello
{
void hello ( );
};
Arquitetura Cliente-Servidor: CORBA
Aplicacão - exemplo
compilação do arquivo IDL: idl Hello.idl
Arquivos gerados:
Hello.h
Hello.cpp
Hello_skel.h
Hello_skel.cpp
Arquitetura Cliente-Servidor: CORBA
Aplicacão - exemplo
// Servidor em C++ - arquivo Hello_impl.h
#include <Hello_skel.h>
class Hello_impl : public Hello_skel
{
public:
Hello_impl ();
virtual void hello();
}
Arquitetura Cliente-Servidor: CORBA
Aplicacão - exemplo
// Servidor em C++ - arquivo Hello_impl.cc
#include <CORBA.h>
#include <Hello_impl.h>
Hello_impl::Hello_impl ( ) { }
void Hello_impl::hello()
{
cout << “Hello, world!”<< endl;
}
Arquitetura Cliente-Servidor: CORBA
Aplicacão - exemplo#include <CORBA.h> // ativacao do servidor
#include <Hello_impl.h>
#include <fstream.h>
int main (int argc, char* argv[ ], char* [ ] )
{ CORBA_ORB_var orb = CORBA_ORB_init(argc, argv);
CORBA_BOA_var boa = orb -> BOA_init (argc, argv);
Hello_var p = new Hello_impl ( );
CORBA_String_var s = orb -> object_to_string (p);
const char* refFile = “Hello.ref”; // arquivo auxiliar
ofstream out(refFile);
out << s << endl;
out.close();
boa -> impl_is_ready (CORBA_implementationDef::_nil()); }
Arquitetura Cliente-Servidor: CORBA
Aplicacão - exemplo
#include <Hello.h> // cliente
#include <fstream.h>
int main (int argc, char* argv[ ], char* [ ] )
{ CORBA_ORB_var orb = CORBA_ORB_init (argc, argv);
CORBA_BOA_var boa = orb -> BOA_init (argc, argv);
const char* refFile = “Hello.ref”; // arquivo auxiliar
ifstream in (refFile);
char s [1000];
in >> s;
CORBA_Object_var obj = orb -> string_to_object (s);
Hello_var hello = Hello::_narrow (obj);
hello -> hello( ); }
CORBAServices, Facilities & Domains
Arquitetura Cliente-Servidor: CORBA
Services- categorias -
• Information management
• Task management
• System management
• Infrastructure
Arquitetura Cliente-Servidor: CORBA
Services- information management -
• property
• relationship
• query
• externalization
• persistent object
• collection
Arquitetura Cliente-Servidor: CORBA
Services- task management -
• events
• concurrency
• transaction
Arquitetura Cliente-Servidor: CORBA
Services- system management -
• naming
• lifecycle
• licensing
• trader
Arquitetura Cliente-Servidor: CORBA
Services- infrastructure -
• Security
• Time Services
• Messaging
Arquitetura Cliente-Servidor: CORBA
Property Service
• propriedades são atributos dinâmicos vinculados a objetos de aplicacão
• propriedades são úteis para aplicacões de gerenciamento, como desktop managers, debugging tools, browsers,...
• exemplo: um desktop manager pode vincular propriedades de protecão e compartilhamento a objetos
• exemplo: uma ferramenta de debugging pode vincular informacão sobre a execucão (como breakpoints) a objetos de um programa
Arquitetura Cliente-Servidor: CORBA
Relationship Service
• permite estabelecer ligacões entre objetos
• evita que objetos mantenham object references explicitamente
• cria objetos adicionais:– Relationship– Role
Arquitetura Cliente-Servidor: CORBA
Query Service
• usado com bancos de dados comerciais
• suporta bancos relacionais e OO
• proposto por: IBM, Sybase, SunSoft
• contempla: SQL92, SQL-3, OQL
• queries são dinâmicas
• queries podem ser resolvidas sincrona ou assincronamente
Arquitetura Cliente-Servidor: CORBA
Externalization Service
• converte estruturas de dados em formato que pode ser armazenado externamente ao programa e transmitido via rede
• remove ponteiros
• parte do processo de marshalling
• útil também para migrar objetos (mas não inclui métodos)
Arquitetura Cliente-Servidor: CORBA
Persistent Object Service
• criado por fornecedores de bancos de dados relacionais e OO
• inclui 3 protocolos de persistência:– ODMG 93– direct access protocol (usa DDL, um
subconjunto de IDL)– dynamic data object protocol
Arquitetura Cliente-Servidor: CORBA
Collection Service
• grupos de objetos– listas sequenciais– pilhas– filas– bags ...
• estende a funcionalidade de bibliotecas como a STL (Standard Template Library) para sistemas distribuídos
Arquitetura Cliente-Servidor: CORBA
Events Service
• canal de passagem de eventos entre produtores e consumidores de eventos
• pode ser usado para comunicacão multicast
• um consumidor registra seu interesse em eventos com o servico
• estilos de interacão:– push– pull
Arquitetura Cliente-Servidor: CORBA
Concurrency Service• garante acesso atômico a objetos distribuídos• portabilidade: uso de concorrência por
múltiplos sistemas operacionais e linguagens• tipos de lock:
– read, write– upgrade (pode mudar para write)– intention read, intention write (fine granularity)
Arquitetura Cliente-Servidor: CORBA
Transaction Service
• permite a manipulacão de estados de objetos distribuídos de forma consistente
• trabalha sobre monitores compatíveis com X/Open:– Tuxedo protocols– IBM/Transarc Encina– bancos de dados OO compatíveis com ODMG-93– LU6.2 da IBM
• usa two-phase commit protocol
• suporta transacões flat e nested
• baixo suporte a tolerância a falhas (Orbix + Isis)
• não suporta transacões de longa duracão
Arquitetura Cliente-Servidor: CORBA
Naming Service
• permite recuperar uma referência para um objeto dado um nome vinculado a este
• operacões básicas:– bind– unbind– resolve
• espaco de nomes organizado em hierarquia (nós intermediários são chamados de contexto)
Arquitetura Cliente-Servidor: CORBA
Lifecycle Service
• criacão de objetos é responsabilidade das aplicacões: lista de parâmetros é imprevisível
• permite criar object factories, que criam, duplicam, movem e removem objetos de certos tipos pelo sistema distribuído (com transparência de localizacão)
Arquitetura Cliente-Servidor: CORBA
Licensing Service
• permite protecão de propriedade intelectual através de gerenciamento de licensas de forma dinâmica
• inclui, por exemplo: trabalhos de arte em computador e aplicacões comerciais.
• estimativa: 70% de todo software em uso no mundo é pirata
Arquitetura Cliente-Servidor: CORBA
Trader Service
• uma espécie de páginas amarelas, onde fornecedores publicam seus servicos e interessados procuram por eles
• nem sempre se sabe o nome do objeto que pode prover o servico
• um servico é caracterizado através de sua interface (influenciado por APM ANSA Trader)
Arquitetura Cliente-Servidor: CORBA
Security Service
• deve ser suportado diretamente pelo ORB
• abrange: confidencialidade, integridade, contabilidade, disponibilidade e não-repudiacão
• funcões básicas: controle de acesso, auditoria, autenticacão e políticas de implementacão
Arquitetura Cliente-Servidor: CORBA
Time Service
• suporta recuperacão e sincronizacão de relógios (físicos) em sistemas distribuídos
• suporta sincronizacão através sinais de rádio gerados localmente ou por fontes do governo
Arquitetura Cliente-Servidor: CORBA
Messaging Service• permite processamento assíncrono através do
ORB• interfaces IDL têm semântica síncrona, por
default• estende a utilidade de CORBA para cobrir a
funcionalidade disponível em MOM (message-oriented middleware)
• não suporta garantia de entrega de mensagens