16-Apr-08
Objetivo
• Entender a motivação para o conceito de
middleware
Processamento Paralelo
Middleware
Prof. João Paulo A. Almeida
([email protected])
2008/01 - INF02799
Aplicações distribuídas: interação entre partes
Histórico
• Surgimento e popularização das redes criou a
necessidade e oportunidade dos sistemas
distribuídos
• Mainframe com seu terminais...
Rede B
– Terminais ficaram mais poderosos e com mais
periféricos que poderiam ser compartilhados
Rede A
Rede C
Cliente/Servidor
Cliente/Servidor
• Paradigma para interação:
– Uma parte do sistema assume papel de executar um
serviço (servidor)
– Outra parte pede a execução de um serviço (cliente)
– Normalmente muitos clientes para um servidor
(compartilha-se/reusa-se o serviço)
Request
• Parecido com invocar uma
função/método/procedimento em linguagem de
programação…
• Por que não é a mesma coisa?
Request
Processing request
Response
client
Response
server
1
16-Apr-08
Programação de sistemas distribuídos
Sockets
• Como programar a interação entre clientes e
servidores em um sistema distribuído?
• Modelos de programação para sistemas
distribuídos
• Interface de software para comunicação de um
programa de usuário (parte de aplicação) com a
pilha de protocolos TCP/IP
• Biblioteca de chamadas / API
• Socket é uma estrutura de dados
• Cliente e servidor se comunicam através de um
par de sockets
– Sockets
– Middleware: Remote Procedure Call
– Middleware: Orientado a objetos
– Middleware: Orientado a components
– Middleware: Orientado a serviços
– Outros modelos de comunicação
http://pages.cpsc.ucalgary.ca/~ijirasek/courses/cpsc441/slides/sockets.ppt#3
Sockets: usando serviços no nível de transporte
Sockets
• Protocolos no nível de aplicação (ex., HTTP, DNS, SMTP)
usam os serviços da camada de transporte
• A camada de transporte provê:
• Comunicação entre processos
• Uma Application Programming Interface (API)
provê funções, tipos de dados, estruturas de
dados e constantes
– Multiplexação/demultiplexação baseado no conceito de
portas
• Entrega confiável de dados (em ordem): TCP
–
–
–
–
connection setup (handshake)
congestion control
flow control
Stream (SOCK_STREAM)
• Não confiável e sem ordem garantida de datagramas:
UDP
– Para se usar “best-effort” IP
– Datagram (SOCK_DGRAM)
– Flexível, simples de usar, padronizado
(portabilidade)
• A API BSD sockets provê uma abstração similar
a um sistema de arquivos para sockets (open,
close, read, write)
– BSD sockets (originários do BSD 4.1 Unix em
1981) são a forma mais popular (API mais
popular) disponível em: FreeBSD, Linux,
Windows, Mac OS X, ...
• Sockets também podem ser usados para
comunicação entre processos no UNIX
http://lrcwww.epfl.ch/sc250_2004/lecture_notes/sc250_04_7.pdf
Arquitetura com sockets
http://lrcwww.epfl.ch/sc250_2004/lecture_notes/sc250_04_7.pdf
Arquitetura com sockets
Application Program
User Space
Application Program
Socket Layer
Socket Layer
User Space
Kernel Space
Socket Layer
UDP
Kernel Space
UDP
TCP
IP
UDP
User Space
Kernel Space
TCP
TCP
Application Program
IP
Drivers
Drivers
network
IP
Drivers
2
16-Apr-08
SERVER
Arquitetura com sockets
Application Program
Sockets
User Space
Application Program
Create socket
User Space
bind a port to the
socket
Socket Layer
Kernel Space
Socket Layer
UDP
TCP
Kernel Space
CLIENT
listen for incoming
connections
Create socket
accept an
incoming
connection
connect to server's
port
read from the
connection
write to the
connection
write to the
connection
read from the
connection
UDP
TCP
IP
IP
Drivers
Drivers
network
internet
loop
loop
close connection
Cliente/Servidor com sockets
Servidor TCP
• Cliente:
• sock_init()
Create the socket
• bind()
Register port with the system
• listen()
Establish client connection
• accept()
Accept client connection
• read/write
read/write data
• close()
shutdown
– Inicia o contato com o servidor
• (tem que saber o endereço IP ou hostname, e a porta)
– Normalmente requisita execução de um serviço
• Servidor:
– Espera passivamente (em uma certa porta)
– Normalmente roda constantemente à espera de
clientes
Cliente TCP
• sock_init ()
Sockets
Create socket
SERVER
Create socket
• connect()
Set up connection
• write/read
write/read data
• close()
Shutdown
int socket(int domain, int type, int protocol)
sockfd = socket(PF_INET, SOCK_STREAM, 0);
bind a port to the
socket
int bind(int sockfd, struct sockaddr *server_addr, socklen_t length)
bind(sockfd, &server, sizeof(server));
listen for incoming
connections
int listen( int sockfd, int num_queued_requests)
listen( sockfd, 5);
accept an
incoming
connection
int accept(int sockfd, struct sockaddr *incoming_address, socklen_t length)
newfd = accept(sockfd, &client, sizeof(client)); /* BLOCKS */
read from the
connection
int read(int sockfd, void * buffer, size_t buffer_size)
read(newfd, buffer, sizeof(buffer));
write to the
connection
int write(int sockfd, void * buffer, size_t buffer_size)
write(newfd, buffer, sizeof(buffer));
3
16-Apr-08
Sockets
Sockets: Java (Cliente TCP) (1/2)
CLIENT
Create socket
connect to Server
socket
int socket(int domain, int type, int protocol)
sockfd = socket(PF_INET, SOCK_STREAM, 0);
int connect(int sockfd, struct sockaddr *server_address, socklen_t length)
connect(sockfd, &server, sizeof(server));
write to the
connection
int write(int sockfd, void * buffer, size_t buffer_size)
write(sockfd, buffer, sizeof(buffer));
read from the
connection
int read(int sockfd, void * buffer, size_t buffer_size)
read(sockfd, buffer, sizeof(buffer));
Sockets: Java (Cliente TCP) (2/2)
Sockets: Java (Servidor TCP) (1/2)
http://lrcwww.epfl.ch/sc250_2004/lecture_notes/sc250_04_7.pdf
Sockets: Java (Servidor TCP) (2/2)
Servidor single-threaded x multi-threaded
•Vários clientes podem fazer pedidos ao mesmo
tempo para o servidor. O servidor então pode:
– a) atender um cliente por vez; outros clientes
tem que esperar (servidor não concorrente, ou
single-threaded)
– b) atender vários clientes simultaneamente
(servidor concorrente ou multi-threaded)
http://lrcwww.epfl.ch/sc250_2004/lecture_notes/sc250_04_7.pdf
4
16-Apr-08
Non-concurrent server
Concurrent server
sock_init()
Sock_init()
Create the socket
bind()
Register port with the system
while(1)
{
listen()
accept()
read/write
}
Start the loop. This loop will
service each request sequentially
Establish client connection
Accept client connection
read/write data
End loop
close()
Shutdown
Create the socket
bind()
Register port with the system
listen()
Establish client connection
accept()
Accept client connection
fork()
Create a child process which
will now communicate with client
read/write
read/write data in child process
exit()
exit child process
Sockets
Sockets
• Problemas??
• Ordem dos bytes nos tipos de dados dependem
da arquitetura da máquina
• host order:
– 12 34 56 78 (Motorola) big endian
– 78 56 34 12 (Intel) little endian
network order: 12 34 56 78
• Funções de conversão:
– u_long htonl(u_long hostlong);
– u_short htons(u_short hostshort);
– u_long ntohl(u_long netlong);
– u_short ntohs(u_short netshort);
Sockets
Protocolo
• Baixo nível de abstração...
– Principalmente quando o que você queria fazer
era pedir para outra máquina executar um
serviço... ou simplesmente usar um procedimento
remoto
– Endereços IPs/DNS/portas
– Detectar time-outs
– Threading
• Como codificar os dados de uma aplicação?
– Por exemplo, como enviar uma lista, um array,
um struct, um objeto
• Definição clássica
– Mensagens e regras que
determinam ações a
serem tomadas de acordo
com a recepção das
mensagens
Cooperation
Entity A
Entity B
• Mais precisamente...
– Entidades (de protocolo)
cooperando através de um
meio de comunicação
Communication
means
• Tem que se criar um “protocolo” sempre...
5
16-Apr-08
Protocolo
Protocolo / serviço
• Definir/especificar:
– Formatos de mensagens
• Tanto tipos de dados abstratos quanto a forma de se
codificá-los na rede
– Comportamento
User Q
User A
A-req
Q-req
SAP Q
• Em que momento cada mensagem pode ser enviada e o
que deve ser feito para cada lidar com cada mensagem
SAP A
A-ind
Q-ind
QA-Service provider
Implementação do protocolo
LSI A
PE A
socket
Middleware: Visão 1
User A
User C
SAP A
SAP C
PDU exchange
Lower Level
LSI C
• “Software that „sits in the middle‟ of the
interacting application parts playing the roles
of client and server” [Orfali 97]
PE C
sockets
cliente
middleware
servidor
Service provider
Service provider
Middleware: Visão 2
Middleware: Visão 2
Software que permite que partes de aplicações
distribuídas interajam, independente das
tecnologias com as quais elas sejam construídas
Mascarando as diferenças em tecnologias de
rede, linguagem de programação, sistemas
operacionais
computer B
computer A
middleware
client
server
LAN-1
LAN-2
6
16-Apr-08
Middleware: Visão 3
Middleware: Visão 3
• Software que simplifica a tarefa de um
desenvolvedor de aplicações provendo uma
coleção de “componentes” reusáveis para a
construção de aplicações distribuídas
• Middleware é mais do que comunicação /
interação, ...
• Mas ajuda a atingir os objetivos de distribuição
computer B
computer A
middleware
object 2
object 1
LAN-1
LAN-2
• Esta é a visão que nós adotamos nesse curso
other computers
Aplicações distribuídas
CORBA Object Model
• Aplicações que são uma coleção de „partes‟
geograficamente distribuídas ou “distributíveis”
• Quando usamos middleware orientado a objetos
essas partes são objetos
• Servants (Object implementations) and
Object references
CORBA
object
servant
client
Site A
Site B
Site C
Object reference =
reference to object interface
Interface
specified in IDL
Distributed application
Exemplo (IDL)
IDL -> protocolo
module bank {
// scope for bank interfaces
interface account {
// account user interface
readonly attribute float balance;
// attribute
void makeDeposit (in float f);
// operation
void makeWithdrawal (in float f);
// operation
};
interface accountManagement {
// mgmnt interface
exception reject { string reason; }
account newAccount (in string name)
raises (reject);
// operation
void deleteAccount (in account a); // operation
};
};
• A partir da descrição da interface um protocolo
é gerado (assim como sua implementação)
client
op (args)
servant
result
Object
Adapter
proxy
ORB
7
16-Apr-08
IDL -> para várias linguagens
•
•
•
•
•
•
•
•
•
IDL
IDL
IDL
IDL
IDL
IDL
IDL
IDL
IDL
->
->
->
->
->
->
->
->
->
Middleware é mais que interação
Java
C++
C
Ada
COBOL
Lisp
PL/1
Python
Smalltalk
Application objects
Domain objects
Realm of
OMG
standards
Object Request Broker
Object services
Middleware é mais que interação
Application objects
Common facilities
Leitura p/ discussão
• P.A. Bernstein. Middleware. Communications of
the ACM, Vol. 39, No. 2, February 1996, 86-98.
• Tragam esse texto impresso na próxima aula!
Domain objects
Fundamental services
(general purpose)
naming,
ObjectExamples:
Request Broker
events, life-cycle,
persistent objects,
transactions, security,
trading, etc.
Object services
Common facilities
Camadas da arquitetura
Applications, services
Middleware
OS: kernel,
libraries &
servers
OS1
Processes, threads,
communication, ...
OS2
Processes, threads,
communication, ...
Computer &
network hardware
Computer &
network hardware
Node 1
Platform
Node 2
Fonte: Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4
© Pearson Education 2005
8
Download

slides