Professional Documents
Culture Documents
Aplicaes
para
Distribudas
Marco Tlio de Oliveira Valente
Middleware
Middleware
Middleware
Middleware: Abstraes de
Comunicao
Prximos Captulos
RPC
RPC
Servidor
float soma(x,y) {
return x+y;
}
11
RPC: Stubs
13
Servidor
r= soma(x,y)
(6)
Stub
Cliente
(1)
float soma(x,y) {
}
float soma(x,y) {
return x+y;
}
(3)
(2)
(4)
Stub
Servidor
(5)
arquivo XDR
rpcgen
server_stub.c
15
Java RMI
17
18
19
20
21
Passo 4: Compilao
Compilao do servidor e do cliente (javac)
Gerao de stubs:
rmic ContaImpl
rmic gera os seguintes arquivos:
ComtaImpl_Stub.class: stub do cliente
ContaImpl_Skel.class: skeleton
(apenas RMI < JDK
1.4)
Passo 5: Execuo
Execuo
do Servidor:
rmiregistry
// registry (permanece em
execuo)
java ContaImpl
// servidor (outro processo)
Execuo do Cliente:
23
Exemplo de Callback
void g ()
{..... }
Cliente
Servidor
objeto
remoto
objeto remoto
a
s
s.f(a);
v
o
i
d
f
(
A
a
24
Aplicao de chat
interface:
25
conectados
remoto
display (s)
c
s.conecta(c);
......
s.envia(Bom dia!);
c
s.conecta(c);
remoto
display (s)
c
s.conecta(c);
26
CORBA
CORBA
28
ORB IONA
IIOP
ORB Java
29
30
Exemplo:
typedef sequence<string> extrato;
struct Data {
short dia, mes,ano;
};
interface conta {
float obterSaldo ();
extrato obterExtrato (in
Data inicio, in Data
fim);
.......
};
31
32
Desenvolvimento de Aplicaes em
CORBA: Viso Geral
Fonte IDL
Cliente
cliente.java
ORB A
Run-time
Servidor
Compilador
IDL-Java
Compilador
IDL-C++
stub.java
skel.cpp
Cliente
Servidor
IIOP
servidor.cpp
ORB B
Run-time
33
Vantagens:
Padro (independncia de LP, SO, fornecedor)
Middleware bastante completo (diversos servios)
Desvantagens:
Padro imposto por um grande comit: solues extensas,
duplicadas, sobrecarregadas, para atender a todos os gostos
etc
Vide linguagens propostas por comits (ADA, PL/I etc)
Ditado: Um camelo um cavalo projetado por um comit
The only way to reach agreement during the submission
process for a CORBA specification is to take the grand
union of the feature sets of all the pre-existing proprietary
implementations (ICE home page)
Soluo fechada, monoltica, inflexvel, com poucos pontos de
configurao, customizao, personalizao etc
Caixa-preta, one size fits all
34
Transparncia
36
Crticas a Transparncia
Latncia:
Ignoring the difference between the performance of local and
remote invocations can lead to designs whose implementations
are virtually assured of having performance problems because
the design requires a large amount of communication between
components that are in different address spaces and on
different machines.
Acesso a Memria:
A more fundamental difference between local and remote
computing concerns the access to memory in the two cases
specifically in the use of pointers. Simply put, pointers in a local
address space are not valid in another (remote) address
space. The system can paper over this difference ... Two
choices exist: either all memory access must be controlled by
the underlying system, or the programmer must be aware of
the different types of accesslocal and remote.
38
Falhas:
Being robust in the face of partial failure requires some
expression at the interface level. Merely improving the
implementation of one component is not sufficient. The
interfaces that connect the components must be able to state
whenever possible the cause of failure
Concorrncia:
Distributed objects by their nature must handle concurrent
method invocations
39
Reflexo Computacional
Reflexo Computacional
41
Reflexo Computacional
42
Reflexo em Java
43
Reflexo em Java
44
Reflexo em Java
47
implements
Client
references
DynamicProxyClass
ServiceImpl
service
service
references
<<interface>>
InvocationHandle
r
invoke(Object,
Method,
Object[])
implements
InvocationHandlerIm
pl
references
invoke(Object,
Method,
Object[])
48
49
Exemplo de Uso:
50
Sincronizao de Requisies
Chamadas oneway:
Controle retorna ao cliente quando middleware recebe
requisio
Despacho/execuo da chamada e execuo do cliente
ocorrem de forma assncrona
Somente podem ser aplicadas a mtodos com retorno void
No ativam uma exceo em caso de falha na execuo da
chamada remota; recomendadas quando o cliente no
necessita do resultado da chamada remota
52
Chamadas Assncronas
Chamadas Assncronas
Chamada Assncrona:
Async_A a= Naming.lookup(....);
Listener x= new MyListener();
a.async_f(x, 10);
54
55
CORBA Trader
57
58
Cliente:
Ao instanciar um stub de um objeto remoto: chama obj.dirty()
Ao destruir um stub de um objeto remoto: chama obj.clean()
Servidor:
obj.dirty(): incrementa contador de referncias externas
obj.clean(): decrementa contador de referncias externas
Ncleo de RMI: deixa de referenciar obj quando contador == 0
Problemas: falhas no cliente ou na rede podem impedir o envio
de uma mensagem obj.clean()
Soluo: lease
Cliente reenvia object.dirty() de tempos em tempos
Servidor armazena no s um contador, mas tambm a
identificao de cada cliente que possui uma referncia para
ele
Servidor decrementa contador quando lease no renovado
59
Jini
60
Jini
61
Jini
62
Servios Web
Servios Web
Extenso e adaptao dos conceito de chamada remota
de mtodos para a Web
Informaes estruturadas, com interfaces bem definidas
Principais padres: HTTP, XML, SOAP, WSDL e UDDI
Exemplo: servio Web para obter cotao do dlar
Mensagens
SOAP + XML
dolar= getDolar();
HTTP
Servidor
Web
float getDolar() {
............
.............
}
Servios Web
65
SOAP
WSDL
Fonte: Web Services: Concepts, Architecture and Applications. Gustavo Alonso,
Fabio Casati, Harumi Kuno, Vijay Machiraju. Springer Verlag, 2004
66
SOAP
67
SOAP: Mensagens
Suponha a seguinte implementao de um servio Web:
68
SOAP: Arquitetura
69
Fonte: Paulo Pires e Marta Matoso. Tecnologia de Servios Web. Mini-curso SBES 2005.
WSDL
70
UDDI
72
SOA vs DOA
73
Granularidade:
Interfaces DOA possuem um menor nvel de
granularidade
Exemplo: agncia de viagem
74
Em DOA:
Interfaces remotas usam tipos Itinerrio, Reserva, Cliente
etc
void createCustomer(Customer)
(interface Cliente)
Exemplos
de mtodos:
void addItinerary(Itinerary)
float getCost()
(interface Booking)
(interface Booking)
Em SOA:
Mtodos so agrupados em uma nica interface
(TravelAgencyService)
Exemplos de mtodos:
75
76
The DOA view may lead to interactions that are too chatty, in the
sense of requiring a number of interactions to accomplish the
same effect. In many systems this will increase the number of
network operations to accomplish a single business level task,
reducing system throughput.
77
BPEL
78
BPEL: Exemplo 1
79
BPEL: Exemplo 2
Processo que:
Dada uma string, realiza uma consulta ao Google
Para cada item da resposta, retorna as pginas armazenadas
no
cache do Google (para isso, volta a consultar o Google)
<variables>
<variable name="search" messageType="goo:doGoogleSearch"/>
<variable name="searchResponse"
messageType="goo:doGoogleSearchResponse"/>
<variable name="cache"
messageType="goo:doGetCachedPage"/>
name="i" type="xsi:int"/>
<variable
<variable name="cacheResponse"
name="query" type="xsi:string"/>
<variable
messageType="goo:doGetCachedPageResponse"/>
<variable name="itemNb" type="xsi:int"/>
</variables>
80
BPEL: Exemplo 2
<sequence>
<assign>
<copy>
<from>
<search>
<key>0123456789
</key>
<q>ucl computer
science</q>
<start>1</start
>
<maxResults>5</
maxResults>
<filter>true</f
ilter>
<restrict/>
<safeSearch>tru
e</safeSearch>
<lr/>
<ie>latin1</ie>
</assign><oe>latin1</oe>
</search>
81
BPEL: Exemplo 2
<invoke partnerLink="goo:GoogleSearchService"
portType="goo:GoogleSearchPort"
operation="goo:doGoogleSearch"
inputVariable="search"
outputVariable="searchResponse"/>
<assign>
<copy>
<from expression="1"/>
<to variable="i"/>
</copy>
<copy>
<from variable="searchResponse" part="return"
query="count(/return/resultElements/item)"/>
<to variable="itemNb"/>
</copy>
<copy>
<from variable="search" part="key"/>
<to variable="cache" part="key"/>
</copy>
</assign>
82
BPEL: Exemplo 2
<while condition="bpws:getVariableData(i) <=
bpws:getVariableData(itemNb)">
<sequence>
<assign>
<copy>
<from expression="concat(
/return/resultElements/item[,
bpws:getVariableData(i), ]/URL)"/>
<to variable="cache" part="url"/>
</copy>
<copy>
<from
expression=
"bpws:getVa
riableData(
i)+1"/>
<to
variable="i
"/>
</copy>
</assign>
</sequence>
<invoke partnerLink="goo:GoogleSearchService"
portType="goo:GoogleSearchPort operation="goo:doGetCachedPage"
83
84
87
88
Casamento de Padres
Exemplo 2:
int i, j;
out(1, 2, "xyz")
Exemplo 3:
int i, j; string s;
out(1, 2, "xyz")
rd(?i, ?j, ?s) bem sucedido (i= 1, j= 2, s= xyz)
89
Casamento de Padres
Exemplo 4:
int i, j=2; string s;
out(1, 2, "xyz")
rd(?i, j, ?s) bem
sucedido (i=
Exemplo 5:
1, s= xyz)
(e permanece suspenso)
int i, j;
out(1, 2, "xyz")
rd (?i, ?j, "abc) no bem sucedido
Exemplo 7:
out("string", 10.1, 21, "another string")
real f; int i;
rd("string", ?f, ?i, "another string") bem sucedido (f=10.1 e i=21)
in("string", ?f, ?i, "another string") bem sucedido (f=10.1 e i=21)
90
rd("string", ?f, ?i, "another string") permance suspenso
Espao de Tuplas
Chat
93
RPC/RMI
94
Sistema de Leiles
95
Mestre/Escravos
97
Nmeros Primos
Process main(int argc, char *argv[]) {
int primes[LIMIT] = {2,3}; /* my table of primes */
int limit, i, isprime;
int numPrimes = 2, value = 5;
limit = atoi(argv[1]);
/* number of primes to
generate */
/* put first candidate in bag */
OUT("candidate", value);
/* get results from workers in increasing order */
while (numPrimes < limit) {
IN("result", value, ?isprime);
if (isprime) { /* put value in table and TS */
primes[numPrimes] = value;
numPrimes++;
OUT("prime", numPrimes, value);
}
value= value + 2;
}
/* tell workers to quit, then print the primes */
OUT("stop");
for (i = 0; i < limit; i++) printf("%d\n", primes[i]);
98
Nmeros Primos
process worker(1 to numWorkers) { // create numWorkers processes
int primes[LIMIT] = {2,3}; /* table of primes */
int numPrimes = 1, i, candidate, isprime;
/* repeatedly get candidates and check them */
while(true) {
if (RDP("stop")) /* check for termination */
return;
IN("candidate", ?candidate);
/* get candidate */
OUT("candidate", candidate+2);
/* output next one */
i = 0; isprime = 1;
while (primes[i]*primes[i] <= candidate) {
if (candidate%primes[i] == 0) /* not prime */
{ isprime = 0; break; }
i++;
if (i > numPrimes) /* need another prime */
{ numPrimes++; RD("prime", numPrimes, ?primes[numPrimes]); }
}
/* tell manager the result */
OUT("result", candidate, isprime);
}
99
}
Caractersticas Interessantes
Caractersticas Interessantes
Sistemas Publish/Subscribe
Sistemas Publish/Subscribe
Sistemas Publish/Subscribe
Servio de eventos:
Mediador entre produtores e assinantes
Gerencia e armazena assinaturas
Despacha eventos para respectivos assinantes
Incluso e remoo de produtores e assinantes simples
Oferecem desacoplamento no espao, no tempo e de
sincronizao
104
Desacoplamento
Desacoplamento no espao:
Produtores no conhecem assinantes (e vice-versa)
Produtores no tem referncias para assinantes (e vice-versa)
Participantes no se conhecem mutuamente
Desacoplamento no tempo:
Produtor pode gerar evento quando assinante desconectado
Assinante pode receber evento quando produtor desconectado
No necessrio estabelecer uma conexo entre participantes
Desacoplamento de sincronizao:
Produo/consumo no acontece no fluxo principal de
execuo
Produtores no ficam bloqueados enquanto evento enviado
Assinantes so notificados assincronamento (via um callback)
Importncia em sistemas de larga escala e dinmicos:
remover amarras ou ligaes entre participantes
105
Desacoplamento
106
Alternativas
Troca de mensagens
RPC
Espaos de Tuplas
Filas de Mensagens
107
Troca de Mensagens
108
RPC e derivados
Legenda, no entanto,
continua parecendo
errada
RPC e derivados
Como h reply, o
servidor o produtor
Legenda, no entanto,
continua parecendo
errada
110
Espaos de Tuplas
111
Fila de Messagens
112
Resumo
Sistemas Publish/Subscribe
114
115
116
interface Subscriber<S> {
notify(S s);
}
117
Mobilidade de Cdigo e
Agentes Mveis
Mobilidade de Cdigo
Mobilidade de Agentes
Agente:
Programa que realiza uma tarefa para a qual recebeu
delegao
por parte de um usurio
Usados em Robtica, Inteligncia Artificial, Bancos de
Dados, Recuperao de Informao etc
Agente Mvel:
Agente cuja execuo no se restringe a uma nica mquina
Programa que autonomamente se desloca pelas diversas
mquinas de uma rede a fim de melhor realizar a tarefa que
lhe foi delegada.
Mobilidade: cdigo + dados + controle
Mobilidade de estado ou mobilidade de cdigo forte
Agentes mveis: modelo alternativo para construo de
aplicaes
distribudas
napara
Internet
Idia: mover
computao
junto de seus
dados
120
121
RPC
Cliente
Servidor
resultado (dados)
procedimento (cdigo)
REV
Cliente
Servidor
resultado (dados)
Agentes
Mveis
Nodo
Origem
agente
agente
agente
Nodo n
Nodo 1
Nodo 2
122
Principais vantagens:
Reduo de trfego na rede
Eliminao da latncia da rede
Aplicaes que podem se beneficiar do modelo de agentes mveis:
Comrcio eletrnico, gerncia de redes de telecomunicaes,
aplicaes de workflow e groupware, recuperao de
informao
Cliente
Servidor
Cliente
Servidor
Agente
Modelo
Cliente/Servidor
Modelo de Agentes
Mveis
123
124
Dynamically
and Reconfigurable
Programmable
Middleware
Services
Manuel Romn, Nayeem Islam
Middleware Conference, 2004
Introduo
126
Introduo
Structure
Logic
State
127
DPRS
128
MBB
129
MBB
130
Ao
131
Ao Compilada
Domnio
133
Run-time
Run-time
135
Exemplo de Uso e
Avaliao
136
ExORB
137
ExORB: Domnios
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
138
139
140
Configurability:
Verso com apenas funcionalidade cliente e XML-RPC (43 KB)
Verso foi gerada modificando o descritor de arquitetura
141
Updateability:
MBBs e aes podem ser modificados pelo MBB Manager
Experimento realizado: alterao da ao para primeiro realizar
o
marshalling dos parmetros e depois conectar com objeto
remoto
142
Upgradeability:
Criptografia de mensagens (novos MBBs para criptografar e
descriptografar mensagens; nova verso da ao para
chamar estes MBBs)
143