Escolar Documentos
Profissional Documentos
Cultura Documentos
br
SISTEMAS DISTRIBUÍDOS
COMUNICAÇÃO ENTRE
PROCESSOS
Autor: Dr. Sidartha Azevedo
Revisor: Lizandro de Souza
INICIAR
https://student.ulife.com.br/ContentPlayer/Index?lc=0WpWFVxyjm17dDTIKDK8ig%3d%3d&l=P6rtClUciA4aYZ7tXJvpXA%3d%3d&cd=cKEW73t0B5D… 1/32
11/6/22, 3:05 PM Ead.br
introdução
Introdução
Caro(a) aluno(a), nesta unidade você vai aprender o que são os
sockets
e como
eles são utilizados na comunicação entre processos. Você vai aprender algumas
primitivas dos soquetes (do inglês,
sockets
), como o send() e o receive().
Além disso, você vai ver exemplos práticos com o uso dos
sockets
, utilizando a
linguagem de programação Java. Ademais, para possibilitar a comunicação
correta entre os processos, é necessário entender os mecanismos de garantia
do sincronismo entre as máquinas, visto que elas se comunicam por uma rede
de dados.
Por fim, você vai entender o que é uma chamada remota de procedimento e
como esse conceito é importante nos sistemas distribuídos.
https://student.ulife.com.br/ContentPlayer/Index?lc=0WpWFVxyjm17dDTIKDK8ig%3d%3d&l=P6rtClUciA4aYZ7tXJvpXA%3d%3d&cd=cKEW73t0B5D… 2/32
11/6/22, 3:05 PM Ead.br
Sockets
https://student.ulife.com.br/ContentPlayer/Index?lc=0WpWFVxyjm17dDTIKDK8ig%3d%3d&l=P6rtClUciA4aYZ7tXJvpXA%3d%3d&cd=cKEW73t0B5D… 3/32
11/6/22, 3:05 PM Ead.br
O protocolo TCP/IP pode dividir o dado a ser enviado (se for muito grande) em
pequenos pacotes, que são enviados de forma individual e organizados no
destino para formar a mensagem original. O TCP/IP garante que todos esses
pequenos pacotes irão chegar ao receptor e então serão combinados na ordem
correta.
Diversos tipos de sistemas utilizam o TCP/IP, por exemplo: acesso aos sites na
Internet, uso do e-mail, acesso ao aplicativo do banco, transferência de arquivos,
dentre outros.
Imagine que queremos enviar uma mensagem que está dividida em cinco
pacotes. Essa divisão é necessária por restrições da rede, em que há um
tamanho máximo do pacote, e, se a mensagem ultrapassar esse limite, deve ser
quebrada em pedaços menores para obedecer ao critério. Usando o protocolo
UDP, os cinco pacotes são enviados de forma sequencial, sem a garantia de que
serão entregues ou se chegarão ao destino na ordem correta. Pode ocorrer de
haver um erro na rede ou que um determinado pacote utilize outro caminho
para chegar até o destino, podendo ser o primeiro a ser enviado, mas o último a
https://student.ulife.com.br/ContentPlayer/Index?lc=0WpWFVxyjm17dDTIKDK8ig%3d%3d&l=P6rtClUciA4aYZ7tXJvpXA%3d%3d&cd=cKEW73t0B5D… 4/32
11/6/22, 3:05 PM Ead.br
chegar no destino. Esse protocolo é ágil, pois não utiliza tempo com o reenvio de
pacotes ou espera da confirmação do destinatário dizendo que recebeu o
pacote (utilizado no TCP).
TCP UDP
Uso do reconhecimento do
recebimento dos pacotes, Não possui mecanismos de
informando ao servidor a cada reconhecimento de recebimento
pacote que é recebido com dos pacotes.
sucesso.
Quadro 2.1 - Comparativo entre TCP e UDP
https://student.ulife.com.br/ContentPlayer/Index?lc=0WpWFVxyjm17dDTIKDK8ig%3d%3d&l=P6rtClUciA4aYZ7tXJvpXA%3d%3d&cd=cKEW73t0B5D… 5/32
11/6/22, 3:05 PM Ead.br
esperar que o pacote com aquela imagem chegue, é mais prejudicial do que
descartar essa imagem/pacote faltante.
Definição e Primitivas
A interface
sockets
é utilizada para permitir a comunicação entre os sistemas
dentro da rede. Para realizar a comunicação, podemos implementar as
interfaces sockets em diversas linguagens, mas, para os nossos exemplos,
iremos utilizar a linguagem Java por motivos de facilidade de entendimento.
Primeiro, precisamos ter um servidor Java que irá responder as requisições dos
clientes. Após isso, vamos implementar o lado do cliente, que irá enviar
requisições ao servidor e aguardar a resposta.
Durante a comunicação, o
socket
é o ponto final da comunicação, por exemplo,
se um cliente deseja se comunicar com um servidor, o ponto inicial no cliente
será o
socket
do cliente e o ponto final do lado do servidor será o
socket
do
servidor. Cada
socket
possui endereço local e endereço global, sendo: o
endereço local é o número da porta que permite o tráfego de dados na camada
https://student.ulife.com.br/ContentPlayer/Index?lc=0WpWFVxyjm17dDTIKDK8ig%3d%3d&l=P6rtClUciA4aYZ7tXJvpXA%3d%3d&cd=cKEW73t0B5D… 6/32
11/6/22, 3:05 PM Ead.br
Para identificar uma conexão entre dois pontos, usamos a tupla <IP,PORTA>.
Imagine que um cliente de IP = 192.168.0.100 quer se comunicar com o servidor
de IP 10.5.6.88. O cliente precisa enviar uma mensagem ao sistema operacional
utilizando a API WinSock do Windows para ter acesso a uma porta do sistema
operacional: AbrirSocket(888), em que 888 é a porta local do socket. Para iniciar
a comunicação com o servidor, o cliente deve enviar uma requisição contendo o
IP e a porta do servidor: <10.5.6.88;566>, em que 566 é a porta no servidor. Para
receber a requisição, é necessário que o servidor esteja esperando uma
conexão, ou seja, esteja ouvindo a rede naquela porta especifica (a 566).
Bind
■
socket
:
socket
associado para ser registrado.
■
socket
:
socket
que ficará em modo passivo aguardando por conexões.
■ queue: tamanho máximo da fila de conexões que serão aceitas pelo
socket
.
https://student.ulife.com.br/ContentPlayer/Index?lc=0WpWFVxyjm17dDTIKDK8ig%3d%3d&l=P6rtClUciA4aYZ7tXJvpXA%3d%3d&cd=cKEW73t0B5D… 7/32
11/6/22, 3:05 PM Ead.br
Accept:
○Cria um novo
socket
a partir do estabelecimento de uma conexão para
iniciar a comunicação (leitura e escrita).
○ Lê o conteúdo do
buffer
associado ao
socket
.
○ Exemplo: read(
socket
, buffer, length)
Write:
○ Escreve dados em um
buffer
associado ao
socket
.
○ Exemplo: close(
socket
)
Chamada gethostbyname(endereço):
https://student.ulife.com.br/ContentPlayer/Index?lc=0WpWFVxyjm17dDTIKDK8ig%3d%3d&l=P6rtClUciA4aYZ7tXJvpXA%3d%3d&cd=cKEW73t0B5D… 8/32
11/6/22, 3:05 PM Ead.br
https://student.ulife.com.br/ContentPlayer/Index?lc=0WpWFVxyjm17dDTIKDK8ig%3d%3d&l=P6rtClUciA4aYZ7tXJvpXA%3d%3d&cd=cKEW73t0B5D… 9/32
11/6/22, 3:05 PM Ead.br
que está associada a outro processo que executa dentro do servidor reservado
para tratar aquela requisição.
praticar
Vamos Praticar
Os
sockets
possibilitam um canal de comunicação entre computadores, permitindo
que um processo associado a uma máquina localizada em uma rede possa se
comunicar com outro processo localizado em outra máquina em uma rede diferente.
a)
Indica ao sistema operacional para colocar o
socket
em modo de espera
(passivo) para aguardar conexões de clientes.
b)
Cria um novo
socket
a partir do estabelecimento de uma conexão para iniciar
a comunicação (leitura e escrita).
c)
Lê o conteúdo do
buffer
associado ao
socket
.
d)
Associa o número da porta a um
socket
.
e)
Escreve dados em um
buffer
associado ao
socket
.
https://student.ulife.com.br/ContentPlayer/Index?lc=0WpWFVxyjm17dDTIKDK8ig%3d%3d&l=P6rtClUciA4aYZ7tXJvpXA%3d%3d&cd=cKEW73t0B5… 10/32
11/6/22, 3:05 PM Ead.br
Sockets
import java.io.IOException;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket.
https://student.ulife.com.br/ContentPlayer/Index?lc=0WpWFVxyjm17dDTIKDK8ig%3d%3d&l=P6rtClUciA4aYZ7tXJvpXA%3d%3d&cd=cKEW73t0B5… 11/32
11/6/22, 3:05 PM Ead.br
saiba mais
Saiba mais
Algumas portas são reservadas, ou seja,
exclusivas para determinadas aplicações,
geralmente com números mais baixos, como
os valores entre 1 e 2000. Para não cometer
um erro, sempre use portas altas, como as do
exemplo a seguir. Se a porta estiver em uso,
você receberá uma mensagem de erro no
momento da execução do seu servidor. Além
disso, também é possível consultar as portas
em uso utilizando o prompt de comando do
Windows ou a shell do Linux (IANA, 2020).
ACESSAR
https://student.ulife.com.br/ContentPlayer/Index?lc=0WpWFVxyjm17dDTIKDK8ig%3d%3d&l=P6rtClUciA4aYZ7tXJvpXA%3d%3d&cd=cKEW73t0B5… 12/32
11/6/22, 3:05 PM Ead.br
saiba mais
Saiba mais
No Java, é possível utilizar a declaração var ao
invés de especificar o tipo da variável de forma
explícita, atribuindo o tipo correto durante a
execução do código. Essa técnica permite que
o programador não perca tempo com detalhes
técnicos e possa se concentrar no
desenvolvimento da lógica de negócios da
aplicação (OPENJDK, 2018,
on-line
).
ACESSAR
https://student.ulife.com.br/ContentPlayer/Index?lc=0WpWFVxyjm17dDTIKDK8ig%3d%3d&l=P6rtClUciA4aYZ7tXJvpXA%3d%3d&cd=cKEW73t0B5… 13/32
11/6/22, 3:05 PM Ead.br
Na função
main
do nosso servidor, definimos que o número máximo de clientes
aceitos de forma simultânea será de 100 clientes. Após isso, o servidor fica
executando de forma indefinida, esperando requisições dos clientes. Ao chegar
uma requisição, uma nova
thread
é criada e o trabalho que será feito é
redirecionado para outra
thread
. Esse procedimento permite que o servidor não
fique bloqueado enquanto não terminar de responder ao primeiro cliente.
praticar
Vamos Praticar
https://student.ulife.com.br/ContentPlayer/Index?lc=0WpWFVxyjm17dDTIKDK8ig%3d%3d&l=P6rtClUciA4aYZ7tXJvpXA%3d%3d&cd=cKEW73t0B5… 14/32
11/6/22, 3:05 PM Ead.br
a)
Utilize o modelo cliente-servidor.
b)
Use a API sockets para Windows.
c)
Use
threads masters
em cada requisição.
d)
Implemente um
loop
infinito para poder receber a requisição que vai chegar
do cliente.
e)
Use a arquitetura
peer-to-peer
para possibilitar o uso da API
sockets
.
https://student.ulife.com.br/ContentPlayer/Index?lc=0WpWFVxyjm17dDTIKDK8ig%3d%3d&l=P6rtClUciA4aYZ7tXJvpXA%3d%3d&cd=cKEW73t0B5… 15/32
11/6/22, 3:05 PM Ead.br
Sincronização e
Coordenação em Sistemas
Distribuídos
https://student.ulife.com.br/ContentPlayer/Index?lc=0WpWFVxyjm17dDTIKDK8ig%3d%3d&l=P6rtClUciA4aYZ7tXJvpXA%3d%3d&cd=cKEW73t0B5… 16/32
11/6/22, 3:05 PM Ead.br
https://student.ulife.com.br/ContentPlayer/Index?lc=0WpWFVxyjm17dDTIKDK8ig%3d%3d&l=P6rtClUciA4aYZ7tXJvpXA%3d%3d&cd=cKEW73t0B5… 17/32
11/6/22, 3:05 PM Ead.br
saiba mais
Saiba mais
O WWV é uma abreviação para National
Institute of Standards and Technology Time &
Frequency shortwave radio station. O WWV é
uma estação de rádio mantida pelo governo
dos Estados Unidos e localizada em Fort
Collins (Colorado, Estados Unidos) e informa o
tempo correto para o sincronismo de
máquinas (NIST, 2019,
on-line
).
ACESSAR
https://student.ulife.com.br/ContentPlayer/Index?lc=0WpWFVxyjm17dDTIKDK8ig%3d%3d&l=P6rtClUciA4aYZ7tXJvpXA%3d%3d&cd=cKEW73t0B5… 18/32
11/6/22, 3:05 PM Ead.br
reflita
Reflita
Já parou para pensar como o tempo é definido? Como a estação
de rádio WWV sabe o tempo exato e por que o tempo dado por
ela é considerado correto para a sincronização dos sistemas
distribuídos?
A seguir, você vai entender mais sobre alguns algoritmos que auxiliam na
garantia de sincronismos entre as máquinas nos sistemas distribuídos.
Definição e Exemplos
Algoritmo de Berkeley: na ausência de WWV, um
daemon
periodicamente
consulta as máquinas, faz a média dos tempos e sugere que a máquina adiante
ou atrase seus relógios. Não é essencial que esteja com a hora real exata, mas
que trabalhe com o mesmo tempo.
Sincronização em redes sem fio: esse tipo de estrutura sofre com grandes
atrasos na comunicação e alto consumo de energia, por conta da comunicação.
Nessa abordagem, não há nós sensores que são usados como servidores de
tempo, e o tempo real não é tão importante, mas a sincronização é essencial.
Além disso, a sincronização em
broadcast
por referência é feita através de nós
que enviam seus tempos em
broadcast
, calculam as distâncias entre os nós,
estimam o valor do tempo gasto na comunicação e atualizam o relógio.
Relógios lógicos: nesse tipo de abordagem, o tempo real não é crucial. São
criados relógios lógicos que garantem a ordem correta das execuções, embora
https://student.ulife.com.br/ContentPlayer/Index?lc=0WpWFVxyjm17dDTIKDK8ig%3d%3d&l=P6rtClUciA4aYZ7tXJvpXA%3d%3d&cd=cKEW73t0B5… 19/32
11/6/22, 3:05 PM Ead.br
não possuam a hora real. Uma das principais abordagens de relógios lógicos é a
proposta por Lamport.
praticar
Vamos Praticar
Os sistemas distribuídos se comunicam através da rede de dados e, muitas vezes, não
se conhecem. Para prover uma comunicação correta, é necessário que eles utilizem
protocolos bem definidos (geralmente públicos) e que possuam mecanismos de
sincronização de dados e de protocolos. Em relação à sincronização em sistemas
distribuídos, assinale a alternativa correta.
https://student.ulife.com.br/ContentPlayer/Index?lc=0WpWFVxyjm17dDTIKDK8ig%3d%3d&l=P6rtClUciA4aYZ7tXJvpXA%3d%3d&cd=cKEW73t0B5… 20/32
11/6/22, 3:05 PM Ead.br
a)
Os sistemas distribuídos devem utilizar sempre o tempo exato em relação
aos homens.
b)
Os sistemas distribuídos devem utilizar
sockets
para sincronizar os tempos.
c)
O tempo nos relógios dos sistemas distribuídos são definidos na fabricação
dos componentes.
d)
Os relógios dos sistemas distribuídos devem compartilhar o mesmo tempo.
e)
Deve-se utilizar um servidor WWV para roteador as mensagens pelos sockets.
https://student.ulife.com.br/ContentPlayer/Index?lc=0WpWFVxyjm17dDTIKDK8ig%3d%3d&l=P6rtClUciA4aYZ7tXJvpXA%3d%3d&cd=cKEW73t0B5… 21/32
11/6/22, 3:05 PM Ead.br
Chamada Remota de
Procedimento (RPC)
Definição e Exemplos
Antes de falarmos de invocação remota, vamos relembrar como acontece uma
invocação de método de forma local, em um programa qualquer. Na chamada
de procedimento convencional, há a passagem por valor ou referência da
variável. Veja um exemplo da invocação do método read(): read(fd, buf, nbytes),
onde fd é um inteiro que indica um arquivo, buf é o vetor onde os dados são
lidos e o nbytes informa quantos bytes devem ser lidos.
https://student.ulife.com.br/ContentPlayer/Index?lc=0WpWFVxyjm17dDTIKDK8ig%3d%3d&l=P6rtClUciA4aYZ7tXJvpXA%3d%3d&cd=cKEW73t0B5… 22/32
11/6/22, 3:05 PM Ead.br
https://student.ulife.com.br/ContentPlayer/Index?lc=0WpWFVxyjm17dDTIKDK8ig%3d%3d&l=P6rtClUciA4aYZ7tXJvpXA%3d%3d&cd=cKEW73t0B5… 23/32
11/6/22, 3:05 PM Ead.br
Arquitetura
A arquitetura de uma chamada remota de procedimento define como deve
ocorrer a comunicação e define os principais elementos que compõem essa
chamada. A figura a seguir ilustra uma arquitetura geral para a chamada remota
de procedimentos.
https://student.ulife.com.br/ContentPlayer/Index?lc=0WpWFVxyjm17dDTIKDK8ig%3d%3d&l=P6rtClUciA4aYZ7tXJvpXA%3d%3d&cd=cKEW73t0B5… 24/32
11/6/22, 3:05 PM Ead.br
https://student.ulife.com.br/ContentPlayer/Index?lc=0WpWFVxyjm17dDTIKDK8ig%3d%3d&l=P6rtClUciA4aYZ7tXJvpXA%3d%3d&cd=cKEW73t0B5… 25/32
11/6/22, 3:05 PM Ead.br
praticar
Vamos Praticar
A chamada remota de procedimentos é uma atividade comum no desenvolvimento e
uso de sistemas distribuídos. A chamada remota permite que processos locais
acessem funcionalidades ou dados em máquinas diferentes, geralmente usando uma
rede de dados, como a Internet.
a)
A chamada remota de procedimento sempre irá retornar a resposta que o
cliente deseja.
b)
A arquitetura de chamada remota de procedimentos sempre é baseada na
arquitetura cliente-servidor.
https://student.ulife.com.br/ContentPlayer/Index?lc=0WpWFVxyjm17dDTIKDK8ig%3d%3d&l=P6rtClUciA4aYZ7tXJvpXA%3d%3d&cd=cKEW73t0B5… 26/32
11/6/22, 3:05 PM Ead.br
c)
Não há distinção entre a arquitetura cliente-servidor e chamada remota de
procedimentos.
d)
A chamada remota de procedimento sempre irá retornar uma resposta.
e)
O envio da requisição remota deve usar o protocolo UDP.
https://student.ulife.com.br/ContentPlayer/Index?lc=0WpWFVxyjm17dDTIKDK8ig%3d%3d&l=P6rtClUciA4aYZ7tXJvpXA%3d%3d&cd=cKEW73t0B5… 27/32
11/6/22, 3:05 PM Ead.br
indicações
Material
Complementar
LIVRO
https://student.ulife.com.br/ContentPlayer/Index?lc=0WpWFVxyjm17dDTIKDK8ig%3d%3d&l=P6rtClUciA4aYZ7tXJvpXA%3d%3d&cd=cKEW73t0B5… 28/32
11/6/22, 3:05 PM Ead.br
FILME
TRAILER
https://student.ulife.com.br/ContentPlayer/Index?lc=0WpWFVxyjm17dDTIKDK8ig%3d%3d&l=P6rtClUciA4aYZ7tXJvpXA%3d%3d&cd=cKEW73t0B5… 29/32
11/6/22, 3:05 PM Ead.br
conclusão
Conclusão
Nesta unidade, você analisou os conceitos básicos sobre os
sockets
e aprendeu
que há duas primitivas principais: o send() e o receive(), usados para enviar e
receber dados, permitindo que processos distintos se comuniquem utilizando
uma rede de dados.
referências
Referências
Bibliográficas
https://student.ulife.com.br/ContentPlayer/Index?lc=0WpWFVxyjm17dDTIKDK8ig%3d%3d&l=P6rtClUciA4aYZ7tXJvpXA%3d%3d&cd=cKEW73t0B5… 30/32
11/6/22, 3:05 PM Ead.br
BLADE RUNNER (The Final Cut) (Legendado). 2017. 1 vídeo (117 min.). Disponível
em:
https://www.youtube.com/watch?v=pgqcLyZeA8U
. Acesso em: 22 jan. 2020.
IANA.
Service Name and Transport Protocol Port Number Registry
, 17 jan.
2020. Disponível em:
https://www.iana.org/assignments/service-names-port-
numbers/service-names-port-numbers.xhtml
. Acesso em: 21 jan. 2020.
MICROSOFT.
How RPC Works
, 30 maio 2018. Disponível em:
https://docs.microsoft.com/en-us/windows/win32/rpc/how-rpc-works
. Acesso
em: 21 jan. 2020.
NIST.
Radio Station WWV
, 15 nov. 2019. Disponível em:
https://www.nist.gov/pml/time-and-frequency-division/radio-stations/wwv
.
Acesso em: 21 jan. 2020.
OPENJDK.
Local variables
, 2018. Disponível em:
https://openjdk.java.net/projects/amber/LVTIFAQ.html
. Acesso em: 21 jan. 2020.
ORACLE.
Java: Class Socket
. Disponível em:
https://docs.oracle.com/javase/7/docs/api/java/net/Socket.html
. Acesso em: 21
jan. 2020.
TANENBAUM, A. S.
Sistemas distribuídos
: princípios e práticas [recurso
eletrônico, Biblioteca Virtual]. São Paulo: Pearson Prentice Hall, 2007.
https://student.ulife.com.br/ContentPlayer/Index?lc=0WpWFVxyjm17dDTIKDK8ig%3d%3d&l=P6rtClUciA4aYZ7tXJvpXA%3d%3d&cd=cKEW73t0B5… 31/32
11/6/22, 3:05 PM Ead.br
https://student.ulife.com.br/ContentPlayer/Index?lc=0WpWFVxyjm17dDTIKDK8ig%3d%3d&l=P6rtClUciA4aYZ7tXJvpXA%3d%3d&cd=cKEW73t0B5… 32/32