Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.
left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Prévia do material em texto

e-Book 1
Ariel da Silva Dias
SISTEMAS DISTRIBUÍDOS
Sumário
INTRODUÇÃO ������������������������������������������������� 3
SISTEMA DISTRIBUÍDO ��������������������������������� 5
CONSIDERAÇÕES FINAIS ����������������������������34
REFERÊNCIAS BIBLIOGRÁFICAS & 
CONSULTADAS ��������������������������������������������36
3
INTRODUÇÃO
O ritmo acelerado com que os sistemas computa-
cionais mudam, foi e continua sendo esmagador. 
Do ano de 1945, que marcou o início da era do 
computador moderno, até meados de 1985, os 
computadores eram muito caros e, como não era 
possível interconectá-los, eles somente trabalhavam 
de forma independente um do outro. 
Em meados da década de 80, dois avanços tecno-
lógicos mudaram as perspectivas da computação: 
o desenvolvimento de microprocessadores pode-
rosos. Afinal, essas máquinas até então eram de 
8 bits, porém logo os computadores de 16, 32 e 
64 bits tornaram-se comuns.
Fazendo um paralelo da era atual dos computa-
dores para uma visão de 40 anos atrás, a geração 
atual de computadores, com CPUs multicores têm 
o poder computacional dos mainframes daquela 
época, mas por um milésimo do preço (ou talvez, 
até menos).
Além do advento dos microprocessadores, outro 
marco foi a invenção da rede de computadores de 
alta velocidade, de modo a permitir que milhares de 
computadores sejam conectados e troquem infor-
mações a taxas de bilhões de bits por segundos.
4
Como resultado de todas estas tecnologias, bem 
como com o desenvolvimento de máquinas cada vez 
mais potentes, nanocomputadores, smartphones 
e outros dispositivos tecnológicos, é que agora é 
muito mais fácil e viável criarmos um sistema de 
computação composto por muitos computadores 
em rede, sejam eles grandes ou pequenos. Esses 
computadores são geralmente dispersos geografi-
camente, formando assim um sistema distribuído.
55
SISTEMA DISTRIBUÍDO
A literatura apresenta diversas definições do con-
ceito de sistemas distribuídos, porém todas elas 
possuem pontos em comum. Tanenbaum (2016), 
define brevemente um sistema distribuído como 
“uma coleção de elementos de computação au-
tônomos que aparecem para seus usuários como 
um único sistema coerente”.
Podemos então adicionar mais algumas palavras 
a esta definição de sistema distribuído, também 
chamado de computação distribuída, a qual ca-
racteriza-se por um sistema com vários com-
ponentes autônomos localizados em diferentes 
máquinas que se comunicam e coordenam ações 
para aparecer como um único sistema coerente 
para o usuário final.
Vamos analisar as duas frases que estão em 
destaque. A citação “um sistema com vários com-
ponentes autônomos” se refere a todos os tipos 
de nós que constituem um sistema distribuído. 
Esses nós são formados desde computadores de 
grande porte e de alto desempenho, até pequenos 
computadores, smartphones e outros dispositivos 
ainda menores.
Observe que cada um dos dispositivos (dos nós) 
possui a característica de agir de modo indepen-
66
dente um dos outros, porém, são programados 
para atingir objetivos comuns por meio de trocas 
de mensagens entre eles. Muito cuidado aqui, 
apesar de eles serem independentes um dos ou-
tros, eles estão trabalhando por um objetivo em 
comum. Se eles não trabalharem por um objetivo 
comum, então não devem fazer parte do mesmo 
sistema distribuído.
Outra característica importante e destacada por 
Tanenbaum é que, como são dispositivos inde-
pendentes, cada um possui sua própria noção de 
tempo, logo, não existe um relógio global que co-
ordena as ações dos nós e, com isso, temos uma 
das principais questões relacionadas a sistemas 
distribuídos: a sincronização e a coordenação dos 
nós dentro de um sistema.
A segunda citação da definição de sistema distribu-
ídos diz que um sistema distribuído se caracteriza 
e deve aparecer como um único sistema coerente 
para o usuário final. Esta citação implica que um 
sistema possua transparência de distribuição, 
ou seja, o usuário final não deveria perceber os 
processos que estão ocorrendo, bem como não 
ter ciência de que os dados estão distribuídos em 
uma rede de computadores.
Observe que a palavra deveria está destacada, isso 
por que, segundo Tanenbaum, pedir para que um 
77
sistema distribuído seja totalmente transparente, 
aparentando ser como um sistema único, torna-o 
coerente, pois se comporta de acordo com as 
expectativas do usuário.
Os sistemas distribuídos se enquadram na cate-
goria de sistemas fracamente acoplados, ou seja, 
uma grande quantidade de computadores está 
interconectada, comunicando, porém não são 
necessariamente dependentes uns dos outros.
Um sistema distribuído é então uma coleção de 
elementos de computação autônomos, ligados por 
algum meio de comunicação e que aparecem para 
seus usuários como um único sistema coerente. 
Esses componentes (os quais vimos que são 
chamados de nós) podem ser dispositivos de har-
dware (por exemplo, computador, telefone celular) 
ou processos de software. Um bom exemplo é a 
Internet - o maior sistema distribuído do mundo. 
Composto por milhões de máquinas, para você, 
parece um único sistema. Você não tem ideia de 
onde os dados estão armazenados, quantos ser-
vidores estão envolvidos ou como as informações 
chegam ao seu navegador. 
Esse conceito é chamado de abstração e reaparece 
continuamente em TI. Resumindo, é como se seu 
navegador abstraísse a complexidade da Internet. 
O mesmo se aplica a aplicativos como Gmail, 
88
Salesforce, Facebook, Google Fotos ou qualquer 
aplicativo empresarial que você possa usar. Você 
literalmente interage com aplicativos distribuídos 
todos os dias!
Os sistemas distribuídos visam a otimizar o desem-
penho e reduzir o tempo de resposta. Esta otimiza-
ção e redução de tempo só são possíveis graças 
ao uso de múltiplos processadores presentes em 
um sistema de computação distribuída. Com isso, 
temos maior desempenho de processamento se 
comparado aos sistemas centralizados que utilizam 
apenas um processador (independentemente do 
tipo de processador, afinal, vários processadores 
juntos trabalham melhor do que apenas um isolado).
Características
No tópico anterior você viu os conceitos de sistemas 
distribuídos e que eles estão em toda parte. Agora 
serão apresentadas as principais características 
que justificam o emprego de sistemas distribuídos.
Concorrência
A concorrência é uma das principais características 
dos sistemas distribuídos, e representa o fato de 
que várias atividades estão sendo executadas ao 
mesmo tempo.
A concorrência ocorre a partir do momento em 
que vários clientes tentam acessar, ao mesmo 
99
tempo, um determinado recurso compartilhado. 
Por exemplo, no Brasil temos a entrega de imposto 
de renda, cujo prazo final geralmente é no mês de 
abril. Ocorre que muitos brasileiros, por qualquer 
razão que seja, deixam para entregar as decla-
rações nos últimos dias. Logo, o recurso (portal 
que recebe as declarações), registra um grande 
volume de acessos simultâneos, ocorrendo então 
a concorrência pelo recurso.
Logo, a partir do momento que os usuários realizam 
diversas solicitações a um mesmo recurso em 
um mesmo instante de tempo, isso obriga que o 
sistema distribuído seja capaz de atender a estas 
requisições simultaneamente.
Considere, por exemplo, uma empresa XYZ todos 
os usuários utilizam uma aplicação web ao mesmo 
tempo. Logo, este aplicativo web também é concor-
rente. Sendo assim, a concorrência não é limitada 
somente ao servidor web que deve lidar com as 
requisições dos clientes (no caso da Receita Federal 
citada anteriormente). Acrescenta-se ainda que o 
aplicativo está executando a lógica do negócio ao 
mesmo tempo que realizar o armazenamento e 
transações em um banco de dados no back-end, 
característica então de concorrência.
1010
Podemos dizer então que a concorrência é uma 
característica fundamental, uma propriedade intrín-
seca de qualquer tipo de sistema distribuído. 
O controle de concorrência é um dos desafios encon-
trados na arquiteturade sistemas distribuídos. Deste 
modo, para que você conheça como é realizado o 
controle de concorrência, é recomendado que você 
leia o artigo “Um controle de concorrência distri-
buído para Dados XML”, em que o autor apresenta 
técnicas de controle de concorrência para gerenciar 
dados. Acesse: https://www.researchgate.net/profile/
Javam-Machado/publication/221535849_Um_Contro-
le_de_Concorrencia_Distribuido_para_Dados_XML/
links/56044f4708aea25fce312232/Um-Controle-de-Con-
correncia-Distribuido-para-Dados-XML.pdf.
Escalabilidade
A escalabilidade está diretamente relacionada 
ao crescimento da carga de trabalho crescente 
ou decrescente (temos que considerar também 
que a carga de trabalho tende a diminuir) de um 
sistema. Em outras palavras, quando o a carga de 
trabalho aumenta ou diminui, o sistema distribuído 
e as aplicações relacionadas devem permanecer 
do mesmo modo, sem degradações.
SAIBA MAIS
1111
Considere por exemplo, uma empresa que possui 
uma aplicação web que é acessada por 10 esta-
ções de trabalho. Em um dado momento, 10 novos 
usuários são contratados e passarão, cada um 
deles, a utilizar uma estação de trabalho e intera-
gir com a mesma aplicação web, logo, serão 20 
estações acessando o servidor (e o aplicativo) ao 
mesmo tempo. De acordo com Coulouris (2012), 
este sistema será considerado como escalável se 
continuar a ser eficaz para 20 estações assim como 
era anteriormente para as 10 estações, em outras 
palavras, quando houver um aumento significativo 
do número de recursos ou usuários, o sistema não 
pode ter degradações.
Podemos dividir a escalabilidade em duas estra-
tégias básicas:
 y Escalabilidade vertical: Novos recursos (pro-
cessadores mais rápidos, memória, entre outros) 
são adicionados a um único nó, deste modo, este 
nó pode lidar com mais trabalho e fornecer ainda 
mais capacidade. Esta estratégia acelera direta-
mente o sistema.
 y Escalabilidade horizontal: Nesta estratégia, 
novos nós são adicionados. Esta estratégia requer 
algum tipo de distribuição dentro do próprio siste-
ma distribuído. A vantagem é que, caso o sistema 
possa ser dimensionado horizontalmente, ele pode 
ser ampliado na unidade de centenas a milhares 
1212
de máquinas. Logo, é uma estratégia ideal para 
arquiteturas de grande escala. 
Ao considerar um servidor web, por exemplo, po-
demos utilizar ambas as estratégias. No exemplo 
da Receita Federal e entrega do imposto de renda, 
seguindo a estratégia de escalabilidade horizontal, 
poderíamos adicionar novos nós próximo ao mês 
de abril para atender à crescente de demanda e, 
após este mês, remover estes nós, afinal, o número 
de acessos tendem a diminuir.
Tolerância a falhas
De acordo com Dantas (2005, p.44) a tolerância a 
falhas “pode ser definida como a habilidade que 
um sistema tem de apresentar um comportamento 
muito bem definido na ocorrência de falhas ativas”.
Em outras palavras, podemos definir Tolerância 
a Falhas como a capacidade de um sistema de 
continuar operando sem interrupções, apesar da 
falha de um ou mais de seus componentes. Isso é 
verdade quer se trate de um sistema de computador, 
um cluster de nuvem, uma rede ou qualquer outra 
coisa. Em outras palavras, a tolerância a falhas 
refere-se a como um sistema se comporta aos 
impactos causados pelas falhas, impedindo, mini-
mizando ou reduzindo estes impactos negativos.
1313
A tolerância a falhas visa a garantir a continuidade 
dos negócios e a alta disponibilidade, evitando 
interrupções decorrentes de um único ponto de 
falha. As soluções de tolerância a falhas, portan-
to, tendem a se concentrar mais em sistemas ou 
aplicativos de missão crítica.
Podemos elencar alguns níveis de tolerância a 
falhas, como:
 y No nível mais baixo (hardware), a capacidade 
de responder a uma falha de energia, por exemplo;
 y Indo um nível acima, no software: durante uma 
falha de um sistema web, por exemplo, a capacida-
de de usar um sistema de backup imediatamente;
 y Indo um pouco mais além: um disco do ser-
vidor de arquivos falha e os discos espelhados 
assumem imediatamente o controle. Isso fornece 
funcionalidade apesar de a falha parcial do siste-
ma ou degradação normal, em vez de uma pane 
imediata e perda de função, mantendo assim a 
transparência ao usuário;
 y Tolerância a falhas em computação de alto 
nível: vários processadores colaboram para fazer 
a varredura de dados e saída para detectar erros 
e, em seguida, corrigi-los imediatamente.
A tolerância a falhas pode fazer parte da interface 
do sistema distribuído, permitindo aos desenvol-
1414
vedores verificarem os dados críticos em pontos 
específicos durante uma transação.
Transparência
A transparência já foi tratada aqui, mas vale muito 
reforçar esta importante característica dos siste-
mas distribuídos. Ela se refere a algum aspecto 
do sistema distribuído que está oculto do usuário, 
seja ele o programador ou usuário do aplicativo. 
Deste modo, os usuários não devem estar cientes 
da localização dos serviços.
De acordo com (Crowcroft, 1996) e (Friederich, 
2002) existem quatro principais tipos de transpa-
rências, são elas:
 y Transparência no acesso: garante que não 
haja nenhuma diferença aparente entre o método 
de acesso local ou remoto a um sistema. Por 
exemplo: enviar um arquivo remotamente para 
uma impressora que está em outro local (outro 
departamento ou até outra cidade) deve ser idên-
tico a enviar o arquivo localmente à impressora 
que está conectada ao computador.
 y Transparência de migração: garante que se 
os dados ou processos migrarem de um servidor 
para outro (para fornecer melhor desempenho, por 
exemplo), o usuário não deve perceber. Por exemplo, 
suas fotos no Google Fotos estão armazenadas 
em um servidor X. Se a Google migrar suas fotos 
1515
para o servidor Y, enquanto você as visualiza, você 
não deve perceber este processo.
 y Transparência de concorrência: garante que 
os usuários devem acessar recursos compartilha-
dos (dados, por exemplo) sem interferência entre 
si. O Google Docs possui esta característica, dois 
usuários podem ao mesmo tempo editar o mesmo 
arquivo, sem que um interfira na ação do outro (a 
não ser que seja proposital). Isso requer mecanis-
mos complexos de controle de concorrência. Por 
exemplo, um serviço de impressão distribuído deve 
fornecer acesso atômico aos usuários, de modo 
que as impressões não saiam aleatoriamente 
intercaladas.
 y Transparência de replicação: garante que, se 
o sistema necessitar ser replicado (seja por motivo 
de segurança, disponibilidade ou desempenho) o 
usuário não deve perceber.
Compartilhamento de recursos
Esta é a principal motivação dos sistemas distribu-
ídos. Entenda como recurso: o hardware (câmera, 
scanner, impressora, processador, disco rígido, entre 
outros), software (banco de dados, compiladores 
e outros), dados (arquivos, página web e outros) 
além de outros tantos que poderiam ser citados. 
Observe então que a lista de recursos que podem 
ser compartilhados é extensa.
1616
Existem diversos motivos para compartilharmos 
recursos e, uma das principais, está relacionada à 
economia. Por exemplo, uma empresa pode comprar 
um servidor e investir em armazenamento (disco 
rígido de alta capacidade), tornando-o o servidor de 
arquivo. Isso é muito mais barato do que armazenar 
dados localmente no computador de cada usuário 
separadamente (TANENBAUM, 2016).
Outro exemplo de compartilhamento de recursos 
é a própria internet. Através de protocolos de co-
municação simples, os usuários trocam arquivos, 
mensagens de e-mail, documentos, áudio e vídeo. 
Desse modo, grupos que estão dispersos podem 
ter acesso ao mesmo documento (você está lendo 
este ebook e certamente outros alunos também 
estão, afinal, este arquivo está compartilhado para 
um grupo de alunos).
Heterogeneidade
Os sistemas distribuídos possuem uma gama 
enorme de diferentes tipos de hardwares e softwa-
res trabalhando juntos, de maneira cooperativa. A 
figura 1 ilustra uma típica arquitetura da internet,na qual sistemas heterogêneos estão conectados.
1717
Figura 1: Arquitetura típica web com diversos tipos de 
redes e dispositivos.
Fonte: Adaptado de Coulouris (2012, p. 9).
Neste contexto, considere um arquivo que está 
armazenado em um servidor. Este arquivo é aces-
sado por um usuário em seu notebook que, via 
rede cabeada, está conectado ao servidor. Outro 
usuário, ao mesmo tempo, utilizando o smartphone, 
acessa via wi-fi o arquivo no servidor. Um terceiro 
usuário requisita o mesmo arquivo por meio de 
um serviço web de seu escritório e o envia para 
impressão em outra unidade da empresa, a qual 
está em outro país. 
Observe que temos diversos dispositivos se co-
municando em diversas redes. Observe também 
que são dispositivos diferentes: um notebook, um 
smartphone e também uma impressora, todos 
1818
eles conectados ao mesmo sistema distribuído 
por canais diferentes.
Arquiteturas dos sistemas distribuídos
O conceito de arquitetura é um modo de organizar-
mos e representarmos o conhecimento dentro de 
um determinado campo de aplicação. Normalmente, 
ele fornece um modelo comum que identifica os 
principais componentes do sistema e as interações 
entre eles.
A seguir você conhecerá as arquiteturas de siste-
mas distribuídos.
Modelo de arquitetura cliente-servidor
O modelo cliente-servidor ou a arquitetura cliente-
-servidor referem-se a um modelo de design que 
pode ser considerado como um aplicativo exe-
cutado em uma rede. Em termos muito básicos, 
considere o cliente como a entidade que realiza 
solicitações - e o servidor aquele que executa ou 
que, de alguma forma, atende a solicitação. Isso 
é considerado uma arquitetura cliente-servidor de 
duas camadas.
Em aplicações web é comum o uso de arquiteturas 
de três camadas, sendo elas apresentadas a seguir:
 y Camada de apresentação: A camada de 
apresentação é a camada frontal no sistema de 3 
1919
camadas, e é por ela que o usuário interage com 
o sistema (front-end ou front-side). Essa interface 
do usuário geralmente é gráfica, acessível através 
de um navegador da Web ou aplicativo baseado 
na Web e exibe conteúdo e informações úteis para 
o usuário final. Essa camada geralmente é criada 
em tecnologias da web como HTML5, JavaScript, 
CSS ou por meio de outras estruturas populares 
de desenvolvimento da web e se comunica com 
outras camadas por meio de chamadas de APIs.
 y Camada de aplicação: A camada de apli-
cação ou de negócio contém a lógica funcional 
de negócios, a qual impulsiona as capacidades 
essenciais de um aplicativo. É frequentemente 
escrito em Java, .NET, C#, Python, C ++, PHP, entre 
outros. Esta camada está no back-end, ou seja, é 
transparente para o usuário, uma vez que ele não 
interage diretamente com esta camada.
 y Camada de dados: Esta camada, também 
chamada de camada de persistência, compreende 
a base de dados ou sistema de armazenamento de 
dados e de acesso aos dados. Exemplos de tais 
sistemas são MySQL, Oracle, PostgreSQL, Micro-
soft SQL Server, MongoDB, entre outros. Os dados 
são acessados pela camada de aplicação através 
de chamadas de APIs. Esta camada também está 
no back-end.
2020
Os computadores clientes acessam três camadas 
diferentes de servidores: Servidores da Web, que 
lidam com a troca de informações baseada na Web; 
servidores de aplicativos, que processam dados de 
e para os computadores clientes e o servidor de 
banco de dados; e o servidor de banco de dados, 
que armazena e recebe dados. Os computadores 
da rede são programados para executar o trabalho 
com eficiência, dividindo as tarefas de processa-
mento entre clientes e servidores.
Ao se pensar em arquitetura de sistemas distribuí-
dos, a mais tradicional e empregada amplamente é 
a arquitetura cliente-servidor. Observe um exemplo 
de comunicação entre cliente-servidor na figura 2, 
em que o cliente realiza requisições (invocation) e 
o servidor retorna uma resposta (result).
Figura 2: Cliente realizando requisições. 
Client
Client
invocation
result Server
invocation
result
Server
Key:
Process: Computer:
Fonte: Adaptado de Coulouris (2012, p. 47).
Ao ver o termo cliente, você pode ficar tentado 
a pensar em pessoas ou usuários; por exemplo, 
2121
falamos de “clientes de nossa empresa”. No mo-
delo cliente-servidor, entretanto, o termo cliente 
não se refere a pessoas, mas a máquinas em rede 
que são pontos de entrada típicos para o sistema 
cliente-servidor usado por humanos. D e s s e 
modo, os clientes podem ser desktops em rede, 
uma estação de trabalho, um smartphone ou qual-
quer outra forma pela qual o usuário possa entrar 
no sistema. Além disso, pela própria figura, você 
pode observar que um servidor (server) está rea-
lizando requisições para um outro servidor. Logo, 
o servidor mais à direita, em um dado momento, 
passa a ser o cliente do servidor central.
Modelo de arquitetura peer-to-peer
Uma arquitetura de sistema distribuído peer-to-peer 
(ponto a ponto ou simplesmente P2P) não possui 
clientes ou servidores específicos. Uma rede P2P 
representa um sistema distribuído de máquinas cha-
madas nós, em que estes nós podem desempenhar 
a função de cliente e servidor simultaneamente ou 
em diferentes momentos. O modelo é inerente ao 
próprio nome - em uma rede P2P, cada máquina é 
um par (peer) igual em responsabilidades e ações, 
ao invés de ser um cliente ou servidor.
As redes P2P se tornaram populares após o 
lançamento de serviços de compartilhamento 
de arquivos como o site de compartilhamento 
2222
de música Napster. A ideia do P2P ganhou uma 
espécie de status de culto porque os sistemas 
podiam operar independentemente de qualquer 
controle centralizado. 
O BitTorrent é um dos protocolos mais amplamente 
usados para a transferência de grandes arquivos 
pela web por meio de torrents na arquitetura P2P. A 
ideia principal é facilitar a transferência de arquivos 
entre diferentes pontos da rede sem ter que passar 
por um servidor principal.
Usando um cliente BitTorrent, você se conecta a 
vários computadores em todo o mundo para bai-
xar um arquivo. Ao abrir um arquivo .torrent, você 
se conecta a um rastreador, que é uma máquina 
que atua como um coordenador. Isso ajuda na 
descoberta de pares, mostrando os nós da rede 
que possuem o arquivo que você deseja. A figura 
3 apresenta um modelo de arquitetura P2P.
2323
Figura 3: Arquitetura P2P do BitTorrent.
Sharable
objects
Peer 1
Peer 2
App
App
Peer 3
App
Peers 4 .... N
Fonte: Adaptado de Coulouris (2012, p. 47).
Observe pela figura 3 que não existe um nó centra-
lizador, o que torna a arquitetura P2P mais flexível, 
uma vez que novos nós podem ser adicionados ou 
removidos da arquitetura, sem impactos severos. 
Observe também que com P2P podemos utilizar um 
grande número de computadores para realizarem 
uma determinada tarefa. 
2424
Caching
Vamos a um exemplo bem simples. Você é o pro-
fessor de matemática em uma escola de ensino 
fundamental. Ao entrar na sala você solicita aos 
alunos que respondam uma pergunta: “Qual o 
resultado da multiplicação 777x777?”. Os alunos 
param por um tempo com o objetivo de calcular 
e encontrar a resposta. Após alguns minutos eles 
respondem (corretamente): 603729.
Após passarem algumas horas, no fim da aula, 
você realiza a mesma pergunta e os alunos, como 
já haviam calculado anteriormente, respondem 
corretamente sem demora. Esta resposta só foi 
rápida e certeira porque os alunos já haviam feito 
o cálculo antes. Este é o conceito de cache.
Logo, podemos afirmar que o cache é um compo-
nente que armazena dados para que solicitações 
futuras desses dados possam ser atendidas mais 
rapidamente. Isso fornece alto rendimento e acesso 
de baixa latência aos dados de aplicativos comu-
mente usados, armazenando os dados na memória.
Ao evitar, por exemplo, o acesso a dados de alta 
latência em um servidor de banco de dados externo, 
o armazenamento em cache pode melhorar drasti-
camente a capacidade de resposta do aplicativo.
Os caches são usados com muitafrequência. O 
navegador web, por exemplo, possui um cache das 
2525
páginas e conteúdos vistos recentemente. Logo, 
quando você pede para acessar um determinado 
site, antes de ser realizada a requisição no servidor 
externo, primeiramente o navegador verifica se 
o conteúdo está na memória cache, se estiver, a 
página é exibida, se não estiver em cache, o nave-
gador realiza a requisição ao servidor.
Comunicação em sistemas distribuídos
Neste tópico será apresentada a comunicação 
em um ambiente de sistemas distribuídos. A co-
municação é o processo de troca de dados entre 
dois ou mais processos independentes em um 
ambiente distribuído, o que podemos chamar de 
comunicação entre processos.
A comunicação entre os processos pode ser sín-
crona e assíncrona, vamos conhecê-las a seguir.
Comunicação síncrona
Na comunicação síncrona, os processos ouvem e 
agem de acordo com as respostas uns dos outros. 
Por exemplo, quando você entra em um chat para 
conversar com um atendente via web, o atendente 
lhe envia uma mensagem, em seguida você res-
ponde e vocês dois realizam esta comunicação 
até que uma das partes resolva encerrar.
Neste exemplo, observe que tanto você quanto o 
atendente estabelecem uma sessão de comunicação. 
2626
A conversa é bidirecional e ocorre sem restrições. 
Esta é a característica da comunicação síncrona.
Comunicação assíncrona
Na comunicação assíncrona, os processos não 
ouvem as mensagens da mesma maneira que 
na comunicação síncrona. Vamos retornar ao 
exemplo do atendimento. Imagine que ao invés 
de utilizar o chat, você resolveu entrar em contato 
por e-mail. Você, como cliente, envia a mensagem, 
mas não espera por receber instantaneamente a 
mensagem de resposta. Na realidade, quando o 
atendente receber, ele vai analisar o seu e-mail e 
decidir quando e como responder.
Observe então que na comunicação assíncrona 
temos um atraso entre o início da comunicação 
(você enviando o e-mail) e a resposta (momento 
em que o atendente irá enviar a resposta ao seu 
e-mail).
Resumidamente: na comunicação síncrona, as duas 
partes envolvidas (os dois processos) funcionam 
juntas em tempo real, enquanto na comunicação 
assíncrona as duas partes não funcionam juntas 
em tempo real.
Protocolos TCP/IP e UDP
TCP/IP (Transmission Control Protocol / Internet 
Protocol) é um conjunto de protocolos da camada 
2727
de transporte e da camada de rede, respectivamen-
te, para que as máquinas se comuniquem entre si 
pela rede.
O IP lida com endereçamento e roteamento de 
rede. Em uma rede IP, cada máquina recebe um 
endereço IP exclusivo (por exemplo, 192.168.0.1) 
e o software IP é responsável por rotear uma 
mensagem do IP de origem para o IP de destino. 
No IPv4, o endereço IP consiste em 4 bytes, cada 
um varia de 0 a 255, separados por pontos. O IPv6 
mais recente, suporta mais endereços. Como a 
memorização do número é difícil para a maioria 
das pessoas, um nome de domínio semelhante ao 
inglês, como www.nomedosite.com.br é usado em 
seu lugar. O DNS (Domain Name Service) converte 
o nome do domínio no endereço IP (por meio de 
tabelas de pesquisa distribuídas). 
Um endereço IP especial 127.0.0.1 sempre se refere 
à sua própria máquina (chamado de localhost) e 
pode ser usado para teste local de loopback.
O TCP (Transmission Control Protocol) é um pro-
tocolo da camada de transporte, responsável por 
estabelecer uma conexão entre duas máquinas. 
O TCP consiste em 2 protocolos: TCP e UDP (User 
Datagram Package). O TCP é confiável, cada pacote 
possui um número de sequência e é esperado uma 
resposta. Um pacote será retransmitido se não 
2828
for recebido pelo receptor. A entrega de pacotes é 
garantida no TCP. O UDP não garante a entrega de 
pacotes e, portanto, não é confiável. No entanto, o 
UDP possui menos sobrecarga de rede e pode ser 
usado para aplicativos como streaming de vídeo e 
áudio, em que a confiabilidade não é crítica.
O UDP é um protocolo de comunicação que faci-
lita a troca de mensagens entre dispositivos de 
computação em uma rede. É uma alternativa ao 
protocolo de controle de transmissão (TCP). Em 
uma rede que usa o protocolo da Internet (IP), às 
vezes é referido como UDP/IP.
O UDP divide as mensagens em pacotes, chamados 
datagramas, que podem ser encaminhados pelos 
dispositivos na rede para o processo/servidor de 
destino. Embora o UDP não numere ou remonte 
os datagramas, ele inclui números de porta no 
cabeçalho do datagrama que ajudam a distinguir 
diferentes solicitações do usuário e um recurso 
de soma de verificação opcional que pode ajudar 
a verificar a integridade dos dados transferidos.
O TCP surgiu como o protocolo dominante usado 
para a maior parte da conectividade da Internet 
devido à sua capacidade de quebrar grandes con-
juntos de dados em pacotes individuais, verificar e 
reenviar pacotes perdidos e remontar os pacotes na 
sequência correta. Mas esses serviços adicionais 
2929
têm um custo em termos de latência e sobrecarga 
de dados adicionais.
O TCP multiplexa aplicativos em uma máquina IP. 
Para cada máquina IP, o TCP suporta até 65536 
portas (ou soquetes), variando este número de 0 a 
65535. Um aplicativo, como por exemplo o HTTP, 
executa (ou escuta) em um número de porta es-
pecífico para solicitações de entrada. A porta 0 a 
1023 é pré-atribuída a protocolos populares, por 
exemplo, HTTP em 80, FTP em 21, Telnet em 23, 
SMTP em 25, NTPN em 119 e DNS em 53. A porta 
1024 e as demais superiores, estão disponíveis 
para os usuários.
Embora a porta TCP 80 seja pré-atribuída ao HTTP 
como padrão, isso não proíbe de executar um 
servidor HTTP em outro número de porta entre 
1024 e 65535, como 8000, 8080, inclusive estas 
portas são especialmente utilizadas para servidor 
de teste. Você também pode executar vários ser-
vidores HTTP na mesma máquina em diferentes 
números de porta.
Quando um cliente emite uma URL sem especificar 
explicitamente o número da porta, por exemplo http://
www.google.com.br, o navegador se conectará ao 
número da porta padrão 80 do host www.google.
com.br. Você precisa especificar explicitamente o 
número da porta na URL, por exemplo, http://www.
3030
google.com.br:8000 se o servidor estiver escutando 
na porta 8000 e não na porta 80 padrão.
Em contraste ao TCP, o UDP é considerado um 
protocolo sem conexão porque não exige que um 
circuito virtual seja estabelecido antes de ocorrer 
qualquer transferência de dados. O protocolo de 
comunicação apenas envia os pacotes, o que sig-
nifica que tem muito menos sobrecarga de largura 
de banda e latência. Com UDP, os pacotes podem 
seguir caminhos diferentes entre o remetente e o 
receptor e, como resultado, alguns pacotes podem 
ser perdidos ou recebidos fora de ordem.
Em resumo, para se comunicar por TCP/IP, é ne-
cessário saber o endereço IP ou nome do host e 
também o número da porta.
Em alguns casos, as mensagens transmitidas por 
HTTP podem falhar, conheça os motivos:
 y Erro do usuário
 y Mau funcionamento do navegador ou servidor 
da web
 y Erros na criação de páginas da web
 y Falhas temporárias na rede
Quando essas falhas ocorrem, o protocolo captura 
a causa da falha e reporta um código de erro de 
volta ao navegador. Os erros começam com um 
determinado número para indicar que tipo de erro é.
3131
Por outro lado, ao contrário do TCP, o UDP não 
garante que os pacotes chegarão aos destinos 
corretos. Isso significa que o UDP não se conecta 
diretamente ao computador receptor - o que o TCP 
faz. Em vez disso, ele envia os dados e depende 
dos dispositivos entre os computadores de envio 
e recebimento para obter corretamente os dados 
para onde deveriam ir.
O quadro 1 apresenta o comparativo entre TCP e 
UDP.
Tabela 1: Comparativo entre TCP e UDP
Características TCP Características UDP
Protocolo orientado à 
conexão Protocolo sem conexão
Protocolo mais utilizado na 
internet
Usado para streaming de 
vídeo, jogos e transmissões 
ao vivo
Garante que nenhum pacote 
esteja faltando e todos os 
dados enviadoscheguem ao 
destinatário
Permite a perda de pacotes
Envia os pacotes em ordem Os pacotes não são enviados em ordem
Mais lento e requer mais 
recursos
Mais rápido e precisa de me-
nos recursos
Adequado para aplica-
tivos que requerem alta 
confiabilidade
Adequado para aplicativos 
que precisam de transmissão 
rápida e eficiente
Fonte: Elaborado pelo autor
3232
Socket
Quando um processo necessita se conectar a uma 
rede local ou de área ampla, como a Internet, ele 
usa um componente de software denominado 
socket. O socket abre a conexão de rede para o 
programa, permitindo que os dados sejam lidos e 
gravados na rede TCP/IP. 
Os sockets são uma parte fundamental dos siste-
mas operacionais baseados em Unix e Windows. 
Eles tornam mais fácil para os desenvolvedores 
de software criar programas habilitados para rede. 
Em vez de construir conexões de rede do zero para 
cada programa que escrevem, os desenvolvedo-
res podem simplesmente incluir socket em seus 
programas. A vantagem é que seu servidor e seu 
cliente podem se comunicar sem a sobrecarga de 
uma solicitação HTTP. 
O processo baseado em socket é executado em 
dois computadores separados na rede TCP/IP, 
mas os sockets também podem ser usados para 
se comunicar localmente (interprocessos) em um 
único computador.
Os sockets permitem que os programas usem os 
comandos internos do sistema operacional para 
lidar com as funções de rede. Como são usados 
para vários protocolos de rede diferentes (ou seja, 
33
HTTP, FTP, entre outros), muitos soquetes podem 
ser abertos ao mesmo tempo.
Em uma comunicação, tudo o que for enviado por 
socket é recebido pela outra parte da conexão na 
mesma ordem em que foi transmitido. Logo, os 
sockets garantem a entrega do conteúdo. (HOP-
SON, 1997)
34
CONSIDERAÇÕES FINAIS
Aqui você pôde compreender que os sistemas distri-
buídos surgiram por acaso, de maneira involuntária 
graças ao avanço tecnológico em consequência 
da criação da internet e do desenvolvimento de 
processadores mais poderosos.
Você pôde conhecer as principais características 
de um sistema distribuído que são: a concorrência 
(vários clientes acessando o mesmo recurso ao 
mesmo tempo); a escalabilidade (a configuração 
dos recursos computacionais de acordo com o 
crescimento da carga de trabalho). Viu que a es-
calabilidade pode ser vertical (novos recursos são 
adicionados a um nó) e pode ser horizontal (novos 
nós são adicionados para cooperar entre eles).
Outras características vistas foram a tolerância 
a falhas (o sistema deve ter um comportamento 
que garanta a sua disponibilidade mesmo em 
caso de falhas, garantindo a continuidade dos 
negócios); transparência (os usuários não devem 
estar cientes da localização dos recursos), com 
relação aos tipos de transparência, temos a trans-
parência de acesso, transparência de migração, 
transparência de concorrência e transparência de 
replicação; característica de compartilhamento de 
recursos e, por fim, a última característica vista foi 
a heterogeneidade que está relacionada a enorme 
35
quantidade de diferentes tipos de hardwares e 
softwares trabalhando juntos na rede.
Depois vimos a arquitetura dos sistemas distribuídos 
que pode ser o tradicional modelo cliente-servidor, 
em que temos um centralizador (servidor) que 
recebe requisições do cliente e envia respostas; 
modelo de arquitetura peer-to-peer, em que não 
temos um centralizador e nem o conceito de 
cliente e servidor, assim todos os nós assumem 
o papel simultaneamente de cliente e servidor, se 
comunicando pela rede; depois vimos o caching 
que é um componente que armazena dados para 
solicitações futuras, de modo a agilizar a entrega 
de dados.
Por fim, vimos a comunicação entre processos que 
pode ser síncrona ou assíncrona. Na comunicação 
síncrona, as duas partes envolvidas (os dois pro-
cessos) funcionam juntas em tempo real, enquanto 
na comunicação assíncrona as duas partes não 
funcionam juntas em tempo real.
Referências Bibliográficas 
& Consultadas
ANENBAUM, A. S.; STEEN, M. V. Sistemas 
Distribuídos: Princípios e Paradigmas. 2. ed. 
São Paulo: Pearson, 2007. [Biblioteca Virtual]
COMER, D. E. Redes de Computadores e 
Internet. 6. ed. Porto Alegre: Bookman, 2016.
COULOURIS, G. Sistemas Distribuídos: 
Conceitos e Projeto. 5. ed. Porto Alegre: 
Bookman, 2013.
BENJAMIN, E. Concurrent programming for 
scalable web architectures. Open Access 
Repositorium der Universität Ulm. http://dx.doi.
org/10.18725/OPARU-2423. (2012)
BOND, M. E. Aprenda J2EE em 21 dias. São 
Paulo: Pearson, 2003. [Biblioteca Virtual]
COULOURIS, G.; DOLLIMORE, J.; KINDBERG, T. 
Distributed systems: concepts and design. 5. 
ed. England: Addison Wesley, 2012.
DANTAS, M. Computação distribuída de 
alto desempenho: redes, clusters e grids 
computacionais. Rio de Janeiro: Axcel Books, 
2005.
DEITEL, P.; DEITEL, H. Java: como programar. 
10. ed. São Paulo: Pearson, 2017. [Biblioteca 
Virtual]
ERL, T. SOA: Princípios do Design de Serviço. 
São Paulo: Pearson, 2009. [Biblioteca Virtual]
FRIEDRICH, L. Apostila de sistemas 
distribuídos: fundamentos. Florianópolis: UFSC, 
2002.
HOPSON, K. C.; INGRAM, E. Desenvolvendo 
applets com java. Rio de Janeiro: Campus, 
1997.
ROMAM, E.; AMBLER, S. W.; JEWELL, T. 
Dominando Enterprise Javabeans. 4. ed. 
Porto Alegre: Bookman, 2008.
ROY, Peter Van HARIDI, Seif. Concepts, 
Techniques, and Models of Computer 
Programming. The MIT Press (2004)
SILBERSCHATZ, A.; GALVIN, P. B.; GAGNE, G. 
Fundamentos de Sistemas Operacionais. 9. 
ed. Rio de Janeiro: LTC, 2015.
TANENBAUM, A.; STEEN, M. A brief introduction 
to distributed systems. Computing 98, 
967–1009 (2016). https://doi.org/10.1007/
s00607-016-0508-7
	Introdução
	Sistema Distribuído
	Considerações finais
	Referências Bibliográficas & Consultadas

Mais conteúdos dessa disciplina