Sistemas Distribuídos - UFFsimone/sd/contaulas/aula8.pdf · 2019-05-02 · Enquanto espera, o...

Preview:

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

Recommended