Upload
others
View
3
Download
0
Embed Size (px)
Citation preview
SISTEMAS DISTRIBUÍDOSCAPÍTULO 4 – COMUNICAÇÃO
Slides cedidos pela professora Aline Nascimento e do livro texto
CHAMADA DE PROCEDIMENTO REMOTO
Resumindo:
Permite a um cliente o acesso a um serviço remoto por meio
de uma simples chamada a um procedimento local
Possibilita que programas clientes sejam escritos de modo
simples
Pode localizar automaticamente o servidor correto
Estabelece a comunicação entre software cliente e software
servidor
RPC ASSÍNCRONA
Fornecem facilidades de modo a não bloquear o cliente
quando não há nenhum resultado a esperar
RPC ASSÍNCRONA
Também podem ser úteis quando uma resposta será
retornada mas o cliente não está preparado para esperar
por ela
Enquanto espera, o cliente pode realizar outras tarefas
São combinadas duas RPCs assíncronas denominada RPC assíncrona deferida
O cliente pode, também, não esperar aceite do servidor e
continuar sua execução RPC de uma via
Quando a confiabilidade não é garantida, o cliente não saberá se a requisição será ou não processada
RPC ASSÍNCRONA DEFERIDA
COMUNICAÇÃO ORIENTADA A MENSAGEM
Quando não se pode adotar que o lado receptor está
executando no momento em que uma requisição é emitida,
o que fazer?
Como contornar estas limitações Troca de mensagens
Mensagens podem ser trocadas quando processos estão ou
não em funcionamento
Existe a possibilidade de armazenamento para posterior
tratamento
COMUNICAÇÃO ORIENTADA A MENSAGEM
Muitos SDs são construídos em cima do modelo simples
orientado a mensagem oferecido pela camada de transporte
Algumas interfaces da camada de transporte foram
padronizadas: padrão POSIX
SOCKETS
Um socket é um terminal de comunicação para o qual uma
aplicação pode ler/escrever dados que devem ser
recebidos/enviados pela rede subjacente
Sockets são abstrações que representam pontos de
comunicação através dos quais processos se comunicam
Protocolo de transporte específico
Orientado a conexão: TCP (Transport Control Protocol)
Sem conexão: UDP (User Datagram Protocol)
SOCKETS
Para que dois computadores possam trocar informações
cada um utiliza um socket
Sockets adotam o paradigma cliente-servidor
PRIMITIVAS DE SOCKET PARA TCP/IP
FUNCIONAMENTO DE SOCKETS
receive
send receive
send
SISTEMA COM SOCKETS (SERVIDOR)
from socket import *s = socket(AF_INET, SOCK_STREAM) s.bind((HOST, PORT)) s.listen(1) (conn, addr) = s.accept() # returns new socket and addr. client while True: # foreverdata = conn.recv(1024) # receive data from clientif not data: break # stop if client stoppedconn.send(str(data)+"*") # return sent data plus an "*"
conn.close() # close the connection
SISTEMA COM SOCKETS (CLIENTE)
from socket import *s = socket(AF_INET, SOCK_STREAM)s.connect((HOST, PORT)) # connect to server (block until accepted)s.send('Hello, world') # send same datadata = s.recv(1024) # receive the responseprint data # print the results.close() # close the connection
FACILITANDO O USO DE SOCKETS
Sockets exigem programação de baixo nível que induz a
erros
São sempre utilizados no modelo cliente-servidor
Alternativa: ZeroMQ
Provê um nível de expressão mais alto fazendo o
pareamento de sockets: um para enviar mensagens de um
processo P e um correspondente no processo Q para
receber mensagens. Toda comunicação é assíncrona.
Three patterns
FACILITANDO O USO DE SOCKETS
Três padrões:
Request-reply
Publish-subscribe
Pipeline
REQUEST-REPLY
REQUEST-REPLY
PUBLISH-SUBSCRIBE
PIPELINE
PIPELINE
PIPELINE
COMUNICAÇÃO ORIENTADA A MENSAGEM (CONT)
Interface de Troca de Mensagens (MPI)
Surgiu da consideração de que Sockets são insuficientes
para escrever com facilidade aplicações de alta eficiência
Sockets apresentam problemas de abstração, suportando
apenas primitivas simples send e receive
Sockets são considerados inadequados para protocolos
proprietários desenvolvidos para redes de alta velocidade
Tais protocolos requeriam uma interface que pudesse manipular
características mais avançadas
MPI (MESSAGE PASSING LIBRARY)
Inicialmente, bibliotecas prioritárias de trocas de mensagens
eram incorporadas aos multicomputadores de alto
desempenho
Evolução natural definição de um padrão para troca de
mensagens, independente de hardware e de plataforma
MPI foi projetada para aplicações paralelas, para
comunicação transiente
Considera que falhas sérias como quedas de processos ou
partições da rede sejam fatais e não requeiram recuperação
automática
MPI – COMO FUNCIONA?
A comunicação ocorre dentro de um grupo conhecido de processos
Cada grupo recebe um identificador groupID
Cada processo dentro de um grupo também recebe um indentificador processID
O par (groupID, processID) identifica fonte ou destinatário de
uma mensagem
Vários grupos de processos podem estar envolvidos em um serviço de computação, podendo estar em execução ao mesmo tempo