1 Sistemas Paralelos e Distribuídos Comunicação entre processos
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
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.
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.
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.
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
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
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.
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
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
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();}
} }
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();}
}}
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
14
TCP
Características de uso:– Compatibilidade de dados– Bloqueios– Threads
15
TCP
Modelo de Falhas– Não consegue distinguir entre uma falha de rede ou do processo
Uso:– HTTP– FTP– Telnet– SMTP
ServerSocket Socket
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());}} }}
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
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
19
Representação e Organização de dados
Os caracteres pode ser:– ASCII– Unicode
Inteiros:– Big-Endian (byte mais significativo vem primeiro)– Little-endian
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
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
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
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
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
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
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
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
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
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.
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
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
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
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
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
35
JAVA
Comunicação Requisição-Resposta
Request
ServerClient
doOperation
(wait)
(continuation)
Replymessage
getRequest
execute
method
messageselect object
sendReply
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
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
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.
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
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
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
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
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
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
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
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.
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
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
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
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
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
52
Métodos do HTTP GET HEAD HEAD POST PUT DELETE OPTIONS TRACE
Comunicação entre processos - HTTP
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