1 Sistemas Paralelos e Distribuídos Comunicação entre processos.

53
1 Sistemas Paralelos e Distribuídos Comunicação entre processos

Transcript of 1 Sistemas Paralelos e Distribuídos Comunicação entre processos.

Page 1: 1 Sistemas Paralelos e Distribuídos Comunicação entre processos.

1

Sistemas Paralelos e Distribuídos

Comunicação entre processos

Page 2: 1 Sistemas Paralelos e Distribuídos Comunicação entre processos.

2

Comunicação entre processos

Comunicação Inter-processos

– Camadas de um Middleware;

Applications, services

Middlewarelayers

request-reply protocol

marshalling and external data representation

UDP and TCP

Thischapter

RMI and RPC

Page 3: 1 Sistemas Paralelos e Distribuídos Comunicação entre processos.

3

Comunicação entre processos

A API para o Protocolo de Internet– Discutiremos as principais características de comunicação de inter-processo

usando como exemplo o protocolo de Internet. Explicando como os programadores podem utilizar o UDP e TCP para passagem de dados entre processo.

– As características da comunicação Inter-processo:

A passagem de mensagem entre dois pares de processos pode ser implementado por duas operações básicas: send e receive. A atividade de comunicação envolve sempre um mecanismo de sincronização Os processos de alguma maneira devem apresentar uma sincronização para enviar e receber dados.

Page 4: 1 Sistemas Paralelos e Distribuídos Comunicação entre processos.

4

Comunicação entre processos

Comunicação Síncrona e Assíncrona:– Uma fila é associada com cada mensagem. O processo que envia a mensagem,

nada mais faz do que inserir a mensagem numa fila remota e o processo que recebe, retira a mensagem da fila local.

– Na forma síncrona de comunicação, o transmissor e receptor sincronizam a passagem de cada mensagem.

– Na forma assíncrona de comunicação, a operação de envio é não bloqueante. Nesta forma é permitida ao processo transmissor transferir rapidamente uma mensagem para o o buffer local (de saída). Desta forma, a transmissão de dados pode ocorrer em paralelo com o processo transmissor.

– As operações usando o modo bloqueantes são mais simples de implementarem. Mas o modo não bloqueante oferece melhores desempenhos na operação.

Page 5: 1 Sistemas Paralelos e Distribuídos Comunicação entre processos.

5

Comunicação entre processos

Sockets– Ambas as formas de comunicações (UDP e TCP) usam a abstração de sockets

para providenciar o meio de comunicação fim a fim entre os processos.– O termo socket surgiu originalmente do DSD UNIX, mas tb é usada em muitas

versões de UNIX, Linux, Windows NT e Macintosh OS.– Uma comunicação entre processos é baseada na utilização de um socket no

processo transmissor e um outro socket no processo receptor.

Page 6: 1 Sistemas Paralelos e Distribuídos Comunicação entre processos.

6

Comunicação entre processos - Socket

Comunicação usando Socket

message

agreed portany port socketsocket

Internet address = 138.37.88.249Internet address = 138.37.94.248

other ports

client server

Page 7: 1 Sistemas Paralelos e Distribuídos Comunicação entre processos.

7

Comunicação entre processos

Java API para Internet – Java utiliza uma classe chamada InetAddress para endereçar a Internet– DNS– Ex: InetAddress aComputer =

InetAddress.getByName(“bruno.dcs.qmw.ac.uk”)– IPv4 e IPv6

Page 8: 1 Sistemas Paralelos e Distribuídos Comunicação entre processos.

8

Comunicação entre processos

Comunicação por Datagrama UDP– Um pacote é transmitido sem confirmação ou reenvio de msg– Os erros não são retornados e nem tratados

Informações de um Datagrama:– Tamanho da msg, ao todo 65536 bytes, incluindo o cabeçalho– Bloqueio, modo de espera da chegada de msg– TimeOut, tempo máximo de espera para uma recepção – Receive From Any, modo onde ele aceita todo os pacotes

recebidos pelo socket.

Page 9: 1 Sistemas Paralelos e Distribuídos Comunicação entre processos.

9

Comunicação entre processos

Modelo de Falhas para o UDP:– Falha por omissão: a msg pode ser perdida

ocasionalmente ( no canal de comunicação)– Ordenação: as informações podem ser entregue fora

de ordem Aplicações:

– DNS– Menos overhead, latência– Multimídia

Page 10: 1 Sistemas Paralelos e Distribuídos Comunicação entre processos.

10

Comunicação entre processos

JavaAPI para UDP– DatagramaPacket

Esta classe providencia um construtor que faz uma instância do pacote a ser usado na comunicação por pacote UDP

Array de dados, Tamanho da mensagem, Internet Address, Porta

– DatagramaSocket Esta classe providencia um construtor para uma instância que oferece

suporte para TX e RX.

– Send e Receiver– SetSoTimeout– Connect

Page 11: 1 Sistemas Paralelos e Distribuídos Comunicação entre processos.

11

UDP – Enviando msg

import java.net.*;import java.io.*;public class UDPClient{ public static void main(String args[]){

// args give message contents and server hostnameDatagramSocket aSocket = null; try {

aSocket = new DatagramSocket(); byte [] m = args[0].getBytes();InetAddress aHost = InetAddress.getByName(args[1]);int serverPort = 6789; DatagramPacket request = new DatagramPacket(m, args[0].length(), aHost, serverPort);aSocket.send(request); byte[] buffer = new byte[1000];DatagramPacket reply = new DatagramPacket(buffer, buffer.length);aSocket.receive(reply);System.out.println("Reply: " + new String(reply.getData()));

}catch (SocketException e){System.out.println("Socket: " + e.getMessage()); }catch (IOException e){System.out.println("IO: " + e.getMessage());}}finally {if(aSocket != null) aSocket.close();}

} }

Page 12: 1 Sistemas Paralelos e Distribuídos Comunicação entre processos.

12

UDP – Recebendo msg

import java.net.*;import java.io.*;public class UDPServer{

public static void main(String args[]){ DatagramSocket aSocket = null; try{ aSocket = new DatagramSocket(6789);

byte[] buffer = new byte[1000]; while(true){ DatagramPacket request = new DatagramPacket(buffer, buffer.length); aSocket.receive(request); DatagramPacket reply = new DatagramPacket(request.getData(),

request.getLength(), request.getAddress(), request.getPort()); aSocket.send(reply);}

}catch (SocketException e){System.out.println("Socket: " + e.getMessage()); }catch (IOException e) {System.out.println("IO: " + e.getMessage());}}finally {if(aSocket != null) aSocket.close();}

}}

Page 13: 1 Sistemas Paralelos e Distribuídos Comunicação entre processos.

13

TCP

Oferece uma abstração para uma stream de bytes, que podem ser usados para escrever ou ler dados– Tamanho da Msg– Perda de Msg– Controle de Fluxo– Ordenação e duplicação de pacotes– Mensagem orientada a conexão

Page 14: 1 Sistemas Paralelos e Distribuídos Comunicação entre processos.

14

TCP

Características de uso:– Compatibilidade de dados– Bloqueios– Threads

Page 15: 1 Sistemas Paralelos e Distribuídos Comunicação entre processos.

15

TCP

Modelo de Falhas– Não consegue distinguir entre uma falha de rede ou do processo

Uso:– HTTP– FTP– Telnet– SMTP

ServerSocket Socket

Page 16: 1 Sistemas Paralelos e Distribuídos Comunicação entre processos.

16

TCP - Cliente

import java.net.*;import java.io.*;public class TCPClient {

public static void main (String args[]) {// arguments supply message and hostname of destinationSocket s = null; try{ int serverPort = 7896; s = new Socket(args[1], serverPort);

DataInputStream in = new DataInputStream( s.getInputStream());DataOutputStream out =

new DataOutputStream( s.getOutputStream());out.writeUTF(args[0]); // UTF is a string encoding see Sn 4.3String data = in.readUTF(); System.out.println("Received: "+ data) ;

}catch (UnknownHostException e){System.out.println("Sock:"+e.getMessage());

}catch (EOFException e){System.out.println("EOF:"+e.getMessage()); }catch (IOException e){System.out.println("IO:"+e.getMessage());}

}finally {if(s!=null) try {s.close();}catch (IOException e){System.out.println("close:"+e.getMessage());}} }}

Page 17: 1 Sistemas Paralelos e Distribuídos Comunicação entre processos.

17

TCP - Servidor

import java.net.*;import java.io.*;public class TCPServer { public static void main (String args[]) {

try{int serverPort = 7896; ServerSocket listenSocket = new ServerSocket(serverPort);while(true) {

Socket clientSocket = listenSocket.accept();Connection c = new Connection(clientSocket);

}} catch(IOException e) {System.out.println("Listen :"+e.getMessage());}

}}

// this figure continues on the next slide

Page 18: 1 Sistemas Paralelos e Distribuídos Comunicação entre processos.

18

Representação e Organização de dados

Toda informação armazenada em um programa possuem as seguintes características: – São guardada em algum tipo de estrutura– São formado por uma sequencia de bytes– São transformado em bytes antes da transmissão– São remontado ao formato original depois da

recepção– possuem diferentes tipificações

Page 19: 1 Sistemas Paralelos e Distribuídos Comunicação entre processos.

19

Representação e Organização de dados

Os caracteres pode ser:– ASCII– Unicode

Inteiros:– Big-Endian (byte mais significativo vem primeiro)– Little-endian

Page 20: 1 Sistemas Paralelos e Distribuídos Comunicação entre processos.

20

Representação e Organização de dados

Existe dois métodos para permitir que dois computadores diferentes consigam trocar dados:– Os valores são convertidos antes da transmissão em

um formato externo comum, previamente acordado entre as duas máquinas

– Enviar os dados no formato usado pelo transmissor e junto, enviar também informações necessárias sobre o formato usado

Page 21: 1 Sistemas Paralelos e Distribuídos Comunicação entre processos.

21

Representação e Organização de dados

Para suportar RMI ou RPC é necessário:– Que os argumentos sejam passados de uma maquina

para outra de forma transparente;– Antes de serem transmitidos os dados devem ser

transformado em formatos primitivos de dados de acordo com um formato externo

– Durante a recepção, os dados primitivos são remontados para um formato aceito pela máquina

Page 22: 1 Sistemas Paralelos e Distribuídos Comunicação entre processos.

22

Representação e Organização de dados

Este padrão comum de formato é chamado de Representação de Dados Externo

O processo de montagem de dados para um formato aceito externamente é chamado de Marshalling

UnMarshalling é o processo inverso, onde termo representa a desmontagem do formato externo para um formato conhecido localmente pela máquina

Page 23: 1 Sistemas Paralelos e Distribuídos Comunicação entre processos.

23

Representação e Organização de dados

Duas propostas para formatos externo para representação de dados são discutidos aqui:– CORBA – que possui uma representação de dados

primitivos externos para troca de dados entre várias linguagens de programação

– Objetos JAVAs – que possui uma método para gerar sequencia de bytes em um formato comum externo para representar qualquer objeto simples ou conjunto de objetos que podem ser transmitido em uma mensagem

Page 24: 1 Sistemas Paralelos e Distribuídos Comunicação entre processos.

24

Representação e Organização de dados

Devido a complexidade que envolve o processo de Marshalling e Unmarshalling, esta tarefa é comumente desempenhada pelo middleware

Os tipos comuns de dados usandos em primitivas podem ser:– ASCII. Ex: Http– Estruturas específicas pré definidas. Ex: RMI e RPCs

Page 25: 1 Sistemas Paralelos e Distribuídos Comunicação entre processos.

25

Corba- Representação de dados Comuns

Corba CDR

Type Representation

sequence length (unsigned long) followed by elements in orderstring length (unsigned long) followed by characters in order (can also

can have wide characters)array array elements in order (no length specified because it is fixed)struct in the order of declaration of the componentsenumerated unsigned long (the values are specified by the order declared)union type tag followed by the selected member

Page 26: 1 Sistemas Paralelos e Distribuídos Comunicação entre processos.

26

Corba- Representação de dados Comuns

Corba – CDR:– Corba 2.0 1998a– Representa todos os tipos de dados– 15 tipos de primitivas– Ambos Big-endian e Little-endian

Page 27: 1 Sistemas Paralelos e Distribuídos Comunicação entre processos.

27

Corba- Representação de dados Comuns

Representação de {Smith,London, 1934}

The flattened form represents a Person struct with value: {‘Smith’, ‘London’, 1934}

0–34–78–1112–15

16–19

20-23

24–27

5

"Smit""h___"

6"Lond""on__"

1934

index in sequence of bytes 4 bytes

notes on representation

length of string

‘Smith’

length of string

‘London’

unsigned long

Page 28: 1 Sistemas Paralelos e Distribuídos Comunicação entre processos.

28

Corba- Representação de dados Comuns

Outros exemplos de representação externa de dados: Sun XDR (RFC 1832)

Marshalling em Corba:– É gerado automaticamente pela especificação Corba – CORBA IDL providencia uma notação para descrição dos argumentos e

tipos de retornos de métodos RMI– Ex:

Struct Person {– String name– String place– Long year– }

– Normalmente é gerado pelo compilador

Page 29: 1 Sistemas Paralelos e Distribuídos Comunicação entre processos.

29

JAVA

JAVA RMI– Dados e objetos podem ser passados como argumentos ou

resultados de uma chamada– Ex: public class Person implements Serialzable {

– Private String name– Private String place– Private int year– Public Person (string a Name, String aPlace, int aYear) {– Name = aName;– Place = aPlace;– Year = aYear.

Page 30: 1 Sistemas Paralelos e Distribuídos Comunicação entre processos.

30

JAVA

Java RMI– Os objetos e dados são serializados para serem transmitidos– Os objetos e dados são des-serializados na recepção– Junto com os dados serializados, é acompanhado o formato, a

estrutura e os tipos dos dados originais– Acompanha também os nomes e a versão das classes– As referencias a outras classes também são serializados– As demais chamadas as mesmas classes são substituidos por

handles– UTF (Unversal Transfer Format) - ASCII

Page 31: 1 Sistemas Paralelos e Distribuídos Comunicação entre processos.

31

JAVA

Forma serializada– Person p = new Person(“smith”, “London”, 1934);

The true serialized form contains additional type markers; h0 and h1 are handles

Serialized values

Person

3

1934

8-byte version number

int year

5 Smith

java.lang.Stringname:

6 London

h0

java.lang.Stringplace:

h1

Explanation

class name, version number

number, type and name of instance variables

values of instance variables

Page 32: 1 Sistemas Paralelos e Distribuídos Comunicação entre processos.

32

JAVA

Reflexão – habilidade de pesquisar sobre as propriedades de uma classe, como nomes e tipos das instâncias de dados e métodos

Facilita e simplifica o processo de marshalling

Page 33: 1 Sistemas Paralelos e Distribuídos Comunicação entre processos.

33

JAVA

Remote object references– É um identificador para um objeto remoto– Deve ser único para cada objeto dentro de um sistema

distribuído– O identificado é enviado junto com a msg– Objetos e identificadores deletados, não são

reutilizados

Page 34: 1 Sistemas Paralelos e Distribuídos Comunicação entre processos.

34

JAVA

Representação de Identificador– Combinação de IP, port, e incremento de um número a cada

criação de objeto

Internet address port number time object number interface of remote object

32 bits 32 bits 32 bits 32 bits

Page 35: 1 Sistemas Paralelos e Distribuídos Comunicação entre processos.

35

JAVA

Comunicação Requisição-Resposta

Request

ServerClient

doOperation

(wait)

(continuation)

Replymessage

getRequest

execute

method

messageselect object

sendReply

Page 36: 1 Sistemas Paralelos e Distribuídos Comunicação entre processos.

36

Comunicação Cliente Servidor

Comunicação sincronos -> cliente bloqueia qualquer operação enquanto espera a resposta

Usa operações básicas: Send e Receiver– Java API, baseados em datagramas UDP e TCP;– Vantagens de usar UDP:

A confirmação são redundantes, uma vez que sempre teremos resposta;

Não há necessidade de estabelecer conexão, exige dois pares extras de datagrmas

Controle de Fluxo também desnecessário

Page 37: 1 Sistemas Paralelos e Distribuídos Comunicação entre processos.

37

Comunicação Cliente Servidor

Protocolo: Solicitação resposta– Primitivas de comunicação:

doOperation – usado para chamar e executar um objeto. Argumentos são passados e o resultado é retornado

getRequest – é usado pelo servidor para chamar o objeto solicitado pelo cliente

sendReply – é usadopara enviar o resultado para o cliente

Page 38: 1 Sistemas Paralelos e Distribuídos Comunicação entre processos.

38

Comunicação Cliente Servidor

Operação do protocolo Solicitação Resposta:

– public byte[] doOperation (RemoteObjectRef o, int methodId, byte[] arguments)

sends a request message to the remote object and returns the reply. The arguments specify the remote object, the method to be invoked

and the arguments of that method.– public byte[] getRequest ();

acquires a client request via the server port.– public void sendReply (byte[] reply, InetAddress clientHost, int

clientPort); sends the reply message reply to the client at its Internet address

and port.

Page 39: 1 Sistemas Paralelos e Distribuídos Comunicação entre processos.

39

Comunicação Cliente Servidor

Estrutura da mensagem

messageType

requestId

objectReference

methodId

arguments

int (0=Request, 1= Reply)

int

RemoteObjectRef

int or Method

array of bytes

Page 40: 1 Sistemas Paralelos e Distribuídos Comunicação entre processos.

40

Comunicação Cliente Servidor

MessageType – indica se é solicitação ou Resposta

RequestID – Identificador da mensagem ObjectReference – Identificador do objeto MethodId – Identificador do método Argumentos – Argumentos a ser

passado/retornado

Page 41: 1 Sistemas Paralelos e Distribuídos Comunicação entre processos.

41

Comunicação Cliente Servidor

Modelos de Falhas para Protocolo Solicitação-Resposta– Falha por omissão– Msg não tem garantia de entrega ou de ordem das

msg

Page 42: 1 Sistemas Paralelos e Distribuídos Comunicação entre processos.

42

Comunicação Cliente Servidor

Usando UDP, força o sistema de comunicação resolver alguns problemas bem conhecidos:– TimeOuts– Duplicações de mensagens– Perda de msg

Page 43: 1 Sistemas Paralelos e Distribuídos Comunicação entre processos.

43

Comunicação Cliente Servidor

Histórico:– Quando uma resposta tem problemas de entrega, a

resposta é novamente re-enviada, mas não é gerada novamente pelo objeto remoto. Um histórico da resposta é mantida pelos objetos para este casos.

– A vantagem é que evitar gerar processamento desnecessário

– Desvantagem, o tamanho das caches de memória ocupados

Page 44: 1 Sistemas Paralelos e Distribuídos Comunicação entre processos.

44

Comunicação Cliente Servidor

Protocolos de troca de dados RPC (1982)– R, requisição sem resposta do servidor– RR, requisição e resposta– RRA, utiliza 3 mensagem: requisição, resposta e

confirmação

Name Messages sent byClient Server Client

R RequestRR Request Reply

RRA Request Reply Acknowledge reply

Page 45: 1 Sistemas Paralelos e Distribuídos Comunicação entre processos.

45

Comunicação Cliente Servidor

Implementação usando TCP– Dificuldades de se usar UDP

Tamanho do buffer ideal para transmissão e recepção

– Necessidade de um protocolo Multi-pacote (vários pacotes)

– Um conjunto de objetos pode ser serializado sem dor cabeça, numa transmissão confiável

Page 46: 1 Sistemas Paralelos e Distribuídos Comunicação entre processos.

46

Comunicação entre processos - HTTP

Exemplo de implementação de protocolo Requisição-Resposta

Estudo de casos: HTTP

O protocolo HTTP (HyperText Transfer Protocol) é usado pelo web browser cliente para fazer requisições para Servidores Web e receber informações de respostas.

Page 47: 1 Sistemas Paralelos e Distribuídos Comunicação entre processos.

47

Os servidores gerenciam dois tipos de recursos distintos:– Dados; – Programas.

Os dados, são por exemplo as páginas armazenadas no servidores que são enviados aos clientes após uma solicitação;

Os programas, são os CGIs ou scripts que podem ser executados para executar tarefas específicas.

Comunicação entre processos - HTTP

Page 48: 1 Sistemas Paralelos e Distribuídos Comunicação entre processos.

48

O HTTP é um protocolo que basicamente especifica regras de troca de mensagens entre o cliente e o servidor Web. Ele apresenta métodos específicos para controle dos recursos do servidor, tais como: GET, PUT, HEAD, POST, DELETE, etc.

Além disso, o protocolo define também um método para autenticação de acesso de usuário.

Comunicação entre processos - HTTP

Page 49: 1 Sistemas Paralelos e Distribuídos Comunicação entre processos.

49

Negociação de conteúdo– O cliente pode incluir informações na solicitação para informar ao

servidor o tipo de dados que está suportando. Isto permite ao servidor adequar melhor os dados para serem apresentados no lado cliente.

Autenticação– Desafios para acesso através logins e senhas são possíveis para o

servidor verificar o direito ao acesso de dados por parte do cliente.

Comunicação entre processos - HTTP

Page 50: 1 Sistemas Paralelos e Distribuídos Comunicação entre processos.

50

O protocolo HTTP original especifica que uma solicitação sempre fecha em seguida a comunicação após o servidor enviar a resposta. Na versão HTTP 1.1 é possível definir uma conexão persistente. Esta abordagem permite utilizar de forma mais eficiente a transmissão de vários documentos a um mesmo cliente. Esta conexão pode ser fechada a qualquer momento, por ambas as partes, servidor e o cliente.

Embora normalmente os dados sejam transmitidos em formato texto, o protocolo HTTP 1.1 permite a transferência de bytes contínuos, compactados ou não.

Comunicação entre processos - HTTP

Page 51: 1 Sistemas Paralelos e Distribuídos Comunicação entre processos.

51

Na verdade, o protocolo permite que qualquer tipo de dados possa ser transmitida usando o HTTP. O protocolo define o MIME – Multipurpose Internet Mail Extensions é o padrão utilizado para a definição dos tipos e subtipos de dados. E é utilizado pelo protocolo HTTP para informar os browsers da definição de tipo que estão recebendo.

Exemplos: text/plain, text/html, image/gif, etc

Comunicação entre processos - HTTP

Page 52: 1 Sistemas Paralelos e Distribuídos Comunicação entre processos.

52

Métodos do HTTP GET HEAD HEAD POST PUT DELETE OPTIONS TRACE

Comunicação entre processos - HTTP

Page 53: 1 Sistemas Paralelos e Distribuídos Comunicação entre processos.

53

Exemplo de GET:

Resposta do servidor:

Comunicação entre processos - HTTP

GET //www.dcs.qmw.ac.uk/index.html HTTP/ 1.1

URL or pathnamemethod HTTP version headers message body

HTTP/1.1 200 OK resource data

HTTP version status code reason headers message body