Objetos Distribuídos

Propaganda
CORBA
Alcides Calsavara
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
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
Sistemas Distribuídos
- requisitos Controle de concorrência
Consistência
Extensibilidade (openness)
Escalabilidade (crescimento gradativo
suave)
Tolerância a falhas
Transparência
Sistemas Distribuídos
- transparência Acesso
Localizacão
Concorrência
Replicação
Falha
Migração
Desempenho
Escala
Paralelismo
Sistemas Distribuídos
- componentes básicos Comunicação
Sistema de nomes
Manutenção de consistência
Alocação de carga de trabalho
Sistemas Distribuídos
- comunicação modelo:
 cliente/servidor
 grupo
abstracão:
 processos e mensagens
 objetos e operações (RPC)
sincronismo:
 síncrona
 assíncrona
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.
8
CORBA
Conceitos e Exemplos
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)
 adotada por: HP, SunSoft, IBM, Xerox, Oracle, ...
10
CORBA
- ORB : produtos comerciais Orbix (Iona Technologies)
VisiBroker (Borland)
ChorusORB (Sun)
Component Broker/DSOM (IBM)
Voyager ORB (ObjectSpace)
OrbAda (Top Graph'X)
Nouveau (Roguewave)
Netscape Internet Service Broker (Netscape)
ObjectDirector (Fujitsu)
DOME (Object Oriented Technologies)
BEA WebLogic Server (BEA)
CORBA
- ORB : produtos acadêmicos/gratuitos ORBacus (Object-Oriented Concepts)
ILU Freeware ORB (Xerox Parc)
DIMMA (ANSA)
JADE (APM)
JavaIDL (JavaSoft)
TAO ( Distributed Object Computing Group
at Washington University )
omniORB2 (AT&T Laboratories )
MICO (University of Frankfurt)
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
www.omg.org




OMA Guide
CORBA Revision 2
CORBAservices
CORBAfacilities
Distributed Object Computing Magazine, OMG
http://mini.net/cetus
CORBA - referências disponíveis 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
CORBA
- objetivos construcão de sistemas distribuídos:


criacão de novos componentes
integracão de componentes existentes (legados)
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
CORBA
- abordagem orientacão a objetos
modelo cliente/servidor
comunicação via RPC
mecanismos disponíveis através de:

servicos, facilidades e domínios
independência de:

hardware, SO, linguagem
ORB
Implementação
do Objeto
Cliente
Request
ORB
17
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.
18
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ântica: at-most-once, oneway (best-effort,
cliente não tem resultados)
19
Arquitetura ORB
Implementação
do objeto
Cliente
Invocação
Dinâmica
Stubs
IDL
Interface
ORB
Esqueleto
IDL
Adaptador
do Objeto
Núcleo ORB
20
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
21
referências, segurança, ...)
IDL: Interface Definition Language
IDL stub
Definições
IDL
Repositório
de Interfaces
Esqueleto
IDL
Implementação
(em linguagem)
Repositório de
Implementação
22
IDL - exemplo
module 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();
}
}
Exemplo – arquivo IDL
// IDL - arquivo Hello.idl
interface Hello
{
void trabalhe ( );
};
Exemplo – arquivos relacionados à IDL
compilação do arquivo IDL: idl Hello.idl
Arquivos gerados:
Hello.h
Hello.cpp
Hello_skel.h
Hello_skel.cpp
Exemplo –
implementação do objeto em Java
import org.omg.CORBA.*;
public class Hello_impl extends _HelloImplBase
{
public void trabalhe ( )
{
System.out.println("Hello World!");
}
}
Exemplo – ativação do servidor (1)
// Initialize the ORB
ORB orb =
ORB.init ( args, new java.util.Properties ( ) ) ;
// Initialize the Basic Object Adapter
BOA boa =
orb.BOA_init ( args, new java.util.Properties ( ) ) ;
// Create the implementation object
Hello_impl p = new Hello_impl ( ) ;
Exemplo – ativação do servidor (2)
// Export a reference to this object to a file
// obtém uma referência para o objeto
// em formato de string
String ref = orb.object_to_string ( p );
// abre um arquivo para escrita
String refFile = "C:\Temp\Hello.ref";
FileOutputStream file = new FileOutputStream(refFile);
PrintStream out = new PrintStream(file);
// escreve a referência no arquivo em formato de string
out.println( ref );
Exemplo – ativação do servidor (3)
// Run the object implementation
boa.impl_is_ready ( null );
Exemplo – cliente em Java (1)
// Initialize ORB
ORB orb =
ORB.init ( args, new java.util.Properties ( ) );
Exemplo – cliente em Java (2)
// Get "hello" object reference from a file
// abre o arquivo para leitura
String refFile = "C:\Temp\Hello.ref";
FileInputStream file = new FileInputStream(refFile);
DataInputStream in = new DataInputStream(file);
// lê a referência em formato de string
String ref = in.readLine();
Exemplo – cliente em Java (3)
// Convert IOR String reference to object reference
org.omg.CORBA.Object obj = orb.string_to_object(ref);
// Throw an exception in case of failure
if (obj == null) throw new RuntimeException();
// Cast generic Corba.Object reference to
// Hello interface reference
Hello h = HelloHelper.narrow(obj);
// Finally, use the reference !
h.trabalhe ( ); // remote method invocation
CORBA
Services
ORB e serviços CORBA
Cliente
Cliente
Objeto
Objeto
ORB
Persistence
Object
Service
Transaction
Service
Naming
Service
Event
Service
Security
Service
Services
- categorias Information management
Task management
System management
Infrastructure
Services
- information management property
relationship
query
externalization
persistent object
collection
Services
- task management events
concurrency
transaction
Services
- system management naming
lifecycle
licensing
trader
Services
- infrastructure Security
Time Services
Messaging
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
Property Service - produtos
OpenFusion Property Service
(PrismTech)
Property Service with Java & C++
bindings.
Property Service (Carsten Zerbst)
Property Service implemented using Tcl
and Mico.
Relationship Service
permite estabelecer ligacões entre
objetos
evita que objetos mantenham object
references explicitamente
cria objetos adicionais:


Relationship
Role
Relationship Service produtos
Enabled Systems Persistent Relationship
Service (Enabled Systems)
Relationship Service with Java & C++
bindings.
OpenFusion Relationship Service
(PrismTech)
Relationship Service with Java & C++
bindings.
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
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)
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
Persistent Object Service produtos
Secant Extreme Persistent Object
Service for C++ and Java (Secant)
Persistent Object Service with Java &
C++ bindings.
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
Collection Service - produtos
OpenFusion Collection Service
(PrismTech)
Collection Service with Java & C++
bindings.
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
Events Service - produtos
NetEvents (Exemplar Development)
Java implementation of the Event
Service.
OpenFusion Event Service (PrismTech)
Event Service with Java & C++
bindings.
Notification Service - produtos
DSTC Notification Service (DSTC)
C++ implementation of the Notification
Service.
OpenFusion Notification Service (PrismTech)
Notification Service with Java & C++
bindings.
ORBacus Notify (OOC)
C++ implementation of the Notification
Service.
Orbital Notification Service (NEC)
C++ implementation of the Notification
Service.
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)
Concurrency Service produtos
OpenFusion Concurrency Service
(PrismTech)
Concurrency Service with Java & C++
bindings.
Transaction Service
OTS: Object 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 transações flat e nested
baixo suporte a tolerância a falhas (Orbix + Isis)
não suporta transações de longa duração
Transaction Service - produtos
CORBAplus Transaction Service (Expersoft)
C++ implementation of the OTS
Java Transaction Service (JTS) (JavaSoft)
Java implementation of the OTS
JTSArjuna (Arjuna Solutions)
Java implementation of the Java Transaction Service
OTSArjuna (Arjuna Solutions)
C++ implementation of the OTS
TPBroker (Hitachi)
C++ implementation of OTS, and Java
Implementation of OTS and JTS.
VisiBroker ITS (Borland)
Implementation of CORBA OTS and JTS
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)
Naming Service - produtos
DSTC Scalable Naming Service (DSTC)
C++ implementation of the Naming Service
ENames - CORBA Naming Service Browser [German]
(Entrance Software)
Java / Swing Naming Service Browser
jNames (OutBack Resource Group)
Java implementation of the Naming Service
OpenFusion Naming Service (PrismTech)
Naming Service with Java & C++ bindings
ORBacus Names (OOC)
Java implementation of the Naming Service
TRC Naming Service (Technical Resource Connection)
Java implementation of the Naming Service.
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)
Lifecycle Service - produtos
OpenFusion Lifecycle Service
(PrismTech)
Lifecycle Service with Java & C++
bindings.
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
Licensing Service - produtos
SilkMeter (Segue Software)
C++ and Java implementations of the
Licensing Service.
Trading 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)
Trading Service - produtos
DSTC Object Trader (DSTC)
C++ implementation of the Trading Object Service.
JTrader (Bruno Böttcher)
Java Trading Service, implementing Manager Factory pattern
OpenFusion Trading Service (PrismTech)
Trading Object Service with Java & C++ bindings.
ORBacus Trader (OOC)
Java implementation of the Trading Object Service.
TOI (IKV)
C++ implementation of the Trading Object Service.
Trader (Washington University in St. Louis)
C++ implementation of the Trading Object Service.
Security Service
deve ser suportado diretamente pelo
ORB
abrange: confidencialidade, integridade,
contabilidade, disponibilidade e nãorepudiacão
funcões básicas: controle de acesso,
auditoria, autenticacão e políticas de
implementacão
Security Service - produtos
ORBAsec (Adiron)
Java implementation of the Security
Service (Level 1 and Level 2)
SecureBroker (Promia)
Java implementation of the Security
Service (Level 1 and Level 2)
Timing 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
Timing Service - produtos
OpenFusion Time Service (PrismTech)
Time Service with Java & C++ bindings.
Time Service (Carsten Zerbst)
Time Service implemented using C++.
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 (messageoriented middleware)
não suporta garantia de entrega de
mensagens
Messaging e
Tolerância a Falhas
The Ensemble Project (Cornell
University)
Piranha: A CORBA Tool For High
Availability
Q/CORBA (University of Colorado)
TIB/ObjectBus 2.0 White Paper (TIBCO)
Download