Baixe o app para aproveitar ainda mais
Prévia do material em texto
Universidade Federal de Ouro Preto Instituto de Ciências Exatas e Aplicadas Departamento de Computação e Sistemas Campus João Monlevade - MG LISTA II – CSI433 SISTEMAS DISTRIBUÍDOS 1 - Descreva as maneiras pelas quais o protocolo de requisição-resposta mascara a heterogeneidade dos sistemas operacionais e das redes de computador. R: Esta forma de comunicação é projetada para suportar as funções e as trocas de mensagens entre diferentes componentes em interações típicas cliente - servidor. Na maioria das vezes, a comunicação cliente-servidor é síncrona, visto que o cliente é bloqueado até que o servidor mande uma resposta. Pode ser considerada, também, como de confiança, pois a resposta do servidor é, de fato uma confirmação para o cliente. Para mascarar a heterogeneidade dos sistemas operacionais e das redes de computador, o protocolo requisição-resposta trabalha com um trio de primitivas de comunicação: doOperation, getRequest, sendReply. O método doOperation é utilizado para invocar objetos remotos pelos clientes, seus argumentos especificam o servidor remoto e a operação a ser invocada junto as informações adicionais exigidas pela operação. Sua saída é um array de bytes com a resposta, presumindo que o cliente empacota os argumentos também em um vetor de bytes e desempacota o resultado retornado. O método getRequest é utilizado por um processo servidor para obter requisições de serviço, quando o servidor tiver invocado a operação especificada é usado sendReply para enviar a mensagem de reposta ao cliente. A partir do momento em que a mensagem é recebida pelo lado cliente, a operação doOperation é desbloqueada e execução continua. 2 - Verifique se as seguintes operações são idempotentes: a) pressionar o botão “subir” (elevador): É idempotente. b) escrever dados em um arquivo: É idempotente. c) anexar dados em um arquivo: Não é idempotente. É uma condição necessária para a idempotência o fato de a operação não estar associada a nenhum estado? R: Sim, pois uma operação idempotente é aquela que pode ser efetuada repetidamente com o mesmo efeito, como se tivesse sido executada exatamente uma vez. 3 - Explique as escolhas de projeto relevantes para minimizar o volume de dados de resposta mantidos em um servidor. Compare os requisitos de armazenamento quando os protocolos RR e RRA são usados. R: O volume de dados de reposta mantidos em um servidor está associado ao uso de históricos, ele pode consumir muita memória, tornando-se muito grande. Como os clientes só podem fazer uma requisição por vez, o servidor pode interpretar cada nova requisição como uma confirmação de sua resposta anterior. Portanto, o histórico precisa conter apenas a última mensagem de resposta enviada a cada cliente. Entretanto, o volume de mensagens de resposta no histórico de um servidor pode ser um problema quando ele tiver um grande número de clientes. Isso é combinado com o fato de que, quando um processo cliente termina, ele não confirma a última resposta recebida, portanto, as mensagens no histórico normalmente são descartadas após determinado período de tempo. Protocolo RR Protocolo RRA • Baseado no protocolo requisição-resposta. • Não sã exigidas mensagens de confirmação especiais, pois um reply do servidor já é uma confirmação de recebimento. • Falhas de comunicação podem ser mascaradas pela retransmissão de requisições e pelo registro das repostas em um histórico para retransmissão. • Baseado na troca de três mensagens: requisição, resposta e confirmação. • Mensagem de confirmação contém o requestId da resposta que está sendo confirmada. Isso permitirá que o servidor descarte entradas de seu histórico. • A perda de uma mensagem de confirmação não é muito prejudicial ao sistema. No que diz respeito ao armazenamento quando o protocolo RR é usado há mais requisição de memória que quando o protocolo RRA é utilizado. 4 - Por que o número de mensagens trocadas em um protocolo poderia ser mais significativo para o desempenho do que o volume total de dados enviados? R: É difícil decidir-se sobre um tamanho apropriado para o buffer de recebimento de datagramas. No protocolo de requisição-resposta, isso se aplica aos buffers usados pelo servidor para receber mensagens de requisição e pelo cliente para receber respostas. O numero de mensagens trocadas pode indicar o pleno funcionamento e conexão no envio e recebimento cliente/servidor, por exemplo. O volume total de dados enviados nem sempre indica se o destinatário recebeu aquele envio, já o número de mensagens trocadas é real, é a confirmação de que os dados que estão enviados estão sendo recebidos. Na escolha do protocolo requisição-resposta com TCP usar o número de mensagens trocadas como parâmetro para avaliação de desempenho é mais significativo que usar o volume de dados, pois, com TCP, é permitido a transmissão de dados de qualquer tamanho, simplificando a implementação de protocolos requisição-resposta. Uma pergunta que pode e deve ser feita é se essa transmissão de dados de qualquer tamanho influencia e sobrecarrega o sistema. A resposta é “não”, pois se sucessivas requisições/respostas são trocadas entre o mesmo par, cliente/servidor, são enviadas pelo mesmo fluxo, a sobrecarga não afetaria toda conexão remota em si. 5 - Formule um argumento explicando por que a comunicação indireta pode ser apropriada em ambientes voláteis. Até que ponto isso pode ter origem no desacoplamento temporal, no desacoplamento espacial ou mesmo em uma combinação de ambos? R: Def.: A comunicação indireta é definida como a comunicação entre entidades de um sistema distribuído por meio de um intermediário, sem nenhum acoplamento direto entre o remetente e o destinatário (ou destinatários). A comunicação indireta é frequentemente usada em sistemas distribuídos, pois técnicas de acoplamento direto entre remetente e destinatário tornam os sistemas muito rígidos e pouco voláteis, consequentemente sendo um tanto quanto intolerantes a eventuais alterações no ambiente. Dessa forma, a comunicação indireta é mais tolerante e mais adaptável a ambientes voláteis, por exemplo, supondo que um servidor falhe, é mais fácil substituí-lo por outro que ofereça funcionalidade equivalente, no acoplamento direto isso não é possível, na maioria das vezes, e as possíveis falhas afetam diretamente o cliente que precisa lidar explicitamente com essa falha. A comunicação indireta evita o acoplamento direto, herdando algumas propriedades. O desacoplamento temporal e espacial são propriedades do uso da comunicação indireta. No temporal, remetente e destinatário podem coexistir ou existir em períodos de tempos diferentes para se comunicar, é uma vantagem em ambientes voláteis onde os remetentes e destinatários pode ir e vir. No espacial, o remetente não sabe ou não precisa saber a identidade do destinatário e vice-versa. O desenvolvedor de sistema tem muitos graus de liberdade para lidar com alterações, os participantes podem ser substituídos, atualizados, duplicados ou migrados. 6 - A Seção 6.1 do nosso livro texto se refere a sistemas que são acoplados no espaço, mas desacoplados no tempo – isto é, as mensagens são direcionadas para determinado destinatário (ou destinatários), mas esse destinatário pode ter tempo de vida independente em relação ao remetente. Você pode construir um paradigma de comunicação com essas propriedades? Por exemplo, o e-mail cai nessa categoria? R: Sim, tendo em vista que no acoplamento espacial o remetenteprecisa conhecer a identidade de um destinatário específico e que no desacoplamento temporal o destinatário e remetente não precisam coexistir no envio é possível criar uma aplicação usando esse paradigma de comunicação. O e-mail poderia ser, sim, um exemplo desse paradigma de comunicação, visto que o destinatário não precisa existir ao mesmo tempo que o remetente, porém o remetente obrigatoriamente deve conhecer a identidade do destinatário (ou destinatários). Sendo assim, a comunicação é acoplada no espaço e desacoplada no tempo. 7 - Se um paradigma de comunicação é assíncrono, ele também é desacoplado no tempo? Explique sua resposta com exemplos apropriados. R: Na comunicação assíncrona, um remetente envia uma mensagem e, então, continua (sem bloquear); assim, não há necessidade de esperar o destinatário para se comunicar. O desacoplamento temporal implica que o destinatário pode não existir no momento em que a comunicação é iniciada. Se um paradigma de comunicação é assíncrono, isso não implica se é desacoplado no tempo, há uma distinção entre assincronismo e desacoplamento temporal. 8 - Explique como é o funcionamento de filas de mensagens distribuídas. R: As filas de mensagens possibilitam formas de comunicação e gerenciamento para aplicações distribuídas, podem diminuir a complexidade da codificação de aplicações sem modularização e aumentar o desempenho, a confiabilidade e a escalabilidade. Filas de mensagens distribuídas se encaixam em um modelo de comunicação assíncrona, mais comumente utilizada em modelos arquiteturais sem servidor. Funciona da seguinte maneira: os conteúdos de texto são guardados e colocados em uma fila até que sejam, então, processadas e, posteriormente, deletados. Uma mensagem só pode ser processada uma vez e apenas por um consumidor. Utilização: As filas de mensagens podem ser usadas para modularizar alta carga processamento, para armazenar serviços em buffers ou lotes e para processar de forma uniforme picos de cargas de trabalho. 9 - Liste todos os passos que envolvem uma Chamada Remota de Procedimento (RPC). R: Há algumas questões de projeto a serem ressaltadas para RPC, dentre elas: o estilo de programação – programação com interfaces, semânticas de chamadas associada à RPC, problemas de transparência e como ele se relaciona com as chamadas de procedimento remoto. RPC – Programação por Interfaces: detalhamento de procedimentos oferecidos por um servidor, especificando os tipos de argumentos de cada um dos procedimentos. Linguagens de Definição de Interface (IDL): projetadas para permitir que procedimentos implementados em diferentes linguagens invoquem uns aos outros. Semântica das Chamadas: determinar quantas vezes o procedimento remoto é executado. Uma vez quanto tudo funciona perfeitamente, nenhuma vez quando a mensagem do cliente não chega ao servidor, mais de uma vez, quando a resposta do servidor se perde. Problemas de transparência: as chamadas remotas são mais vulneráveis a falhas do que as locais, pois envolvem uma rede, outro computador e outro processo, sendo mais complicado prover transparência. • O cliente acessa um serviço que inclui um procedimento stub para cada procedimento da interface de serviço; • O stub se comporta como um procedimento local para o cliente, mas ao invés de executar a chamada, ele empacota o identificador de procedimento e os argumentos em uma mensagem de requisição; • O despachante seleciona um dos procedimentos stub de servidor de acordo com o identificador de procedimento presenta na mensagem de requisição; • Chama os procedimentos de serviço correspondente e empacota os valores de retorno, os procedimentos de serviço implementam os procedimentos de interface de serviço; • Os procedimentos stub do cliente e do servidor podem ser gerados automaticamente por um compilador de interface, a partir da interface do serviço. Passo a passo para uma chamada remota: Passo 1: Chamada local do procedimento(); Passo 2: A stub do cliente “captura” chamada e realiza o marshalling de seus parâmetros; Passo 3: Envio de mensagens com os parâmetros; Passo 4: Recebimento da mensagem na máquina remota e chamada ao stub do servidor; Passo 5: Stub do servidor realiza o unmarshalling dos parâmetros e chama o procedimento remoto; Passo 6: Execução do procedimento remoto; Passo 7: Stub do servidor realiza o marshalling da reposta; Passo 8: Envio da mensagem com o resultado; Passo 9: Recebimento do resultado e chamada ao stub do cliente; Passo 10: Stub do cliente realiza o unmarshalling da resposta e retorna ao cliente. 10 - Apresente quais são as principais vantagens do RMI em relação ao RPC. R: Java RMI é mais eficiente que RPC, uma das vantagens do RMI é a possibilidade de obter a codificação do código de um objeto. Com RPC é possível apenas chamar funções remotas, com RMI é possível ter referências a objetos remotos e invocar seus métodos, também é possível passar e retornar mais referências de objeto remoto que podem ser distribuídas entre muitas instâncias JVM, mostrando-se mais poderoso. RMI é muito mais útil quando há necessidade de desenvolver uma arquitetura mais complexa que um típico cliente/servidor, pois é mais fácil disseminar objetos em uma rede que permita estabelecer conexões individuais explicitamente. 11 - Considerando os componentes do CORBA discuta as funções do repositório de implementações do ponto de vista da capacidade de mudança de escala e da tolerância a falhas. R: Def.: Um repositório de implementações é responsável por ativar servidores registrados sob demanda e por localizar os servidores que estão correntemente em execução. O nome do adaptador de objeto é usado para se referir aos servidores ao registrá-los e ativá-los. Do ponto de vista de capacidade de mudança de escala, um repositório de implementações armazena um mapeamento dos nomes de adaptadores para nomes de caminho de arquivos contendo implementações de objeto, as implementações e os nomes de adaptadores de objeto geralmente são registrados no repositório de implementações quando os programas servidores são instalados. Do ponto de vista de tolerância a falhas, um repositório permite que sejam armazenadas informações extras sobre cada servidor, como informações de controle de acesso sobre quem pode ativá-lo ou executar suas operações. É possível replicar informações nos repositórios de implementação para fornecer disponibilidade ou tolerância a falhas. 12 - Faça um texto resumindo as principais características de um Web Service (mínimo 8 linhas). R: Def.: Web Service é uma solução utilizada na integração de sistemas e na comunicação entre aplicações diferentes. Com esta tecnologia é possível que novas aplicações possam interagir com aquelas que já existem e que sistemas desenvolvidos em plataformas diferentes sejam compatíveis. Um serviço Web fornece uma interface de serviço que permite aos clientes interagirem com servidores, os clientes acessam operações de um servidor Web por meio de requisições e repostas formatadas em XML e, normalmente, transmitidas por HTTP. Os serviços Web podem ser acessados de uma maneira mais ad hoc do que os serviços baseados em CORBA, permitindo que eles sejam facilmente usados em aplicações de Internet. Assim como no CORBA e em Java, as interfaces dos serviços Web podem ser descritas em uma IDL, informações adicionais devem ser descritas, incluindo a codificação e os protocolos de comunicação em uso e o local do serviço. • Web services é uma tecnologia de chamada remota de objetos.• Permite a infraestrutura para criação de aplicações distribuídas. • Permitem a criação de pequenos módulos de código reutilizáveis e disponibilizados para construção de aplicações. • Utiliza protocolos Web como meio de transporte e comunicação. • Alto grau de abstração em relação a linguagens de programação e plataformas de hardware/Software. Os serviços Web são cada vez mais importantes para sistemas distribuídos, pois podem suportar atividade conjunta incluindo a integração B2B(empresa- empresa), permitem a criação de software inovador em cima da base de serviços já existentes e fornecem o middleware subjacente para a computação em grade e em nuvem. Os web services fornecem infraestrutura para manter uma forma mais rica e estruturada de interoperabilidade entre clientes e servidores, fornecem uma base por meio da qual um programa cliente em uma organização pode interagir com um servidor em outra organização, sem supervisão humana. Permitem o desenvolvimento de aplicações complexa, fornecendo serviços que integram vários outros serviços, o fornecimento de serviços Web como um acréscimo aos servidores Web é baseado na capacidade de usar uma requisição HTTP para provocar a execução de um programa. 13 - Quais são as principais diferenças entre usar CORBA e um RMI qualquer, como o do Java, por exemplo. R: Enquanto RMI é uma implementação específica, CORBA é um padrã genérico. Dessa forma, RMI é totalmente baseado na tecnologia Java, enquanto existem diversas implementações de CORBA em diversas linguagens diferentes. No caso específico, portanto de uma implementação Java de CORBA e do RMI, pode-se apontar algumas diferenças específicas. O protocolo de comunicação de ambas, por exemplo, é diferente: CORBA utiliza IIOP e RMI usa o JRMP. As referências a objetos, no caso do CORBA, são resolvidas pelos Object Adapters e pelo ORB. No caso do RMI, a própria máquina Virtual Java é responsável por essa tarefa. Algumas experiências demonstram que o desempenho de sistemas CORBA é maior que os baseados em RMI. No caso do CORBA, a modularidade é maior, pois a definição da interface é separada da implementação. Dessa forma, uma mesma interface pode gerar mais de uma implementação. No caso do RMI, interface e implementação estão embutidas no código Java. 14 - Qual o problema inerente a sistemas distribuídos que relógios sincronizados ajudam a resolver? Dê um exemplo concreto do problema. R: Relógios sincronizados ajudam a resolver problemas inerentes a manutenção da consistência dos dados distribuídos, a verificação da autenticidade de uma requisição enviada para um servidor e a eliminação do processamento de atualizações replicadas. Medir o tempo pode ser problemático, devido à existência de vários pontos de referência. Para saber em que hora do dia um evento específico ocorreu em um computador em particular é necessário sincronizar seu relógio com uma fonte de tempo externa confiável e aceita por todos. Por exemplo, uma transação de comércio eletrônico envolve eventos no computador do negociante e no computador de um banco. É importante, para propósitos de auditoria, que esses eventos tenham uma informação de tempo precisa. 15 - Explique por que o Network Time Protocol (NTP) não ajusta diretamente o relógio do sistema com a hora certa. Descreva como este ajuste é feito. Para conhecer mais sobre o NTP visite https://ntp.br/ R: O Network Time Protocol(NTP) não ajusta o relógio do sistema com a hora certa, pois cada mensagem carrega carimbos de tempo de eventos de mensagem recentes: os tempos locais de quando a mensagem NTP anterior entre o par foi enviada e recebida e o tempo local de quando a mensagem corrente foi transmitida. O NTP ajusta o relógio do sistema da seguinte forma: 1. Destinatário da mensagem NTP anota o tempo local ao receber a mensagem. Os quatro tempos, Ti – 3, Ti – 2, Ti – 1, e Ti mostrados acima para as mensagens m e m' enviadas entre os servidores A e B. No modo simétrico pode haver um atraso não desprezível entre a chegada de uma mensagem e o envio da próxima. 2. Para cada par de mensagens enviadas entre dois servidores, o NTP calcula uma compensação ci, que é uma estimativa da compensação real entre os dois relógios, e um atraso ai, que é o tempo de transmissão total das duas mensagens. Se o valor real da compensação do relógio em B, relativa à de A, for c e, se os tempos de transmissão reais de m e m' forem t e t' respectivamente, então temos: Ti – 2 = Ti – 3 + t + c e Ti = Ti – 1 + t' – c Isso leva a: ai = t + t' = Ti – 2 – Ti – 3 + Ti – Ti – 1 e: c = ci + (t' – t)/2, onde ci = (Ti – 2 – Ti – 3 + Ti – 1 – Ti)/2 3. Os servidores NTP aplicam um algoritmo de filtragem de dados em sucessivos pares <ci,ai>, para fazer uma estimativa da compensação c e calcular a qualidade dessa estimativa com base em uma quantidade estatística chamada filtro de dispersão. Uma dispersão relativamente alta representa dados relativamente não confiáveis. Os oito pares <ci,ai> mais recentes são mantidos. 16 - Faça um resumo explicando o funcionamento dos algoritmos para sincronização estudados: Cristian, Berkeley, NTP. R: Algoritmo de Cristian: Resume-se na possibilidade de consultar servidores de tempo equipados com um receptor WWV ou um relógio de alta precisão, ocorrem variações na estimativa do atraso entre as maquinas. Basicamente o processo ocorre da seguinte forma: 1 – Um computador A qualquer consulta a hora num computador B. 2 – Computador B inclui na resposta o valor do seu relógio. 3 – Computador A atualiza o seu relógio com o valor do relógio em B adicionado ao retardo da mensagem entre B e A. O problema desse algoritmo é que atrasos de mensagens farão com que a hora fornecida seja desatualizada. Algoritmo de Berkeley: É um algoritmo usado para a sincronização interna de um grupo de computadores. O 'Servidor de tempo' é ativo (máster) e coleta os valores de relógios de outros (slaves). Master usa estimativas do RTT para estimar o valor dos relógios dos computadores dentro dos grupos, a hora atual e resultante de uma média. Por fim o Master envia aos slaves o total de tempo em que os relógios devem adiantar/atrasar. Caso o máster falhe, um novo computador máster é eleito. NTP: Os servidores NTP formam uma topologia hierárquica, dividida em camadas ou estratos (em inglês: (strata) numerados de 0 (zero) a 16 (dezesseis). O estrato 0 (stratum 0) na verdade não faz parte da rede de servidores NTP, mas representa a referência primária de tempo, que é geralmente um receptor do Sistema de Posicionamento Global (GPS) ou um relógio atômico. O estrato 16 indica que um determinado servidor está inoperante. O estrato 0, ou relógio de referência, fornece o tempo correto para o estrato 1, que por sua vez fornece o tempo para o estrato 2 e assim por diante. O NTP e então, simultaneamente, servidor (fornece o tempo) e cliente (consulta o tempo). De forma geral, quanto mais perto da raiz, ou seja, do estrato 0, maior a exatidão do tempo. O estrato ao qual o servidor pertence e a principal métrica utilizada pelo NTP para escolher dentre vários, qual o melhor servidor para fornecer o tempo. 17 - Explique como funciona o método de ordenação de Lamport que utiliza o conceito da relação “acontece antes”. R: Segundo Lamport, não é possível sincronizar perfeitamente os relógios em um sistema distribuído, em geral não é possível usar o tempo físico para descobrir a ordem de qualquer par de eventos arbitrários que ocorram dentro dele. Em geral, é possível utilizar um esquema semelhante à causalidade física,mas aplicada aos sistemas distribuídos, para ordenar alguns dos eventos que ocorrem em diferentes processos. Essa ordenação é baseada em dois pontos simples e intuitivamente óbvios: • Se dois eventos ocorreram no mesmo processo pi (i = 1, 2,..., N), então eles ocorreram na ordem em que pi os observou – essa é a ordem →i que definimos anteriormente. • Quando uma mensagem é enviada entre processos, o evento de envio da mensagem ocorreu antes do evento de recepção da mensagem. Lamport chamou a ordenação parcial obtida pela generalização desses dois relacionamentos de relação acontece antes - happened-before. Às vezes, ela também é conhecida como relação de ordenação causal - causal ordering ou ordenação causal potencial – potential causal ordering. Podemos definir a relação acontece antes (AA), denotada por →, como segue: AA1: Se ∃ processo pi: e →i e', então e → e'. AA2: Para qualquer mensagem m, send(m) → receive(m) – onde send(m) é o evento de envio da mensagem e receive(m) é o evento de sua recepção. AA3: Se e, e' e e" são eventos tais que e → e' e e' → e", então e → e". Assim, se e e e' são eventos e se e → e', então, podemos encontrar uma série de eventos e1, e2,..., en que ocorrem em um ou mais processos, tal que e = e1 e e' = en e, para i = 1,2,..., N – 1, AA1 ou AA2 se aplica entre ei e ei+1. Isto é, ou eles ocorrem sucessivamente no mesmo processo ou existe uma mensagem m tal que ei = send(m) e ei+1 = receive(m). A sequência de eventos e1, e2,..., en não precisa ser única. A relação → está ilustrada abaixo para o caso de três processos p1, p2, p3. Pode-se notar que a → b, pois os eventos ocorrem nessa ordem no processo p1 (a →i b) e, semelhantemente, c → d. Além disso, b → c, pois esses eventos são o envio e a recepção da mensagem m1 e, semelhantemente, d → f. Combinando essas relações, também é possível dizer que, por exemplo, a → f. 18 - O que é um Estado Global em um SD e como os “cortes” se relacionam a esse conceito? R: Estados globais captam o conjunto de eventos que foram executados até o momento. Em sistemas distribuídos e complicado avaliar o estado global, e preciso cuidado ao se estabelecer o que ocorreu durante a execução. Alguns problemas relacionados são: coleta de lixo distribuída, detecção de deadlock distribuída e detecção de término distribuída. Para achar estados globais consistentes é preciso utilizar a técnica de cortes, que é uma divisão na execução do sistema, ou seja, um subconjunto do histórico global. Eventos a direita do corte estão fora do corte global, já eventos a esquerda estão dentro do mesmo. Cortes ainda podem ser consistentes (Obedecem a casualidade) e inconsistente (não obedecem a casualidade). 19 - A figura abaixo mostra eventos ocorrendo para cada um de dois processos, p1, p2 e p3. As setas entre os processos denotam transmissão de mensagens. (a) Marque o relógio de Lamport dos eventos (b) Mostre os valores de Relógio Vetorial para os mesmos eventos BIBLIOGRAFIA AMAZON, Aws <https://aws.amazon.com/pt/message-queue/ > Filas de mensagens: Sistemas de mensagens assíncronas para trabalhos em lote e aplicativos dissociados © 2018, Amazon Web Services. Acessado em 19/10, às 6h00. COULOURIS, G.; DOLLIMORE, J.; KINBERG, Tim. Sistemas Distribuídos: Conceitos e Projetos. 4a. edição. Bookmann, 2007
Compartilhar