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