Uploaded by Nuno Vidal

ResolucaoPerguntasFinalCapitulo

advertisement
Assine o DeepL Pro para poder editar este documento.
Visite www.DeepL.com/Pro para mais informações.
PRINCÍPIOS E PARADIGMAS
DOS SISTEMAS
DISTRIBUÍDOS
SEGUNDA
EDIÇÃO
SOLUÇÕES DE
PROBLEMAS
ANDREW S. TANENBAUM
MAARTEN VAN STEEN
Vrije Universiteit
Amsterdam, Países Baixos
PRENTICE HALL
RIO DA SELA SUPERIOR, NJ 07458
SOLUÇÕES PARA OS PROBLEMAS DO CAPÍTULO 1
1. P: Uma definição alternativa para um sistema distribuído é a de um conjunto
de computadores independentes que dão a visão de ser um único sistema, ou
seja, é completamente escondida dos utilizadores que existem mesmo vários
computadores. Dê um exemplo em que este ponto de vista seria muito útil.
R: O que me vem imediatamente à cabeça é a computação paralela. Se se
pudesse conceber programas que funcionassem sem quaisquer modificações
sérias nos sistemas distribuídos que parecessem ser os mesmos que os sistemas
não distribuídos, a vida seria muito mais fácil. Conseguir uma visão de sistema
único é agora considerado praticamente impossível quando o desempenho está
em jogo.
2. P: Qual é o papel do middleware num sistema distribuído?
A: Aumentar a transparência da distribuição que falta nos sistemas de
funcionamento da rede. Por outras palavras, o middleware visa melhorar a
visão de um sistema único que um sistema distribuído deve ter.
3. P: Muitos sistemas em rede estão organizados em termos de um back office e
um front office. Como é que as organizações se adequam à visão coerente que
exigimos para um sistema distribuído?
R: Um erro facilmente cometido é assumir que um sistema distribuído como
operando em uma organização, deve estar espalhado por toda a organização.
Na prática, vemos sistemas distribuídos a serem instalados ao longo do
processo de divisão de uma organização. Neste sentido, poderíamos ter um
sistema distribuído que suportasse procedimentos e processos de back-office,
bem como um sistema de front-office separado. É claro que os dois podem ser
acoplados, mas não há razão para deixar que este acoplamento seja totalmente
transparente.
4. P: Explicar o que se entende por transparência (distribuição) e dar exemplos de
diferentes tipos de transparência.
A: A transparência da distribuição é o fenómeno pelo qual os aspectos da
distribuição num sistema são ocultados aos utilizadores e às aplicações. Os
exemplos incluem a transparência do acesso, a transparência da localização, a
transparência da migração, a transparência da transferência de localização, a
transparência da reprodução, a transparência da simultaneidade, a
transparência da transferência de falhas e a transparência da persistência.
5. P: Por que razão é por vezes tão difícil esconder a ocorrência e a recuperação
de falhas num sistema distribuído?
R: É geralmente impossível detectar se um servidor está realmente em baixo ou
se é simplesmente lento a responder. Consequentemente, um sistema pode ter
de comunicar que um serviço não está disponível, embora, na realidade, o
servidor seja apenas lento.
2
SOLUÇÕES DE PROBLEMAS PARA O
CAPÍTULO 3
6. P: Porque é que nem sempre é uma boa ideia procurar implementar o mais
elevado grau de transparência possível?
A: Visar o mais elevado grau de transparência pode conduzir a uma perda
considerável de desempenho que os utilizadores não estão dispostos a aceitar.
7. P: O que é um sistema distribuído aberto e quais as vantagens da abertura em
favor do vídeo?
R: Um sistema distribuído aberto oferece serviços de acordo com regras
claramente definidas. Um sistema aberto é capaz de interagir facilmente com
outros sistemas abertos, mas também permite que as aplicações sejam
facilmente portadas entre diferentes implementações de um mesmo sistema.
8. P: Descreva com precisão o que se entende por um sistema escalável.
R: Um sistema é escalável no que respeita quer ao seu número de
componentes, dimensão geo-gráfica, quer ao número e dimensão dos domínios
administrativos, se puder crescer numa ou mais destas dimensões sem uma
perda de desempenho inaceitável.
9. P: A escalabilidade pode ser conseguida através da aplicação de diferentes
técnicas. Quais são estas técnicas?
A: O dimensionamento pode ser alcançado através da distribuição, replicação e cache.
10. P: Explique o que se entende por uma organização virtual e dê uma dica sobre
como tais organizações poderiam ser implementadas.
R: Uma organização virtual (VO) define um grupo de utilizadores/aplicações
que têm acesso a um grupo específico de recursos, que podem ser distribuídos
por muitos computadores diferentes, pertencentes a muitas organizações
diferentes. Com efeito, um VO define quem tem acesso a quê. Isto também
sugere que os recursos devem manter uma conta de utilizadores estrangeiros
juntamente com os seus direitos de acesso. Isto pode muitas vezes ser feito
utilizando mecanismos normais de controlo de acesso (como os bits rwx no
UNIX), embora os utilizadores estrangeiros possam precisar de ter uma conta
especial. Esta última complementa consideravelmente a situação.
11. P: Quando uma transacção é abortada, dissemos que o mundo é restaurado ao
seu estado anterior, como se a transacção nunca tivesse acontecido. Nós
mentimos. Dêem um exemplo em que é impossível restaurar o mundo.
A: Qualquer situação em que a E/S física tenha ocorrido não pode ser reposta.
Por exemplo, se o processo tiver impresso alguma saída, a tinta não pode ser
removida do papel. Além disso, num sistema que controla qualquer tipo de
processo industrial, é geralmente impossível desfazer o trabalho que foi feito.
12. P: A execução de transacções aninhadas requer alguma forma de coordenação.
Explique o que um coordenador deve realmente fazer.
R: Um coordenador deve simplesmente assegurar que, se uma das transacções
agrupadas abortar, todas as outras subtransacções também abortam. Do mesmo
modo, deve
SOLUÇÕES DE PROBLEMAS PARA O
CAPÍTULO 3
3
coordenar que todos eles se comprometam quando cada um deles puder. Para
tal, uma transacção aninhada deve esperar para se comprometer até que o
coordi- nator lhe diga para o fazer.
13. P: Argumentamos que a transparência da distribuição pode não estar
assegurada para os sistemas pervasivos. Esta afirmação não é verdadeira para
todos os tipos de transparências. Dê um exemplo.
A: Pense na transparência da migração. Nos sistemas mnay pervasivos, os
componentes são móveis e terão de restabelecer as ligações quando se
deslocam de um ponto de acesso para outro. De preferência, essas
transferências devem ser totalmente transparentes para o utilizador. Do mesmo
modo, pode argumentar-se que muitos outros tipos de transparência também
devem ser apoiados. No entanto, o que não deve ser escondido é que um
utilizador está possivelmente a aceder a recursos que estão directamente
associados ao ambiente actual do utilizador.
14. P: Já demos alguns exemplos de sistemas difundidos: sistemas domésticos,
sistemas electrónicos de cuidados de saúde e redes de sensores. Amplie esta
lista com mais exemplos.
R: Existem vários outros exemplos de sistemas omnipresentes. Pense nas redes
sem fios em grande escala em cidades ou bairros que fornecem serviços como
o acesso à Internet, mas também constituem a base de outros serviços, como
um sistema de notícias. Existem sistemas de monitorização de habitats (como
nas estâncias balneares), prisões elec- trónicas através das quais os infractores
são continuamente monitorizados, sistemas desportivos de grande escala,
sistemas de escritório que utilizam crachás activos para saber o paradeiro dos
seus empregados, etc.
15. P: Desenhe um desenho para um sistema doméstico composto por um servidor
multimédia separado que permita a ligação de um cliente sem fios. Este último
está ligado a equipamento (analógico) de áudio/vídeo e transforma os fluxos
de meios digitais em saída analógica. O servidor funciona numa máquina
separada, possivelmente ligada à Internet, mas não tem teclado e/ou monitor
ligado.
SOLUÇÕES PARA OS PROBLEMAS DO CAPÍTULO 2
1. P: Se um cliente e um servidor forem colocados muito afastados, podemos ver
a latência da rede a dominar o desempenho global. Como podemos resolver
este problema?
R: Depende realmente de como o cliente está organizado. Pode ser possível
dividir o código do lado do cliente em partes menores que podem funcionar
separadamente. Nesse caso, quando uma parte está à espera da resposta do
servidor, podemos agendar outra parte. Alternativamente, podemos ser capazes
de reorganizar o cliente para que ele possa fazer outro trabalho depois de ter
enviado um pedido ao servidor. Esta última solução substitui a comunicação
síncrona cliente-servidor por uma comunicação unidireccional assíncrona.
4
SOLUÇÕES DE PROBLEMAS PARA O
CAPÍTULO 3
2. P: O que é uma arquitectura cliente-servidor a três níveis?
A: Uma arquitectura cliente-servidor de três camadas consiste em três camadas
lógicas, em que cada camada é, em princípio, implementada numa máquina
separada. A camada mais elevada consiste numa interface cliente-servidor, a
camada intermédia contém a aplicação real e a camada mais baixa implementa
os dados que estão a ser utilizados.
3. P: Qual é a diferença entre uma distribuição vertical e uma distribuição
horizontal?
A: A distribuição vertical refere-se à distribuição das diferentes camadas numa
arquitectura com várias camadas através de múltiplas máquinas. Em princípio,
cada camada é implementada numa máquina diferente. A distribuição
horizontal trata da distribuição de um único nível por várias máquinas, como a
distribuição de uma única base de dados.
4. P: Considere uma cadeia de processos P1, P2, ..., Pn implementando uma
arquitectura cliente-servidor multi-níveis. Process Pi é cliente do processo Pi1, e
Pi só retornará uma resposta a Pi1 depois de receber uma resposta de Pi1. Quais
são os principais problemas com esta organização quando se dá uma vista de
olhos na resposta de pedido de resposta no processo P1?
A: É de esperar que o desempenho seja mau para grandes n. O problema é que
cada comunicação entre duas camadas sucessivas é, em princípio, entre duas
máquinas diferentes. Consequentemente, o desempenho entre P1 e P2 pode
também ser determinado por n 2 interacções de resposta ao pedido entre as
outras camadas. Outro problema é que, se uma máquina da cadeia tiver um
mau desempenho ou for mesmo temporariamente inacessível, isso degradará
imediatamente o perfor- mance ao mais alto nível.
5. P: Numa rede estruturada de sobreposição, as mensagens são encaminhadas de
acordo com a topologia da sobreposição. Qual é uma desvantagem importante
desta abordagem?
R: O problema é que estamos a lidar apenas com caminhos lógicos. Pode
muito bem acontecer que dois nós A e B, que são vizinhos da rede sobreposta,
estejam fisicamente muito afastados. Em consequência, o caminho
logicamente curto entre A e B pode exigir o encaminhamento de uma
mensagem ao longo de um caminho muito longo na rede física subjacente.
6. P: Considere a rede CAN da Fig. 2-0. Como encaminhar uma mensagem do
nó com coordenadas (0,2,0,3) para aquele com coordenadas (0,9,0,6)?
R: Existem várias possibilidades, mas se quisermos seguir o caminho mais
curto de acordo com uma distância euclidiana, devemos seguir o percurso
(0,2,0,3) (0,6,0,7) (0,9,0,6), que tem uma distância de 0,882. O percurso
alternativo (0,2,0,3) (0,7,0,2) (0,9,0,6), que tem uma distância de 0,957.
SOLUÇÕES DE PROBLEMAS PARA O
CAPÍTULO 3
5
7. P: Considerando que um nó na CAN conhece as coordenadas dos seus
vizinhos imediatos, uma política de encaminhamento razoável seria a de
encaminhar uma mensagem para o nó mais próximo do destino. Em que
medida esta política é boa?
R: No nosso exemplo da pergunta anterior, já se pode ver que não precisa de
conduzir ao melhor caminho. Se o nó (0.2,0.3) seguir esta política para a
mensagem destinada ao nó (0.9,0.6), enviá-la-ia para o nó (0.7,0.2).
8. P: Considere uma rede não estruturada, na qual cada nó escolhe aleatoriamente
os vizinhos. Se P e Q são ambos vizinhos de R, qual é a probabilidade de
serem também vizinhos um do outro?
A: Considerar uma rede de nós. Se cada nó escolhe c vizinhos em ran- dom,
então a probabilidade de que P escolha Q, ou Q escolha P é de
aproximadamente 2c / (N ).
9. P: Considere novamente uma rede não estruturada, na qual cada nó correu domly escolhe c vizinhos. Para procurar um ficheiro, um nó inunda um pedido
aos seus vizinhos e pede àqueles que o inundem mais uma vez. Quantos nós
serão alcançados?
A: Um limite superior fácil pode ser calculado como c (c ), mas nesse caso
ignoramos o facto de os vizinhos do nó P também poderem ser vizinhos um do
outro. A probabilidade q de um vizinho de P inundar uma mensagem apenas a
vizinhos de P é 1 menos a probabilidade de a enviar a pelo menos um vizinho
de P:
k
c1c
c c1k
qc1
1
−
k1k
N 
N 1
1
Nesse caso, esta estratégia de inundação atingirá os nós c q (c ) Por exemplo,
com os nós c 20 e N 10, 000, uma consulta será inundada até 365.817 nós.
10. P: Nem todos os nós de uma rede peer-to-peer devem tornar-se superpeer.
Quais são os requisitos razoáveis que um superpetroleiro deve cumprir?
R: Em primeiro lugar, o nó deve estar altamente disponível, uma vez que
muitos outros nós dependem dele. Além disso, ele deve ter capacidade
suficiente para processar pedidos. O mais importante talvez seja o facto de se
poder confiar nele para fazer bem o seu trabalho.
11. P: Considere um sistema BitTorrent em que cada nó tem uma ligação de saída
com uma capacidade de largura de banda Bout e uma ligação de entrada com
capacidade de largura de banda Bin. Alguns destes nós (chamados sementes)
oferecem voluntariamente ficheiros para serem descarregados por outros. Qual
é a capacidade máxima de download de um cliente BitTorrent se partirmos do
princípio que este pode contactar no máximo uma semente de cada vez?
A: Temos de ter em conta que a capacidade de saída dos nós semeadores tem de
ser partilhada entre os clientes. Suponhamos que existem semeadores S e N
clientes, e que cada cliente escolhe aleatoriamente um dos semeadores. A
capacidade de saída conjunta dos semeadores é S Bout , dando a cada um dos
clientes
S Bout / N capacidade de descarga imediata. Além disso, se os
clientes ajudarem cada
6
SOLUÇÕES DE PROBLEMAS PARA O
CAPÍTULO 3
outro, cada um deles será capaz de descarregar pedaços a uma taxa de Bout ,
assumindo que Bin > Bout . Note-se que, devido à política tit-for-tat , a
capacidade de carga de um cliente BitTorrent é ditada principalmente pela sua
capacidade de saída. Em conclusão, a capacidade total de descarga será S Bout
/ N Bout .
12. P: Apresentar um argumento (técnico) convincente que justifique a razão pela
qual a política tit-for-tat utilizada no BitTorrent está longe de ser a melhor para
a partilha de ficheiros na Internet.
R: O raciocínio é relativamente simples. A maioria dos clientes BitTorrent são
operados por trás de ligações assimétricas, como as fornecidas por ADSL ou
modems de cabo. Em gen- eral, é oferecida aos clientes uma elevada
capacidade de banda de entrada, mas ninguém espera realmente que os clientes
tenham serviços para oferecer. A BitTorrent não faz esta suposição, e
transforma os clientes em servidores colaborativos. Ter ligações simétricas é
então uma melhor combinação para a política tit-for-tat.
13. P: Demos dois exemplos de utilização de interceptores em middleware
adaptável. Que outros exemplos nos vêm à cabeça?
R: Existem vários. Por exemplo, poderíamos utilizar um interceptor para
apoiar a mobilidade. Nesse caso, um interceptor de nível de exigência
procuraria primeiro o local de aluguer de um objecto referenciado antes de a
chamada ser reencaminhada. Da mesma forma, um interceptor pode ser
utilizado para codificar mensagens de forma transparente quando a segurança
está em jogo. Outro exemplo é quando é necessário o registo. Em vez de
deixar que isto seja tratado pela aplicação, poderíamos simplesmente inserir
um método específico de intercepção que registaria eventos específicos antes
de passar uma chamada para o objecto referenciado. Mais deste tipo de
exemplo virá facilmente à mente.
14. P: Em que medida é que os interceptores dependem do middleware onde são
implantados?
A: Em geral, os interceptores serão altamente dependentes do meio da guerra.
Se con- sider Fig. 2-0, é fácil perceber porquê: o stub do cliente estará muito
provavelmente fortemente ligado às interfaces de nível inferior oferecidas pelo
middleware, tal como os interceptores de nível de mensagem estarão altamente
dependentes da interacção entre o middleware e o sistema operativo local. No
entanto, é possível normalizar estas interfaces, abrindo o caminho ao
desenvolvimento de interceptores portáteis, embora muitas vezes para uma
classe específica de middleware. Esta última abordagem tem sido seguida para
o CORBA.
15. P: Os automóveis modernos estão cheios de dispositivos electrónicos. Dê
alguns exemplos de sistemas de controlo de retorno de informação nos
automóveis.
R: Um óbvio é o cruise control. Por um lado, este subsistema assegura a
velocidade da corrente e, quando muda da regulação requerida, o carro é
desacelerado ou acelerado. O sistema de travagem antibloqueio (ABS) é outro
exemplo. Ao pulsar os travões de um automóvel, regulando ao mesmo tempo a
pressão que cada roda está a exercer, é possível continuar a direcção sem
perder o controlo, porque as rodas estão bloqueadas. Um último exemplo é
SOLUÇÕES DE PROBLEMAS PARA O
CAPÍTULO 3
7
formado pelo circuito fechado de sensores que monitorizam o estado do motor.
Assim que se atinge um estado perigoso, um automóvel pode parar
automaticamente para evitar o pior.
16. P: Dê um exemplo de um sistema de auto-gestão em que a compo- niência da
análise é completamente distribuída ou mesmo escondida.
R: Já nos deparámos com este tipo de sistema: em sistemas peer-to-peer não
estruturados em que os nós trocam informações sobre os membros, vimos
como se podia gerar um topol- ogy . A componente de análise consiste em
eliminar certas ligações que não ajudarão a convergir para a topologia
pretendida. Exemplos semelhantes podem ser encontrados noutros sistemas
deste tipo, como também referimos.
17. P: Esboce uma solução para determinar automaticamente o melhor
comprimento de traço para as políticas de replicação pré-determinadas no
Globule.
R: Um servidor de origem teria de utilizar os vestígios de Ti a Ti1 para verificar a
sua previsão da política para esse período. Pode simplesmente verificar se a
política que teria sido escolhida nos padrões de acesso reais é a mesma que foi
escolhida com base nos pedidos do período Ti1 a Ti1. Isto permitiria ao servidor
calcular o erro de previsão. Ao variar o comprimento do traço, o servidor de
origem poderia encontrar o comprimento para o qual a previsão é mínima.
Desta forma, obtém-se uma determinação automática do comprimento óptimo
do traço, contribuindo assim para a natureza de auto-gestão da Globule.
18. P: Utilizando software existente, desenhe e implemente um sistema BitTorrentbased para distribuir ficheiros para muitos clientes a partir de um único e
poderoso servidor. Os assuntos são simplificados utilizando um servidor Web
padrão que pode operar como rastreador.
SOLUÇÕES PARA OS PROBLEMAS DO CAPÍTULO 3
1. P: Neste problema deve comparar a leitura de um ficheiro utilizando um
servidor de ficheiros com uma única ronda e um servidor com várias rondas.
São necessários 15 msec para obter um pedido de trabalho, enviá-lo, e fazer o
resto do processamento necessário, assumindo que os dados necessários estão
numa cache na memória principal. Se for necessária uma operação em disco,
como é o caso de um terço do tempo, são necessários 75 msec adicionais,
durante os quais o fio dorme. Quantos pedidos/segundo pode o servidor tratar
se for um único thread? Se for multi-tarefa?
R: No caso de rosca única, o cache demora 15 msec e o cache demora 90 msec.
A média ponderada é de 2/3 15 1/3 90. Assim, o pedido médio demora 40
msec e o servidor pode fazer 25 por segundo. Para um servidor multi-fios, toda
a espera pelo disco é sobreposta, pelo que cada pedido demora 15 msec, e o
servidor pode tratar 66 pedidos de 2/3 por segundo.
8
SOLUÇÕES DE PROBLEMAS PARA O
CAPÍTULO 3
2. P: Faria sentido limitar o número de fios de um processo de servidor?
R: Sim, por duas razões. Em primeiro lugar, os fios requerem memória para a
criação da sua própria pilha privada. Consequentemente, ter muitos threads
pode consumir demasiada memória para que o servidor funcione
correctamente. Outra razão, mais grave, é que, para um sistema operativo, os
threads independentes tendem a funcionar num caótico man- ner. Num sistema
de memória virtual pode ser difícil construir um conjunto de trabalho
relativamente estável, resultando em muitas falhas de página e, portanto, de
E/S. Ter muitas roscas pode, assim, levar a uma degradação do desempenho
resultante do thrashing das páginas. Mesmo nos casos em que tudo encaixa na
memória, podemos facilmente ver que a memória é acedida seguindo um
padrão caótico, tornando os caches inúteis. Mais uma vez, o desempenho pode
degradar-se em comparação com a caixa de rosca única.
3. P: No texto, descrevemos um servidor de ficheiros multi-tarefa, mostrando
porque é que é apostado - ter do que um servidor de uma só-tarefa e um
servidor de uma máquina de estado finito. Há alguma circunstância em que um
servidor de um só fio possa ser melhor? Dê um exemplo.
R: Sim. Se o servidor estiver totalmente vinculado à CPU, não há necessidade
de ter vários threads. Pode apenas acrescentar complexidade desnecessária.
Como exemplo, considere um número de assistência de listas telefónicas para
uma área com 1 milhão de pessoas. Se cada registo (nome, número de telefone)
tiver, digamos, 64 caracteres, toda a base de dados leva 64 megabytes, e pode
ser facilmente guardada na memória do servidor para permitir uma pesquisa
rápida.
4. P: Associar estatisticamente apenas um único fio a um processo leve não é
uma ideia assim tão boa. Porque não?
R: Tal associação reduz-se efectivamente a ter apenas fios ao nível do núcleo,
o que implica que muito do ganho de desempenho de ter fios, em primeiro
lugar, se perde.
5. P: Ter apenas um único processo leve por processo também não é uma boa
ideia. Porque não?
R: Neste esquema, temos efectivamente apenas tópicos a nível do utilizador, o
que significa que qualquer chamada de sistema de bloqueio bloqueará todo o
processo.
6. P: Descreva um esquema simples em que existem tantos pró-cessos leves
como fios de rodagem.
R: Comece com um único LWP e deixe-o seleccionar um fio executável.
Quando um fio executável é encontrado, o LWP cria outro LWP para procurar
um próximo fio a executar. Se não for encontrado um thread executável, o
LWP destrói-se a si próprio.
7. P: X designa um terminal de utilizador como alojamento do servidor, enquanto
que a aplicação é referida como cliente. Isto faz sentido?
R: Sim, embora possa parecer um pouco confuso. A ideia geral é que o
servidor controla o hardware e a aplicação pode enviar pedidos para manipular
que
SOLUÇÕES DE PROBLEMAS PARA O
CAPÍTULO 3
9
hardware. Nesta perspectiva, o servidor X Window deve residir na máquina do
utilizador, tendo a aplicação a actuar como seu cliente.
8. P: O protocolo X sofre de problemas de escalabilidade. Como é que estes
problemas podem ser resolvidos?
R: Existem essencialmente dois problemas de escalabilidade. Primeiro, a
escalabilidade numérica é problemática, no sentido em que é necessária
demasiada largura de banda. Ao utilizar técnicas de com-pressão, a largura de
banda pode ser consideravelmente reduzida. Segundo, existe um problema de
escalabilidade geográfica como aplicação e o visor necessita geralmente de
sincronizar demasiado. Ao utilizar técnicas de cachinng, através das quais o
estado efectivo do ecrã é mantido no lado da aplicação, muito tráfego de
sincronização pode ser evitado, uma vez que a aplicação pode inspeccionar o
cache local para saber qual é o estado do ecrã.
9. P: Os procuradores podem apoiar a transparência das réplicas invocando cada
uma delas, como se explica no texto. Pode (o lado do servidor de) uma
aplicação ser sujeita a uma réplica de chamadas?
A: Sim: considerar um objecto replicado A invocar outro objecto (não replicado)
B. Se A consistir em k réplicas, será feita uma invocação de B por cada
réplica. No entanto, B deve normalmente ser invocado apenas uma vez. São
necessárias medidas especiais para lidar com tais invocações replicadas.
10. P: A construção de um servidor simultâneo através da desova de um processo
tem algumas vantagens e desvantagens em comparação com servidores
multithreaded. Mencione algumas.
A: Uma vantagem importante é que os processos separados estão protegidos
uns contra os outros, o que pode revelar-se necessário, como no caso de um
super servidor que trate serviços completamente independentes. Por outro
lado, a desova de processos é uma operação relativamente dispendiosa que
pode ser salva quando se utilizam servidores multithreaded. Além disso, se os
processos precisam de comunicar, então a utilização de threads é muito mais
barata, pois em muitos casos podemos evitar que o kernel implemente a communicação.
11. P: Desenhe o design de um servidor multithreaded que suporte protocolos
múltiplos utilizando sockets como interface de nível de transporte para o
sistema operativo subjacente.
A: Um design relativamente simples consiste em ter um único fio T à espera
de mensagens de transporte (TPDU) de entrada. Se assumirmos que o
cabeçalho de cada TPDU contém um número que identifica o protocolo de
nível superior, o piso pode pegar na carga útil e passá-la para o módulo para
esse protocolo. Cada um destes módulos tem uma linha separada à espera
desta carga útil, que é tratada como um pedido de entrada. Após o tratamento
do pedido, é transmitida uma mensagem de resposta a T , que, por sua vez, a
envolve numa mensagem de nível de transporte e a envia para o destino
adequado.
10
SOLUÇÕES DE PROBLEMAS PARA O
CAPÍTULO 3
12. P: Como podemos evitar que uma aplicação contorne uma janela homem-ager
e, assim, ser capaz de estragar completamente um ecrã?
R: Use uma abordagem de microkernel através da qual o sistema de janelas
incluindo o gerenciador de janelas é executado de tal forma que todas as
operações de janela são necessárias para passar pelo kernel. Na verdade, esta é
a essência da transferência do modelo cliente-servidor para um único
computador.
13. P: Um servidor que mantém uma ligação TCP/IP a um cliente está ou está
menos em estado?
R: Partindo do princípio que o servidor não mantém qualquer outra
informação sobre esse cliente, poderia justificadamente argumentar-se que o
servidor é apátrida. A questão é que, não o servidor, mas a camada de
transporte no servidor mantém o estado do cliente. O que os sistemas
operativos locais controlam não constitui, em princípio, qualquer preocupação
para o servidor.
14. P: Imagine um servidor Web que mantém uma tabela na qual os endereços IP
dos clientes são mapeados para as páginas Web mais recentemente acedidas.
Quando um cliente se liga ao servidor, o servidor procura o cliente na sua
tabela e, se encontrado, devolve a página registada. Este servidor é stateful ou
stateless?
R: Pode argumentar-se fortemente que se trata de um servidor sem Estado. A
questão importante com os desenhos sem Estado não é se o servidor mantém
alguma informação sobre os seus clientes, mas sim se essa informação é
necessária para ser correcta. Neste exemplo, se a tabela se perder por qualquer
razão, o cliente e o servidor ainda podem interagir adequadamente como se
nada tivesse acontecido. Num design stateful, tal interacção só seria possível
depois de o servidor ter recuperado de uma possível falha.
15. P: Uma forte mobilidade nos sistemas UNIX poderia ser suportada permitindo
um processo de bifurcação de uma criança numa máquina remota. Explique
como isto funcionaria.
R: Bifurcar em UNIX significa que uma imagem completa do progenitor é
copiada para a criança, o que significa que a criança continua logo após a
chamada para bifurcar. Uma abordagem semelhante poderia ser utilizada para a
clonagem remota, desde que a plataforma alvo seja exactamente a mesma que
a plataforma onde o progenitor está a executar. O primeiro passo é ter os
recursos de reserva do sistema operativo alvo e criar o processo e o mapa de
memória apropriados para o processo da nova criança. Depois disso, a imagem
do pai (em memória) pode ser copiada, e a criança pode ser activada. (Deve
ficar claro que estamos a ignorar aqui vários detalhes importantes).
16. P: Na Fig. 3-0 sugere-se que uma forte mobilidade não pode ser combinada
com a execução de código migrado num processo alvo. Dê um contraexemplo.
A: Se houver uma forte mobilidade através da migração dos fios, deve ser
possível executar um fio migrado no contexto do processo alvo.
SOLUÇÕES DE PROBLEMAS PARA O
CAPÍTULO 3
11
17. P: Considere um processo P que requer acesso ao ficheiro F que está
disponível localmente na máquina onde P está a funcionar actualmente.
Quando P se desloca para outra máquina, ainda requer acesso a F. Se a
ligação ficheiro a máquina for fixa, como poderia ser implementada a
referência a F em todo o sistema?
A: A solução mais simples é criar um processo Q separado que trate os pedidos
remotos para F. O processo P é oferecido a mesma interface para F como
antes, por exemplo, sob a forma de um proxy. Efectivamente, o processo Q
funciona como um servidor de ficheiros.
18. P: Descreva em detalhe como os pacotes TCP fluem no caso de transferência
TCP, juntamente com a informação sobre os endereços de origem e destino
nos vários head-ers.
R: Existem várias formas de o fazer, mas uma simples é deixar um front end
executar um aperto de mão de três vias e a partir daí avançar os pacotes para
um servidor seleccionado. Esse servidor envia PDUs TCP em que o endereço
de origem cor- responde ao do front end. Uma alternativa é reencaminhar o
primeiro pacote para um servidor. Note, no entanto, que neste caso, o front end
continuará a permanecer no laço. A vantagem deste esquema é que o servidor
selecionado constrói o estado TCP necessário (como os números de seqüência
a serem usados) em vez de obter esta informação do front end, como no
primeiro cenário.
SOLUÇÕES PARA OS PROBLEMAS DO CAPÍTULO 4
1. P: Em muitos protocolos estratificados, cada camada tem o seu próprio
cabeçalho. Seria certamente mais eficiente ter um único cabeçalho na frente de
cada mensagem com todo o controlo nela contido do que todos estes
cabeçalhos separados. Porque é que isto não é feito?
A: Cada camada deve ser independente das outras. Os dados transmitidos da
camada k 1 para a camada k contêm tanto o cabeçalho como os dados, mas a
camada k não pode dizer qual é qual. Ter um único grande cabeçalho que
todas as camadas pudessem ler e escrever destruiria esta transparência e
tornaria visíveis as alterações no protocolo de uma camada a outras camadas.
Isto é indesejável.
2. P: Porque é que os serviços de comunicação a nível dos transportes são muitas
vezes inadequados para a construção de aplicações distribuídas?
A: Dificilmente oferecem transparência na distribuição, o que significa que as
pessoas que se dedicam ao desenvolvimento de aplicações são obrigadas a
prestar uma atenção significativa à implementação da comunicação,
conduzindo frequentemente a soluções exclusivas. O efeito é que as aplicações
distribuídas, por exemplo, construídas directamente em cima de tomadas são
difíceis de transportar e de interoperar com outras aplicações.
3. P: Um serviço multicast fiável permite que um remetente passe mensagens de
forma fiável a um conjunto de receptores. Esse serviço pertence a uma camada
de middleware ou deve fazer parte de uma camada de nível inferior?
A: Em princípio, um serviço multicast fiável poderia facilmente fazer parte do
transporte
12
SOLUÇÕES DE PROBLEMAS PARA O
CAPÍTULO 3
camada, ou mesmo a camada de rede. A título de exemplo, o serviço de
multicast IP não fiável é implementado na camada de rede. No entanto, como
esses serviços não estão actualmente disponíveis, são geralmente
implementados utilizando serviços trans-port-level, o que os coloca
automaticamente no middleware. Ao ter em conta a escalabilidade, verifica-se
que a fiabilidade só pode ser garantida se forem considerados os requisitos da
aplicação. Este é um forte argumento a favor da implementação de tais
serviços a níveis mais elevados e menos gerais.
4. P: Considere um procedimento incrustado com dois parâmetros inteiros. O
procedimento adiciona um a cada parâmetro. Agora suponha que é chamado
com a mesma variável duas vezes, por exemplo, como incr(i, i). Se i for
inicialmente 0, que valor terá depois da ala se for utilizada a referência call-byreference? Que tal se for utilizada cópia/restauração?
A: Se for utilizada a chamada por referência, é passado um ponteiro para i para
incrustar. Será incrementado duas vezes, pelo que o resultado final será dois.
No entanto, com cópia/restore, i será passado por valor duas vezes, cada valor
inicialmente 0. Ambos serão incrementados, pelo que ambos serão agora 1.
Agora ambos serão copiados de volta, com a segunda cópia sobrepondo a
primeira. O valor final será 1 e não 2.
5. P: C tem uma construção chamada união, na qual um campo de registo
(chamado estrutura em C) pode conter qualquer uma das várias alternativas.
Em tempo de execução, não há uma forma segura de saber qual delas está lá.
Esta característica de C tem alguma implicação na chamada de procedimento
remoto? Explique a sua resposta.
R: Se o sistema de tempo de execução não puder dizer que tipo de valor está
no campo, não pode marcá-los correctamente. Assim, os sindicatos não podem
ser tolerados num sistema RPC, a menos que exista um campo de etiqueta que
diga inequivocamente o que o campo da variante contém. O campo da etiqueta
não deve estar sob controlo do utilizador.
6. P: Uma forma de lidar com a conversão de parâmetros em sistemas RPC é ter
cada máquina a enviar parâmetros na sua representação nativa, com a outra a
fazer a tradução, se necessário. O sistema nativo pode ser indicado por um
código no primeiro byte. No entanto, uma vez que a localização do primeiro
byte na primeira palavra é previamente cisificada, será que isso pode realmente
funcionar?
R: Em primeiro lugar, quando um computador envia byte 0, ele chega sempre
em byte 0. Assim, o computador de destino pode simplesmente aceder ao byte
0 (utilizando um byte de instrução) e o código estará nele. Não importa se este
é o byte de ordem baixa ou o byte de ordem alta. Um esquema alternativo
consiste em colocar o código em todos os bytes da primeira palavra. Depois,
independentemente do byte que for examinado, o código estará lá.
7. P: Assuma que um cliente chama um RPC assíncrono para um servidor, e
depois espera até que o servidor retorne um resultado utilizando outro RPC
assíncrono. Será esta abordagem o mesmo que deixar o cliente executar um
RPC normal? E se substituirmos os RPCs assíncronos por RPCs assíncronos?
R: Não, isto não é o mesmo. Um RPC assíncrono devolve um aviso de recepção
SOLUÇÕES DE PROBLEMAS PARA O
CAPÍTULO 3
13
ao chamador, o que significa que, após a primeira chamada do cliente, é
enviada uma mensagem adicional através da rede. Da mesma forma, o servidor
é reconhecido que a sua resposta foi entregue ao cliente. Dois RPCs
assíncronos podem ser os mesmos, desde que seja garantida uma comunicação
fiável. Geralmente não é este o caso.
8. P: Em vez de deixar um servidor registar-se com um daemon como no DCE,
poderíamos também optar por atribuir-lhe sempre o mesmo endpoint. Esse
endpoint pode então ser utilizado em referências a objectos no espaço de
endereçamento do servidor. Qual é a principal desvantagem deste esquema?
R: O principal inconveniente é que se torna muito mais difícil atribuir objectos
de forma dinâmica aos servidores. Além disso, muitos pontos finais precisam
de ser fixados, em vez de apenas um (ou seja, o do daemon). Para máquinas
que possivelmente tenham um grande número de servidores, a atribuição
estática de endpoints não é uma boa ideia.
9. P: Seria útil fazer também uma distinção entre RPC estáticos e dinâmicos?
R: Sim, pela mesma razão que é útil com invocações de objectos à distância:
sim, introduz mais flexibilidade. O inconveniente, no entanto, é que grande
parte da transparência da distribuição se perde, pelo que as ERT foram
introduzidas em primeiro lugar.
10. P: Descreva como a comunicação sem ligação entre um cliente e um servidor
se processa quando se utilizam tomadas.
R: Tanto o cliente como o servidor criam uma tomada, mas apenas o servidor
liga a tomada a um ponto final local. O servidor pode então fazer
subsequentemente uma chamada de leitura de bloqueio na qual espera pelos
dados recebidos de qualquer cliente. Da mesma forma, depois de criar o
socket, o cliente simplesmente faz uma chamada de bloqueio para escrever os
dados no servidor. Não há necessidade de fechar uma ligação.
11. P: Explique a diferença entre os mpi bsend primitivos e mpi isend em MPI.
A: O envio de mpi primitivo utiliza uma comunicação tamponada através da
qual o chamador passa um buffer inteiro contendo as mensagens a serem
enviadas, para o sistema local de MPI runtime. Quando a chamada é
concluída, as mensagens são enviadas por transferência ou copiadas para uma
memória intermédia local. Em contraste, com o mpi isend, o interlocutor passa
apenas um ponteiro para a mensagem para o sistema local de MPI runtime,
após o que esta continua imediatamente. O autor da chamada é responsável por
não sobrescrever a mensagem que é apontada até que tenha sido copiada ou
transferida.
12. P: Suponha que só poderia fazer uso de primitivas comuni- cações assíncronas
transitórias, incluindo apenas uma primitiva assíncrona que recebe primitivas.
Como implementaria as primitivas para a comunicação síncrona transitória?
R: Considere um envio síncrono primitivo. Uma implementação simples é
enviar uma mensagem para o servidor utilizando comunicação assíncrona e,
subsequentemente
14
SOLUÇÕES DE PROBLEMAS PARA O
CAPÍTULO 3
deixar que o autor da chamada faça uma pesquisa contínua para obter um
reconhecimento ou uma resposta do servidor. Se assumirmos que o sistema
operativo local armazena mensagens recebidas num buffer local, então uma
implementação alternativa é bloquear a pessoa que faz a chamada até receber
um sinal do sistema operativo de que uma mensagem chegou, após o que a
pessoa que faz a chamada faz uma recepção assíncrona.
13. P: Suponha que só poderia fazer uso de primitivas comuni- cações síncronas
transitórias. Como implementaria as primitivas para a comunicação assíncrona
transitória?
R: Esta situação é, de facto, mais simples. Um envio assíncrono é
implementado através de uma mensagem anexada a um buffer que é partilhado
com um processo que lida com a transferência efectiva da mensagem. Cada
vez que um cliente anexa uma mensagem ao buffer, acorda o processo de
envio, que subsequentemente remove o sábio da mensagem do buffer e envia o
seu destino utilizando uma chamada de bloqueio para o envio primitivo
original. O receptor é implementado de forma semelhante, oferecendo um
buffer que pode ser verificado para mensagens recebidas por uma aplicação.
14. P: Faz sentido implementar uma comunicação assíncrona persistente por meio
de RPCs?
R: Sim, mas apenas numa base "hop-to-hop", em que um processo de gestão
de uma fila passa uma mensagem a um gestor da fila seguinte através de um
RPC. Efectivamente, o serviço oferecido por um gestor de fila a outro é o
armazenamento de uma mensagem. Ao gestor da fila de chamadas é oferecida
uma implementação proxy da interface para a fila remota, possivelmente
recebendo um status indicando o sucesso ou falha de cada operação. Desta
forma, mesmo os gestores das filas de espera vêem apenas filas de espera e
nenhuma outra comunicação.
15. P: No texto, afirmamos que para iniciar automaticamente um processo de
recolha de mensagens de uma fila de entrada, é frequentemente utilizado um
daemon que monitoriza a fila de entrada. Dê uma implementação alternativa
que não faça uso de um dae- mon.
R: Um esquema simples é deixar um processo no lado do receptor verificar se
há mensagens recebidas cada vez que esse processo coloca uma mensagem na
sua própria fila.
16. P: As tabelas de encaminhamento na IBM WebSphere, e em muitos outros
sistemas de enfileiramento de mensagens, são configuradas manualmente.
Descreva uma forma simples de o fazer de forma automática.
R: A implementação mais simples é ter uma componente centralizada na qual
se mantém a topologia da rede em fila de espera. Essa componente
simplesmente calcula todas as melhores rotas entre pares de gestores de filas
usando um algoritmo de encaminhamento conhecido, e subsequentemente gera
tabelas de encaminhamento para cada homem-ager da fila. Estas tabelas
podem ser descarregadas separadamente por cada gestor. Esta abordagem
funciona em redes de enfileiramento onde existem apenas relativamente
poucos, mas possivelmente muito dispersos, gestores de filas.
SOLUÇÕES DE PROBLEMAS PARA O
CAPÍTULO 3
15
Uma abordagem mais sofisticada é descentralizar o algoritmo de
encaminhamento, fazendo com que cada gestor de filas descubra a topologia
da rede e calcule as suas próprias melhores rotas para outros gestores. Tais
soluções são amplamente aplicadas em redes com- puter. Não há qualquer
objecção de princípio à sua aplicação às redes de mensagens em fila de espera.
17. P: Com comunicação persistente, um receptor tem geralmente o seu próprio
buffer local onde as mensagens podem ser armazenadas quando o receptor não
está a ser executado. Para criar um tal buffer, podemos ter de especificar o seu
tamanho. Argumente porque é preferível, bem como um argumento contra a
especificação do tamanho.
R: O facto de o utilizador especificar a dimensão facilita a sua implementação.
O sys- tem cria um buffer com o tamanho especificado e é feito. A gestão de
buffers torna-se fácil. No entanto, se o buffer se encher, as mensagens podem
ser perdidas. O alter- nativo é ter o sistema de comunicação a gerir o tamanho
do buffer, começando com algum tamanho padrão, mas depois crescendo (ou
encolhendo) buffers conforme necessário. Este método reduz a chance de ter
que descartar mensagens por falta de espaço, mas requer muito mais trabalho
do sistema.
18. P: Explique por que razão a comunicação síncrona transitória tem problemas
de escalabilidade inerentes e de que forma estes podem ser resolvidos.
A: O problema é a reduzida escalabilidade geográfica. Como a comunicação
síncrona exige que a pessoa que faz a chamada seja bloqueada até que a sua
mensagem seja recebida, pode demorar muito tempo até que a pessoa que faz
a chamada possa continuar quando o receptor está longe. A única forma de
resolver este problema é conceber a aplicação que faz a chamada de modo a
que esta tenha outro trabalho útil a fazer enquanto a comunicação tem lugar,
estabelecendo assim uma forma de comunicação assíncrona.
19. P: Dê um exemplo em que a multicast também é útil para fluxos de dados
discretos.
R: Passar um ficheiro grande a muitos utilizadores como é o caso, por
exemplo, quando se actualizam sites espelho para serviços Web ou
distribuições de software.
20. P: Suponha que, numa rede de sensores, as temperaturas medidas não são
vezes - tamponadas pelo sensor, mas são imediatamente enviadas para o
operador. Seria suficiente garantir apenas um atraso máximo de ponta a ponta?
R: Na verdade, não se partirmos do princípio de que o operador ainda
precisaria de saber quando é que a medição teve lugar. Neste caso, pode ser
anexado um carimbo de data/hora quando a medição é recebida, mas isso
significaria que também deveríamos ter garantias para atrasos mínimos de
ponta a ponta.
21. P: Como garantir um atraso máximo de ponta a ponta quando uma colecção de
computadores é organizada num anel (lógico ou físico)?
R: Deixamos uma ficha circular o anel. Cada computador só está autorizado a
enviar dados através do anel (na mesma direcção que o símbolo) quando
possuir o símbolo. Além disso, nenhum computador está autorizado a deter a
ficha por mais de T
16
SOLUÇÕES DE PROBLEMAS PARA O
CAPÍTULO 3
segundos. Efectivamente, se assumirmos que a comunicação entre dois
computadores adjacentes está limitada, então a ficha terá um tempo máximo
de circulação, que corresponde a um atraso máximo de ponta a ponta para cada
pacote enviado.
22. P: Como garantir um atraso mínimo de ponta a ponta quando uma colecção de
computadores é organizada num anel (lógico ou físico)?
R: Estranhamente, isto é muito mais difícil do que garantir um atraso máximo.
O problema é que o computador receptor não deve, em princípio, receber os
dados antes de decorrido algum tempo. A única solução consiste em guardar
os pacotes o tempo que for necessário. O buffer pode ser feito no emissor, no
receptor ou algures no meio, por exemplo, em estações intermédias. O melhor
lugar para guardar temporariamente os dados é no receptor, porque nesse
momento não há mais obstáculos imprevistos que possam atrasar a entrega dos
dados. O receptor só precisa de remover os dados do seu buffer e passá-los
para a aplicação através de um mecanismo de simulação de tempo. O
inconveniente é que é necessário fornecer uma capacidade de memória tampão
suficiente.
23. P: Apesar de a multicast ser tecnicamente viável, há muito pouco apoio para a
sua implantação na Internet. A resposta a este problema deve ser procurada
nos modelos de negócio "down-to-earth": ninguém sabe realmente como fazer
dinheiro com o multicasting . Que esquema você pode inventar?
R: O problema é causado principalmente pelos ISP, uma vez que estes não
vêem motivos para poupar na largura de banda (os seus clientes estão a pagar
de qualquer forma). No entanto, as coisas podem mudar em cenários como os
que se seguem. Um serviço de difusão na Internet paga por uma certa
qualidade de serviço, tal como prometido por vários ISP. Cada um destes ISP
assistirá a uma quebra nas suas receitas quando não conseguir cumprir estes
requisitos de QoS. Nesta altura, podem agora ter um incentivo para começar a
implantar o multicasting, uma vez que podem oferecer um serviço melhor (e
garantido).
24. P: Normalmente, as árvores multicast a nível de aplicação são optimizadas
com respeito ao trecho, que é medido em termos de atraso ou contagem de
lúpulo. Dê um exemplo em que esta métrica pode levar a árvores muito
pobres.
A: O pressuposto subjacente com elasticidade é que a comunicação atrasa o
desempenho antes de dominar. No entanto, no caso, por exemplo, da
radiodifusão vídeo, é o disponível que conta. Nesse caso, gostaríamos de
construir árvores que maximizem os custos (medidos em termos de largura de
banda).
25. P: Ao procurar ficheiros num sistema peer-to-peer não estruturado, pode
ajudar a restringir a pesquisa aos nós que têm ficheiros semelhantes ao seu.
Explique como os mexericos podem ajudar a encontrar esses nós.
R: A ideia é muito simples: se, durante os mexericos, os nós trocarem
informações sobre os membros, todos os nós acabarão por ficar a conhecer
todos os outros nós do sistema. Cada vez que descobre um novo nó, ele pode
ser avaliado em relação à sua proximidade semântica, por exemplo, contando
o número de ficheiros em
SOLUÇÕES DE PROBLEMAS PARA O
CAPÍTULO 3
17
comum. Os nós semanticamente mais próximos são então seleccionados para
a apresentação de uma consulta de pesquisa.
SOLUÇÕES PARA OS PROBLEMAS DO CAPÍTULO 5
1. Q: Dê um exemplo de onde um endereço de uma entidade E precisa de ser
resolvido noutro endereço para aceder efectivamente a E.
A: Os endereços IP na Internet são utilizados para endereçar os anfitriões.
Contudo, para aceder a um anfitrião, o seu endereço IP tem de ser resolvido,
por exemplo, para um endereço Ethernet.
2. P: Considera que um URL como http://www.acme.org/index.html é
independente da localização? E o http://www.acme.nl/index.html?
R: Ambos os nomes podem ser independentes da localização, embora o
primeiro dê menos pistas sobre a localização da entidade nomeada.
Independente da localização significa que o nome da entidade é independente
do seu endereço. Ao considerar apenas um nome, nada pode ser dito sobre o
endereço da entidade associada.
3. P: Dê alguns exemplos de verdadeiros identificadores.
A: Exemplos são números ISBN para livros, números de identificação para
produtos de software e hardware, números de empregados dentro de uma única
organização e endereços Ethernet (embora alguns endereços sejam usados para
identificar uma máquina em vez de apenas a placa Ethernet).
4. P: É permitido que um identificador contenha informações sobre a entidade a que se
refere?
R: Sim, mas essa informação não pode ser alterada, porque isso implicaria a
alteração do identificador. O antigo identificador deve permanecer válido, pelo
que a sua alteração implicaria que uma entidade tivesse dois identificadores,
violando a segunda propriedade dos identificadores.
5. P: Descreva uma implementação eficiente de identificadores únicos a nível mundial.
A: Esses identificadores podem ser gerados localmente da seguinte forma.
Tomar o endereço de rede da máquina onde o identificador é gerado, anexar a
hora local a esse endereço, juntamente com um número pseudo-aleatório
gerado. Embora, em teoria, seja possível que outra máquina no mundo possa
gerar o mesmo número, as hipóteses de isso acontecer são insignificantes.
6. P: Considere o sistema de acordes como mostrado na Fig. 5-0 e assuma que o
nó 7 acabou de entrar na rede. Qual seria a sua tabela de dedos e haveria
alguma alteração nas outras tabelas de dedos?
R: Consideremos primeiro a tabela dos dedos para o nó 7. Utilizando o mesmo
método que introduzimos quando discutimos o acorde, podemos ver que esta
tabela será [9, 9, 11, 18, 28]. Por exemplo, a entrada #2 é
computada como succ(7 21) succ(9) . Mais tabelas terão, no entanto, de
ser alteradas em
18
SOLUÇÕES DE PROBLEMAS PARA O
CAPÍTULO 3
nomeadamente os do nó 4 (que passa a ser [7,7,9,14,28]), do nó 21
([28,28,28,1,7]) e do nó 1 ([4,4,7,9,18]).
7. P: Considere um sistema baseado no Chord DHT para o qual foram reservados
k bits de um espaço de identificação de m-bits para atribuição a superpeers. Se
os identificadores forem atribuídos a um sistema de nó N, quantos superpeers é
que se pode esperar ter num sistema de nó N?
A: O número total de superpontos numa sobreposição de nós será igual a
min{2km N , 2k }.
8. P: Se inserirmos um nó num sistema de acordes, será necessário actualizar
instantaneamente todas as tabelas de dedos?
R: Felizmente, não. Considere a questão anterior e assuma que apenas a tabela
de dedos do nó #7 está instalada e que os restantes são mantidos como estão. O
pior que pode acontecer é que um pedido de olhar para cima, digamos, a chave
5, é encaminhado para o nó #9 em vez do #7. No entanto, o nó #9 sabe que o
nó #7 aderiu ao sistema e pode, portanto, tomar medidas correctivas.
9. P: Qual é o maior inconveniente da procura recorrente quando se resolve uma
chave num sistema baseado em DHT?
R: Um problema é que o cliente requerente nunca será capaz de descobrir o
que correu mal quando nenhuma resposta é devolvida. Algures ao longo do
percurso que o cor- responde à resolução da chave, uma mensagem pode ter
sido perdida ou um nó pode ter falhado. Por esta razão, por vezes é preferível
uma pesquisa iterativa: o cliente saberá exactamente que parte da pesquisa não
foi feita e poderá ser capaz de escolher um nó alternativo para ajudar.
10. Q: Uma forma especial de localização de uma entidade é denominada
anycasting, através da qual um serviço é identificado através de um endereço
IP (ver, por exemplo, Enviar um pedido para um endereço anycast, devolve
uma resposta de um servidor que implementa o serviço identificado por esse
endereço anycast). Descrever a implementação de um serviço anycasting com
base no serviço de localização hierárquica descrito no ponto 5.2.4.
R: Cada serviço tem um identificador único associado a ele. Qualquer servidor
que implemente esse serviço, insere o seu endereço de rede no serviço de
localização no nó de directório do domínio da folha em que o servidor reside.
Os pedidos de consulta utilizam o identificador do serviço e devolvem
automaticamente o servidor mais próximo que implementa esse serviço.
11. P: Considerando que uma abordagem a dois níveis, baseada em casa, é uma
especialização de um serviço de localização hierárquica, onde está a raiz?
R: A raiz é formada conjuntamente por todos os locais de residência, mas é
dividida de tal forma que cada entidade móvel tem o seu próprio servidor raiz.
SOLUÇÕES DE PROBLEMAS PARA O
CAPÍTULO 3
19
12. P: Suponha que se sabe que uma entidade móvel específica quase nunca sairá
do domínio D e, se o fizer, é de esperar que regresse em breve. Como pode
esta informação ser utilizada para acelerar a operação de pesquisa num serviço
de localização hierárquica?
A: Basta codificar o domínio D no identificador da entidade que é utilizada
para a operação de pesquisa. A operação pode então ser imediatamente
reencaminhada para o nó de directório dir(D), a partir do qual a pesquisa
continua.
13. P: Num serviço de localização hierárquica com uma profundidade de k,
quantos registos de localização precisam de ser actualizados, no máximo,
quando uma entidade móvel altera a sua localização?
R: A mudança de local pode ser descrita como a combinação de uma inserção
e uma operação de eliminação. Uma operação de inserção requer que na pior
das hipóteses k 1 registos de localização sejam alterados. Do mesmo modo,
uma operação de apagar também exige a alteração dos registos k 1, em que o
registo na raiz é partilhado entre as duas operações. Isto leva a um total de 2k 1
registos.
14. P: Considere uma entidade que se desloque do local A para o B, passando por
vários locais intermédios onde residirá apenas durante um período
relativamente curto. Quando chega a B, instala-se durante algum tempo. A
alteração de um endereço num serviço de localização hierárquica pode ainda
demorar um tempo relativamente longo a completar, pelo que deve ser evitada
quando se visita um local intermédio. Como pode a entidade estar localizada
num local intermédio?
A: Combinar o serviço de localização hierárquica com apontadores de
encaminhamento. Quando a entidade começa a mover-se, deixa para trás um
ponteiro de encaminhamento em A para a sua próxima localização
(intermédia). Cada vez que se move novamente, um ponteiro de
reencaminhamento é deixado para trás. Ao chegar a B, a entidade insere o seu
novo endereço no serviço de localização hierárquico - cal. A cadeia de
apontadores é posteriormente limpa, e o endereço em A é eliminado.
15. P: O nó raiz nos serviços de localização hierárquica pode tornar-se um
potencial gargalo de bot- tleneck. Como pode este problema ser contornado de
forma eficaz?
R: Uma observação importante é que estamos a utilizar apenas cordas de bits
aleatórios como identificadores. Como resultado, podemos facilmente dividir o
espaço identificador e instalar um nó raiz separado para cada parte. Além
disso, o nó raiz particionado deve ser espalhado pela rede para que o acesso ao
mesmo também seja espalhado.
16. P: Dê um exemplo de como o mecanismo de encerramento de um URL poderia
funcionar.
R: Assumindo que um processo sabe que está lidando com um URL, ele
primeiro extrai o identificador do esquema do URL, tal como a string ftp:. Em
seguida, ele pode procurar esta string em uma tabela para encontrar uma
interface para uma implementação local do protocolo FTP. A parte seguinte do
mecanismo de fechamento consiste em extrair o nome do host do URL, como
www.cs.vu.nl, e passar esse nome para o servidor de nomes DNS local. Saber
onde e como contactar o servidor DNS é uma parte importante do mecanismo
de encerramento. É frequentemente codificado no
20
SOLUÇÕES DE PROBLEMAS PARA O
CAPÍTULO 3
URL name resolver que o processo está a executar. Finalmente, a última parte
do URL, que se refere a um ficheiro que deve ser consultado, é passada para o
anfitrião identificado. Este último utiliza o seu próprio mecanismo de
encerramento local para iniciar a resolução do nome do ficheiro.
17. P: Explique a diferença entre uma ligação dura e uma ligação suave nos
sistemas UNIX. Há coisas que podem ser feitas com uma ligação dura que não
podem ser feitas com uma ligação suave ou vice-versa?
R: Uma hiperligação é uma entrada nomeada num ficheiro de directório que
aponta para o mesmo descritor de ficheiro que outra entrada nomeada
(eventualmente num directório diferente). Uma ligação sym- bolic é um
ficheiro que contém o nome (cadeia de caracteres) de outro ficheiro. Com uma
ligação soft pode ligar-se a uma partição de disco diferente ou mesmo a uma
máquina diferente.
18. P: Os servidores de nomes de alto nível no DNS, ou seja, os servidores de
nomes que implementam nós no espaço de nomes do DNS que estão próximos
da raiz, geralmente não suportam a resolução recursiva de nomes. Podemos
esperar muitas melhorias de desempenho se o fizerem?
R: Provavelmente não: dado que os servidores de nomes de alto nível
constituem a camada global do espaço de nomes do DNS, é de esperar que não
ocorram frequentemente alterações a essa parte do espaço de nomes.
Consequentemente, o caching será altamente eficaz e, de qualquer modo, será
evitada uma comunicação de longo curso. Note-se que a resolução recursiva de
nomes para servidores de nomes de baixo nível é importante, porque, nesse
caso, a resolução de nomes pode ser mantida localmente no domínio de nível
inferior em que a resolução está a ter lugar.
19. P: Explique como o DNS pode ser utilizado para implementar uma abordagem
baseada na localização de hosts móveis em casa.
R: O nome DNS de um host móvel seria utilizado como identificador
(bastante pobre) para esse host. Sempre que o nome for resolvido, deverá
devolver o endereço IP actual do anfitrião. Isto implica que o servidor DNS
responsável pelo fornecimento desse endereço IP actuará como servidor de
nomes do anfitrião. Cada vez que o anfitrião se desloca, contacta este servidor
de origem e fornece-lhe o seu endereço actual. Note-se que deve estar
disponível um mecanismo para evitar o cache do endereço. Por outras palavras,
os outros servidores de nomes devem ser avisados para não armazenarem o
endereço encontrado.
20. P: Como se vê um ponto de montagem na maioria dos sistemas UNIX?
A: Por meio de uma tabela de montagem que contém um ponto de entrada
para o ponto de montagem. Isto significa que, quando um ponto de montagem
deve ser vigiado, temos de percorrer a tabela de montagem para ver qual a
entrada que corresponde a um determinado ponto de montagem.
21. P: Considere um sistema de arquivo distribuído que utilize espaços por nome
de usuário. Por outras palavras, cada utilizador tem o seu próprio espaço de
nome privado. Os nomes desses espaços de nomes podem ser utilizados para
partilhar recursos entre dois utilizadores diferentes?
R: Sim, desde que os nomes nos espaços de nomes por utilizador possam ser
resolvidos para nomes
SOLUÇÕES DE PROBLEMAS PARA O
CAPÍTULO 3
21
num espaço de nome comum e global. Por exemplo, dois nomes idênticos em
espaços de nomes diferentes são, em princípio, completamente independentes
e podem referir-se a entidades diferentes. Para partilhar entidades, é necessário
referir-se a elas por nomes de um espaço de nomes partilhados. Por exemplo, a
Jade baseia-se em nomes DNS e endereços IP que podem ser utilizados para se
referir a entidades partilhadas, tais como sítios FTP.
22. P: Considere o DNS. Para se referir a um nó N de um subdomínio
implementado como uma zona diferente do domínio actual, é necessário
especificar um servidor de nomes para essa zona. É sempre necessário incluir
um registo de recursos para o endereço desse servidor, ou por vezes é suficiente
fornecer apenas o seu nome de domínio?
A: Quando o servidor de nomes é representado por um nó NS num domínio que
não aquele em que N está contido, basta dar apenas o seu nome de domínio.
Nesse caso, o nome pode ser consultado através de uma consulta DNS
separada. Isto não é possível quando NS se encontra no mesmo subdomínio
que N, pois nesse caso, seria necessário contactar o servidor de nomes para
descobrir o seu endereço.
23. P: A contagem de ficheiros comuns é uma forma bastante ingénua de definir a
proximidade semântica. Partindo do princípio de que constrói redes semânticas
sobrepostas com base em documentos de texto, que outra função de
proximidade semântica lhe ocorre?
R: Uma coisa intrigante é ver o conteúdo real, quando possível. No caso dos
documentos, poder-se-iam considerar as funções de semelhança derivadas da
recuperação de informação, tais como o Vector Space Model (VSM).
24. P: Configure o seu próprio servidor DNS. Instale o BIND numa máquina
Windows ou UNIX e configure-o para alguns nomes simples. Teste a sua
configuração utilizando ferramentas como o Domain Information Groper
(DIG). Certifique-se de que a sua base de dados DNS inclui registos para
servidores de nomes, servidores de correio e servidores padrão. Note que se
estiver a executar BIND numa máquina com nome de anfitrião HOSTNAME,
deverá ser capaz de resolver nomes do formulário RESOURCENAME.HOSTNAME.
SOLUÇÕES PARA OS PROBLEMAS DO CAPÍTULO 6
1. P: Indique pelo menos três fontes de atraso que podem ser introduzidas entre a
WWV que transmite a hora e os processadores num sistema distribuído que
fixa os seus relógios internos.
R: Em primeiro lugar, temos um atraso na propagação do sinal na atmosfera.
Segundo, podemos ter um atraso de colisão enquanto as máquinas com os
receptores WWV lutam para entrar na Ethernet. Terceiro, há um atraso na
propagação de pacotes na LAN. Quarto, há atraso em cada processador após a
chegada do pacote, devido à interrupção pro- cessing e aos atrasos na fila
interna.
22
SOLUÇÕES DE PROBLEMAS PARA O
CAPÍTULO 3
2. P: Considere o comportamento de duas máquinas em um sistema distribuído.
Ambas têm relógios que devem funcionar 1000 vezes por milissegundo. Uma
delas faz, mas a outra faz apenas 990 carrapatos por milissegundo. Se as
actualizações UTC chegam uma vez por minuto, qual é a inclinação máxima do
relógio que irá ocorrer?
A: O segundo relógio marca 990.000 vezes por segundo, dando um erro de 10
msec por segundo. Num minuto, este erro aumentou para 600 msec. Outra
forma de olhar para ele é que o segundo relógio é um por cento lento, assim
após um minuto está desligado por 0. 01 60 seg, ou 600 msec.
3. P: Um dos dispositivos modernos que se introduziu (silenciosamente) no
sistema distribuído são os receptores GPS. Dê exemplos de aplicações
distribuídas que podem fazer uso da informação GPS.
R: Um exemplo típico que me vem à mente é o desporto e os cuidados de
saúde. Existem agora redes de áreas corporais baseadas no GPS que permitem
a uma pessoa acompanhar o seu ritmo enquanto pratica um desporto ao ar
livre. Estas redes são frequentemente aumentadas com monitores do ritmo
cardíaco e podem ser ligadas a um computador para reduzir os dados captados
para análise posterior. Outro exemplo é formado pelo equipamento car-navigation, que é geralmente baseado em receptores GPS. Ligado a um computador
pessoal (portátil) que pode ser ligado à Internet, mapas e outros podem ser
continuamente actualizados. Estão relacionados sistemas distribuídos baseados
em GPS para rastrear o movimento de carros e caminhões.
4. P: Quando um nó sincroniza o seu relógio com o de outro nó, é geralmente
uma boa ideia ter também em conta as medições anteriores. Porquê? Dê
também um exemplo de como essas leituras passadas podem ser tidas em
conta.
R: A razão óbvia é que pode haver um erro na leitura actual. Assumindo que
os relógios só precisam de ser ajustados gradualmente, uma possibilidade é
considerar os últimos valores N e calcular uma mediana ou média. Se o valor
medido estiver fora de um intervalo de corrente, não é tido em conta (mas é
acrescentado à lista). Do mesmo modo, um novo valor pode ser calculado
tomando uma idade média ponderada, ou um algoritmo de envelhecimento.
5. P: Adicione uma nova mensagem à figura 6-0 que seja concorrente da
mensagem A, ou seja, que não aconteça antes de A nem aconteça depois de A.
A: A solução não pode envolver 0 ou seria ordenada. Assim, deve ser uma
mensagem de 1 para 2 ou de 2 para 1. Se partir ou chegar de 1 após 16, será
ordenada em relação a A, pelo que deve partir ou chegar antes de 16. As
possibilidades são uma mensagem saindo do processo 2 a 0 e chegando ao
processo 1 a 8, ou uma mensagem saindo do processo 1 a 0 e chegando ao
processo 2 a 10. Ambas são simultâneas com o processo A.
SOLUÇÕES DE PROBLEMAS PARA O
CAPÍTULO 3
23
6. P: Para conseguir um multicasting totalmente ordenado com carimbos
temporais Lamport, é estritamente necessário que cada mensagem seja
reconhecida?
R: Não, é suficiente fazer a multicast de qualquer outro tipo de mensagem,
desde que essa mensagem tenha um carimbo temporal maior do que a
mensagem recebida. A condição para a entrega de uma mensagem m à
aplicação é que tenha sido recebida outra mensagem de cada um dos processos
com um carimbo de data/hora maior. Isto garante que não há mais mensagens
em curso com um carimbo de data/hora mais baixo.
7. P: Considere um nível de comunicação em que as mensagens são entregues
apenas pela ordem em que foram enviadas. Dê um exemplo em que mesmo
esta encomenda é desnecessariamente restritiva.
R: Imagine a transferência de uma grande imagem que, para esse fim, foi
dividida em blocos consecutivos. Cada bloco é identificado pela sua posição na
imagem original, e possivelmente também pela sua largura e altura. Nesse
caso, a encomenda FIFO não é necessária, uma vez que o receptor pode
simplesmente colar cada bloco recebido na posição correcta.
8. P: Muitos algoritmos distribuídos requerem a utilização de um processo de
coordenação. Em que medida podem esses algoritmos ser efectivamente
considerados distribuídos? Discuta.
R: Num algoritmo centralizado, existe frequentemente um processo fixo que
actua como coordenador. A distribuição provém do facto de os outros
processos funcionarem em máquinas diferentes. Nos algoritmos distribuídos
com um coordenador não fixo, o coordenador é escolhido (de forma
distribuída) entre os processos que fazem parte do algoritmo. O facto de existir
um coordenador não faz com que o algoritmo seja menos distribuído.
9. P: Na abordagem centralizada da exclusão mútua (Fig. 6-0), ao receber uma
mensagem de um processo que liberta o seu acesso exclusivo aos recursos que
estava a utilizar, o coordenador autoriza normalmente o primeiro processo na
fila de espera. Dê outro algoritmo possível para o coordenador.
A: Os pedidos podem ser associados a níveis de prioridade, consoante a sua
importância. O coordenador poderia então conceder primeiro o pedido de
prioridade mais elevada.
10. P: Considere novamente a figura 6-0. Suponhamos que o coordenador se
despedace. Será que isto faz sempre cair o sistema? Se não, em que
circunstâncias é que isto acontece? Existe alguma forma de evitar o problema
e de tornar o sistema capaz de tolerar falhas do coordenador?
R: Suponha que o algoritmo é tal que cada pedido é respondido
imediatamente, quer com permissão, quer com recusa. Se não houver
processos a aceder aos recursos e se não houver processos em fila de espera,
então um acidente não é fatal. O próximo processo de pedido de autorização
não obterá qualquer resposta, e pode iniciar a escolha de um novo
coordenador. O sistema pode ser ainda mais robusto se o coordenador
armazenar todos os pedidos recebidos em disco antes de enviar uma resposta.
Desta forma, em caso de acidente, o novo coordenador pode reconstruir o
sistema
24
SOLUÇÕES DE PROBLEMAS PARA O
CAPÍTULO 3
a lista dos recursos acessados e a fila de espera lendo o arquivo a partir do disco.
11. P: O algoritmo de Ricart e Agrawala tem o problema de que, se um processo
falhar e não responder a um pedido de acesso a um recurso de outro processo,
a falta de resposta será interpretada como negação de autorização. Sugerimos
que todos os pedidos sejam respondidos imediatamente para facilitar a
detecção de processos falhados. Haverá circunstâncias em que mesmo este
método seja insuficiente? Discutam.
R: Suponhamos que um processo nega a autorização e depois cai. O processo
de pedido pensa que está vivo, mas a autorização nunca chegará. Uma saída é
o requerente não bloquear, mas sim adormecer durante um determinado
período de tempo, após o que se procede a um inquérito a todos os processos
que tenham negado autorização para ver se ainda estão a decorrer.
12. P: Como é que as entradas da Fig. 6-0 mudam se assumirmos que os
algoritmos podem ser implementados numa LAN que suporta emissões de
hardware?
A: Apenas as entradas relativas ao processo distribuído são alteradas. Como
enviar uma mensagem ponto-a-ponto é tão caro como fazer uma transmissão,
só precisamos de enviar uma mensagem de transmissão para todos os
processos que requerem acesso ao recurso. Da mesma forma, só é necessária
uma mensagem de difusão de lançamento. O atraso passa a ser 1 (n ): um
atraso proveniente do pedido de difusão, e um atraso adicional n 1, uma vez
que ainda precisamos de receber uma mensagem de cada um dos outros
processos antes de sermos autorizados a aceder ao recurso.
13. P: Um sistema distribuído pode ter recursos múltiplos e independentes.
Imagine que o processo 0 quer aceder ao recurso A e o processo 1 quer aceder
ao recurso B. O algoritmo de Ricart e Agrawala pode conduzir a bloqueios?
Explique a sua resposta.
R: Depende das regras do jogo. Se os processos acedem aos recursos de forma
estritamente sequencial, ou seja, um processo que detém um recurso pode não
tentar aceder a outro, então não há forma de o bloquear enquanto detém um
recurso que outro processo pretende. O sistema fica então livre de bloqueios.
Por outro lado, se o processo 0 puder conter o recurso A e depois tentar aceder
ao recurso B, pode ocorrer um impasse se algum outro processo tentar
adquiri-los na ordem inversa. O algoritmo Ricart e Agrawala em si não
contribui para o dead-lock uma vez que cada recurso é tratado
independentemente de todos os outros.
14. P: Suponha que dois processos detectam o desaparecimento do coordenador
simultane- ously e que ambos decidem realizar uma eleição utilizando o
algoritmo do bully. O que aconteceu?
R: Cada um dos processos com números mais elevados receberá duas
mensagens ELECÇÃO, mas ignorará a segunda. A eleição prosseguirá como
habitualmente.
SOLUÇÕES DE PROBLEMAS PARA O
CAPÍTULO 3
25
15. P: Na Fig. 6-0 temos duas mensagens ELECTION a circular simultaneamente.
Embora não faça mal nenhum ter duas delas, seria mais elegante se uma delas
pudesse ser morta. Conceba um algoritmo para fazer isto sem afectar o
funcionamento do algoritmo básico de eleição.
R: Quando um processo recebe uma mensagem ELECÇÃO, verifica quem o
iniciou. Se foi ela própria que a iniciou (ou seja, o seu número está à cabeça da
lista), transforma a mensagem numa mensagem COORDENADORA, tal como
descrito no texto. Se não iniciou nenhuma mensagem ELECÇÃO, acrescenta o
seu número de processo e envia-a ao longo do anel. No entanto, se enviou a
sua própria mensagem ELECTION mais cedo e acabou de descobrir um
concorrente, compara o número do processo de origem com o seu próprio
número de processo. Se o outro processo tiver um número inferior, descarta a
mes- sage em vez de a passar adiante. Se o concorrente for superior, a
mensagem é para- acautelada da forma habitual. Desta forma, se forem
iniciadas várias mensagens ELECTION, aquele cuja primeira entrada é mais
alta sobrevive. As restantes são mortas ao longo do percurso.
16. P: Os sistemas UNIX oferecem muitas facilidades para manter os
computadores em sincronia. Notavelmente a combinação da ferramenta
crontab (que permite agendar operações automaticamente) e vários comandos
de sincronização são poderosos. Configure um UNIX que mantém a hora local
precisa no intervalo de um único segundo. Da mesma forma, configure um
recurso de backup automático pelo qual vários arquivos cruciais são
automaticamente transferidos para uma máquina remota a cada 5 minutos. A
sua solução deve ser eficiente no que diz respeito à utilização da largura de
banda.
SOLUÇÕES PARA OS PROBLEMAS DO CAPÍTULO 7
1. P: O acesso a objectos Java partilhados pode ser serializado declarando os seus
métodos como estando sincronizados. Isto é suficiente para garantir a
serialização quando um objecto deste tipo é replicado?
R: Não. O problema é que o acesso a cada réplica é feito em série. No entanto,
operações diferentes em diferentes réplicas podem ser executadas ao mesmo
tempo, deixando as variáveis da instância replicada num estado inconsistente.
2. P: Explique nas suas próprias palavras qual é a principal razão para considerar
realmente modelos de fraca consistência.
A: Os modelos de fraca consistência resultam da necessidade de replicar para o
desempenho. No entanto, a replicação eficiente só pode ser feita se
conseguirmos evitar as sincronizações globais, o que, por sua vez, pode ser
conseguido através do afrouxamento da consistência das bandas.
3. P: Explique como se processa a replicação no DNS e por que razão funciona
realmente tão bem.
R: A ideia básica é que o cache de servidores de nomes já tenha analisado resultados.
26
SOLUÇÕES DE PROBLEMAS PARA O
CAPÍTULO 3
Estes resultados podem ser mantidos em cache durante muito tempo, porque o
DNS parte do princípio de que os mapeamentos de nome para endereço não
mudam frequentemente.
4. P: Durante a discussão dos modelos de coerência, referimo-nos
frequentemente ao trato entre o software e o armazenamento de dados. Porque
é necessário um contrato deste tipo?
R: Se um programa espera um armazenamento de dados sequencialmente
consistente e não pode viver com nada menos, a loja deve fornecer consistência
sequencial. No entanto, para melhorar o desempenho, alguns sistemas fornecem
um modelo mais fraco. É então essencial que o software aceite cumprir as
regras impostas por este modelo. Gen- erally, significa que os programas que
obedecem às regras irão perceber o que parece ser um armazenamento de dados
sequencialmente consistente.
5. P: Tendo em conta as réplicas da Fig. 7-0, o que seria necessário fazer para
finalizar os valores no cone de forma a que tanto A como B vejam o mesmo
resultado?
A: Neste caso, é relativamente simples: se A e B trocarem a sua lista de
operações provisórias e posteriormente as ordenarem de acordo com o tempo,
então ambos poderão ver o mesmo resultado.
6. P: Na Fig. 7-0, 001110 é uma saída legal para uma memória sequencialmente
consistente? Explique a sua resposta.
R: Sim. Se os processos forem executados pela ordem a), c), b), este resultado é
obtido.
7. P: Argumenta-se frequentemente que os modelos de fraca coerência impõem
um encargo adicional aos programadores. Em que medida é que esta afirmação
é realmente verdadeira?
R: Depende realmente. Muitos programadores são utilizados para proteger os
seus dados partilhados através de mecanismos de sincronização, tais como
bloqueios ou transacções. A ideia principal é que eles requerem um grão mais
grosseiro de simultaneidade do que um oferecido ao nível de apenas operações
de leitura e escrita. No entanto, os programadores esperam que as operações
sobre variáveis de sincronização adiram à consistência sequencial.
8. P: A encomenda total de multicasting através de um sequenciador e, por uma
questão de coerência na replicação activa, viola o argumento de ponta a ponta
na concepção do sistema?
R: Sim. O argumento de extremo a extremo afirma que os problemas devem
ser resolvidos ao mesmo nível em que ocorrem. Neste caso, estamos a lidar
com o problema da multicasting totalmente ordenada para se conseguir
coerência na replicação activa. Nos protocolos de base primária, a coerência é
conseguida através do primeiro encaminhamento de todas as operações para a
primária. Utilizando um sequenciador, estamos de facto a fazer o mesmo, mas
a um nível inferior de abstracção. Neste caso, pode ter sido melhor utilizar um
protocolo de base primária em que as actualizações são propagadas através do
envio de opera- ções.
9. P: Que tipo de coerência utilizaria para implementar um mercado electrónico
de acções? Explique a sua resposta.
A: A coerência causal é provavelmente suficiente. A questão é que as reacções a
SOLUÇÕES DE PROBLEMAS PARA O
CAPÍTULO 3
27
As alterações dos valores das existências devem ser coerentes. As variações
nos stocks que são endividados podem ser vistas em diferentes ordens.
10. P: Considerar uma caixa de correio pessoal para um utilizador móvel,
implementada como parte de uma base de dados distribuída por uma vasta
área. Que tipo de coerência centrada no cliente seria mais adequado?
R: Na verdade, todos eles. O que se resume a isso é que o proprietário deve
ver sempre a mesma caixa de correio, independentemente de a estar a ler ou a
actualizar. De facto, a implementação mais simples para uma caixa de correio
deste tipo pode muito bem ser a de um protocolo de escrita local com base
numa primeira fase, em que a primeira está sempre localizada no computador
móvel do utilizador.
11. P: Descreva uma implementação simples da consistência de leitura e escrita
para páginas da Web que acabaram de ser actualizadas.
R: A implementação mais simples é deixar o browser verificar sempre se está
a mostrar a versão mais recente de uma página. Isto requer o envio de um
pedido para o servidor Web. Este esquema é simples, pois já está
implementado por muitos sistemas.
12. P: Para simplificar, partimos do princípio de que não existiam conflitos de
escrita em Bayou. É claro que esta é uma hipótese irrealista. Explicar como
podem acontecer os conflitos.
R: Há muitas ocasiões em que podem ocorrer conflitos. Por exemplo, a nãoinclusão impede um cliente de utilizar uma agenda partilhada. Nesse caso, as
actualizações podem con- sistar uma reunião numa altura em que o cliente já
tenha agendado outra coisa, mas esta informação ainda não tinha sido
propagada a outras réplicas.
13. P: Ao utilizar um aluguer, é necessário que os relógios de um cliente e do
servidor, respectivamente, estejam bem sincronizados?
R: Não. Se o cliente tiver uma visão pessimista relativamente ao nível em que
o seu relógio está sincronizado com o do servidor, tentará obter um novo
aluguer muito antes de o actual expirar.
14. P: Afirmámos que a multicastagem totalmente ordenada utilizando os relógios
lógicos de Lamport não tem escala. Explique porquê.
R: A forma como o Lamport está totalmente ordenado exige que todos os
servidores estejam a funcionar, impedindo efectivamente o desempenho
quando um deles se revela lento ou se despenhou. Isto terá de ser detectado por
todos os outros servidores. À medida que o número de servidores aumenta,
este problema agrava-se.
15. Q: Mostrar que, em caso de consistência contínua, ter um servidor Sk avança a
sua visão TWk(i, k) sempre que receber uma nova actualização que aumente
TWk(k, k) TWk(i, k) para além de δ i / N ), garante que v(t) vi  i.
A: Que este avanço é de facto correcto pode facilmente ser visto como
28
SOLUÇÕES DE PROBLEMAS PARA O
CAPÍTULO 3
segue-se:
N
N
v(t) vi ( v(0) TW [k, k] ) ( v(0) TW [i, k] )
k 1
k 1
N
 ( TW [k, k] TW [i, k] )
k 1
N
 [ TW [k, k] TWk[i, k] ]
(N ) δ i / (N ) δ i
k 1
Note-se que o factor (N ) advém do facto de TW [k, k] TWk[k, k] , pelo qual
podemos eliminar um termo na soma.
16. P: Para uma consistência contínua, assumimos que cada escrita apenas
aumenta o valor do item de dados x. Esboçar uma solução na qual também é
possível diminuir o valor de x.
A: A situação é relativamente simples se separarmos as actualizações com
valor positivo das com valor negativo e se mantivermos contas separadas para
cada uma delas. Em particular, acompanhamos a situação:
TWN [i, j] {peso(W ) peso(W ) < 0 & origem(W ) Sj   Li}
TWP[i, j] {peso(W ) peso(W ) > 0 & origem(W ) Sj   Li} Note-se que
TWP[i, j] TW [i, j]. Mais uma vez, cada nó mantém um registo das vistas
TWPk[i, k] e TWNk[i, k], respectivamente, e avança a sua visão quando nota
que uma nova escrita aumentaria |TWN [k, k] TWNk[i, k]| ou
|TWP[k, k] TWPk[i, k]| além de δ i / (N ).
17. P: Considerar um protocolo de backup primário não bloqueador utilizado para
garantir a coerência sequencial num armazém de dados distribuído. Esse
armazenamento de dados fornece sempre consistência de leitura-escrita?
R: Não. Logo que o processo de actualização receba um aviso de que a sua
actualização está a ser processada, pode desligar-se do armazenamento de
dados e voltar a ligar-se a outra réplica. Não são dadas garantias de que a
actualização já tenha chegado a essa réplica. Em contraste, com um protocolo
de bloqueio, o processo de actualização só pode desconectar-se depois de a sua
actualização ter sido totalmente propagada às outras réplicas também.
18. P: Para que a replicação activa funcione em geral, é necessário que todas as
operações sejam realizadas na mesma ordem em cada réplica. Esta ordenação é
sempre necessária?
A: Não. Considerar operações lidas que operem com dados não modificados
ou operações de escrita comutiva. Em princípio, tais situações permitem que a
ordenação seja diferente - em réplicas diferentes. No entanto, pode ser difícil
ou impossível detectar
SOLUÇÕES DE PROBLEMAS PARA O
CAPÍTULO 3
29
se, por exemplo, duas operações de escrita são comutativas.
19. P: Para implementar a multicast totalmente ordenada por meio de um
sequenciador, uma abordagem consiste em primeiro lugar em encaminhar uma
operação para o sequenciador, que depois lhe atribui um número único e,
posteriormente, multicasta a operação. Mencionar duas abordagens
alternativas, e comparar as três soluções.
R: Outra abordagem consiste em multicastar a operação, mas adiar a entrega
até que o sequenciador tenha posteriormente multicastado um número de
sequência para a mesma. Este último acontece após a operação ter sido
recebido pelo sequenciador. Uma terceira abordagem consiste em obter
primeiro um número de sequência do sequenciador e, em seguida, multicastar
a operação.
A primeira abordagem (enviar a operação ao sequenciador), envolve o envio
de uma mensagem ponto a ponto com a operação, e uma mensagem multicast.
A segunda abordagem requer duas mensagens multicast: uma contendo a
operação e outra contendo um número de sequência. Por último, a terceira
abordagem custa uma mensagem ponto-a-ponto com o número de sequência,
seguida de uma mensagem multicast contendo a operação.
20. P: Um ficheiro é replicado em 10 servidores. Liste todas as combinações de
quorum de leitura e quorum de escrita que são permitidas pelo algoritmo de
votação.
A: As seguintes possibilidades de (ler quórum, escrever quórum) são legais. (1,
10), (2, 9), (3, 8), (4, 7), (5, 6), (6, 5), (7, 4), (8, 3), (9, 2), e (10, 1).
21. P: Os alugueres baseados no Estado são utilizados para descarregar um
servidor, permitindo que o mesmo mantenha um número tão reduzido quanto
necessário de clientes. Esta abordagem conduzirá necessariamente a um
melhor desempenho?
R: Não, pela simples razão de que para alguns clientes seria ainda melhor
informá-los quando as actualizações aconteciam. A não manutenção de
qualquer estado pode levar a que esses clientes façam uma sondagem
frequente ao servidor já ocupado.
22. Para este exercício, deverá implementar um sistema simples que suporte RPC
multicast. Assumimos que existem múltiplos servidores replicados e que cada
cliente comunica com um servidor através de um RPC. No entanto, quando se
trata de replicação, um cliente terá de enviar um pedido RPC para cada réplica.
Programe o cliente de tal forma que para a aplicação apareça como se fosse
enviado um único RPC. Assuma que está a replicar por desempenho, mas que
os servidores são susceptíveis a falhas.
SOLUÇÕES PARA OS PROBLEMAS DO CAPÍTULO 8
1. P: Os sistemas fiáveis são frequentemente necessários para proporcionar um
elevado grau de segurança. Porquê?
A: Se, por exemplo, não se pode confiar que as respostas dadas pelos servidores sejam
30
SOLUÇÕES DE PROBLEMAS PARA O
CAPÍTULO 3
correcto, porque alguma parte maliciosa os manipulou, não faz sentido falar de
um sistema fiável. Do mesmo modo, os servidores devem poder confiar nos
seus clientes.
2. P: O que torna o modelo fail-stop no caso de falhas de crash tão difícil de
implementar?
R: O facto de, na prática, os servidores deixarem simplesmente de produzir
resultados. Detectar que eles pararam realmente é difícil. Tanto quanto se pode
ver noutro processo, o servidor pode ser apenas lento, ou a comunicação pode
estar (temporariamente) a falhar.
3. P: Considere um Web browser que devolva uma página em cache
desactualizada em vez de uma página mais recente que tinha sido actualizada no
servidor. Será isto um fracasso, e se sim, que tipo de fracasso?
R: Se é ou não um fracasso depende da coerência que foi prometida ao
utilizador. Se o navegador promete fornecer páginas que são no máximo
unidades de tempo T antigas, ele pode exibir falhas de desempenho. No
entanto, um navegador nunca poderá estar à altura de tal promessa na Internet.
Uma forma mais fraca de consistência é fornecer um dos modelos centrados no
cliente discutidos no capítulo 7. Nesse caso, a simples devolução de uma
página da cache sem verificar a sua consistência pode levar a uma falha de
resposta.
4. P: O modelo de tripla redundância modular descrito no texto pode lidar com
falhas bizantinas?
R: Absolutamente. Toda a discussão partiu do princípio de que os elementos
falhados apresentam resultados aleatórios, que são os mesmos que os fracassos
bizantinos.
5. P: Quantos elementos falhados (dispositivos mais eleitores) podem ser
manipulados Fig. 8-0 Dê um exemplo do pior caso que pode ser mascarado.
R: Em cada fila de círculos, no máximo um elemento pode falhar e ser
mascarado. Além disso - mais, um eleitor em cada grupo também pode falhar
desde que esteja a alimentar um elemento defeituoso na fase seguinte. Por
exemplo, se todos os seis elementos no topo das respectivas colunas falharem
todos, dois dos três resultados finais serão correctos, para que possamos
sobreviver a seis falhas.
6. P: A TMR generaliza-se a cinco elementos por grupo em vez de três? Em caso
afirmativo, quais são as suas propriedades?
R: Sim, qualquer número ímpar pode ser utilizado. Com cinco elementos e
cinco eleitores, podem ser mascaradas até duas falhas por grupo de
dispositivos.
7. P: Para cada uma das seguintes aplicações, acha que é melhor ter uma banda
desenhada semântica ou, no máximo, uma vez semântica? Discuta.
(a) Leitura e escrita de ficheiros a partir de um servidor de ficheiros.
(b) Compilação de um programa.
(c) Banca à distância.
SOLUÇÕES DE PROBLEMAS PARA O
CAPÍTULO 3
31
A: Para as alíneas a) e b), pelo menos uma vez é melhor. Não há mal nenhum
em tentar repetidamente. Para (c), é melhor dar apenas uma tentativa. Se isso
falhar, o utilizador terá de fazer entre folheados para limpar a sujidade.
8. P: Com RPCs assíncronos, um cliente é bloqueado até o seu pedido ter sido
aceite pelo servidor. Em que medida é que as falhas afectam a semântica dos
RPCs assíncronos?
R: A semântica é geralmente afectada da mesma forma que os RPC normais.
Uma diferença reside no facto de o servidor não estar a processar o pedido
enquanto o cliente está bloqueado, o que introduz problemas quando,
entretanto, o cliente trava. Em vez disso, o servidor simplesmente faz o seu
trabalho, e tenta con- tinuar o cliente mais tarde, se necessário.
9. P: Dê um exemplo em que a comunicação em grupo não requer qualquer
ordem de mensagem.
A: Imagens multicasting em pequenos fragmentos, onde cada fragmento
contém a (x, y) coordenada como parte dos seus dados. Da mesma forma,
enviando as páginas de um livro, com cada página numerada.
10. P: Em multicasting fiável, é sempre necessário que a camada de comunicação
mantenha uma cópia de uma mensagem para efeitos de retransmissão?
R: Não. Em muitos casos, como na transferência de ficheiros, é necessário
apenas que os dados estejam ainda disponíveis a nível da aplicação. Não é
necessário que a camada com- municação mantenha a sua própria cópia.
11. P: Em que medida é importante a escalabilidade da multicasting atómica?
R: Depende realmente do número de processos que estão contidos num grupo.
O importante a salientar é que, se os processos forem replicados por tolerância
a falhas, ter apenas algumas réplicas pode ser suficiente. Nesse caso, a
escalabilidade dificilmente é um problema. Quando se formam grupos de
diferentes processos, a escalabilidade pode tornar-se um problema. Ao replicar
para o desempenho, a própria multicast atómica pode ser exagerada.
12. P: No texto, sugerimos que a multicast atómica pode salvar o dia quando se
trata de efectuar actualizações sobre um conjunto de processos acordados. Em
que medida podemos garantir que cada actualização é efectivamente realizada?
R: Não podemos dar tais garantias, semelhantes à garantia de que um servidor
tenha efectivamente realizado uma operação depois de ter enviado um aviso de
recepção ao cliente. No entanto, o grau de tolerância a falhas é melhorado
através da utilização de esquemas de multicasting atómico e facilita o
desenvolvimento de sistemas tolerantes a falhas.
13. P: A sincronização virtual é análoga à fraca consistência em armazéns de
dados distribuídos, com alterações de visão de grupo actuando como pontos de
sincronização. Neste texto, qual seria o análogo a uma consistência forte?
R: A sincronização resultante de multicasts individuais, sejam eles totalmente,
32
SOLUÇÕES DE PROBLEMAS PARA O
CAPÍTULO 3
causalmente, ou FIFO ordenado. Note que as alterações de visualização
ocorrem como mensagens multi-jogadas especiais, que também são
necessárias para serem devidamente ordenadas.
14. P: Quais são as encomendas de entrega admissíveis para a combinação do
FIFO com o multicasting total de encomendas na Fig. 8-0?
R: Há seis pedidos possíveis:
Ordem 1 Ordem 2 Ordem 3 Ordem 4 Ordem 5 Ordem 6
m1
m1
m1
m3
m3m3m2 m3
m3
m1
m1m4m3 m2
m4
m2
m4m1m4 m4
m2
m4
m2 m2
15. P: Adaptar o protocolo para instalar uma próxima visão Gi1 no caso de
sinônimos virtuais, para que possa tolerar falhas no processo.
A: Quando um processo P recebe Gik , primeiro envia uma cópia de qualquer
mensagem instável que tenha, independentemente do ponto de vista anterior, a
todos os processos em Gik , seguida de uma mensagem de descarga para Gik .
Pode então marcar com segurança a mes- sage como sendo estável.
Se um processo Q recebe uma mensagem m que foi enviada em G j (com j
< i k), descarta-a quando Q nunca esteve em G j. Se a vista mais recente
instalada em Q é Gl com l > j, a mensagem m também é descartada (é uma
duplicata). Se l j e m ainda não tivessem sido recebidos, o processo Q entrega
m tendo em conta quaisquer restrições adicionais de ordenação de mensagens.
Finalmente, se l < j, a mensagem m é simplesmente armazenada na camada de
comunicação até que G j tenha sido instalado.
16. P: No protocolo de compromisso em duas fases, porque é que o bloqueio
nunca pode ser completamente eliminado, mesmo quando os participantes
elegem um novo coordenador?
R: Após as eleições, o novo coordenador também pode falhar. Neste caso, os
restantes participantes também não podem chegar a uma decisão final, porque
isso exige o voto do novo coordenador eleito, tal como antes.
17. P: Na nossa explicação do compromisso trifásico, parece que o compromisso
de uma transacção se baseia na votação por maioria. Será isto verdade?
R: Absolutamente não. A questão a assinalar é que um processo de
recuperação que não pôde tomar parte na decisão final, tal como foi tomada
pelo outro processo, recuperará para um estado que é coerente com a escolha
final feita pelos outros.
18. P: Num modelo de execução por etapas, será suficiente registar apenas
mensagens, ou será necessário registar também outros eventos?
A: De um modo geral, é necessário mais abate de árvores: diz respeito a todos
os eventos não determinísticos, incluindo a E/S local e, em particular, as
chamadas de sistema.
19. P: Explique como é que o diário de bordo de write-ahead nas transacções
distribuídas pode ser utilizado para recuperar de falhas.
SOLUÇÕES DE PROBLEMAS PARA O
CAPÍTULO 3
33
R: O diário de bordo contém um registo para cada operação de leitura e escrita
que teve lugar no âmbito da transacção. Quando ocorre uma falha, o registo
pode ser reproduzido até à última operação gravada. A repetição do diário de
bordo é efectivamente o oposto do recuo, que ocorre quando a transacção
precisava de ser abortada.
20. P: Um servidor sem Estado precisa de tomar pontos de controlo?
R: Depende do que o servidor faz. Por exemplo, um servidor de base de dados
ao qual tenha sido entregue uma transacção completa manterá um registo para
poder refazer as suas operações aquando da recuperação. No entanto, não há
necessidade de tomar pontos de controlo para o bem do estado do sistema
distribuído. Os pontos de controlo são feitos apenas para a recuperação local.
21. P: O registo de mensagens com base no receptor é geralmente considerado
melhor do que o registo com base no remetente. Porquê?
R: A principal razão é que a recuperação é inteiramente local. Na exploração
madeireira baseada no emissor, um processo de recuperação terá de contactar
os seus remetentes para retransmitir os seus sábios.
SOLUÇÕES PARA OS PROBLEMAS DO CAPÍTULO 9
1. P: Que mecanismos poderia um sistema distribuído fornecer como serviços de
segurança aos criadores de aplicações que acreditam apenas no argumento de
ponta a ponta na concepção do sistema, como discutido no capítulo 6?
A: Nenhuma. A aplicação do argumento de extremo a extremo aos serviços de
segurança significa que os promotores não confiarão em nada que não seja
fornecido pelas suas próprias aplicações. Com efeito, o sistema distribuído no
seu conjunto é considerado como não sendo de confiança.
2. P: Na abordagem RISSC, toda a segurança pode ou não estar concentrada em
servidores seguros?
R: Não, ainda precisamos de garantir que os sistemas operativos locais e a
comunicação entre clientes e servidores são seguros.
3. P: Suponha que lhe foi pedido que desenvolvesse uma aplicação distribuída
que permitisse aos professores a realização de exames. Dê pelo menos três
declarações que fariam parte da política de segurança para uma aplicação deste
tipo.
A: Os requisitos óbvios incluem que os alunos não devem poder aceder aos
exames antes de um determinado período de tempo. Além disso, qualquer
professor que aceda a um exame antes da data efectiva do exame deve ser
autenticado. Além disso, pode haver um grupo restrito de pessoas a quem deve
ser dado acesso de leitura a qualquer exame em preparação, enquanto que
apenas o professor responsável deve ter acesso total.
4. P: Seria seguro juntar as mensagens 3 e 4 na autenticação pro- tocolos
apresentada na figura 9-0, em KA,B(RB, RA)?
34
SOLUÇÕES DE PROBLEMAS PARA O
CAPÍTULO 3
R: Sim, não há razão para que o desafio enviado por Alice para Bob não possa
ser enviado na mesma mensagem.
5. P: Porque não é necessário na Fig. 9-0 que o KDC saiba com certeza que
estava a falar com a Alice quando recebe um pedido de chave secreta que a
Alice pode partilhar com o Bob?
R: Suponha que Chuck tinha enviado a mensagem "Eu sou a Alice e quero
falar com o Bob". O KDC apenas devolveria a KA,KDC(KA,B) que só pode ser
decifrada por Alice porque ela é a única outra entidade que detém a chave
secreta KA,KDC .
6. P: O que há de errado em implementar um nonce como um carimbo temporal?
R: Embora um carimbo temporal seja utilizado apenas uma vez, está longe de
ser aleatório. Existem implementações de protocolos de segurança que
utilizam os carimbos temporais como "nonces" e que foram atacados com
sucesso através da exploração da não-randomínio dos "nonces".
7. P: Na mensagem 2 do protocolo de autenticação Needham-Schroeder, o
bilhete é codificado com a chave secreta partilhada entre a Alice e o KDC. Esta
encriptação é necessária?
R: Não. Porque o Bob é o único que consegue desencriptar o bilhete, mais
valia ter sido enviado como texto simples.
8. P: Podemos adaptar com segurança o protocolo de autenticação apresentado
na Fig. 9-0 de modo a que a mensagem 3 consista apenas em RB?
R: Em princípio, se o RB nunca mais for utilizado, então a sua devolução não
encriptada deverá ser suficiente. No entanto, essa aleatoriedade raramente é
encontrada. Portanto, ao encriptar o RB, torna-se muito mais difícil para Chuck
entrar e forjar a mensagem 3.
9. P: Conceber um protocolo de autenticação simples utilizando assinaturas num
sistema criptográfico de chave pública.
R: Se Alice quiser autenticar Bob, envia um desafio a Bob. R. Bob será
solicitado a devolver K (R),
ou seja, colocar a sua assinatura sob R. Se Alice
B
estiver confiante de que tem a chave pública de Bob, decifrar a resposta a R
deve ser suficiente para ela saber que está de facto a falar com Bob.
10. P: Assuma que a Alice quer enviar uma mensagem m ao Bob. Em vez de encriptar m
com a chave pública K de Bob, ela gera uma chave de sessão KA,B e depois envia
B
Dica: considere por...
[K(m), K (K
A,B
B
A,B)]. Porque é que este regime é geralmente melhor? (
questões de formalidade).
R: A chave de sessão tem um comprimento curto e fixo. Em contrapartida, a
mensagem m pode ter um comprimento arbitrário. Consequentemente, a
combinação da utilização de uma chave de sessão e a aplicação de criptografia
de chave pública a uma mensagem curta terá geralmente um desempenho
muito melhor do que a utilização de apenas uma chave pública numa
mensagem grande.
SOLUÇÕES DE PROBLEMAS PARA O
CAPÍTULO 3
35
11. P: Qual é o papel do carimbo temporal na mensagem 6 da figura 9-0, e por
que razão tem de ser codificado?
R: O carimbo da hora é utilizado para proteger contra repetições. Encriptandoa, torna-se impossível reproduzir a mensagem 6 com um carimbo de data/hora
posterior. Este exemplo ilustra uma aplicação geral de carimbos temporais em
protocolos criptográficos.
12. P: Complete a figura 9-0 acrescentando a comunicação para autenticação entre
Alice e Bob.
A: Alice envia ao Bob a mensagem M KB,AS( A, KA,B), KA,B(t)], em que KB,AS
é a chave secreta partilhada entre Bob e o AS. Nessa altura, o Bob sabe que
está a falar com a Alice. Ao responder com KA,B(t ), Bob prova à Alice que
ele é de facto Bob.
13. P: Como podem ser expressas as mudanças de papel numa matriz de controlo de
acesso?
A: Os papéis, ou domínios de protecção em geral, podem ser vistos como
objectos com basicamente uma única operação: entrar. Se esta operação pode
ou não ser chamada depende do papel a partir do qual o pedido é emitido.
Também são possíveis abordagens mais sofisticadas, por exemplo, permitindo
alterações aos papéis anteriores aos nossos.
14. P: Como são implementadas as ACLs num sistema de ficheiros UNIX?
R: Cada ficheiro tem três entradas associadas: uma para o proprietário, outra
para um grupo que está associado ao ficheiro e outra para todos os outros. Para
cada entrada, os direitos de acesso podem ser essencialmente especificados
como ler, escrever, executar.
15. P: Como pode uma organização impor o uso de um Web proxy gateway e préabastecer os seus utilizadores para aceder directamente a servidores Web
externos?
R: Uma forma é utilizar um portal de filtragem de pacotes que descarta todas
as traficantes de saída - ficção, excepto a dirigida a uns poucos anfitriões bem
conhecidos. O tráfego Web é aceite pro- vided é direccionado para o proxy
Web da empresa.
16. P: Referindo-se à figura 9-0, em que medida a utilização de referências a
objectos Java como capacidades depende realmente da linguagem Java?
R: É independente da linguagem Java: as referências a objectos protegidos
ainda precisam de ser entregues durante a execução e não podem ser
simplesmente construídas. O Java ajuda ao capturar a construção de tais
referências durante o tempo de compilação.
17. P: Descreva três problemas que serão encontrados quando os criadores de
recursos interrelacionados com os recursos locais forem obrigados a inserir
chamadas para activar e desactivar os privilégios de protecção contra o acesso
não autorizado por programas móveis, tal como explicado no texto.
R: Um importante é que não pode ocorrer comutação de linha quando um
recurso local é chamado. Um comutador de linha poderá transferir os
privilégios habilitados para outra linha que não esteja autorizada a aceder ao
recurso. Outro problema
36
SOLUÇÕES DE PROBLEMAS PARA O
CAPÍTULO 3
ocorre quando é necessário chamar outro recurso local antes de terminar a
actual invocação. Com efeito, os privilégios são transportados para o segundo
recurso, embora possa acontecer que o autor da chamada não seja realmente de
confiança para aceder a esse segundo recurso. Um terceiro problema é que a
inserção explícita de chamadas para activar e desactivar os privilégios é
suspeita de erros de programação, tornando o mecha- nismo inútil.
18. P: Indique algumas vantagens e desvantagens da utilização de servidores
centralizados para a gestão de chaves.
R: Uma vantagem óbvia é a simplicidade. Por exemplo, ao termos clientes N a
partilhar uma chave apenas com um servidor centralizado, precisamos de
manter apenas N chaves. A partilha sensata de chaves em pares somaria as
chaves N (N )/2. Além disso, a utilização de um servidor de tamanho central
permite instalações eficientes de armazenamento e manutenção num único
local. As potenciais desvantagens incluem o servidor tornar-se um
estrangulamento no que diz respeito ao desempenho, bem como à
disponibilidade. Além disso, se o servidor for comprometido, será necessário
estabelecer novas chaves.
19. P: O protocolo de intercâmbio de chaves Diffie-Hellman também pode ser
utilizado para estabelecer uma chave secreta partilhada entre três partes.
Explique como.
R: Suponhamos que Alice, Bob e Chuck querem criar uma chave secreta
partilhada baseada nos dois grandes primes conhecidos publicamente n e g.
Alice tem o seu próprio grande número secreto x, Bob tem y, e Chuck tem z.
Alice envia gx mod n para Bob; Bob envia gy mod n para Chuck; e Chuck
envia gz mod n para Alice. A Alice pode agora calcular gxz mod n, que ela
envia ao Bob. Bob, por sua vez, pode então calcular gxyz mod n. Da mesma
forma, depois de receber gx mod n da Alice, Bob pode calcular gxy mod n, que
ele envia para Chuck. Chuck pode então calcular gxyz mod n. Da mesma
forma, depois de Chuck receber gy mod n de Bob, ele calcula gyz mod n e
envia-o a Alice para que ela possa calcular gxyz mod n.
20. P: Não existe autenticação no protocolo de troca de chaves Diffie-Hellman.
Ao explorar esta propriedade, um terceiro malicioso, Chuck, pode facilmente
invadir a troca de chaves que tem lugar entre Alice e Bob, e subsequentemente
arruinar a segurança. Explique como isto funcionaria.
R: Assuma que Alice e Bob estão a usar os valores publicamente conhecidos n
e g. Quando Alice envia gx mod n a Bob, Chuck precisa simplesmente de
interceptar essa mensagem, devolver a sua própria mensagem gz mod n, e
assim fazer com que Alice acredite que está a falar com Bob. Após interceptar
a mensagem de Alice, ele envia gz mod n ao Bob, do qual pode esperar gy
mod n como resposta. Chuck está agora no meio.
21. P: Dê uma forma simples de como as capacidades em Amoeba podem ser revogadas.
R: O proprietário do objecto simplesmente solicita que o servidor elimine
todos os pares registados (direitos, verificação)-pares para esse objecto. Uma
desvantagem é que todas as capacidades são revogadas. É difícil revogar uma
capacidade entregue a um processo específico.
SOLUÇÕES DE PROBLEMAS PARA O
CAPÍTULO 3
37
22. P: Faz sentido restringir a vida útil de uma chave de sessão? Em caso
afirmativo, dê um exemplo de como isso poderia ser estabelecido.
R: As chaves de sessão devem ter sempre uma duração de vida limitada, uma
vez que são mais fáceis de quebrar do que outros tipos de chaves
criptográficas. A forma de restringir a sua vida útil é enviar ao longo do tempo
de expiração quando a chave é gerada e distribuída. Esta abordagem é seguida,
por exemplo, no SESAME.
23. Instalar e configurar um ambiente Kerberos v5 para um sistema distribuído
com três máquinas diferentes. Uma destas máquinas deve estar a executar o
KDC. Certifique-se de que pode configurar uma ligação telnet (Kerberos)
entre quaisquer duas máquinas, mas utilizando apenas uma única palavrapasse registada no KDC. Muitos dos detalhes sobre o funcionamento do
Kerberos são explicados em (Garman, 2003).
SOLUÇÕES PARA OS PROBLEMAS DO CAPÍTULO 10
1. P: Fizemos uma distinção entre objectos remotos e objectos distribuídos. Qual
é a diferença?
R: Um objecto remoto é um objecto que está alojado num único servidor, mas
cujos métodos podem ser invocados por clientes remotos. Em contraste, um
objecto distribuído é aquele cujo estado pode estar fisicamente distribuído por
diferentes servidores. Um exemplo de objectos distribuídos são os fornecidos
pela Globe. A maioria dos sistemas baseados em objectos, no entanto,
suportam apenas objectos remotos.
2. P: Por que razão é útil definir as interfaces de um objecto numa linguagem de
definição de interface?
R: Há várias razões. Em primeiro lugar, do ponto de vista da engenharia de
software, ter definições de interface precisas e inequívocas é importante para a
subutilização e manutenção de objectos. Além disso, as definições baseadas em
IDL são úteis para a geração de tocos. Finalmente, e em relação a esta última,
se uma definição IDL tiver sido analisada e armazenada, o suporte a
invocações dinâmicas torna-se mais fácil, uma vez que o proxy do lado do
cliente pode ser construído automaticamente em tempo de execução a partir de
uma definição de interface.
3. P: Algumas implementações de sistemas de middleware de distribuiçãoobjecto baseiam-se inteiramente em invocações de métodos dinâmicos.
Mesmo as invocações estáticas são compiladas para as dinâmicas. Qual é a
vantagem desta abordagem?
R: Percebendo que uma implementação de invocações dinâmicas pode lidar
com todas as invocações, as estáticas tornam-se apenas um caso especial. A
vantagem é que apenas um único mecanismo precisa de ser implementado.
Uma possível desvantagem é que o desempenho nem sempre é tão óptimo
como poderia ser se tivéssemos analisado a invocação estática.
38
SOLUÇÕES DE PROBLEMAS PARA O
CAPÍTULO 3
4. P: Descreva um protocolo simples que implemente a semântica at-most-once
para uma invocação de objecto.
R: Uma solução simples é deixar um proxy retransmitir um pedido de
invocação, mas dizer explicitamente ao servidor que se trata de uma
retransmissão. Nesse caso, o servidor pode decidir ignorar o pedido e devolver
um erro ao cliente. Numa solução mais sofisticada, o servidor pode guardar os
resultados de invocações anteriores e verificar se ainda tem esses resultados
quando recebe um pedido de retransmissão.
5. P: Os objectos do lado do cliente e do lado do servidor para o método
assíncrono devem ser persistentes?
R: Em geral, devem ser persistentes, permitindo que o cliente ou servidor se
desligue e mais tarde reinicie e vá buscar os objectos ao disco. No entanto, em
teoria, não há nenhuma razão difícil para exigir que estes objectos sejam
persistentes.
6. P: No texto, mencionámos que uma implementação da invocação do método
asyn- chronous do CORBA não afecta a implementação de um objecto do lado
do servidor. Explique por que razão é este o caso.
R: A questão importante é que o sistema de tempo de execução do lado do
cliente trata de todas as chamadas para o servidor. Em particular, o RTS pode
fazer uma chamada síncrona para o servidor, possivelmente tendo de esperar
muito tempo antes de uma resposta ser devolvida. Nesse momento, ele faz uma
chamada para a aplicação cliente. Da mesma forma, a invocação do método
pode ser encaminhada para um router de mensagens, onde, eventualmente, o
servidor de objectos de tar- geted é simplesmente chamado. Mais uma vez, é o
subsistema de comunicação que trata da natureza assíncrona da invocação.
7. P: Dê um exemplo em que a utilização (inadvertida) de mecanismos de
callback pode facilmente conduzir a uma situação indesejada.
R: Se uma revogação conduzir a outra invocação sobre o mesmo objecto, pode
surgir um impasse se forem necessárias fechaduras para proteger recursos
partilhados. Situações como estas são muito difíceis de controlar de uma forma
geral.
8. P: É possível que um objecto tenha mais do que um criado?
R: Sim. Lembre-se de que um objecto pode ser praticamente tudo. Agora
considere um objecto que consiste em alguns dados que são armazenados
algures numa base de dados, juntamente com alguns procedimentos de
manipulação dos seus dados. Não há razão para que não possamos fornecer
dois pontos de acesso diferentes (através de servidores) a esses dados. É claro
que, neste caso, o objecto terá também dois identificadores diferentes.
9. P: É possível ter implementações específicas do sistema de referências de
objectos CORBA enquanto ainda é possível trocar referências com outros
sistemas baseados em CORBA?
R: Sim, é para isto que servem os IORs. A única questão que é importante, é
que os objectos que podem ser referenciados do exterior, podem ser
representados por um IOR. Nesse caso, um sistema CORBA específico terá de
proporcionar uma porta de acesso para
SOLUÇÕES DE PROBLEMAS PARA O
CAPÍTULO 3
39
traduzindo essas referências na sua aplicação interna e específica.
10. P: Como podemos autenticar os endereços de contacto devolvidos por um servício de pesquisa para objectos Globo seguros?
R: Basta que cada endereço de contacto seja assinado utilizando a chave
privada do objecto. Desta forma, estabelecemos uma ligação segura entre o
identificador de um objecto, a sua chave pública e os seus endereços de
contacto.
11. P: Qual é a diferença fundamental entre as referências de objectos no CORBA
e as do Globe?
R: No CORBA, um objecto de referência é essencialmente aquilo a que se
chama um endereço de con- tacto em Globe. Em Globe, as referências de
objectos são independentes da localização, o que significa que a referência não
contém qualquer informação relativa ao servidor actual que aloja um objecto
(distribuído). Esta informação é sempre parte de um CORBA IOR.
12. P: Considere Globo. Descreva um protocolo simples através do qual é criado
um canal seguro entre um proxy de utilizador (que tem acesso à chave privada
da Alice) e uma réplica que sabemos de certeza que pode executar um
determinado método.
A: Suponhamos que encontramos a réplica R. Podemos executar os seguintes
passos. (1) O user proxy envia o certificado de usuário para a réplica. (2) A
réplica responde com o seu certificado de réplica, juntamente com uma NR
nãoce. (3) O user proxy responde
devolvendo a KAlice (NR, N Alice). Esta mensagem permitirá− a R verificar que Alice
está no outro extremo do canal. Responde com KR(N Alice) permitindo à Alice
verificar a identidade de R. Note que informações extras, como chaves de
sessão, também podem ser trocadas.
13. P: Dê um exemplo de implementação de uma referência de objecto que
permita a um cliente ligar-se a um objecto remoto transitório.
R: Utilizando Java, podemos expressar essa implementação como a seguinte classe:
classe pública Referência do objecto {
InetAddress address;
// network address of object’s server
int
serverendpoint;
// endpoint to which server is listening
int
objectidentifier;
// identificador para este objecto
code;
ficheiro URL
clientecode;
// (remoto) contendo o
stub code;
do lado do cliente byte[]
initdata; // possíveis dadosdata;
adicionais dedata;
inicialização
}
A referência do objecto deve conter, pelo menos, o endereço do servidor em
que o objecto reside, a nível de transporte. Precisamos também de um
identificador de objecto, uma vez que o servidor pode conter vários objectos.
Na nossa implementação, utilizamos um URL para nos referirmos a um
ficheiro (remoto) contendo todo o código necessário do lado do cliente. Um
conjunto genérico de bytes é utilizado para conter dados de inicialização
adicionais para esse código. Uma implementação alternativa teria sido colocar
directamente o código do cliente no ficheiro de
40
SOLUÇÕES DE PROBLEMAS PARA O
CAPÍTULO 3
reference instead of a URL. This approach is followed, for example, in Java
RMI where proxies are passed as reference.
14. Q: Java and other languages support exceptions, which are raised when an error
occurs. How would you implement exceptions in RPCs and RMIs?
A: Because exceptions are initially raised at the server side, the server stub can
do nothing else but catch the exception and marshal it as a special error
response back to the client. The client stub, on the other hand, will have to
unmarshal the message and raise the same exception if it wants to keep access
to the server transparent. Consequently, exceptions now also need to be
described in an interface definition language.
15. Q: How would you incorporate persistent asynchronous communication into a
model of communication based on RMIs to remote objects?
A: An RMI should be asynchronous, that is, no immediate results are expected
at invocation time. Moreover, an RMI should be stored at a special server that
will forward it to the object as soon as the latter is up and running in an object
server.
16. Q: Consider a distributed object-based system that supports object replication,
in which all method invocations are totally ordered. Also, assume that an
object invocation is atomic (e.g., because every object is automatically locked
when invoked). Does such a system provide entry consistency? What about
sequential consistency?
A: By totally ordering all method invocations, we not only achieve that all
method invocations for the same object are carried out in the same order at
every one of its replicas, but also that method calls to different objects are carried out in the same order everywhere. As a consequence, such a system provides entry consistency, but in particular sequential consistency.
17. Q: Describe a receiver-based scheme for dealing with replicated invocations, as
mentioned in the text.
A: In this case, we let the coordinator of a replicated object imply invoke the
replicas of the called object, but let everyone of those replicas return their
answer to the coordinator. The latter, in turn, will need to do two things. First,
it should be able to detect multiple responses to a previous sent request. Such a
detection may require the use of sequence numbers. Second, the coordinator
should now about the other replicas in its group, and forward a response to
each of them.
SOLUTIONS TO CHAPTER 11 PROBLEMS
SOLUÇÕES DE PROBLEMAS PARA O
CAPÍTULO 3
41
1. Q: Is a file server implementing NFS version 3 required to be stateless?
A: No, but the NFS protocols are such that it is possible to provide an implementation using stateless servers.
2. Q: Explain whether or not NFS is to be considered a distributed file system.
A: On can argue that it is not a file system, but merely a protocol that allows
local file systems to become accessible to remote clients. In fact, most of the
actual file system functionality is not implemented by NFS. Instead, it relies
on the Virtual File System interface available in most operating systems.
3. Q: Despite that GFS scales well, it could be argued that the master is still a
potential bottleneck. What would be a reasonable alternative to replace it?
A: Considering that master uses a file name to look up a chunk server, we
could also implement the master in the form of a DHT-based system and use a
hash of the file name as the key to be looked up. In this way, one would obtain
a fully decentralized master.
4. Q: Using RPC2’s side effects is convenient for continuous data streams. Give
another example in which it makes sense to use an application-specific protocol next to RPC.
A: File transfer. Instead of using a pure RPC mechanism, it may be more efficient to transfer very large files using a protocol such as FTP.
5. Q: NFS does not provide a global, shared name space. Is there a way to mimic
such a name space?
A: A global name space can easily be mimicked using a local name space for
each client that is partially standardized, and letting the automounter mount the
necessary directories into that name space.
6. Q: Give a simple extension to the NFS lookup operation that would allow iterative
name lookup in combination with a server exporting directories that it mounted from
another server.
A: If a lookup operation always returns an identifier for the server from which
a directory was mounted, transparent iterative name lookups across multiple
servers would be easy. Whenever a server looks up a mount point on which it
mounted a remote file system, it simply returns the server’s ID for that file system. The client can then automatically mount the directory as well, and contact
its associated server to continue name resolution.
7. Q: In UNIX-based operating systems, opening a file using a file handle can be
done only in the kernel. Give a possible implementation of an NFS file handle
for a user-level NFS server for a UNIX system.
A: The problem to be solved is to return a file handle that will allow the server
to open a file using the existing name-based file system interface. One
42
SOLUÇÕES DE PROBLEMAS PARA O
CAPÍTULO 3
approach is to encode the file name into the file handle. The obvious drawback
is that as soon as the file name changes, its file handles become invalid.
8. Q: Using an automounter that installs symbolic links as described in the text
makes it harder to hide the fact that mounting is transparent. Why?
A: After the symbolic link has been followed, the user will not be in the
expected directory, but in a subdirectory used by the automounter. In other
words, the local home directory for Alice will be /tmp mnt/home/alice instead
of what she thinks it is, namely /home/alice. Special support from the operating system or shell is needed to hide this aspect.
9. Q: Suppose the current denial state of a file in NFS is WRITE. Is it possible
that another client can first successfully open that file and then request a write
lock?
A: Yes. If the second client requires read/write access (i.e., value BOTH) but
no denial (i.e., value NONE), it will have been granted access to the file. However, although a write lock may actually be granted, performing an actual write
operation will fail. Remember that share reservation is completely independent
from locking.
10. Q: Taking into account cache coherence as discussed in Chap. 7, which kind
of cache-coherence protocol does NFS implement?
A: Because multiple write operations can take place before cached data is
flushed to the server, NFS clients implement a write-back cache.
11. Q: Does NFS implement entry consistency?
A: Yes. Because share reservations and file locking are associated with specific files, and because a client is forced to revalidate a file when opening it
and flush it back to the server when closing it, it can be argued that NFS
implements entry consistency.
12. Q: We stated that NFS implements the remote access model to file handling. It
can be argued that it also supports the upload/download model. Explain why.
A: Because a server can delegate a file to a client, it can effectively support
whole-file caching and putting that client in charge of further handling of the
file. This model comes close to uploading a file to a client and downloading it
later when when the client is finished.
13. Q: In NFS, attributes are cached using a write-through cache coherence policy.
Is it necessary to forward all attributes changes immediately?
A: No. For example, when appending data to a file, the server does not really
need to be informed immediately. Such information may possibly be passed on
when the client flushes its cache to the server.
SOLUÇÕES DE PROBLEMAS PARA O
CAPÍTULO 3
43
14. Q: What calling semantics does RPC2 provide in the presence of failures?
A: Considering that the client will be reported an error when an invocation does
not complete, RPC2 provides at-most-once semantics.
15. Q: Explain how Coda solves read-write conflicts on a file that is shared
between multiple readers and only a single writer.
A: The problem is solved by ‘‘defining it away.’’ The semantics of transactions
underlying file sharing in Coda, permit treating all readers as accessing the
shared file before the writer opened it. Note that read-write conflicts within a
specific time interval cannot be solved in this way.
16. Q: Using self-certifying path names, is a client always ensured it is communicating with a nonmalicious server?
A: No. SFS does not solve naming problems. In essence, a client will have to
trust that the server named in the path can actually be trusted. In other words, a
client will have to put its trust in the name and name resolution process. It may
very well be the case that a malicious SFS server is spoofing another server by
using its IP address and passing the other server’s public key.
17. One of the easiest ways for building a UNIX-based distributed system, is to
couple a number of machines by means of NFS. For this assignment, you are
to connect two file systems on different computers by means of NFS. In particular, install an NFS server on one machine such that various parts of its file
system are automatically mounted when the first machine boots.
18. To integrate UNIX-based machines with Windows clients, one can make use of
Samba servers. Extend the previous assignment by making a UNIX-based
system available to a Windows client, by installing and configuring a Samba
server. At the same time, the file system should remain accessible through
NFS.
SOLUTIONS TO CHAPTER 12 PROBLEMS
1. Q: To what extent is e-mail part of the Web’s document model?
A: E-mail is not part of the document model underlying the Web, but rather a
separate system that has been integrated with hypertext documents by means
of client-side software only. For example, most Web browsers provide additional support for handling e-mail, but the actual e-mail messages are not
related to hypertext documents in any way.
2. Q: In many cases, Web sites are designed to be accessed by users. However,
when it comes to Web services, we see that Web sites become dependent on
each other. Considering the three-tiered architecture of Fig. 12-0, where would
you expect to see the dependency occur?
44
SOLUÇÕES DE PROBLEMAS PARA O
CAPÍTULO 3
A: There are two places: from the Web server to an externally available service, or from the application (i.e., CGI) server to an external service. Considering that the Web server is acting as a relatively simple front end, and that most
of the complexity for implementing the service offered by a Web site is contained in the application server, we generally see that the application server
makes use of other Web services.
3. Q: The Web uses a file-based approach to documents by which a client first
fetches a file before it is opened and displayed. What is the consequence of
this approach for multimedia files?
A: One of the problems is that in many cases such files are first fetched and
stored locally before that can be opened. What is needed, however, is to keep
the file at the server and set up a data stream to the client. This approach is
supported in the Web, but requires special solutions at both the client and the
server.
4. Q: One could argue that from an technological point of view Web services do
not address any new issues. What is the compelling argument to consider Web
services important?
A: What many people underestimate is the inoperability between systems from
different manufacturers in addition to inoperability between systems at
different organizations. Web services addresses these differences by essentially
prescribing how such systems can be used together. Although this may not be
very innovative, it is definitely a challenging problem to come up with the
right set of standards that fit the many business processes that are deployed in
practice.
5. Q: What would be the main advantage of using the distributed server discussed in Chap. 0 to implement a Web server cluster, in comparison to the way
the such clusters are organized as shown in Fig. 12-0. What is an obvious disadvantage?
A: The main advantage is that a client could communicate directly with its
assigned Web server, which may show to be beneficial when the cluster is dispersed across different networks (which may happen when dealing with flash
crowds). However, the more traditional design relies on well-deployed technology (IPv4) and is also seemingly simpler.
6. Q: Why do persistent connections generally improve performance compared
to nonpersistent connections?
A: The real gain is in avoiding connection setup, which requires a 3-way handshake in the case of TCP.
7. Q: SOAP is often said to adhere to RPC semantics. Is this really true?
A: The answer is simply ‘‘no.’’ SOAP fundamentally adheres a two-way asynchronous message-passing model, in which a request is explicitly formulated
SOLUÇÕES DE PROBLEMAS PARA O
CAPÍTULO 3
45
in terms of a message sent to a server, whereas another message is sent back as
a response. SOAP does not prescribe that clients need to wait, not does it provide transparancy that one normally finds with RPC systems.
8. Q: Explain the difference between a plug-in, an applet, a servlet, and a CGI
program.
A: A plug-in is a piece of code that can be dynamically loaded from a
browser’s local file system. In contrast, an applet is dynamically downloaded
from the server to the browser, for which reason security is generally more
important. Note that many plug-ins can be dynamically downloaded as well,
but generally not without manual interference by the user. A servlet is comparable to a plug-in, but is entirely handled at the server side. A CGI program is a
piece of code that runs in a separate process on the same machine as the server.
9. Q: In WebDAV, is it sufficient for a client to show only the lock token to the
server in order to obtain write permissions?
A: No, the client should also identify itself as the rightful owner of the token.
For this reason, WebDAV not only hands over a token to a client, but also registers which client has the token.
10. Q: Instead of letting a Web proxy compute an expiration time for a document,
a server could do this instead. What would be the benefit of such an approach?
A: An important benefit would be that the expiration time is consistent in a
hierarchy of caches. For example, if a browser cache computes a longer expiration time than its associated Web proxy, this would mean that one user would
get to see a possibly stale document, while other users that access the same
proxy are returned a fresher version.
11. Q: With Web pages becoming highly personalized (because they can be
dynamically generated on a per-client basis), one could argue that Web caches
will soon all be obsolete. Yet, this is most likely not going to happen soon.
Explain why.
A: The answer lies in the fact that although pages are highly personalized, the
various elements of which they are made can often be effectictively shared by
many different users. For example, a Web page may consist of various images
that are used for many different clients. Such elements are good candidates to
keep in a local cache, also because they generally do not change often.
12. Q: Does the Akamai CDN follow a pull-based or push-based distribution protocol?
A: Because replicas are fetched on demand after a client has been redirected to
a CDN server, Akamai is seen to follow a pull-based protocol.
46
SOLUÇÕES DE PROBLEMAS PARA O
CAPÍTULO 3
13. Q: Outline a simple scheme by which an Akamai CDN server can find out that
a cached embedded document is stale without checking the document’s validity at the original server.
A: A simple approach followed by Akamai is to include a hash value of the
embedded document in its modified URL. It is important to realize that any
client will always retrieve all modified URLs when fetching the main document. Subsequent lookups will eventually lead to a CDN server, which can
then conclude that a cached document is no longer valid by comparing hash
values in the modified URL of the requested and the cached document, respectively.
14. Q: Would it make sense to associate a replication strategy with each Web document separately, as opposed to using one or only a few global strategies?
A: Probably, considering the wide variety of usage patterns for Web documents. Many documents such as personal home pages, are hardly ever updated,
and if so, they are updated by only a single person, making these doc- uments
suitable for caching and replication. Dynamically generated docu- ments
containing timely information require a different strategy, especially if they
need to be replicated for performance. Note that the current Web can hardly
differentiate such documents.
15. Q: Assume that a nonreplicated document of size s bytes is requested r times
per second. If the document is replicated to k different servers, and assuming
that updates are propagated separately to each replica, when will replication be
cheaper than when the document is not replicated?
A: The consumed bandwidth in the nonreplicated case is r  s, assuming that
the requests are independent. Suppose now that document is updated w times
per second and replicated to k servers. Updates are propagated independently,
so that we have a total consumed bandwidth for propagating an update as
k  w  s bytes. Replication will be cheaper only if k  w  s < r  s.
16. Q: Consider a Web site experiencing a flash crowd. What could be an appropriate measure to take in order to ensure that clients are still serviced well?
A: One possible solution is to have the Web site replicated and redirect clients
to the replicas. This will still put a burden on the main site as it needs to perform the redirections, but in practice this approach works reasonably well. The
problem is that the Web site will need to be replicated in advance. As an alternative, if flash crowds are predictable, it may be possible to perform replication on demand, provided the resources to do so can be instantly claimed. The
latter is generally the case in CDNs.
17. Q: There are, in principle, three different techniques for redirecting clients to
servers: TCP handoff, DNS-based redirection, and HTTP-based redirection.
What are the main advantages and disadvantages of each technique?
SOLUÇÕES DE PROBLEMAS PARA O
CAPÍTULO 3
47
A: Roughly speaking, we have that TCP handoff is highly transparent to
clients: they need not notice that there connection is being handled by another
server. However, TCP handoff clearly has scalability problems: it will generally work only for Web server clusters. DNS-based redirection is also transparent, but works only for an entire site. Redirection on a per-page basis is not
possible. In contrast, HTTP-based redirection can operate at this finer granularity, but has the disadvantage that a client will notice to which page it is
being redirected. The latter may not be what it wanted when clients store these
redirects such as in the case of maintaining bookmarks in Web browsers.
18. Q: Give an example in which a query containment check as performed by an
edge server supporting content-aware caching will return successfully.
A: Consider the two SQL queries Q1 ‘‘select * from booklist with price < 10’’
and Q2 ‘‘select * from booklist with price < 20.’’ In this example, the answer
for Q1 is contained in that of Q2. As a consequence, if the server had cached
the answer for Q2, it should be able to successfully perform Q1 locally.
19. Set up a simple Web-based system by installing and configuring the Apache
Web server for your local machine such that it can be accessed from a local
browser. If you have multiple computers in a local-area network, make sure
that the server can be accessed from any browser on that network.
20. WebDAV is supported by the Apache Web server and allows multiple users to
share files for reading and writing over the Internet. Install and configure
Apache for a WebDAV-enabled directory in a local-area network. Test the configuration by using a WebDAV client.
SOLUTIONS TO CHAPTER 13 PROBLEMS
1. Q: What type of coordination model would you classify the message-queuing
systems discussed in Chap. 0?
A: Considering that in message-queuing systems processes are temporally
uncoupled, but will otherwise have to agree on message format and destination
queues, they classify as mailbox coordination models.
2. Q: Outline an implementation of a publish/subscribe system based on a message-queuing system like that of IBM WebSphere.
A: Such an implementation can be accomplished by using a message broker.
All publish/subscribe messages are published to the broker. Subscribers pass
their subscriptions to the broker as well, which will then take care to forward
published messages to the appropriate subscribers. Note that the broker makes
use of the underlying message-queuing network.
48
SOLUÇÕES DE PROBLEMAS PARA O
CAPÍTULO 3
3. Q: Explain why decentralized coordination-based systems have inherent scalability problems.
A: The crux of the matter lies in the fact that we need to do decentralized
matching of published data and subscriptions. Sometimes, building an index is
possible, such as with subject-based systems. In those cases, we can use DHTbased systems to distribute the index among the nodes in the peer-to-peer system. If building such an index is not possible, as in the case of content-based
matching, we essentially need to do a global search to find subscriptions that
match published data. Such a search does not scale well.
4. Q: To what is a subject name in TIB/Rendezvous actually resolved, and how
does name resolution take place?
A: A name is resolved to the current group of subscribers. Name resolution
takes place by properly routing message to those subscribers. In TIB/Rendezvous, routing takes place through a combination of multicasting and filtering messages at rendezvous and router daemons.
5. Q: Outline a simple implementation for totally-ordered message delivery in a
TIB/Rendezvous system.
A: Use a sequencer to which all messages are sent. Subscribers pass subscriptions to this sequencer. The FIFO-ordered message delivery of the TIB/Rendezvous system will then guarantee that all messages multicast by the
sequencer are delivered to every subscriber in the same order.
6. Q: In content-based routing such as used in the Siena system, which we
described in the text, we may be confronted with a serious management problem. Which problem is that?
A: The issue here, is that these type of systems assume that an overlay of
application-level routers has already been established. In practice, this means
that an organization will need to manually configure the overlay network and
ensure that it is kept alive.
7. Q: Assume a process is replicated in a TIB/Rendezvous system. Give two
solutions to avoid so that messages from this replicated process are not published more than once.
A: A first solution is to attach a message identifier to each published message,
and to let subscribers discard duplicates by taking a look at the identifiers. The
main drawback of this approach is the waste of network bandwidth. Another
solution is to assign a coordinator among the replicas, and let only the coordinator actually publish messages. This solution is similar to assigning a coordinator in the case of invocations with replicated distributed objects.
8. Q: To what extent do we need totally-ordered multicasting when processes are
replicated in a TIB/Rendezvous system?
SOLUÇÕES DE PROBLEMAS PARA O
CAPÍTULO 3
49
A: Assuming that duplicate messages are either detected by subscribers, or
avoided altogether, total ordering is not an issue at all. In this case, the FIFOordering delivery semantics are sufficient to let subscribers process the messages in the order they were published by the replicated process.
9. Q: Describe a simple scheme for PGM that will allow receivers to detect missing messages, even the last one in a series.
A: A simple scheme is to use sequence numbers. Whenever a sender has no
more data to send, it should announce by multicasting a special control message. If that control message is lost, a receiver will start complaining in the
usual way. The sender can then simply retransmit the control message. In
essence, this is also the solution adopted in PGM.
10. Q: How could a coordination model based on generative communication be
implemented in TIB/Rendezvous?
A: This is actually not very difficult. What makes TIB/Rendezvous different
from, for example, the JavaSpaces in Jini, is that processes are still temporally
coupled. If published messages are temporarily stored, it would be possible for
subscribers to read them even when the publisher of messages no longer exists.
What is needed is for each subscriber to record a published message that it has
already read, so that receiving duplicates can be avoided.
11. Q: A lease period in Jini is always specified as a duration and not as an absolute time at which the lease expires. Why is this done?
A: Especially in wide-area systems, it may happen that clocks on different
machines give very different times. In that case, specifying the expiration of a
lease as an absolute time is simply too inaccurate as the holder of the lease
may have a very different idea when the lease expires than the processes that
handed out the lease. With durations, this difference becomes less an issue,
provided some guarantees can be given that the transmission time of a lease is
relatively low.
12. Q: What are the most important scalability problems in Jini?
A: One important problem is related to the fact the Jini uses a multicast protocol to locate lookup services. In a wide-area system, this protocol will have to
be replaced by something different if Jini is to scale to large numbers of users
and processes. A second problem is related to matching templates to tuples in
JavaSpaces. Again, special measures will be needed to search a JavaSpace that
may be potentially distributed across a large-scale network. No efficient solutions to these problems are yet known.
13. Q: Consider a distributed implementation of a JavaSpace in which tuples are
replicated across several machines. Give a protocol to delete a tuple such that
race conditions are avoided when two processes try to delete the same tuple.
A: Use a two-phase commit protocol. In phase one, the process doing the
50
SOLUÇÕES DE PROBLEMAS PARA O
CAPÍTULO 3
delete sends a message to all the JavaSpace servers holding the tuple asking
them to lock the tuple. When all of them are locked, the delete is sent. If a second delete happens simultaneously, it can happen that some servers have
locked one tuple and some have locked the other. If a server cannot grant a
request because the tuple is already locked, it sends back a negative acknowledgement, which causes the initiator to abort the delete, unlock all the tuples it
has locked, wait a random time, and try again later.
14. Q: Suppose a transaction T in Jini requires a lock on an object that is currently
locked by another transaction T . Explain what happens.
A: Transaction T will continue to block until the lock is either released or until
the lease on the transaction expires. In the latter case, transaction T is simply
aborted.
15. Q: Suppose a Jini client caches the tuple it obtained from a JavaSpace so that
it can avoid having to go to the JavaSpace the next time. Does this caching
make any sense?
A: Caching is senseless because the tuple will have been removed from the
JavaSpace when it was returned; it is ready for the client to keep. The main
idea behind caching is to keep data local to avoid another server access. In the
case of Jini, a JavaSpace is often used to explicitly synchronize processes.
Caching does not play a role when process synchronization is explicitly
needed.
16. Q: Answer the previous question, but now for the case that a client caches the
results returned by a lookup service.
A: This is a completely different situation. The lookup service stores information on the whereabouts of services. In this case, it may indeed make sense for
a client to cache previously returned results and try to contact the returned services before going to the lookup service again.
17. Q: Outline a simple implementation of a fault-tolerant JavaSpace.
A: The simplest approach is to implement a JavaSpace on a single server with
stable storage. Write operations succeed only if the tuple has been safely written to storage. In a more advanced setting, a distributed JavaSpace can be used
in which a server group is used to mask process failures. In that case, the
servers may need to follow a two-phase commit protocol for each write operation.
18. Q: In some subject-based publish/subscribe systems, secure solutions are
sought in end-to-end encryption beteen publishers and subscribers. However,
this approach may violate the initial design goals of coordination-based systems. How?
A: The problem is that end-to-end encryption requires that a publisher and
subscriber know each other. This is against the initial design goal that
SOLUÇÕES DE PROBLEMAS PARA O
CAPÍTULO 3
processes should be referentially decoupled.
51
Download