Buscar

RESUMAO ARQUITETURA E SISTEMAS DISTRIBUIDOS

Prévia do material em texto

1.) INTRODUÇÃO AOS SISTEMAS DISTRIBUIDOS Pontos: 0,5 / 0,5 
Quanto aos modelos de sistemas distribuídos, encontramos os Sistemas de Computação em 
Grade , que caracterizam-se por: 
R) recursos de diferentes organizações são reunidos para permitir a colaboração de um grupo 
de pessoas sob a forma de uma organização virtual. 
 
 
 
 
2.) CONCEITOS BÁSICOS; SISTEMAS DISTRIBUÍDOS Pontos: 1,0 / 1,0 
Sobre o processamento paralelo e distribuído, assinale a afirmação correta 
R) A computação paralela é caracterizada pelo uso de vários processadores para executar 
uma computação de forma mais rápida, baseando-se no fato de que o processo de resolução 
de um problema pode ser dividido em tarefas menores, que podem ser realizadas 
simultaneamente através de algum tipo de coordenação. 
 
 
3.) CLASSIFICAÇÃO DE FLYNN Pontos: 0,5 / 0,5 
Assinale abaixo a frase que melhor explica o conceito da "Classificação de Flynn" 
R) Classifica os sistemas de acordo com a forma como acontecem os fluxos de dados e os 
fluxos de instrução 
 
 
 
 
4.) COMPONENTES Pontos: 0,0 / 1,0 
A denominação SMP refere-se tanto à arquitetura de hardware do computador quanto ao 
comportamento do sistema operacional que reflete esta arquitetura. Um SMP é um sistema de 
computador independente sobre o qual é INCORRETO afirmar que 
R) para resolver o problema de coerência de cache, utiliza um único cache para todos os 
processadores e adota a política de escrita direta onde as operações de escrita são 
usualmente efetuadas apenas sobre a cache, sendo a memória principal atualizada somente 
quando a linha correspondente é removida da cache. 
 
 
 
 
5.) MIDDLEWARE Pontos: 1,0 / 1,0 
O objetivo de uma camada de Middleware em um sistema multicamadas é: 
R) disponibilizar classes utilitárias e serviços independentes de plataforma que permitam a 
obtenção de computação distribuída em ambientes heterogêneos. 
 
 
6.) ARQUITETURA CLIENTE-SERVIDOR Pontos: 1,0 / 1,0 
Sobre a arquitetura cliente-servidor, analise as seguintes afirmativas: 
1. A maior capacidade de processamento encontra-se geralmente no lado cliente. 
2. No contexto da Internet, os navegadores Web são exemplos de programas servidores de 
páginas HTML. 
3. O protocolo HTTP é uma das formas de comunicação entre clientes e servidores. 
Assinale a alternativa correta: 
R) Apenas as afirmativas 1 e 2 são falsas. 
 
 
7.) SISTEMAS DISTRIBUIDOS Pontos: 0,5 / 0,5 
O tipo clustering de um sistema operacional distribuído no qual somente um dos seus nós 
esteja trabalhando, enquanto os outros entram como reserva, denomina-se cluster de 
R) alta disponibilidade. 
 
 
8.) CARACTERÍSTICAS DOS SISTEMAS DISTRIBUÍDOS Pontos: 0,0 / 1,0 
Sabendo que tolerância a falhas significa que um sistema pode prover seus serviços mesmo na 
presença de falhas, ou seja, o sistema pode tolerar falhas e continuar funcionando 
normalmente. Com base nessa definição assinale Verdadeiro ou Falso nas afirmações a 
seguir. 
R) V - As definições para falha, erro e defeito, respectivamente são: Falha: estão associadas 
ao universo físico, Erros : estão associadas ao universo da Informação e Defeitos: estão 
associadas ao universo do usuário 
F - A classificação de falhas em relação à sua persistência são: Física, de projeto e de 
interação 
V - A classificação de falhas em relação à sua persistência são: transiente, intermitente e 
permanente 
V - Podemos classificar redundância como: redundância da informação, redundância de tempo 
e redundância física. 
V - As definições para falha, erro e defeito, respectivamente são: Falha: estão associadas às 
falhas originadas pelo usuário, Erros: estão associadas aos erros do hardware e Defeitos: 
estão associadas ao universo da Informação 
 
 
 
 
9.) CARACTERÍSITICAS DOS SISTEMAS DISTRIBUÍDOS Pontos: 0,5 / 0,5 
Podemos definir sistema distribuído como uma coleção de computadores independentes que 
aparecem para os usuários do sistema como um único computador. De acordo com esta 
definição analise as afirmativas a seguir e assinale a alternativa INCORRETA. 
R) Concorrência: significa que recursos locais e remotos são acessados pelas mesmas 
operações 
 
 
 
 
10.) GRIG - COMPUTAÇÃO EM GRADE Pontos: 0,0 / 1,0 
Analise as seguintes afirmações sobre a computação em grade (grid): 
I. Toda colaboração é realizada sob a forma de uma organização virtual. 
II. A camada de conectividade deve compreender protocolos para a autenticação de usuários e 
recursos. 
III. Os sistemas computacionais envolvidos têm um alto grau de heterogeneidade. 
Assinale a opção correta. 
R) As afirmações I, II e III são verdadeiras. 
 
 
 
 
 
 
 
 A interface entre um programa aplicativo e os protocolos de comunicação em um sitema 
operacional é conhecida como Interface de Aplicativos, ou API. A API de sockets é um padrão 
de facto. 
A comunicação realizada a partir da utilização de sockets é um mecanismo de comunicação 
entre processos – Inter Process Comunication (IPC) – através da rede, que pode ser utilizado 
em processos na mesma máquina. 
Os protocolos de comunicação geralmente não especificam a API que as aplicações devem 
utilizar. Ao contrário disso, os protocolos especificam quais são as operações que devem ser 
fornecidas e permitem que cada sistema operacional defina a API específica wur uma 
aplicação deve usar para executar suas operações. 
A API de sockets originou-se como parte do sistema operacional BSD UNIX. Tanto neste 
quanto nos sistemas que dele derivam, as funções de sockets são parte do próprio sistema 
operacional. 
Para um programador, seu programa chama procedimentos de sockets, que são, então, 
providos por procedimentos do sistema operacional ou por rotinas de biblioteca. 
Desse modo, um aplicativo que usa sockets pode ser copiado para um novo computador 
compilado, carregado junto com a biblioteca de sockets do computador, e então, executado. 
Originalmente, os sockets foram desenvolvidos como parte do sistema operacional UNIX e 
utilizam diversos conceitos que são implementados em outras partes desse sistema. 
Um programa vê os sockets como um mecanismo de entrada e saída de dados, pois eles 
seguem o paradigma open-read-write-close, usado pela maioria das operações de entrada e 
saída. 
Sendo assim, um socket deve ser criado, usado e, só então, destruído. Por isso, quando uma 
aplicação se comunica através de uma rotina similar ao socket, forma um caminho para a 
aplicação transferir dados a um arquivo. Dessa forma, a compreensão dos sockets exige o 
entendimento das características de entrada e saída do UNIX. 
 Por exemplo, um aplicativo deve primeiro chamar open para preparar um arquivo para acesso. 
O aplicativo chama, então, read ou write para recuperar ou armazenar dados no arquivo. 
Finalmente, o aplicativo chama close para especificar que terminou de usar o arquivo. 
A comunicação através de sockets utiliza também a abordagem de descritor. Quando a 
aplicação solicitar ao sistema operacional para criar um socket, o aplicativo passará o descritor 
como um argumento para a chamada de procedimentos na transferência de dados através da 
rede. 
O sistema operacional fornece um único conjunto de descritores para arquivos, dispositivos, 
comunicação entre processos e comunicação de rede. Como resultado, procedimentos como 
read e write são bem gerais - uma aplicação pode usar o mesmo procedimento para enviar 
dados para outro programa ou um arquivo atravésde uma rede. 
Em terminologia corrente, o descritor representa um objeto e o procedimento write, o método 
aplicado aquele objeto. 
A programação por socket difere da entrada e saida convencional de dados porque um 
aplicativo deve especificar diversos detalhes para utilizar um socket. 
Por exemplo, um aplicativo deve escolher um protocolo de transporte em particular, fornecer o 
endereço de protocolo de uma máquina remota e especificar se o aplicativo é cliente ou 
servidor. 
Para acomodar todos os detalhes, cada socket tem diversos parâmetros e opções - um 
aplicativo pode fornecer valores para cada um deles. 
Para evitar que exista uma única função de socket com argumentos separados para cada 
opção, os desenvolvedores das APIs de sockets definiram diversas funções. Essencialmente, 
um aplicativo cria um socket e, então, invoca funções para especificar, em detalhes, como ele 
será usado 
A vantagem da abordagem de sockets respalda-se no fato de que a maioria das funções tem 
três ou menos argumentos. 
A desvantagem, por sua vez, indica que um programador deve lembrar-se de chamar múltiplas 
funções sockets. 
Conheça, agora, os procedimentos que implementam a API de sockets: 
 
Procedimento Socket: cria um socket e retorna um descritor inteiro. Conheça o procedimento 
socket: 
sockfd = socket (protofamily, type, protocol); 
 
Procedimento bind: Uma vez que tenha um socket, você deve associá-lo a uma porta em sua 
máquina. Um servidor usa o procedimento bind para prover um número de porta de protocolo 
em que o servidor esperará por contato. 
bind (sockfd, localaddr, addrlen); 
 
Procedimento connect: os clientes usam o procedimento connect para estabelecer uma 
conexão com um servidor específico: connect (sockfd, saddress, saddresslen); 
 
Procedimento Listen: Depois de especificar uma porta de protocolo, o servdor deve instruir o 
sitema operacional para colocar um socket em modo passivo, para que este possa ser usado 
para esperar pelo contato de clientes: listen(sockfd, backlog); 
 
Procedimento Accept: Os servidores iniciam-se chamando socket (criar) e bind (especificar 
número de porta). Após executar as duas chamadas, o servidor que usa um protolo de 
transporte sem conexão está pronto para aceitar mensagens. No caso de o servidor utilizar um 
protocolo de transporte orientado a conexão, é necessário chamar o procedimento listen para 
colocar o socket em modo passivo, para só então aceitar uma conexão. 
Accept (sockfd, caddress, caddresslen); 
 
Procedimentos send, sendto e sendmsg: Os cliente e servidores precisam enviar 
informações. Geralmente, um cliente envía uma requisição e um servidor envia uma resposta. 
Se o socket está conectado, o procedimento send pode ser usado para transferir dados: send 
(sockfd, data, length, flags); 
O procedimento sendto e sendmsg permite que o cliente ou servidor envie uma mensagem 
usando um socket não conectado, mas ambos exigem que um destino especificado. O sendto 
possui o endereço de destino como argumento. 
sendto (sockfd, data, length, flags, destaddress, addresslen); 
sendmsg (sockfd, msgstruct, flags) 
 
Procedimento recv, recvfrom e recvmsg: O cliente e o servidor precisam receber dados 
enviados pelo outro. Para tal, a API de sockets fornece vários procedimentos que podem ser 
usados. Por exemplo, um aplicativo pode chamar recv para receber dados de um socket 
conectado. 
recv (sockfd, buffer, length, flags) 
recvfrom (sockfd, buffer, length, flags, sndraddr, sddrlen) 
recvmsg (sockfd, msgstruct, flags) 
 
Procedimento close: informa ao sistema para finalizar o uso do socket: 
close (sockfd); 
 
Comunicação UDP: socket, bind, recvfrom, sendto, close. 
Comunicação TCP: socket, bind, listen, accept, recv, send, close. 
 
Chamada de Procedimento Remoto (RPC): Além das tarefas habituais, o programador que 
constrói qualquer aplicação cliente-servidor deve, também, lidar com os detalhes complexos de 
comunicação. 
Mesmo que muitas das funções necessárias sejam fornecidas por uma API padrão (como a 
interface de socket, por exemplo), é necessário que sejam especificados os nomes, os 
endereços, os protocolos e as portas, entre outros detalhes. 
O ponto positivo é que muitos sistemas cliente-servidor seguem uma mesma lógica de 
arquitetura básica e usam a API de sockets para comunicação. 
 As similaridades entre as aplicações permitiram que um conjunto de ferramentas de software 
fosse criado para gerar, automaticamente, o código para muitas das tarefas de comunicação, 
deixando o programador livre para se concentrar em partes da programação que não podem 
ser automatizadas. 
 
Paradigma de chamada remota de procedimento – Remote Procedure Call (RPC) 
Muitos sistemas distribuídos são baseados em troca explícita de mensagens entre processos. 
Contudo, os procedimentos send e receive não escondem absolutamente nada da 
comunicação, o que é importante para obter transparência de acesso em sistemas distribuídos. 
Esse problema é conhecido há muito tempo, mas pouco tinha sido feito para resolvê-lo, até que 
um artigo de autoria de Birrell e Nelson (1984) propôs um modo completamente diferente de 
manipular a comunicação. A proposta foi permitir que programas fossem capazes de chamar 
procedimentos localizados em outras CPUs. 
Quando um processo em uma máquina chama um procedimento em uma máquina remota, o 
processo chamador (cliente) é suspenso, e a execução do procedimento chamado (servidor) 
ocorre na máquina remota. 
 A informação pode ser transportada, nos parâmetros, do cliente para o servidor e pode voltar 
no resultado do procedimento. Nenhuma troca de mensagem ou entrada e saída é visível ao 
programador e tem servido de base a muitos softwares para multicomputadores. 
Em sua forma mais simples, para chamar um procedimento remoto, o programa cliente deve 
ser ligado a um pequeno procedimento de biblioteca chamado de stub do cliente, que 
representa o procedimento servidor no espaço de endereçamento do cliente. Da mesma 
maneira, o servidor é ligado a um procedimento denominado stub do servidor. 
Esses procedimentos escondem o fato de uma chamada de procedimento do cliente para o 
servidor não ser local. 
 
São componentes da RPC: 
CLIENTE: Faz a chamada com o sistema remoto 
STUB DO CLIENTE: Faz a interface com o runtime system (esconde chamadas de baixo nível 
da aplicação) 
RPC RUNTIME: Comunicação entre dois computadores, que esconde os detalhes da 
comunicação de rede, retransmissões e comunicações, etc. 
SERVIDOR: Faz o atendimento a requisição 
STUB DO SERVIDOR: Faz o mesmo que o stub do cliente. 
 
Tratamento de falhas com RPC: 
O cliente não é capaz de localizar o servidor: isso ocorre devido a uma falha de hardware e 
em função de o servidor não estar efetivamente disponível. O tratamento específico desse erro 
elimina a transparência; 
Perda de mensagem solicitando serviço: nesse caso, devemos usar um contador de tempo; 
se o tempo expirar e a resposta não chegar, retransmita a mensagem 
Perda de mensagem com resposta: o que torna a mensagem idempotente 
Quedas do servidor: definir semântica - mínimo uma vez que garante que a chamada remota 
ao procedimento será executada no mínimo uma vez ou no máximo uma vez que garante que 
a chamada remota foi executada no máximo uma única vez. 
Queda do cliente: trata-se da situação em que o cliente manda uma requisição e, antes de 
receber a resposta, sai do ar. Essa situação causa dois problemas: a geração de processos 
órfãos (zombie) e o tempo de CPU gasto desnecessariamente pelo servidor. 
 
Em relação à RPC, a localização física e a arquitetura do servidor são TRANSPARENTES. 
 
1.Em relação à comunicação utilizando RPC, podemos afirmar que: 
Assinale a opção CORRETA. 
I – A troca de informações é realizada através de parâmetros da chamada. 
III – Clientes chamam procedimentos remotos como se fossem locais. 
IV – A localização física e a arquitetura do servidor são transparentes. 
2. De acordo com a nossa aula, quando tratamos da comunicação utilizando sockets, qual é o 
procedimento que associa uma porta ao socket? 
Assinale a opção CORRETA 
4) Bind 
 
3. Em relação à comunicação por sockets o procedimento close possui a seguinte função: 
2) Encerra o socket ou a conexão 
 
O modelo de comunicação Peer-to-Peer (P2P) é implementado em uma rede de computadores 
cuja comunicação não está baseada em servidores dedicados – como no modelo cliente-
servidor –, e sim na comunicação direta entre cada nó da rede (peers). 
Cada computador conectado tem a capacidade de atuar como servidor – realizando tarefas 
para outros usuários da rede – ou como cliente – requisitando a realização dessas tarefas. 
 Na comunicação P2P, indivíduos que constituem um grupo livre podem comunicar-se com 
outros participantes do grupo. Em princípio, toda pessoa pode se comunicar com uma ou mais 
pessoas – não existe qualquer divisão estrita entre clientes e servidores. 
 Diversos sistemas P2P – como o BitTorrent (COHEN, 2003) – não possuem qualquer 
informação centralizada. Ao contrário, esses sistemas mantêm suas informações locais e 
compartilham uma lista dos peers vizinhos que os compõem. 
 Quando uma nova consulta é realizada a um membro do sistema, é possível retornar com os 
nomes de seus outros membros, para que a busca por mais conteúdo e mais nomes seja 
possível. Esse processo de pesquisa pode ser repetido indefinidamente, até que se crie um 
grande banco de dados. 
Normalmente, a comunicação P2P é usada para compartilhar diferentes tipos de arquivos. 
Essa comunicação alcançou o auge por volta do ano 2000, com a criação do Napster por 
Shawn Fanning para o compartilhamento de músicas entre amigos da faculdade. 
Esse serviço foi encerrado depois daquilo que, provavelmente, foi a maior exposição sobre a 
violação de direitos autorais em toda a história da tecnologia. 
 
 
REDES P2P: Há uma grande dificuldade em montar uma rede de entrega de conteúdo – 
Content Delivery Networks (CDN) – de 1000 nós no mundo inteiro para distribui-lo. 
 
Na verdade, não é difícil alugar 1000 máquinas virtuais no mundo inteiro, devido à indústria de 
hospedagem bem desenvolvida e altamente competitiva. Entretanto, conseguir os nós é só o 
início da montagem de uma CDN. 
 
Mas, felizmente, existe uma alternativa para o restante de nós, que é simples de usar e pode 
distribuir uma quantidade tremenda de conteúdo com uma rede P2P. 
 
A tecnologia P2P pode ser usada de diversas maneiras. Com seu desenvolvimento e grande 
interesse por parte dos usuários, o tráfego P2P tornou-se, rapidamente, responsável por uma 
grande fração de todo o tráfego na internet. 
Comunicação P2P: As redes P2P são autoescaláveis, e sua capacidade de upload útil cresce 
em conjunto com as demandas de download que podem ser feitas por seus usuários. Em certo 
sentido, essas redes sempre são grandes o suficiente, sem a necessidade de alguma 
infraestrutura dedicada. Ao contrário disso, a capacidade até mesmo de um site Web grande é 
fixa e será ora muito grande ora muito pequena. 
Considere, por exemplo, um site com apenas 100 clusters, cada um capaz de trabalhar a 10 
Gbps. Essa capacidade enorme não ajuda quando existe um pequeno número de usuários. O 
site não pode receber informações de N usuários em uma taxa mais rápida que N Mbps, pois o 
limite está nos usuários, e NÃO no site. 
 
Quando existe mais de 1.000.000 de usuários a 1 Mbps, o site Web não pode bombear dados 
com rapidez suficiente para manter todos ocupados fazendo download. Esse pode parecer um 
número considerável de usuários, mas grandes redes BitTorrent (como, por exemplo, o Pirate 
Bay) afirmam ter mais de 10 milhões de usuários. De acordo com essa abordagem, isso 
significa algo em torno de 10 terabits/s. 
Bittorrent: O protocolo BitTorrent foi desenvolvido por Brahm Cohen, em 2001, para permitir 
que um conjunto de peers compartilhasse arquivos rápida e facilmente. Existem dezenas de 
clientes disponíveis gratuitamente que entendem esse protocolo. 
 Em um sistema P2P típico, como o BitTorrent, cada um dos usuários tem a mesma 
informação, que pode ser de interesse de outros usuários. Essa informação pode ser um 
software gratuito, uma música, vídeos, fotografias etc. 
 Existem três problemas que precisam ser resolvidos para compartilhar o conteúdo nesse 
ambiente. Veja, a seguir, cada um deles. 
O surgimento dos sistemas P2P: O surgimento das redes de compartilhamento de arquivos 
P2P motivou a comunidade de pesquisa. A essência dos sistemas P2P está no fato de que 
evitam as estruturas gerenciadas, de forma central, das CDNs e de outros sistemas. Essa pode 
ser uma vantagem significativa. 
 Quando o sistema fica muito grande, os componentes gerenciados de forma central tornam-se 
um gargalo e correspondem a um ponto de falha isolado. Contudo, os primeiros sistemas P2P 
eram apenas parcialmente descentralizados – se fossem totalmente descentralizados, seriam 
ineficazes. 
Distributed Hash Tables (DHTs): Criar um índice de posse de cada um é simples, mas é 
centralizado. Fazer com que cada par mantenha seu próprio índice também não soluciona o 
problema. Entretanto, exige bastante trabalho para manter atualizados os índices de todos os 
peers – pois o conteúdo é movimentado pelo sistema –, o que não compensa o esforço. 
 A principal questão a ser respondida pela comunidade de pesquisa foi: seria possível criar 
índices P2P que fossem totalmente distribuídos, mas que possibilitassem um bom 
desempenho? 
O bom desempenho pode ser interpretado da seguinte forma: Cada nó mantém apenas uma 
pequena quantidade de informação sobre outros nós, o que significa que não será caro manter 
o índice atualizado. 
 Cada nó pode pesquisar, rapidamente, entradas no índice. Caso contrário, esse não será um 
índice muito útil. 
 Cada nó pode usar o índice ao mesmo tempo, ainda que outros nós apareçam e 
desapareçam. Essa propriedade indica que o desempenho do índice aumenta com o número 
de nós. 
 
A resposta para essa pergunta foi SIM. Para tal, foram desenvolvidas, em 2001, quatro 
soluções. São elas: 
Chord (STOICA et al., 2001); 
Can (RATNASAMY et al., 2001); 
Pastry (ROWSTRON; DRUSCHEL, 2001); 
Tapestry (ZHAO et al., 2004). 
 Essas soluções são conhecidas como Distributed Hash Tables (DHTs), pois a funcionalidade 
básica de um índice é mapear uma chave a um valor. Isso representa uma tabela de hash, e, 
naturalmente, as soluções são versões distribuídas. 
 
As DHTs realizam seu trabalho impondo uma estrutura regular sobre a comunicação entre os 
nós. Esse comportamento é muito diferente daquele das redes P2P tradicionais, que usam 
quaisquer conexões que os peers façam. 
 
Por esse motivo, as DHTs são chamadas de redes P2P estruturadas. Os protocolos P2P 
tradicionais montam redes P2P desestruturadas (ou não estruturadas). 
 
Como exemplo, utilizaremos a solução DHT Chord. Vamos conhecê-la? 
Pensando em um cenário, considere como substituir o tracker centralizado tradicionalmente – 
usado no BitTorrent – por um tracker totalmente distribuído. A solução DHT Chord pode ser 
usada para resolver esse problema. 
Nesse cenário, o índice geral é uma listagem de todos os swarms aos quais o computador 
pode-se juntar para baixar conteúdo. A chave usada para pesquisar o índice é a descrição do 
conteúdo pela torrent. Ela identificaum swarm exclusivamente, do qual o conteúdo pode ser 
baixado como os hashes de todos os chunks de conteúdo. 
O valor armazenado no índice para cada chave é a lista de peers que compreendem o swarm. 
Esses peers são os computadores que entram em contato para baixar o conteúdo. Uma 
pessoa que espera baixar conteúdo (como um filme, por exemplo) tem apenas a descrição da 
torrent. 
A pergunta que a DHT precisa responder é: como, sem um banco de dados central, uma 
pessoa descobre de quais peers (entre os milhões de nós BitTorrent) ela deve copiar o 
conteúdo? 
Uma DHT Chord consiste em N nós participantes. Eles são nós que executam BitTorrent em 
nosso cenário. Cada nó tem um endereço IP pelo qual pode ser comunicado. 
O índice geral está espalhado pelos nós. Isso significa que cada um armazena bits e pedaços 
do índice para uso por outros. A parte central da Chord navega pelo índice usando 
identificadores em um espaço virtual, e não os endereços IP dos nós ou os nomes de 
conteúdo. 
 
Para transformar um endereço de nó em um identificador, ele é mapeado para um número de 
M bits, usando uma função de hash. Sendo assim, podemos usá-lo para converter qualquer 
endereço IP em um número de 160 bits – chamado de identificador de nó. 
 
Solução DHT Chord - Chave 
Uma chave também é produzida pela execução do hashing de um nome de conteúdo com 
hash para gerar um número de 160 bits (nome = torrent). Sendo assim, para converter o 
arquivo de descrição de torrent para sua chave, calculamos: chave = hash(torrent). 
Para iniciar um novo swarm, um nó precisa inserir um novo par chave-valor, que consiste no 
índice (torrent, meu-endereço-IP). Para conseguir isso, o nó pede ao sucessor – hash(torrent) – 
para armazenar meu-endereço-IP. Desse modo, o índice é distribuído pelos nós 
aleatoriamente. 
Com a DHT construída, quando outro nó desejar encontrar uma torrent de modo a se juntar ao 
swarm e baixar o conteúdo, um nó pesquisará a torrent primeiro, calculando seu hash para 
obter a chave. Depois, esse nó usará o sucessor(chave) para encontrar o endereço IP do nó 
que armazena o valor correspondente. 
 
Solução DHT Chord IP: Para possibilitar a localização do endereço IP do nó correspondente a 
certa chave, cada nó precisa manter determinadas estruturas de dados administrativas. Uma 
delas é o endereço IP de seu nó sucessor junto ao anel identificador de nó. Por exemplo, na 
apresentada anteriormente, o sucessor do nó 4 é 7, e o sucessor do nó 7 é 12. 
Agora, a pesquisa pode prosseguir da seguinte forma: 
 
O nó solicitante envia um pacote a seu sucessor, contendo seu endereço IP e a chave que está 
procurando. O pacote é propagado pelo anel até que localize o sucessor do identificador de nó 
procurado. Esse nó verifica se possui qualquer informação que combine com a chave; caso 
haja, ele retorna a informação diretamente ao nó solicitante, cujo endereço IP possui. 
 Entretanto, a busca linear de todos os nós é ineficaz com um grande sistema P2P, pois o 
número médio de nós exigido por consulta é N/2. Para agilizar a busca, cada nó também 
mantém o que a Chord chama de tabela de fingers, que contém M entradas, indexadas de 0 
até M - l, cada uma apontando para um nó real diferente. 
Visto que os nós entram e saem o tempo todo, o DHT Chord precisa de uma forma de lidar 
com essas operações. Assumimos que, quando o sistema iniciou sua operação, ele era 
pequeno o suficiente para que os nós pudessem apenas trocar informações diretamente para 
criar o primeiro anel e tabelas de fingers. 
 Depois disso, um procedimento automatizado é necessário. 
Quando um novo nó (r) deseja-se conectar, ele precisa entrar em contato com um nó existente 
e pedir que este pesquise o endereço IP do sucessor(r) para ele. Em seguida, o novo nó pede 
o predecessor do sucessor(r). Por fim, o novo nó pede a ambos para inserir r entre eles e o 
anel. 
Contudo, muitas tabelas de fingers podem estar erradas. Para corrigi-las, cada nó executa um 
processo em segundo plano que recalcula, periodicamente, cada finger, chamando o sucessor. 
Quando uma dessas consultas alcança um novo nó, a entrada de finger correspondente é 
atualizada. 
Quando um nó sai de modo controlado, ele entrega suas chaves a seu sucessor e informa a 
seu predecessor sobre sua saída, para que ele possa se vincular ao sucessor do nó que está 
saindo. 
Quando um nó falha, surge um problema, pois seu predecessor não tem mais um sucessor 
válido. Para aliviar esse problema, cada nó registra não apenas seu sucessor direto mas 
também seus sucessores diretos, para permitir que ele pule até s - l nós consecutivos (com 
falhas) e reconecte o anel – em caso de queda 
Alguns clientes BitTorrent utilizam DHTs para fornecer um tracker totalmente distribuído do tipo 
que descrevemos. Grandes serviços de computação em nuvem, como o Dynamo da Amazon, 
por exemplo, também incorporam técnicas de DHT 
1. O arquivo torrent possui os seguintes tipos de informação: 
5) Tracker e chunks 
2. O servidor que auxilia a comunicação entre dois computadores que utilizam o protocolo P2P 
BitTorrent é: 
3) Tracker 
3. A aplicação P2P que utiliza servidores centrais para a indexação de arquivos é: 
1) Emule 
 
Os sistemas de arquivos distribuidos (DFS) sao a vase para muitas aplicações distribuidas, 
já que permitem que vários processos compartilhem dados, de modo seguro e confiável, por 
longos pedíodos. 
Um sistema de arquivos fornece serviços de arquivo para clientes. O componente primário de 
hardware que um servidor de arquivos controla é um conjunto de dispositivos locais de 
armazenamento secundário (geralmente, dicos magnéticos), nos quais arquivos são 
armazenados e recuperados, de acordo com as solicitações dos clientes. Em um DFS, a 
atividade de serviço deve ser realizada através da rede- 
Esse sistema pode ser implementado como parte de um sistema operacional distribuido ou 
alternativamente por uma camada de software, cua tarefa é gerenciar a comunicação entre 
sistemas operacioais e convencionais e sistemas de arquivo. 
As características que diferenciam um DFS são a multiplicidade e a autonomia de clientes e 
servidores no sistema. 
 
Funções DFS: O DFS deve aparecer para seus clientes como um sistema de arquivos 
convencional centralizado. Portanto, é de sua responsabilidade localizar os arquivos e 
providenciar o transporte dos dados. 
Essa transparência facilita a mobilidade do usuário, trazendo seu ambiente para onde quer que 
ele se conecte. 
O referido sistema também possui, como importante medida de desempenho, a quantidade de 
tempo necessária para o atendimento das requisições de serviço. 
Em sistemas convencionais, esse tempo consiste no tempo de acesso ao disco e em um 
pequeno intervalo de tempo de processamento da CPU. 
Entretanto, em um DFS, um acesso remoto possui o overhead adicional atribuído à estrutura 
distribuída. 
Por fim, o DFS gerencia um conjunto de dispositivos de armazenamento dispersos. 
Um DFS fornece os seguintes serviços: 
Serviço de Armazenamento: Serviço relacionado à alocação e ao gerenciamento de espaço e 
operações para armazenamento e recuperação de dados. 
Serviço de Arquivo: Serviço que trata das operações com arquivos independentes, incluindo: 
- Modos de acesso; 
- Políticas de caching; 
- Semântica de compartilhamento; 
- Replicação; 
- Controle de concorrência; 
- Consistência dos dados etc. 
Serviço de Nomeação: Serviço que fornece mapeamento entre nomes de arquivos e seus 
identificadores. 
 
Nomeação e transparência 
Em DFS, a nomeação é um mapeamento entre objetos lógicos e físicos. Já a transparência 
oculta o local em que o arquivo está localizado na rede. 
Dado um nome de arquivo,o mapeamento retorna um conjunto de localizações dessas réplicas 
do arquivo. 
Nessa abstração, ficam ocultas tanto a existência de múltiplas cópias quanto sua localização. 
 
Estruturas de Nomeação 
Veja, a seguir, as noções relacionadas aos mapeamentos de nomes em um DFS: 
Transparência de localização – nesse caso, o nome de um arquivo não revela qualquer 
indicação de sua localização física de armazenamento; 
Independência de localização – nesse caso, o nome de um arquivo não precisa ser alterado 
quando da mudança de sua localização física de armazenamento. 
Um esquema de nomeação independente de localização é um mapeamento dinâmico, já que 
se pode mapear o mesmo nome de arquivo para diferentes locais em dois momentos distintos. 
Portanto, a independência de localização é uma propriedade mais forte do que a transparência 
de localização. 
Na prática, a maioria dos DFS atuais fornece um mapeamento estático e transparente de 
localização para nomes no nível do usuário. Entretanto, esses sistemas não suportam a 
migração de arquivos. Em outras palavras, a mudança automática da localização de um 
arquivo é impossível. Portanto, a noção de independência de localização é irrelevante para 
esses sistemas. 
Os arquivos são associados permanentemente a um conjunto específico de blocos de disco. 
Arquivos e discos podem ser manualmente movimentados entre máquinas, mas a migração de 
arquivos implica uma ação automática iniciada pelo sistema operacional. 
 
Esquemas de Nomeação 
Abordagem mais simples 
Nesse tipo de abordagem, o arquivo é identificado com alguma combinação de seu nome de 
host e seu nome local, o que garante um nome exclusivo em todo o sistema. 
Esse esquema de nomeação não é transparente quanto à localização nem independente de 
localização. Entretanto, as mesmas operações de arquivo podem ser utilizadas tanto para 
arquivos locais quanto para arquivos remotos. 
Abordagem popularizada pelo Network File System (NFS) 
O NFS fornece um meio de anexar diretórios remotos a diretórios locais, dando, assim, a 
aparência de uma árvore de diretórios coerente. 
Abordagem de única estrutura global de nomes 
Nesta abordagem, uma única estrutura global de nomes abrange todos os arquivos do sistema. 
A estrutura de sistema de arquivos composta é igual à estrutura de um sistema de arquivos 
convencional. Entretanto, na prática, os diversos arquivos especiais tornam esse objetivo difícil 
de ser atingido. 
 
 
Modelos de acesso 
A forma como uma requisição será tratada dependerá do modelo de acesso do sistema de 
arquivos que será dado aos arquivos. 
Em um DFS, dois modelos de acesso podem ser utilizados: 
Modelo de serviço remoto: um usuário solicira acesso a um arquivo remoto, o servidor 
armazena o arquivo será localizado pelo esquema de nomeação, e então, realizará a 
transferência dos dados. Uma das maneiras mais comuns para implementar o serviço remoto é 
o paradihma da RPC. 
Modelo de Caching: Se os dados necessários para atender à solicitação de acesso ainda não 
estiverem armazenados em cache, uma cópia desses dados do servidor será trazida para o 
sistema cliente. Dessa forma, seus acessos serão executados na cópia do cache. A ideia é 
reter no cache blocos de disco recentemente acessados, de modo que acessos repetidos às 
mesmas informações possam ser manipulados localmente, sem tráfego de rede adicional. 
 Os arquivos ainda são identificados com uma cópia-mestra – residindo na máquina do 
servidor e mais cópias (ou partes) do arquivo disseminadas em diferentes caches. Quando 
uma cópia do cache for modificada, as mudanças precisarão se refletir na cópia-mestra para 
preservar a semântica de consistência relevante. 
A granularidade dos dados do cache de um DFS pode variar de blocos de um arquivo a um 
arquivo inteiro. 
 
Comparação entre armazenamento em cache e serviço remoto 
Quando o armazenamento em cache é utilizado, o cache local pode manipular eficientemente 
um número substancial dos acessos remotos. 
O aproveitamento da localidade nos padrões do acesso a arquivos torna o armazenamento em 
cache ainda mais atraente. 
A maioria dos acessos remotos será atendida tão rapidamente quanto os acessos locais. Além 
disso, os servidores são contatados apenas ocasionalmente. Consequentemente, a carga no 
servidor e o tráfego na rede são reduzidos, e a possibilidade para a escalabilidade aumenta. 
 
Por outro lado, quando o método de serviço remoto é utilizado, cada acesso remoto é 
manipulado através da rede. O prejuízo é associado ao aumento de tráfego na rede, à carga no 
servidor e à redução no desempenho. 
Quando transmitimos grandes porções de dados (conforme é feito no armazenamento em 
cache), o overhead total da rede é mais baixo do que quando transmitimos séries de respostas 
a solicitações específicas (como no método de serviço remoto). 
Além disso, as rotinas de acesso a disco no servidor podem ser mais otimizadas quando 
sabemos que as solicitações envolverão sempre grandes segmentos de dados contíguos – em 
vez de blocos aleatórios de disco. 
 
O problema da consistência do cache é a principal desvantagem do armazenamento em cache. 
Quando os padrões de acesso exibem gravações não frequentes, o armazenamento em cache 
é superior. 
Entretanto, quando as gravações são frequentes, os mecanismos empregados para resolver o 
problema da consistência incorrem em overhead significativo em termos de desempenho, 
tráfego na rede e carga no servidor. 
Para que o armazenamento em cache traga benefícios, a execução deve ser levada a efeito 
em máquinas que tenham discos locais ou memórias principais de grande capacidade. O 
acesso remoto em máquinas com memória de pouca capacidade e sem discos deve ser 
realizado por meio do método de serviço remoto. 
 
No armazenamento em cache, como os dados são transferidos em massa entre o servidor e o 
cliente – em vez de em resposta às necessidades específicas de uma operação de arquivo -, a 
interface de mais baixo nível entre máquinas é diferente da interface de mais alto nível do 
usuário. 
Por outro lado, o modelo do serviço remoto é apenas uma extensão da interface local do 
sistema de arquivos através da rede. Sendo assim, a interface entre máquinas espelha a 
interface do usuário. 
 
Stateful (serviço com estado) versus stateless (serviço sem estado) 
Existem duas abordagens para o armazenamento de informações no lado do servidor, quando 
um cliente acessa arquivos remotos, quais sejam: 
 
 O servidor busca cada arquivo que estiver sendo acessado pelo cliente; ou 
 O servidor simplesmente fornece blocos conforme são solicitados pelo cliente, sem saber 
como esses blocos estão sendo utilizados. 
No primeiro caso, o serviço fornecido tem estado (stateful); no outro, o serviço não tem estado 
(stateless). 
 
Stateful (serviço com estado): No serviço de arquivos com estado, um cliente deve executar 
uma operação open () sobre um arquivo antes de acessá-lo. O servidor, então, extrai 
informações sobre o arquivo em seu disco, armazena essas informações em memória e 
fornece ao cliente um identificador de conexão único para o cliente e o arquivo aberto. 
Em termos do UNIX, o servidor extrai o I-node e fornece ao cliente um descritor de arquivo, que 
serve como um índice para a tabela de inodes em memória. 
No stateful, o servidor deve reclamar o espaço de memória principal utilizado pelos clientes que 
não estão mais ativos. 
O ponto chave relacionado à tolerância a falhas em uma abordagem de serviço com estado é 
que o servidor mantém informações sobre seus clientes na memória principal. 
 
Stateless (serviço sem estado): O serviço de arquivos sem estado evita informaçõesde 
estado, tornando cada solicitação autossuficiente. Em outras palavras, cada solicitação 
identifica completamente o arquivo e sua posição no arquivo (para acessos de leitura e 
gravação). 
No stateless, o servidor não precisa manter uma tabela de arquivos abertos na memória 
principal. Além disso, não há necessidade de estabelecer e terminar uma conexão por 
operações open () e close (). 
Um processo-cliente abre um arquivo, e essa abertura não resulta no envio de uma mensagem 
remota. 
Leituras e gravações são realizadas como mensagens remotas (ou consultas ao cache). O 
fechamento final pelo cliente, por sua vez, resulta novamente em apenas uma operação local. 
 
Vantagens e distinção entre satateful e stateless 
VANTAGENS: A vantagem de um serviço com estado sobre um serviço sem estado é o 
aumento do desempenho. Informações de arquivo são armazenadas em cache na memória 
principal e podem ser facilmente acessadas via identificador de conexão, evitando, assim, 
acessos ao disco. 
Além disso, um servidor com estado sabe se um arquivo está aberto para acesso sequencial e 
pode, portanto, ler os próximos blocos à frente. Servidores sem estado não podem fazer isso, 
pois não conhecem o objetivo das solicitações do cliente. 
 
DISTINÇÃO: distinção entre stateful e stateless torna-se mais evidente quando consideramos 
os efeitos de uma queda durante uma atividade de serviço. Nessa situação, um servidor com 
estado perde todos os seus estados voláteis. 
A garantia de recuperação sem prejuízo desse servidor implica a restauração de seu estado, 
normalmente realizada por um protocolo de recuperação baseado em um diálogo com os 
clientes. 
 
STATEFULL: Do ponto de vista do cliente, não há diferença entre um servidor lento e um 
servidor em recuperação. Se não receber resposta, o cliente continuará a retransmitir sua 
solicitação. 
Em alguns ambientes, o stateful é uma necessidade. Se o servidor empregar o método iniciado 
para validação do cache, não poderá oferecer serviço sem estado, pois deverá manter um 
registro dos arquivos que foram armazenados em cache e dos clientes que os armazenaram. 
STATELESS: Um problema diferente é causado por falhas dos clientes. O servidor precisa 
tornar-se consciente dessas falhas, de modo que possa reclamar o espaço alocado para 
registrar o estado dos processos-clientes que falharam. 
 
O stateless evita esses problemas, pois um servidor recentemente recuperado pode responder 
a uma solicitação autossuficiente sem qualquer dificuldade. Portanto, os efeitos de falhas e de 
recuperações do servidor são quase imperceptíveis. 
 
Replicação de arquivos 
Replicação Explícita: Quando a responsabilidade fica a cargo do programador. Nesse caso, o 
serviço de diretórios pode permitir diversos índices de arquivos para cada arquivo. 
Esse tipo de replicação é de difícil implementação e não permite a aplicação da transparência. 
Replicação Atrasada (lasy): Quando apenas uma cópia é realizada em um servidor. Nesse 
caso, o servidor possui a responsabilidade de propagar as atualizações e de garantir que outro 
servidor responda no caso de sua impossibilidade. 
Replicação em grupos: Quando a operação de escrita é realizada em todos os arquivos ao 
mesmo tempo (multicast atômico). 
 
SEMÂNTICA DE COMPARTILHAMENTO 
Na semântica Unix, as alterações são visíveis instantaneamente. 
Em sistemas de um único processador, normalmente, a semântica declara que, quando uma 
operação read vem depois de uma operação write, aquela retorna o valor que acabou de ser 
escrito. Veja, a seguir, uma figura que representa uma semântica Unix: 
De maneira semelhante, quando duas operações write ocorrem em rápida sucessão, seguidas 
por uma read, o valor lido é o valor armazenado pela última write. Na verdade, o sistema impõe 
uma ordenação de tempo absoluto a todas as operações e sempre retorna o valor mais 
recente. 
Em um sistema distribuído, a semântica Unix pode ser alcançada com facilidade, contanto que 
haja somente um servidor de arquivos e que os clientes não os armazenem. 
Todas as operações read e write vão diretamente para o servidor de arquivos, que as processa 
estritamente em sequência. Essa abordagem gera a semântica Unix, exceto pelo pequeno 
problema de que atrasos de rede podem fazer com que uma read que ocorreu em um 
microssegundo após uma write chegue antes ao servidor e, por isso, obtenha o valor antigo. 
 
SEMÂNTICA DE SESSÃO: Em vez de requerer que uma read veja os efeitos de todas as 
operações write anteriores, podemos estabelecer uma nova regra em que: As alterações em 
um arquivo aberto sejam incialmente visíveis apenas para o processo, que modificou a 
maquina. As alterações devem ficar visíveis para outros processos ou máquinas, somente 
quando o arquivo for fechado. 
 
Arquivos Imutáveis: 
Um um sistema distribuído, uma abordagem completamente diferente da semântica de 
compartilhamento de arquivos é tornar imutáveis todos eles. 
 Dessa forma, não existe nenhum modo de abrir um arquivo para escrita. Na verdade, as 
únicas operações em arquivos são create e read. 
 O que se permite é criar um arquivo inteiramente novo e passá-lo para o sistema de diretório 
sob o nome de um arquivo previamente existente, que, agora, se tornará inacessível (ao 
menos sob esse nome). 
 Por isso, embora seja impossível modificar o arquivo específico, continua possível substituir, 
atomicamente, esse arquivo por um novo. Em outras palavras, embora arquivos não possam 
ser atualizados, os diretórios podem. 
Uma vez decidido que os arquivos não podem ser alterados de jeito algum, o problema de 
como lidar com dois processos – como escrever em um arquivo e ler esse arquivo – 
simplesmente desaparece, o que simplifica, consideravelmente, o projeto. 
 
Resta, então, o problema que ocorre quando dois processos tentam substituir o mesmo arquivo 
simultaneamente. Como acontece com a semântica de sessão, a melhor solução para esse 
caso seria permitir que um dos novos arquivos substituísse o antigo – seja este o último, seja a 
substituição não determinística. 
Um problema um pouco mais desagradável diz respeito a como prosseguir se um arquivo for 
substituído enquanto outro processo estiver ocupado, lendo esse mesmo arquivo. 
Uma solução é dar um jeito de o processo leitor continuar usando o arquivo antigo, mesmo que 
este não esteja mais em nenhum diretório, comparado ao modo como o Unix permite a um 
processo que tenha um arquivo aberto continuar a usá-lo, mesmo depois de esse arquivo ter 
sido apagado de todos os diretórios. 
Outra solução é detectar se o arquivo foi alterado e fazer com que as tentativas subsequentes 
de ler esse arquivo falhem. 
 
Network File System (NFS) : O padrão NFS mais recente é a Versão 4 que difere 
fundamentalmente das versões anteriores. Essa versão apresenta uma mudança significativa, 
em que o protocolo tem estado, o que significa que o servidor mantém o estado da sessão do 
cliente do momento em que o arquivo remoto é aberto até que ele seja fechado. 
Sendo assim, o protocolo NFS fornece operações open() e close(). As versões anteriores do 
NFS – que não têm estado – não fornecem tais operações. 
Além disso, as versões anteriores especificam protocolos separados para a montagem de 
sistemas de arquivos remotos e para o trancamento (lookup) desses arquivos. Em particular, o 
protocolo de montagem foi eliminado, permitindo que o NFS funcionasse com firewalls de rede. 
 
A Versão 4 do NFS aprimorou a capacidade de os clientes armazenarem em cache local os 
dados dos arquivos, melhorando o desempenho do DFS, já que os clientes são capazes de 
resolver mais acessos a arquivos a partir do cache local do que passando pelo servidor.Outro benefício dessa versão permite que os clientes solicitem locks de arquivos aos 
servidores. Se o servidor atender à solicitação, o cliente manterá o lock até que ele seja 
liberado ou que sua concessão expire. 
 
Tradicionalmente, os sistemas baseados no Unix oferecem trancamento aconselhável de 
arquivos, enquanto os sistemas operacionais Windows utilizam o trancamento obrigatório. 
Para permitir que o NFS funcione bem com sistemas não Unix, ele também fornece 
trancamento obrigatório. 
Os novos mecanismos de trancamento e armazenamento em cache são baseados no conceito 
de delegação. O cliente delegado mantém em cache a versão corrente do arquivo, e outros 
clientes podem solicitar a ele o acesso ao lock e o conteúdo do arquivo, até que o cliente 
delegado desista do lock e da delegação. 
 
Finalmente, enquanto as versões anteriores do NFS são baseadas no protocolo de rede UDP, 
a Versão 4 é baseada no TCP, que permite melhor adaptação a cargas variadas de tráfego na 
rede. A delegação dessas responsabilidades aos clientes reduz a carga no servidor e melhora 
a coerência do cache. 
É desejável ocultar os detalhes de replicação dos usuários. O mapeamento de um nome de 
arquivo copiado em uma réplica específica é tarefa do esquema de nomeação. 
A existência de réplicas deve ser invisível aos níveis mais altos. Nos níveis mais baixos, 
entretanto, as réplicas devem ser diferenciadas umas das outras por distintos nomes de mais 
baixo nível. 
Outro requisito de transparência é fornecer controle de replicação nos níveis mais altos. 
 
1. O armazenamento em cache com gravação direta é denominado: 
R) Write-through 
 
2. Quando o nome de um arquivo não revela qualquer indicação de sua localização física de 
armazena¬mento, podemos afirmar que o DFS implementa: 
R) Transparência de localização 
3. Com relação aos serviços com estado e os serviços sem estado, indique, dentre as 
afirmativas a seguir, quais são verdadeiras (V) e quais são falsas (F), assinalando a opção 
CORRETA: 
I. No serviço com estado, o servidor fornece ao cliente um identificador de conexão utilizado 
para acessos subsequentes até que a sessão termine. 
III. No serviço sem estado, o servidor não precisa man¬ter uma tabela de arquivos abertos na 
memória principal. 
 
Os serviços web (web services) abrangem um conjunto de padrões relacionados que podem 
habilitar quaisquer duas aplicações de computador a se comunicarem e a trocarem dados, via 
internet, por meio de protocolos padrões. 
Para um sistema distribuído funcionar corretamente, componentes de aplicações que executam 
em computadores diferentes por toda a rede devem poder comunicar-se. 
Tecnologias como DCOM e CORBA habilitam a comunicação entre componentes distribuídos. 
Entretanto, impõem um custo para viabilizar essa comunicação. Muitas vezes, seus 
componentes se comunicam via uma ponte entre COM e CORBA. 
 
Funcionamento: Os serviços web funcionam a partir do uso de padrões abertos (não 
proprietários). 
Em outras palavras, teoricamente, esses serviços podem habilitar a comunicação entre 
quaisquer dois componentes de software – independentemente das tecnologias utilizadas para 
criar os componentes ou as plataformas nas quais residem (interoperabilidade). 
 
Os web services fornecem, de forma mais genérica, uma interface de serviços para a interação 
com os servidores. 
Sendo assim, as aplicações podem utilizar sua própria linguagem, que será traduzida para uma 
linguagem comum: o formato XML. 
 
Os serviços web melhoram o desenvolvimento de software colaborativo, permitindo que 
desenvolvedores criem aplicações combinando códigos escritos em qualquer linguagem de 
qualquer plataforma. 
Esses serviços também promovem programação modular. Cada função específica de uma 
aplicação pode ser apresentada como um serviço web separado. 
Indivíduos ou empresas podem criar suas próprias aplicações exclusivas, mesclando e 
compatibilizando os web services que fornecem a funcionalidade de que precisam. 
 
Arquitetura (SOA), caracterízada pela as seguintes propriedades: Visão Lógica, Orientação à 
mensagem, orientação à descrição, Granularidade, orientação à rede, plataforma neutra. 
 
Componentes da arquitetura SOA 
Os componentes da arquitetura SOA representam uma coleção de serviços que se comunicam 
da troca de mensagens XML: 
 
Provedor de Serviço WEB: Responsável pela descrição das informações de conexão na 
chamada ao serviço e pela publicação e descrição do web service no registro dos serviços. 
Registros de Serviços: Manutenção de diretório com as informações sobre os serviços. Na 
SOA, o padrão adotado para registro é o Universal Description, Discovery and Integration 
(UDDI). 
Consumidor de Serviço: Responsável pela descoberta de um serviço, pelo recebimento de 
sua descrição e por sua utilização para a conexão a um provedor. Seu objetivo é chamar um 
serviço web. 
 
Plataforma .NET da Microsoft 
A iniciativa .NET inclui o ambiente de desenvolvimento integrado Visual Studio .NET, que 
habilita programadores a desenvolverem serviços web em uma variedade de linguagens – 
incluindo C++, C# e Visual Basic .NET. 
 
Os serviços web .NET – fundamentais da iniciativa .NET – estendem o conceito de reutilização 
de software à internet, permitindo que desenvolvedores reutilizem componentes de software 
que residam em outras máquinas ou plataformas. 
 
Empregando serviços web como blocos de construção reutilizáveis, os programadores podem-
se concentrar em suas especialidades, sem ter de implementar cada componente de uma 
aplicação. 
 
Por exemplo, uma empresa que está desenvolvendo uma aplicação de e-commerce pode 
assinar serviços web que processam pagamentos e autenticam usuários, o que habilita o 
programador a se concentrar em outros aspectos mais exclusivos daquela aplicação. 
 
Em .NET, um serviço web é uma aplicação armazenada em uma máquina que pode ser 
acessada por uma outra através de uma rede. 
 
Em sua forma mais simples, um serviço web criado em .NET é uma classe – ou um 
agrupamento lógico – de métodos de dados que simplificam a organização do programa. 
 
As classes de serviço web da .NET contêm certos métodos – denominados métodos de 
serviços web – que são especificados como parte do web service. Esses métodos podem ser 
invocados remotamente, usando RPC. 
 
O web service é definido pela W3C como um sistema de software projetado para fornecer 
INTEROPERABILIDADE entre máquinas em determinada rede. 
 
1. A linguagem baseada em XML que descreve o que um web service pode fazer, onde ele reside e como 
chamá-lo é denominada: 
R) WSDL 
 
2. O protocolo baseado em XML para troca de informação estruturada com web services em redes de 
computadores é chamado de: 
R) SOAP 
 
3. A especificação para publicar e localizar informações sobre web services denomina-se: 
R) UDDI 
 
Computação ubiqua, que tem como foco operações voltadas para a tarefa, e não para a 
ferramenta. Nesse caso, a computação está embutida em nosso dia a dia. 
 
De acordo com Loureiro: A computação ubiqua é um novo paradigma no qual dispositivos com 
capacidade de processamento e comunicação são embutidos nos elementos do dia a dia, 
provendo serviços de forma transparente aos usuários. 
 
A computação ubíqua está posicionada entre a computação móvel e a computação pervasiva, 
conforme apresenta a figura ao lado: 
Nesse tipo de computação, há: 
 Integração entre mobilidade e presença distribuída; 
 Inovação em interfaces – tendência para as interfaces naturais; 
 Determinados problemas, tais como de segurança, complexidade e 
 privacidade. 
 
A computação ubíquapode ser aplicada nos seguintes sistemas: 
 Ambientes inteligentes; 
 nterfaces hands-free (sem as mãos) – reconhecimento de voz, liveboards, pads e tabs; 
 Consciência de contexto – além da interação física do usuário a partir da utilização de 
sensores; 
 Computação de vestir (wearable) – tecnologia que utiliza acessórios como interfaces; 
 Computação sensível à posição; 
 Computação desagregada – reconfiguração automática; 
 Realidade aumentada – combinação de computadores wearable com informações de sensores 
de posição; 
 Interfaces sensíveis a objeto – Radio-Frequency IDentification (RFID). 
 
Exemplos 
Veja um exemplo de aplicação da computação ubíqua: 
 
A computação em nuvens consiste na utilização de recursos de processamento e 
armazenamento de computadores compartilhados e interligados por meio da internet. 
A cloud computing segue os moldes da computação em grid. Nesse caso, o acesso aos dados 
e às aplicações é permitido a partir de qualquer computador que tenha conexão com a internet, 
independente de sua plataforma. 
Clique aqui para ver uma figura que apresenta as vantagens da computação em nuvem. 
 
Serviços da computação em Nuvens 
Os tipos de serviços em cloud computing podem ser classificados nos seguintes modelos: 
Software as a Service (SaaS) – Software como Serviço 
Trata-se do uso de um software através da internet. Em outras palavras, o usuário utiliza o 
software como serviço sem a necessidade de aquisição ou instalação local. 
São exemplos do modelo SaaS: 
Google Docs; HP SaaS; 
Microsoft Sharepoint Online; IBM SaaS. 
 
Os tipos de serviços em cloud computing podem ser classificados nos seguintes modelos: 
Platform as a Service (PaaS) – Plataforma como Serviço 
Trata-se da utilização apenas da plataforma como: 
 Um banco de dados; 
 Um web service; 
 Serviços para desenvolvimento, testes etc. 
Normalmente, as aplicações desenvolvidas em uma PaaS ficam vinculadas ao fornecedor. 
São exemplos do modelo PaaS: Windows Azure e Google App Engine. 
Os tipos de serviços em cloud computing podem ser classificados nos seguintes modelos: 
Trata-se de ferramentas de desenvolvimento utilizadas como: 
 Ferramentas compartilhadas; 
 Ferramentas de desenvolvimento web-based; 
 Serviços baseados em mashup. 
Os tipos de serviços em cloud computing podem ser classificados nos seguintes modelos: 
Infrastructure as a Service (IaaS) – Infraestrutura como Serviço 
Trata-se da entrega de infraestrutura como serviço. 
Em outras palavras, o foco está na estrutura do hardware ou de máquinas virtuais, no 
armazenamento, o que permite uma ampla diversidade de softwares. 
São exemplos do modelo IaaS: 
Amazon EC2; 
GoGrid. 
 
 
Os tipos de serviços em cloud computing podem ser classificados nos seguintes modelos: 
Trata-se da solução terceirizada em comunicação. 
 
Os fornecedores desse tipo de serviço são responsáveis pelo gerenciamento de hardwares e 
softwares, entregando serviços como VoIP e serviços de mensagens instantâneas, além da 
capacidade de gerenciar videoconferências. 
Um exemplo do modelo CaaS é o Microsoft Lync. 
 
Existem quatro tipos de implementação em cloud computing, quais sejam: 
 
De acordo com o artigo da Computeworld (2008), há sete princípios de segurança em uma 
rede em nuvem. São eles: 
Acesso privilegiado de usuários : A sensibilidade de informações confidenciais nas 
empresas as obriga a controlar o acesso dos usuários e a informação bem específica de quem 
terá privilégio de administrador. 
O objetivo é que esse administrador possa controlar os referidos acessos. 
Compliance com regulamentação: As empresas são responsáveis pela segurança, pela 
integridade e pela confidencialidade de seus próprios dados. 
Sendo assim, os fornecedores de cloud computing devem estar preparados para auditorias 
externas e certificações de segurança. 
Localização dos dados: A empresa que usa cloud provavelmente não sabe onde os dados 
estão, de fato, armazenados – talvez nem o país no qual as informações estejam guardadas. 
Portanto, o fornecedor deve estar disposto a se comprometer a armazenar e a processar dados 
em jurisdições específicas, assumindo um compromisso – em contrato – de obedecer aos 
requerimentos de privacidade que o país de origem da empresa exige. 
Segregação dos dados: Geralmente, uma empresa divide um ambiente com dados de 
diversos clientes. 
Nesse caso, precisamos entender o que é feito para a separação de dados e que tipo de 
criptografia é seguro o suficiente para o funcionamento correto da aplicação. 
Recuperação dos dados: O fornecedor em cloud deve saber onde estão os dados da 
empresa e o que é preciso para recuperá-los em caso de catástrofe. 
 Qualquer aplicação que não faça réplica dos dados e da infraestrutura em diversas localidades 
estará vulnerável à falha completa. Por isso, é importante ter um plano de recuperação 
completo e um tempo estimado para esse plano. 
Apoio à investigação: A auditabilidade de atividades ilegais pode-se tornar impossível em 
cloud computing, uma vez que há uma variação de servidores em função do tempo em que 
estão localizados os acessos e os dados dos usuários. 
Diante disso, é importante obter um compromisso contratual com a empresa fornecedora do 
serviço e uma evidência de sucesso no passado para esse tipo de investigação. 
Viabilidade em longo prazo: No mundo ideal, o fornecedor de cloud computing jamais vai falir 
ou ser adquirido por uma empresa maior. 
 Por isso, a empresa precisa garantir que seus dados estarão disponíveis caso o fornecedor de 
cloud computing deixe de existir, ou seja, caso seja migrado para uma empresa maior. 
 Nesse sentido, é importante haver um plano de recuperação de dados e um formato específico 
para que esse plano possa ser utilizado em uma aplicação substituta. 
 
1.São características da computação em nuvem, EXCETO: 
R) Baixa escalabilidade 
 
2. O uso de um software através da internet pode ser classificado como: 
R) SaaS 
 
 
 
O primeiro problema existe porque nem todos os peers terão todo o conteúdo, pelo 
menos inicialmente. 
A técnica usada no BitTorrent é a de que cada provedor de conteúdo possa criar uma 
descrição de conteúdo – chamada torrent. 
A torrent é muito menor que o conteúdo e é usada por um peer para verificar a 
integridade dos dados que ele baixa de outros peers. Outros usuários que querem 
baixar o conteúdo precisam primeiro obter a torrent, encontrando-a, digamos, em 
uma página Web que anuncia o conteúdo. 
A torrent é apenas um arquivo, em formato especificado, que contém dois tipos de 
informação: o nome de um tracker e os chuncks 
O arquivo de torrent contém o nome de cada chunk, dado como um hash 
SHA-1 de 160 bits do chunk. Dado o tamanho dos chunks e dos hashes, o arquivo de torrent 
é, 
pelo menos, três ordens de grandeza menor que o conteúdo, de modo que pode ser 
transferido rapidamente. 
Para realizar o download do conteúdo descrito em uma torrent, primeiramente, um 
peer entra em contato com o tracker para a torrent. O tracker é um servidor que 
mantém uma lista de todos os outros peers que estão ativamente fazendo download 
e upload do conteúdo. Esse conjunto de peers é chamado de swarm. 
 
Os membros do swarm entram em contato com o tracker regularmente para 
informar que ainda estão ativos, bem como ao saírem do swarm. Quando um novo 
peer entra em contato com o tracker para se juntar ao swarm, o tracker lhe informa 
sobre outros peers no swarm. 
 
Modelo de caching: esquema básico de armazenamento emcache 
O armazenamento em cache do DFS poderia ser facilmente chamado de 
memória virtual de rede. 
Isso porque esse armazenamento atua de modo semelhante à memória virtual 
paginada por demanda, exceto pelo fato de a memória de retaguarda não ser, 
normalmente, um disco local, e sim um servidor remoto. 
O NFS permite que o espaço de permuta seja montado remotamente. Dessa 
forma, ele pode implementar, realmente, a memória virtual sobre uma rede, 
apesar da perda em desempenho. 
 
Caches em disco possuem uma clara vantagem sobre os caches na memória 
principal: eles são confiáveis. 
Se o cache for mantido em memória volátil, em caso de queda do sistema, 
modificações nos dados do cache serão perdidas. Se os dados do cache forem 
mantidos em disco, eles ainda estarão ali durante a recuperação, e não será 
preciso extraí-los novamente. 
Muitas implementações de acesso remoto podem ser pensadas como híbridos 
de armazenamento em cache e serviço remoto. 
No NFS, por exemplo, a implementação é baseada em serviço remoto, mas é 
ampliada, por razões de desempenho, com o armazenamento em cache de 
memória para clientes e servidores. 
O protocolo NFS e a maioria das implementações não oferecem 
armazenamento em cache de disco. Implementações recentes do NFS no Solaris (a partir do 
Solaris 2.6) incluem uma opção de armazenamento em 
cache de disco no lado do cliente: o sistema de arquivos cachefs. 
Tão logo o cliente NFS leia os blocos de um arquivo a partir do servidor, ele os 
armazenará em cache na memória, assim como em disco. Se a cópia da 
memória for removida ou mesmo se o sistema for reinicializado, o cache em 
disco será referenciado. 
Se um bloco requerido não estiver em memória nem no cachefs em disco, uma 
RPC será enviada ao servidor para recuperar o bloco, que será gravado no 
cache em disco e armazenado no cache da memória para utilização por parte 
do cliente. 
Modelo de caching: política de atualização de cache 
A forma utilizada para gravar blocos de dados modificados na cópia-mestra do 
servidor tem implicação direta sobre o desempenho e a confiabilidade do 
sistema. 
Conheça, a seguir, algumas maneiras de gravar blocos de dados: 
Write-through (gravação direta) 
A write-through (gravação direta) é a forma mais simples de gravar os dados 
diretamente no disco tão logo sejam colocados em algum cache. 
Sua vantagem é a confiabilidade: poucas informações são perdidas quando um 
sistema-cliente cai. 
 
É necessário que cada acesso de gravação espere até que as informações 
sejam enviadas ao servidor, o que provoca um fraco desempenho de gravação. 
O armazenamento em cache com gravação direta é equivalente ao uso do 
serviço remoto para acessos de gravação e à exploração do cache somente 
para acessos de leitura. 
Write-back (gravação retardada) 
Na write-back (gravação retardada), as atualizações na cópia-mestra são 
adiadas. 
 
As modificações são gravadas no cache para, então, serem gravadas no 
servidor, em um momento posterior. 
Essa política tem duas vantagens sobre a gravação direta, quais sejam: 
 Em primeiro lugar, como as gravações são feitas no cache, os acessos 
de gravação completam-se muito mais rapidamente; 
 Em segundo lugar, os dados podem ser sobrepostos antes de serem 
gravados de volta no servidor – caso em que apenas a última 
atualização precisa ser completamente gravada. 
Os esquemas de gravação retardada introduzem problemas de confiabilidade, 
pois dados não gravados são perdidos sempre que uma máquina de usuário 
cai. 
As variações da política de gravação retardada diferem quanto ao momento 
em que os blocos de dados modificados são descarregados para o servidor. 
No NFS com cachefs, quando as gravações são executadas no servidor, elas 
também são executadas na área de cache do disco local, para manter todas as 
cópias consistentes. 
Sendo assim, o NFS com cachefs melhora o desempenho em relação ao NFS 
padrão em uma solicitação de leitura bem-sucedida do cache do cachefs, mas 
diminui o desempenho para solicitações de leitura ou gravação, com uma 
falha no cache. 
Write on close (gravação ao encerrar a sessão) 
Outra variação da gravação retardada é gravar os dados de volta no servidor 
quando o arquivo é fechado. 
Essa política de gravação ao encerrar a sessão (write on close) é utilizada no 
Andrew File System (AFS). 
 
Em caso de arquivos que sejam abertos por curtos períodos ou raramente 
modificados, a referida política não reduz, de modo significativo, o tráfego na 
rede. 
A write on close requer que o processo de fechamento aguarde enquanto o 
arquivo está sendo gravado por uma operação de gravação direta, o que reduz 
as vantagens de desempenho das gravações retardadas. 
 
Para arquivos que fiquem abertos por longos períodos e sejam modificados 
com frequência, são claras as vantagens de desempenho dessa política em 
relação à gravação retardada – com descargas mais frequentes. 
Modelo de caching: consistências 
Uma máquina-cliente enfrenta o problema de decidir se uma cópia dos dados 
armazenada em cache local é consistente com a cópia-mestra. 
Se a máquina-cliente determinar que seus dados no cache estejam 
desatualizados, os acessos não poderão mais ser atendidos para esses dados. 
Sendo assim, uma cópia atualizada dos dados precisará ser armazenada no 
cache. 
Existem duas abordagens para verificar a validade de dados no cache, quais 
sejam: 
Abordagem iniciada pelo cliente 
Nesta abordagem, o cliente inicia uma verificação de validade, na qual 
contata o servidor, e observa se os dados locais estão consistentes com a 
cópia-mestra. 
A frequência da verificação de validade é o ponto-chave dessa abordagem e 
determina a semântica de consistência resultante. 
Essa frequência pode variar de uma verificação antes de cada acesso a uma 
verificação somente no primeiro acesso a um arquivo. 
Dependendo de sua frequência, a verificação de validade pode sobrecarregar 
tanto a rede quanto o servidor. 
Abordagem iniciada pelo servidor 
Nesta abordagem, o servidor registra, para cada cliente, os arquivos (ou 
partes dos arquivos) armazenados em seu cache. Quando o servidor detectar 
uma inconsistência, ele deverá reagir. 
A ocorrência da inconsistência pode ser causada quando dois clientes 
diferentes, em modalidades conflitantes, armazenam um arquivo em cache. 
 
Se a semântica do UNIX for implementada, poderemos resolver a 
inconsistência fazendo o servidor desempenhar um papel ativo. 
O servidor deve ser notificado sempre que um arquivo for aberto, e a 
modalidade pretendida (leitura ou gravação) deverá ser indicada para cada 
abertura. 
O servidor poderá agir, então, quando detectar que um arquivo foi aberto 
simultaneamente em modalidades conflitantes, desabilitando o 
armazenamento em cache para esse arquivo em particular 
 
Como os peers encorajam uns aos outros para que façam upload do conteúdo 
para outros, além do download de conteúdo para eles mesmos? 
No terceiro problema, os nós da CDN são preparados exclusivamente para fornecer 
conteúdo aos usuários. Os nós P2P, por sua vez, não o são. Esses nós são os 
computadores dos usuários, que podem estar mais interessados em conseguir um 
conteúdo específico do que em ajudar outros usuários com seus downloads. 
Os nós que capturam recursos de um sistema sem contribuir com nada em troca são 
chamados de free-riders ou leechers. Se houver muitos deles, o sistema não 
funcionará bem. Os primeiros sistemas P2P eram conhecidos por hospedar os freeriders, de 
modo que o BitTorrent procurou minimizá-los (SAROIU et al., 2003). 
A técnica usada nos clientes BitTorrent é recompensar os peers que mostram bomcomportamento de upload. Cada peer seleciona aleatoriamente os outros, 
capturando seus chunks enquanto faz o upload de chunks para eles. 
O peer continua a trocar chunks apenas com um pequeno número de peers que 
oferecem o desempenho de download mais alto, embora também experimentem 
aleatoriamente outros peers para encontrar bons parceiros. Esse experimento 
aleatório também permite que os novos usuários obtenham chunks iniciais que 
podem trocar com outros peers. Os peers com os quais um nó está trocando chunks 
são considerados como unchoked. 
Com o tempo, esse algoritmo deverá combinar peers, uns com os outros, com upload 
comparável e taxas de download. Quanto mais um peer estiver contribuindo com os 
outros, mais ele poderá esperar em retorno. 
Usar um conjunto de peers também ajuda a saturar a largura de banda de um peer 
para aumentar o desempenho. Ao contrário, se um peer não estiver fazendo upload 
de chunck para outros peers ou se estiver fazendo isso muito lentamente, ele será, 
mais cedo ou mais tarde, cortado ou choked. 
 
Evolução: 
Primeiros computadores: grandes e caros. 
Anos 50-60: spooling, multiprogramação. 
Início dos anos 60: sistemas time sharing. 
Final dos anos 60 e início dos anos 70: surgimento de redes de computadores. 
A partir dos anos 70: inicia-se a pesquisa em sistemas distribuídos. 
 
Sistemas podem ser divididos em: 
 Fortemente acoplados - quando os processadores compartilham uma mesma memória 
principal. 
 Fracamente acoplados – os diversos processadores/estações presentes no sistema utilizam 
sua memória local individualmente. 
 Sistemas centralizados - Multiprocessador de memória compartilhada é um sistema de 
computador no qual duas ou mais CPUs compartilham acesso total a uma memória principal 
comum. Multiprocessadores são populares e atrativos, porque oferecem um modelo de 
comunicação simples, e a sincronização é possível mediante o emprego de diversas técnicas 
bem definidas. Uma desvantagem é que os multiprocessadores de grande porte são difíceis de 
construir e, por isso, são caros. 
 Sistemas distribuídos - Uma solução alternativa que tem sido empregada com sucesso para 
solucionar esse problema é a utilização de multicomputadores, que são CPUs que não 
compartilham memória principal. Cada CPU tem sua própria memória e é gerenciada por um 
sistema operacional individualmente. Esses sistemas também são conhecidos como cluster – 
COWS (cluster of workstations - aglomerados de estações de trabalho). 
 
• Sistema distribuído permite uma nova forma de fazer ciência 
–Teoria -> experimentos 
–Teoria -> simulações 
 
•Vantagens 
–Possibilidade de repetição de eventos 
–Manipulação de parâmetros 
–Estudo de sistemas onde não há teorias exatas 
 
•Problemas 
–Muito grandes: modelagem da terra/clima, simulações de reservatórios de petróleo, 
problemas com grandes escalas (cosmologia). 
–Muito pequenos: projeto de remédios, projetos de chips, biologia estrutural, física de 
partículas. 
–Muito complexos: física de partículas, dinâmica de fluidos, modelagem de comportamento de 
pessoas. 
–Muito caros: produção e exploração de petróleo, simulação de acidentes. 
–Muito perigosos: tolerância a falhas em aviões, teste de dispositivos nucleares, simulação de 
estratégias de defesa. 
 
PARALELISMO X COMPUTAÇÃO PARALELA 
 Paralelismo 
 Projeto de uma CPU 
 Projeto de uma arquitetura paralela 
 E/S sobreposta ao processamento 
 Computação paralela 
 Coleção de elementos de processamento 
 Trabalhando em conjunto para a realização de uma tarefa 
Paralelismo 
Dentro de um processador 
1. Busca a informação 
2. Decodifica Instrução 
3. Busca Operandos 
4. Executa Instrução 
 
Clusters 
 Definição: Conjunto de computadores independentes conectados, usados como recurso 
unificado para computação. Sistema com imagem única (SSI). 
 Benefícios 
o Custo/benefício: redução de custo para se obter processamento de alto desempenho. 
o Escalabilidade: possibilidade de adição de novos computadores, sendo adicionados a medida 
que cresça a carga. 
o Alto Desempenho: possibilidade de resolver problemas complexos através de programação e 
processamento paralelo. 
o Independência de Fornecedores: utilização de hardware aberto, livre de uso de licenças. 
o Tolerância a Falha: o aumento da confiabilidade do sistema como um todo, caso alguma parte 
falhe. 
 
Computação centralizada 
 Mainframe 
Termo utilizado para se referenciar a um grande computador, normalmente produzido por uma 
grande empresa. O nome tem origem na forma com que estes computadores eram 
construídos. Todos os componentes (processador, memória...) do computador principal (main) 
são colocados em uma única estrutura (frame). 
o Características 
 Sistemas multiusuários 
 Sistemas proprietários -> hardware, software, rede 
 Instalação e manutenção feita pelo fabricante -> confiabilidade X custo 
 
 Microcomputadores e redes de computadores 
Ampliação do parque computacional, em função de: 
o Processadores mais rápidos e mais baratos. 
o Redes mais rápidas e acessíveis. 
o Liberdade de escolha. 
o Menor custo de manutenção. 
o Necessidade inerente de conectividade. 
o Aplicação básica: compartilhamento de recursos. 
Evolução: Os terminais foram sendo substituídos pelos primeiros microcomputadores que 
começavam a ficar obsoletos. Em geral, o uso de um programa emulador de terminais e de 
uma unidade de disquete era suficiente para que um simples PC-XT executasse essa tarefa, 
uma vez que só precisaria executar o emulador. A partir deste ponto, o micro passaria a se 
comportar como um terminal. Em alguns casos, era necessário o uso de uma placa que 
compatibilizasse a forma de comunicação serial entre os dois computadores. 
 
 
 
 Sistemas Distribuidos 
Utilização das redes de computadores para execução colaborativa e cooperativa de aplicações 
e não somente para compartilhamento de recursos. 
Sistemas Distribuidos = computadores + rede + aplicação 
o Conceito: É um sistema em que os computadores estão conectados em rede e coordenam 
suas ações através de troca de mensagens. 
o Denifição de sistema distribuido: 
 Colouris: Um sistema no qual os componentes de hardware ou software, localizados em 
computadores interligados em rede, se comunicam e coordenam suas ações apenas enviado 
mensagens entre sí. 
 Tanenbaum: Um sistema distribuido é um conjundo de computadores independetes que se 
apresenta a seus usuários como um sistema único e coerente. 
 Siberschatz: Coleção de processadores que não compartilham memória ou relógio. 
o Principais motivações: necessidade pelo compartilhamento de recursos e 
o Características de um sistema distribuído: 
 baixo acoplamento e atrasos na comunicação; 
 processos em sistemas computacionais distintos com probabilidade de falhas 
 Comunicação geralmente não confiável, onde existem atrasos, variação de atrasos, perdas e, 
em alguns casos, baixas larguras de banda 
 dificuldade em definir a ordem dos eventos e estado global do sistema, uma vez que a 
comunicação acontece pela troca de mensagens 
 Ambiente geralmente marcado pela heterogeneidade 
o Comparação com sistemas centralizados 
 Vantagens 
 Melhor relação preço/desempenho 
 Capacidade de crescimento incremental (escalabilidade) 
 T olerância a falhas 
 Desvantagens 
 Falta de padronização para desenvolvimento de software 
 Falta de uma divisão clara entre sistema/aplicação 
 Latência e possibilidade

Continue navegando