Prévia do material em texto
Desenvolvimento de Sistemas Distribuídos Objetivos de um sistema distribuído 1. Um sistema distribuído é composto de vários computadores em rede compartilhando recursos. Qual das seguintes opções apresenta somente os objetivos de um sistema distribuído? Resposta: Disponibilidade de recursos, abstração, escalabilidade e sistema aberto. Um sistema distribuído tem como objetivos: abstrair os detalhes de hardware e software para dar a impressão de um sistema único ao usuário; oferecer disponibilidade dos recursos com acesso amplo e fácil aos usuários; permitir a escalabilidade de recursos computacionais, usuários e domínios administrativos; e tornar o sistema aberto para que os componentes de software possam ser extensíveis. A distribuição de carga é uma técnica usada na implementação do objetivo de escalabilidade. O paralelismo é uma característica de sistemas distribuídos. 2. A taxonomia de Flynn é amplamente utilizada para classificar sistemas computacionais e arquiteturas baseando-se no fluxo de instruções e no fluxo de dados. Em qual das seguintes classificações se encontram os supercomputadores? Resposta: SPMD (Single Program Multiple Data). Nesse sistema distribuído, um mesmo programa é executado em múltiplas máquinas, em que também são executadas diferentes instruções sob diferentes dados. Como as quatro classes propostas por Flynn (SISD, MISD, SIMD e MIMD) não preveem o nível de execução de um programa, os supercomputadores são classificados como SPMD (Single Program Multiple Data). 3. José está planejando desenvolver uma nova aplicação distribuída usando o modelo de rede ponto a ponto. Qual das seguintes suposições José deve fazer quando for desenvolver sua aplicação? Resposta: A rede não é confiável e não é segura, sempre vai existir latência, e a topologia de rede costuma mudar. Ao desenvolver aplicações para sistemas distribuídos, é importante levar em conta que a rede não é confiável e segura. Além disso, a topologia de rede pode mudar, e sempre haverá latências independentemente do tipo de rede. Além disso, a largura de banda é finita, uma vez que existem os limites impostos pelo provedor de Internet e pelo hardware adotado. 4. Na Universidade do Brasil, o campus tem vários prédios, e para cada prédio existe uma rede sem fio diferente. Os estudantes estão frustrados porque não conseguem manter-se conectados à Internet com seus celulares quando trocam de prédio, embora a infraestrutura de rede esteja projetada com vários roteadores para cobrir todo o campus. O que precisa ser implementado para resolver esse problema do sistema distribuído de Internet da Universidade Brasil? Resposta: Abstração. O sistema distribuído da Universidade poderia ser implementado de maneira mais abstrata ao usuário. Assim que o nível do sinal da rede sem fio baixar, o sistema poderia realocar o usuário para um roteador com sinal melhor sem perder a conexão com a Internet. Balanceamento de carga e comunicação assíncrona são técnicas que auxiliam na implementação de um sistema escalável. A disponibilidade de recursos e a escalabilidade não são um problema nesse caso, pois os recursos estão disponíveis, e nada relativo ao desempenho da Internet foi abordado nesta questão. 5. O jogo EVE Online foi construído sob um sistema distribuído robusto capaz de suportar milhares de usuários ao mesmo tempo. Foi um dos projetos bem-sucedidos para aquela época. Qual das seguintes opções a seguir apresenta os itens do projeto dessa aplicação distribuída? Resposta: Modelo cliente-servidor, aglomerado de computadores (cluster), particionamento de carga e monitoramento. Este jogo foi construído sob o modelo cliente-servidor. A cópia do estado do jogo fica armazenada em um servidor que é usado para manter os clientes atualizados. O servidor é composto por um agregado de computadores (cluster), onde a carga é particionada. O modelo ponto a ponto vem sendo adotado em jogos on-line mais modernos, como o Call of Duty: Modern Warfare, fazendo uso dos recursos computacionais dos usuários. Tipos de sistemas distribuídos 1. Um cluster é composto por várias máquinas conectadas em uma rede de alta velocidade. Qual é o tipo de sistema distribuído a que ele pertence? Resposta: Sistemas de computação. Os sistemas distribuídos podem ser classificados em três grandes grupos: sistemas de computação, sistemas corporativos e sistemas pervasivos. Os sistemas de computação distribuídos são usados para o processamento intensivo, como cluster e grades computacionais. Sistemas pervasivos distribuídos são equipados de sistemas embarcados e móveis. Os sistemas distribuídos corporativos são compostos de ambientes heterogêneos na comunicação usuário-provedor, bem como construídos no modelo publish-subscribe. 2. Uma equipe de engenheiros de software está criando um aplicativo para monitorar os sinais vitais de uma pessoa, usando uma rede de sensores. Qual das seguintes opções são preocupações que fazem parte desse projeto de sistema distribuído? Resposta: Privacidade, perda de dados, segurança e envio de alertas. Um sistema distribuído pervasivo que deseja monitorar os sinais vitais de uma pessoa deve se preocupar primordialmente em lidar com os desafios de perda dos dados, segurança, privacidade, envio de alertas, robustez no monitoramento e diagnóstico online. O médico precisa saber a localização do paciente e dos dispositivos, a fim de não comprometer uma vida com o diagnóstico para uma pessoa errada. 3. Computação em nuvem é um exemplo real de sistemas distribuídos. Qual das seguintes alternativas contempla os modelos de implantação de nuvens computacionais? Resposta: Nuvem privada, nuvem pública, nuvem híbrida e nuvem comunitária. Os modelos de implantação de nuvem definem como os recursos são compartilhados nesse ambiente. Os modelos de implantação propostos são nuvem privada, nuvem pública, nuvem híbrida e nuvem comunitária. Nuvem heterogênea é uma característica desse sistema distribuído. 4. Em resumo, sistemas pervasivos distribuídos são constituídos por vários dispositivos com capacidade menor de processamento e pouca capacidade de armazenamento de energia. Qual das seguintes alternativas é uma característica incomum nesse tipo de sistema distribuído? Resposta: Abstração. Sistemas pervasivos distribuídos têm uma grande variedade de dispositivos e sistemas operacionais (heterogeneidade). Mecanismos para recuperação de falhas e segurança são necessários, uma vez que os dispositivos se comunicam usando redes sem fio e estão geralmente conectados à Internet. Qualidade de serviço é uma preocupação na implementação desses sistemas, seja para garantir maior vida útil da bateria ou para evitar atrasos. Nesses ambientes, é preferível que as falhas e outros eventos não fiquem escondidos totalmente do usuário (abstração). 5. A heterogeneidade está presente nas redes, hardwares, sistemas operacionais, linguagens de programação e códigos dos desenvolvedores. Qual das seguintes tecnologias é usada para abstrair a heterogeneidade no hardware em sistemas distribuídos? Resposta: JVM (Java Virtual Machine). RMI, CORBA e RPC são middlewares que simplificam a comunicação entre processos em diferentes plataformas. SOAP é um protocolo de comunicação entre diferentes sistemas na Web. JVM é uma máquina virtual que permite interpretar bytecode e executar em diferentes hardwares (ex.: celulares e computadores). Programas escritos em linguagens que geram bytecode podem ser executados na JVM (ex.: Java, Scala e Groovy). Modelos físicos para sistemas distribuídos 1. Ataques à integridade dos dados quando da execução de códigos móveis e da negação de serviços são ameaças externas relacionadas ao desafio da segurança de um sistema distribuído. Essas ameaças não têm soluções prévias e padronizadas e estão entre as principais dificuldades inerentes ao projeto inicial de um sistema distribuído. Considerando os três modelos físicos para sistemas distribuídos, qual é o modelo que considera essa dificuldade como nula ou irrisória?alguma forma, produzir respostas que não foram requisitadas. Visto que nesse contexto não temos comunicação, a falha arbitrária não pode ser considerada de qualquer forma, já que necessita desse canal até para poder produzir seus erros arbitrários. 4. Entre as diversas falhas possíveis em um sistema distribuído, as falhas de comunicação são as mais aparentes e podem ocorrer por diversos contextos diferentes. Falhas de comunicação em um sistema distribuído tolerante a falhas podem ser classificadas em basicamente cinco tópicos: I. O cliente não consegue localizar o servidor. II. A mensagem de requisição do cliente para o servidor se perde. III. O servidor cai após receber uma requisição. IV. A mensagem do cliente para o servidor se perde. V. O cliente cai após enviar uma requisição. Algumas dessas falhas podem ser resolvidas facilmente com um mecanismo de contagem de tempo de requisições ou dados que já foram enviados e aguardam resposta. Esses cenários são: Resposta: II, III, IV, V. Todas as falhas possíveis em troca de mensagens podem, de fato, ser solucionadas com temporizadores, de forma que, se alguma requisição não chegou ao servidor, ou mesmo o cliente caiu, tanto um quanto o outro podem reenviar, ao término da temporização sem uma resposta, uma nova mensagem de resposta ou requisição. A participação do cenário I, em que a comunicação nem mesmo chegou a ser realizada, inviabiliza a opção. Se o serviço ou servidor nem mesmo está disponível por qualquer motivo interno ou externo que seja, não é possível estabelecer uma conexão, fazendo com que o uso de temporizador seja inútil. Compreenda que o uso de temporizadores faz sentido quando há ao menos a possibilidade de estabelecer uma conexão entre cliente e servidor e, caso haja perda de pacotes ou de alguma requisição qualquer, o temporizador pode refazer a mesma solicitação que não foi respondida. 5. Para que um sistema seja tolerante a falhas, a possibilidade de continuar funcionando, e de forma transparente, deve ser possível. Uma ideia amplamente utilizada e que funciona muito bem para que essa funcionalidade seja atingida é a replicação de recursos computacionais; ou seja, existem cópias exatas (e constantemente atualizadas) que podem assumir o papel a qualquer momento que as máquinas de produção falharem. Diversos tipos de problemas podem ser mascarados por replicação de recursos computacionais, exceto: Resposta: falhas de comunicação entre cliente e servidor em uma ideia peer-to-peer, visto que utilizam transporte orientado a conexão, e, depois de estabelecido com determinado recurso computacional que falha, esta não pode ser simplesmente movida pela própria tecnologia da conexão. Falhas de comunicação ou de troca de processos entre servidores não ficam evidentes ao cliente, pois toda essa movimentação acontece em uma camada a que o próprio cliente não tem acesso. O cliente apenas consome serviços, recursos ou o que o sistema distribuído está oferecendo a ele. Erros de comunicação entre servidores podem ser contornados com novas requisições. Troca de processos entre servidores também acontecem de forma transparente. O cliente apenas terá demora para ter sua requisição respondida, mas sem visualizar claramente que houve um erro, mantendo, assim, a funcionalidade de transparência. Quando se fala de transporte orientado à conexão, também se está falando do uso de algoritmo TCP; ou seja, depois que a conexão foi estabelecida com um servidor concluindo o processo completo (three way handshake), e este de repente falha, não é possível simplesmente mover a conexão já estabelecida para outro recurso computacional, deixando evidente a falha ocorrida para o cliente, quebrando a premissa de transparência que deve ser inerente ao sistema distribuído. O que pode ser feito é uma nova requisição para o sistema, fazendo com que a conexão com o cliente seja restabelecida. image1.pngResposta: Sistemas distribuídos primitivos. Considerando que o modelo físico de sistemas distribuídos primitivos foi o primeiro apresentado pela literatura, ao final dos anos 1970 e início dos anos 1980, ele surgiu em resposta ao avanço da tecnologia da época, especialmente das redes locais. Dessa forma, pode-se dizer que essa primeira geração dos modelos físicos não contemplava de forma prioritária determinados desafios que atualmente são emergenciais nos sistemas distribuídos contemporâneos, como a segurança. Nos sistemas distribuídos adaptados para a Internet e nos sistemas distribuídos contemporâneos, o desafio da segurança passa a ser uma meta emergente. Sistemas distribuídos de sistemas não existem. Por fim, sistemas distribuídos ubíquos não são modelos físicos de sistemas distribuídos. 2. Uma meta importante de sistemas distribuídos é separar as aplicações das plataformas subjacentes, provendo uma camada de software denominada middleware. O middleware é uma camada de software localizada entre as aplicações e as plataformas distribuídas. A proposta de um middleware em sistema distribuído vertical está diretamente relacionado ao desafio de: Resposta: heterogeneidade. A segunda geração dos modelos físicos surgiu em meados de 1990, em resposta ao crescimento significativo da Internet. Assim, incorporou-se a esse modelo uma infraestrutura mais heterogênea, abrangendo diversos e diferentes tipos de componentes de software e de hardware. Como resultado, um elevado nível de heterogeneidade começou a surgir nos sistemas distribuídos adaptados para a Internet. Diante desse novo cenário, apareceram novas tecnologias e estratégias com o objetivo de suprir as lacunas/dificuldades dessa geração, principalmente a heterogeneidade; dentre elas, surgiu o middleware. Os demais desafios pautados não estão diretamente relacionados ao conceito de middleware: a abertura de sistemas se refere a uma necessidade contínua de estender o sistema visando a adaptações; a qualidade de serviço está relacionada a componentes individuais do sistema, com vistas ao fornecimento de níveis de desempenho garantidos; a escalabilidade está diretamente voltada ao aumento do número de recursos versus o aumento de usuários, visando a adaptar a escalabilidade do sistema sem apresentar perda de desempenho; e, por fim, a segurança considera diretamente a integridade dos dados, bem como a disponibilidade e a confiabilidade do sistema. 3. Clusters e grades são um dos adventos inerentes à terceira geração dos modelos físicos para sistemas distribuídos, os sistemas distribuídos contemporâneos. Esses tipos de sistemas distribuídos são: Resposta: sistemas de suporte à computação em que a principal característica dos clusters é a homogeneidade e a das grades é a heterogeneidade. Clusters e grades são tipos de sistemas distribuídos que dão suporte à computação e, em geral, têm enfoque no poder computacional. Além disso, um cluster tem como principal característica a homogeneidade, tanto em termos de hardware como de software. Por outro lado, as grades têm como principal desafio a heterogeneidade em diversos aspectos. Clusters e grades não são sistemas que provêm suporte à informação de forma específica. 4. Computação em nuvem e Internet das coisas são dois adventos tecnológicos importantes apresentados na geração de sistemas distribuídos contemporâneos. Sobre essas tecnologias, analise as alternativas abaixo e assinale (V) para verdadeiro e (F) para falso. ( ) A computação em nuvem é uma das tecnologias atuais que contemplam a geração de modelos físicos contemporâneos, viabilizando a entrega de serviços sob demanda. ( ) A Internet das coisas (em inglês, Internet of Things – IoT) é um conjunto de produtos, serviços e processos que virtualiza as coisas do mundo real para processamento digital. ( ) A computação em nuvem (em inglês, cloud computing) tem atenção crescente da indústria e da academia. No entanto, esse advento é o principal responsável por gerar uma quantidade massiva de dados, o que, por sua vez, impacta diretamente a infraestrutura da Internet. ( ) A Internet das coisas visa a prover soluções em termos de orçamento e de dimensionamento das infraestruturas de comunicação, viabilizando soluções eficientes e de baixo custo. ( ) Pode-se dizer que IoT e computação em nuvem são tecnologias complementares, pois enquanto a Internet das coisas gera uma quantidade de dados crescente e significativa (big data), a computação em nuvem provê diversos serviços que facilitam a transferência, o gerenciamento e a manipulação de dados pela Internet. Assinale a alternativa correta: Resposta: V – V – F – F – V. A computação em nuvem é uma das tecnologias atuais da geração de modelos físicos contemporâneos, viabilizando a entrega de serviços sob demanda. No entanto, o advento responsável por gerar uma quantidade massiva de dados é a Internet das coisas. Um dos principais objetivos da computação em nuvem é prover soluções em termos de orçamento e de dimensionamento das infraestruturas de comunicação, viabilizando soluções eficientes e de baixo custo. Sendo assim, as duas tecnologias são complementares, pois enquanto uma está diretamente relacionada a big data (IoT), a outra (cloud computing) fornece serviços em diferentes camadas de sistemas para facilitar o gargalo gerado pelo aumento massivo e crescente de dados na Internet, caracterizado pela expressão big data. 5. A camada de transporte é responsável por fornecer um transporte de mensagens entre os pares remetente e destino independentemente do tipo de rede empregado. Em outras palavras, nessa camada, as portas representadas por processos permitem a transmissão bidirecional de dados de um processo host de origem a um processo em um nodo de destino específico. A camada de transporte implementa um protocolo que permite o controle de fluxo e a soma de verificação de conteúdo. Qual é o nome desse protocolo? Resposta: TCP. O protocolo que permite o controle de fluxo e a soma de verificação é o TCP. O protocolo UDP não viabiliza uma entrega confiável de mensagens e o fim, o protocolo IP não faz parte da camada de transporte de redes de computadores. Cliente/Servidor e Peer-to-Peer são modelos arquiteturais de Sistemas Distribuídos. Modelos de arquitetura para sistemas distribuídos 1. Os dois principais modelos arquiteturais de sistemas distribuídos são: cliente/servidor e peer-to-peer. Uma das principais diferenças entre eles é que o modelo cliente/servidor é o compartilhamento de recursos entre processos clientes e servidores distintos. Por outro lado, o modelo peer-to-peer não considera distinção entre processos servidores e clientes, em que todos os processos envolvidos na execução de uma tarefa desempenham papeis semelhantes. Sobre as vantagens e desvantagens desses modelos arquiteturais, analise as alternativas abaixo e considere [V] para Verdadeiro e [F] para Falso. [ ] Em termos de implementação, a implementação do modelo cliente/sevidor é mais fácil quando comparada com a implementação do modelo peer-to-peer. [ ] Em termos de custos de implantação, a implantação do modelo cliente/servidor é mais barato que o modelo peer-to-peer. [ ] Em termos de segurança, o modelo cliente/servidor é considerado mais seguro que o modelo peer-to-peer. [ ] Em termos de disponibilidade, o modelo cliente/servidor apresenta desvantagens quando comparado ao modelo peer-to-peer. Resposta: V – V – F – V. A estratégia do modelo cliente/servidor é simples e direta, portanto a implementação do cliente/servidor é menos complexa. Quanto aos custos de implantação, o modelo cliente/servidor é mais caro que o modelo peer-to-peer, o projeto baseado no modelo cliente/servidor deve arcar, pelo menos, com os custos de inicialização do sistema (equipe especializada, técnicos de redes, entre outros), enquanto no modelo peer-to-peer a configuração inicial é realizada por cada nodo, os quais definem suas próprias configurações e permissões. Com relação à segurança, o modelo peer-to-peer apresentadesvantagens, já que arquivos podem ser acessados indevidamente, pois os usuários tipicamente não precisam realizar login previamente no sistema, enquanto no modelo cliente/servidor há garantia de segurança em diferentes aspectos, por exemplo, o servidor pode controlar melhor o acesso e os recursos compartilhados de modo a garantir que apenas os clientes com as permissões apropriadas possam acessar e alterar dados. Considerando a disponibilidade, o modelo peer-to-peer apresenta vantagens quando comparado ao modelo cliente/servidor, uma vez que no modelo peer-to-peer umas das suas principais características é a descentralização. Logo, se algum nodo falhar nesse modelo arquitetural, não irá comprometer o sistema, pois cada cliente também é um servidor e vice-versa. Ao contrário do modelo cliente/servidor, no qual uma das principais características é a centralização e, dessa forma, se o nodo servidor falhar, por exemplo, o sistema ficará temporariamente inoperante, considerando que os papéis de cliente e servidor nesse modelo são distintos. 2. A comunicação em sistemas distribuídos é realizada por meio de troca de mensagens devido à carência diretamente relacionada a uma das principais dificuldades enfrentadas por todo e qualquer projetista de um modelo arquitetural de um sistema distribuído. Qual é o nome dessa carência? Resposta: Ausência de memória global compartilhada entre os componentes. A comunicação em um sistema distribuído é realizada através de troca de mensagens devido à ausência de memória global compartilhada entre os componentes. A ausência de relógio global não interfere na comunicação entre os componentes em um sistema distribuído. Protocolos devem ser considerados para estabelecimento de conexões entre os componentes. A existência de padrões (ou não) não está dentre as principais dificuldade enfrentadas pelos projetistas, bem como o papel de um middleware. 3. RPC (Chamada de Procedimento Remota) e RMI (Invocação de Método Remota) são os mecanismos que permitem ao cliente invocar um procedimento ou método do servidor remotamente por meio do estabelecimento de comunicação entre cliente e servidor. Sobre as diferenças entre eles, assinale a alternativa correta. Resposta: A diferença comum entre RPC e RMI é que o RPC suporta apenas programação procedural, enquanto o RMI suporta programação orientada a objetos. A grande diferença entre os dois é que o RPC suporta apenas programação procedural, enquanto o RMI suporta programação orientada a objetos. Nesse sentido, a programação estruturada não faz parte do mecanismo RPC. Além disso, os parâmetros passados via RPC consideram estruturas de dados comuns, os procedimentos não diretamente relacionados com a passagem de parâmetros. Por outro lado, o RMI para passagem de parâmetros, transita por meio dos objetos e não com a invocação remota de métodos. Por fim, o RPC é baseado na linguagem de programação C e não C#, enquanto o RMI considera a linguagem de programação Java. 4. Sabendo que sistemas distribuídos são constituídos de diferentes hardware e software, um dos propósitos de um middleware é mascarar a heterogeneidade. O modelo peer-to-peer é um dos principais modelos arquiteturais em sistemas distribuídos. Visando à comunicação nesses sistemas, o RPC (Chamada de Procedimento Remota) é dos paradigmas de comunicação. Ademais, a ausência de relógio global é uma das principais dificuldades enfrentas nesse contexto. Sobre modelos arquiteturais, estilos arquitetônicos e paradigmas de comunicação, analise as alternativas abaixo e considere [V] para Verdadeiro e [F] para Falso. [ ] Considerando uma aplicação que fornece o serviço de troca de e-mails, o modelo arquitetural peer-to-peer é sempre mais eficiente que uma arquitetura centralizada quando considerada uma aplicação. [ ] O paradigma de comunicação RPC (Chamada de Procedimento Remota) é necessariamente síncrono. [ ] Relógios lógicos também podem ser usados para sincronização de informações. [ ] Middleware é uma camada de software logicamente localizada entre aplicativos de alto nível, sistema operacional de baixo nível e recursos básicos de comunicação. Assinale a alternativa correta. Resposta: V – F – V – F. Considerando uma aplicação que oferece serviço de troca de e-mail, a primeira alternativa está correta, uma vez que a centralização de recursos não é uma característica condizente com a aplicação em questão. O RPC também pode ser assíncrono, o mecanismo prossegue normalmente ao receber uma chamada de procedimento remota e a chamada é armazenada para que seja possível realizar a sua execução posteriormente. Relógios lógicos ou contadores também podem ser usados para sincronizar informações as quais não estão relacionadas com o tempo real de forma direta. O middleware é uma camada de software que intermedeia aplicações de alto e baixo nível, viabilizando recursos básicos de comunicação. 5. Um dos modelos de comunicação inerente aos modelos arquiteturais é o modelo requisição/resposta, que se adequa à arquitetura cliente/servidor. O estilo arquitetônico em camadas se ajusta a esse modelo de comunicação especialmente quando consideramos uma arquitetura cliente/servidor de três camadas, a qual consiste em três camadas lógicas, as quais podem, em princípio, ser implementadas em máquinas separadas. A camada mais alta consiste em uma interface de usuário (cliente), a camada intermediária contém a implementação real e a camada mais baixa oferece suporte aos dados utilizados. Diante desse contexto, sabe-se que o mecanismo de implementação RMI se adequa ao modelo arquitetural cliente/servidor de acordo com o modelo de comunicação requisição/resposta e ao estilo arquitetônico em camadas. O principal objetivo do RMI é viabilizar a comunicação por meio de objetos remotos e, para tanto, utiliza dois elementos essenciais que ocultam os detalhes de comunicação do programador: o Stub e o Skeleton. Sobre o funcionamento do RMI focando nas características e nos objetivos do Stub e do Skeleton, assinale a alternativa correta. Resposta: O Stub fica no lado do cliente e o Skeleton no lado do servidor. Os dois se comunicam por meio da rede de computadores. O objetivo do Stub é implementar a interface remota e serve como um espaço reservado no cliente para o objeto remoto. O Skeleton, por sua vez, é responsável por realizar a chamada para a implementação real do objeto remoto. O Stub fica no lado do cliente e o Skeleton no lado do servidor. O objetivo do Stub é implementar a interface remota, enquanto o objetivo do Skeleton é realizar a chamada para a implementação real do objeto remoto. Quem inicia um registro de objeto remoto na porta especificada pelo cliente (host) atual é o rmiregistry e quem tem como objetivo declarar um conjunto de métodos remotos é a interface remota. Processos em sistemas distribuídos 1. Considerando processos e threads, há diferentes formas de implementar um servidor, dentre elas: um servidor monothread (com um único fluxo de execução) e um servidor multithread (com mais de um fluxo de execução). Existe alguma circunstância na qual um servidor monothread possa obter um melhor desempenho do que um servidor multithread? Resposta: Sim, muitas threads podem acarretar uma perda de desempenho. Apesar dos custos das threads (também denominadas processos leves) serem menores quando comparados com os custos relacionados aos processos, threads em excesso consomem muita memória, comprometendo o servidor. Sendo assim, a implementação de um servidor monothread pode apresentar melhor desempenho se o servidor for totalmente CPU-Bound, não havendo a necessidade de implementação de um servidor com múltiplas threads. As threads requerem mais memória para implementar a sua pilha de execução. Considerando esses aspectos, nem sempre a implementação multithreads é a melhor alternativa para se implementar um servidor, esse fator depende da natureza da aplicação. Por fim, em um servidor multithreads, o controle de fluxos de execução de threads não tem impactodireto no desempenho. 2. Imagine um servidor Web que mantenha uma tabela na qual endereços IP de clientes sejam mapeados para as páginas Web acessadas mais recentemente. Quando um cliente se conecta ao servidor, o servidor consulta o cliente em sua tabela e, caso o encontre, retorna à página registrada. Esse é um servidor: Resposta: sem estado. É um servidor sem estado. A questão importante de servidores sem estado não é se alguma informação foi mantida pelo servidor em seus clientes, mas sim se essas informações são necessárias para correção. Nesse exemplo, se a tabela for perdida por qualquer motivo, o cliente e o servidor poderão ainda interagir normalmente como se nada tivesse acontecido. Em um servidor com estado, tal interação só seria possível após o servidor se recuperar de uma possível falha. Um servidor com estado mantém as informações e elas são removidas de forma explicitada pelo servidor. Estado de sessão e estado permanente não são características aplicáveis diretamente ao problema em questão e estado flexível é considerado somente em servidores sem estado. 3. A virtualização de recursos surge com o objetivo de fazer com que apenas uma CPU seja capaz de simular a existência de mais unidades de processamento, ou seja, a capacidade de simular vários núcleos de execução também pode se expandir de modo a atender outros recursos. Quais das seguintes abordagens de gerenciamento de virtualização pode ajudar as organizações a manter a utilização ideal dos recursos de hardware ao longo do tempo? Resposta: Reconfigurando automaticamente máquinas virtuais com base em estatísticas de desempenho. A reconfiguração automática de máquinas virtuais baseando-se em estatísticas de desempenho é a melhor abordagem para auxiliar as organizações a manterem a utilização ideal dos recursos de hardware ao longo do tempo. A implementação de várias cópias de máquinas virtuais pode auxiliar em termos de tolerância a falhas. Colocar máquinas virtuais em computadores de rede isolados, pode auxiliar em termos de ataques relacionados com a segurança. Armazenar máquinas virtuais em um SAN, além de necessitarem de uma rede dedicada, é uma característica que está associada somente ao aspecto de armazenamento. Criar uma biblioteca de modelos de máquinas virtuais (VMs) é uma estratégia possível para criação de novas VMs, isto é, também não apresenta característica que possa auxiliar as organizações a manter a utilização ideal dos recursos de hardware. 4. A ideia básica da virtualização de recursos é considerar que hipoteticamente há um recurso replicado no sistema. Sobre as vantagens da virtualização, marque V para Verdadeiro e F para Falso. ( ) Infraestrutura flexível por um custo mais baixo. ( ) Maior eficiência no gerenciamento. ( ) Maior disponibilidade. ( ) Maior economia. Assinale a alternativa correta: Resposta: V – V – V – V. A virtualização de recursos apresenta uma infraestrutura flexível por um custo mais baixo, considerando a reutilização de recursos, que é viabilizado. Tanto o gerenciamento torna-se mais eficiente quanto a disponibilidade são vantagens da virtualização, principalmente em servidores, uma vez que, em caso de falha, a máquina virtual pode ser removida para outro hardware. Por fim, a economia, pois a virtualização evita gastos com novos hardwares, manutenção, espaço físico, entre outros. 5. As threads são importantes em sistemas distribuídos porque auxiliam diretamente nos modelos estruturais de clientes e servidores. Principalmente em servidores, atualmente é muito difícil um servidor sem threads. O principal objetivo de aplicar threads em um sistema distribuído é? Resposta: Desempenho. O principal objetivo das threads em sistemas distribuídos é o desempenho, pois as threads fornecem uma granularidade fina, uma vez que múltiplas threads podem realizar o controle de um processo. Essa característica é muito útil quando da criação de aplicações em ambientes distribuídos compostos de máquinas multithreads. A concorrência e transparência são desafios a serem enfrentados por todo e qualquer sistema distribuídos e tornam-se ainda mais desafiadores em aplicações multithreads. Segurança e escalabilidade também tratam-se de desafios, no entanto estes não têm associação direta com o conceito de aplicar ou não estratégias de implementação multithreads. Comunicação entre processos 1. Graças ao desenvolvimento dos microprocessadores e da evolução do sistema computacional, em que os usuários passaram a usar computadores em rede, nasceram os sistemas distribuídos. Nesses sistemas, é necessário desenvolver técnicas eficientes para a distribuição de todos os processos que envolvem os elementos de processamento. Qual o nome da atividade que define quais processos poderão ser processados em um sistema distribuído? Resposta: Escalonamento. Semáforo é exemplo de comunicação em sistemas não distribuídos. O escalonamento é uma atividade que define quais processos podem ser realizados, por meio da atuação de uma peça fundamental do sistema operacional (SO): o escalonador. Computadores multiprogramados têm múltiplos processos ou threads (uma ou mais tarefas que determinado programa realiza) competindo pela central process unit (CPU) ao mesmo tempo. Isso ocorre porque dois ou mais processos estão no estado ativo, prontos para uso, concomitantemente. Quando somente uma CPU está no estado pronto, realiza-se uma escolha em relação aos processos. Síncrona, socket e cliente-servidor são meios de comunicação em um sistema distribuído e não estão relacionados com o processo de escalonamento. 2. Em um sistema distribuído, é necessário desenvolver técnicas eficientes para a distribuição de todos os processos que envolvem os elementos de processamento. Entende-se por distribuição a atividade de escalonamento de processos. A figura a seguir demonstra um método de algoritmo de escalonamento conhecido como prioridade: Além do método por prioridade, no algoritmo de escalonamento de sistemas em lote há quais exemplos? Resposta: First-come First-served, Shortest job first e Shortest remaining time next. Chaveamento circular (round-robin), prioridades, múltiplas filas, shortest process next, garantido e lottery são exemplos de algoritmos de escalonamento de sistemas interativos. Interativo e tempo real são exemplos de sistemas em que há algoritmos de escalonamento, já garantido é um exemplo de algoritmo de escalonamento de sistemas interativos. Os sistemas em lote têm três exemplos de algoritmo de escalonamento: First-come First-served (FIFO), Shortest job first (SJF) e Shortest remaining time next (SRTN). Cada um deles tem suas particularidades, sendo que o FIFO é o mais utilizado. 3. A arquitetura de uma comunicação envolve muitos processos e elementos importantes. É necessário entendê-la porque ela é a estrutura, a base que os processos utilizam dentro um sistema distribuído para realizar uma comunicação. Em uma arquitetura de comunicação, existem particularidades e mecanismos que auxiliam nesse processo. Sobre as particularidades e os elementos que a envolvem, analise as assertivas a seguir. I. Um elemento que serve de mediador da comunicação ou da cooperação entre componentes, realizando as chamadas de procedimentos (remotos), passagem de mensagem ou fluxo de dados é conhecido como componente. II. Síncrona, conhecida como conector, é uma operação que atua como não bloqueante no envio de mensagens. III. O conector media a comunicação entre componentes, realiza chamadas remotas e passagem de mensagem entre processos. IV. Componente faz parte de uma arquitetura de comunicação, atuando com conectores. Quais estão corretas? Resposta: Apenas III e IV. O item I está incorreto, por tratar do conceito de conector, e não de componente. O item II está incorreto, porque conector não é conhecido como síncrona (uma das formas de comunicação e troca de mensagens). O item III está correto, por tratar corretamente o conceito de conector. O IV aborda de forma correta o conceitode componentes. 4. A comunicação em sistemas distribuídos ocorre por troca de mensagens, em que há alguns mecanismos para que essas mensagens possam ser trocadas. Existem alguns métodos de comunicação entre processos que realizam a troca de mensagens. Sobre esses métodos, marque V para verdadeiro e F para falso. ( ) Na comunicação síncrona bloqueante, o seu destino (send) aguarda até que a mensagem chegue ao seu receptor, e a origem (receive) aguarda até que a mensagem fique disponível. ( ) Na comunicação assíncrona não bloqueante, as mensagens podem ser enviadas uma após a outra. ( ) A comunicação por portas não ocorre por meio de regras padronizadas do modelo OSI e não utiliza protocolos. ( ) A comunicação por grupo multicast é um paradigma de comunicação indireta. Todos os processos pertencentes a um determinado grupo recebem mensagens, mas não reconhecem a identidade do destinatário. Feito isso, assinale a alternativa que apresenta a sequência correta. Resposta: V, V, F, V. A primeira afirmativa é verdadeira, por abordar o conceito correto de comunicação síncrona, na qual há o destino (send), que espera até a mensagem chegar ao seu receptor, e a origem (receive), que aguarda até a mensagem ficar disponível, ou seja, uma mensagem só chega quando a mensagem anterior foi processada e entregue ao seu destino. Caso contrário, o envio é bloqueado até que a comunicação anterior seja finalizada. Nesse caso, send e receive atuam como operações de bloqueio. A segunda afirmativa é verdadeira, por abordar o conceito correto de comunicação assíncrona, na qual há mensagens sendo enviadas quantas vezes forem necessárias pelo receptor/transmissor, desde que elas sejam entregues. Não existe a necessidade de uma resposta. Sendo assim, as operações send e receive não atuam como operações bloqueantes. A terceira afirmativa é falsa, porque aborda o conceito de comunicação por portas de maneira errada. Esse tipo de comunicação utiliza, sim, protocolos e regras padronizadas do modelo OSI. A quarta afirmativa é verdadeira, por abordar o conceito correto de comunicação por grupo multicast. 5. A comunicação entre processos pode ser realizada por meio de alguns métodos. Um deles é mecanismo de serviço de transporte utilizado para a comunicação entre processos em um sistema distribuído, sendo gerenciados pela camada de protocolos de transporte, e utilizam as funcionalidades de comunicação TCP/IP. Essa comunicação é a: Resposta: por sockete. Na comunicação cliente-servidor, os clientes são os processos que solicitam serviços, e o servidor são os processos que recebem esses requisitos. Por padrão, o cliente envia uma mensagem para o servidor solicitando um serviço e aguarda a resposta. Comunicação por sockete é a alternativa correta, porque o conceito abordado no enunciado da questão trata exclusivamente do método de comunicação de troca de mensagens entre processos por sockete. Para que um processo receba mensagens, seu sockete deve estar vinculado a uma porta local e a um dos endereços IP do computador em que é executado. As mensagens enviadas para um endereço IP e um número de porta em particular só podem ser recebidas por um processo, cujo sockete esteja associado a esse endereço IP e a esse número de porta. Memória compartilhada é um método de comunicação entre processos de sistemas não distribuídos. Middleware é um programa mediador, e não um método de comunicação entre processos de um sistema distribuído. A sincronização reordena os processos para que não ocorram acessos excessivos e desorganizados em uma determinada comunicação. Sendo assim, a sincronização auxilia na comunicação, mas não é um exemplo de comunicação entre processos. Tipos de transações 1. Um problema foi identificado ao integrar o sistema Sempre Investindo com o software desenvolvido para a corretora de seguros Mais Valor. O relatório recebido do suporte técnico informa que a transação distribuída plana do sistema não está conseguindo efetivar as suas operações. Assinale a alternativa que representa os sintomas identificados que geraram essa conclusão: Resposta: A variável de retorno do método Gravar está fixa com o valor falso. Os sintomas identificados ocorrem se a variável de retorno do método Gravar estiver fixa com o valor falso. O método Gravar é invocado pelo coordenador do protocolo solicitando que o participante confirme a transação. Um erro de programação desse método afeta diretamente a efetivação das operações de uma transação plana. Uma subtransação pertence a uma transação distribuída aninhada do sistema. Logo, esse fato não prejudica a efetivação da transação distribuída plana. Os temporizadores são usados para controlar o atraso da comunicação entre o coordenador e um participante e, sempre que são ultrapassados, o método é automaticamente invocado novamente. Assim, observar atrasos na comunicação entre os métodos pode prejudicar o desempenho do sistema distribuído, mas não compromete a efetivação das operações da transação distribuída plana. A transação de nível superior é responsável por gerenciar a execução do protocolo de confirmação atômica em transações aninhadas. Por tanto, esse fato não prejudicaria a execução do protocolo na transação plana. Sempre que um participante está em situação de incerteza, ele se comunica com o coordenador, por meio do método solicita Decisão, para saber como proceder, logo, essa não é a causa do problema. 2. Um requisito fundamental para um sistema distribuído consiste na atomicidade das suas transações. As propriedades ACID contribuem para atender a esse requisito. Assinale a alternativa que apresenta o conceito correto sobre uma das propriedades ACID: Resposta: A atomicidade assegura que todas as operações de uma transação devem ser efetivadas ou nenhuma operação deve ser efetivada. A atomicidade assegura que todas as operações de uma transação devem ser efetivadas ou nenhuma operação deve ser efetivada. A durabilidade possibilita que os efeitos de uma transação sejam salvos de modo permanente, mesmo em caso de falhas. A consistência assegura que o sistema distribuído seja conduzido entre estados consistentes. O isolamento garante que a transação não deve sofrer interferências de outras transações. 3. As transações distribuídas possibilitam o acesso de objetos compartilhados por diversos servidores de um sistema distribuído. Sobre as transações distribuídas aninhadas, é correto afirmar: Resposta: Têm um desempenho superior em relação às transações distribuídas aninhadas. É correto afirmar que as transações aninhadas têm um desempenho superior em relação ás transações planas, pois executam as suas operações em paralelo, enquanto que as transações planas executam de modo sequencial. O coordenador participa do protocolo de confirmação atômica somente em transações planas, não sendo empregado nas transações aninhadas. O início do protocolo de confirmação atômica das transações aninhadas ocorre quando uma transação de nível superior termina, e não quando o cliente solicita a confirmação da transação. O conceito de subtransação ascendente caracteriza uma transação que gerou subtransações. Durante a execução do protocolo de confirmação atômica, uma subtransação pode decidir de maneira independente se passará ao estado confirmada provisoriamente. 4. Durante o seu ciclo de vida, uma transação assume diferentes estados em um sistema distribuído. Assinale a alternativa correta sobre os estados de uma transação distribuída: Resposta: A transação é criada no estado ativo e permanece nele durante a execução de suas operações. O correto é afirmar que a transação é criada no estado ativo e permanece nele durante a sua execução. Uma transação está falha quando existe um desvio do funcionamento correto das suas operações, mas o cancelamento propriamente dito ocorre quando a transação se encontra no estado abortado. O estado de efetivação provisória não registra os resultados de suas operações em um meio de armazenamento permanente, não podendo garantir que uma subtransação será confirmada.Esse registro ocorre somente quando a transação se encontra no estado preparado para confirmar. 5. O protocolo de confirmação atômica atua no sistema distribuído gerenciando quando uma transação distribuída plana muda o seu estado de provisoriamente efetivada, passando pelo estado preparado para confirmar, até se tornar efetivada. Esse protocolo segue duas fases e quatro etapas, nas quais os participantes se comunicam com o coordenador por meio de um conjunto de métodos que atuam como interfaces de comunicação. Sobre esses métodos, é correto afirmar que: Resposta: O coordenador solicita que o participante confirme a sua parte na transação por meio do método Gravar. O correto é afirmar que o coordenador solicita que o participante confirme a sua parte na transação por meio do método Gravar, pois é este método que possibilita que o participante confirme a sua parte na transação. O método foiGravado possibilita que o participante pergunte ao coordenador se uma transação foi efetivada. O método solicitaDecisão é invocado pelo participante para perguntar ao coordenador qual é a decisão sobre uma transação. O método abortar é invocado pelo coordenador solicitando que o participante cancele a sua parte na transação. O método podeGravar é invocado pelo coordenador perguntando se um participante está apto para confirmar uma transação e a resposta consiste em seu voto. Métodos de controle de concorrência 1. A situação de conflito entre transações concorrentes de um sistema distribuído é definida quando os efeitos de duas ou mais operações dependem da ordem em que elas são executadas. Assinale a alternativa que representa os sintomas identificados que geram conflito entre operações: Resposta: A transação T1 executa uma operação de leitura, e a transação T2 executa uma operação de escrita. O conflito pode ocorrer quando duas ou mais operações de diferentes transações estão em execução e pelo menos uma delas realiza uma escrita. Logo, o conflito ocorre quando a transação T1 executa uma operação de leitura e T2 executa uma operação de escrita. Se a transação T1 executa uma operação de leitura seguida por outra operação de escrita, têm-se somente operações de uma mesma transação, o que não gera o conflito. Quando há duas transações, T1 e T, ambas executando operações de leitura, não ocorre o conflito, pois esse evento acontece somente quando existe pelo menos uma operação de escrita. Se há transações T2 executando uma operação de escrita e a operação de T1 aguarda para executar uma operação de leitura, não ocorre o conflito, pois existe uma regra sendo seguida pelas operações que determinam a ordem das operações. Em uma situação em que T2 confirmou uma operação de escrita e T1 solicita uma operação de escrita, o conflito não ocorre, pois a confirmação da operação de escrita indica que a escrita já foi efetivada antes de ocorrer a operação de leitura de T1. 2. O uso de travas em sistemas distribuídos consiste em uma importante abordagem para evitar impasses. Assinale a alternativa que descreve as informações corretas sobre as diferentes abordagens baseadas no travamento. Reposta: A segunda fase do travamento de duas fases libera as travas existentes. Na segunda fase do travamento de duas fases, as travas são liberadas, diminuindo o número de travas entre as operações. A primeira fase dessa abordagem realmente é denominada de crescimento, mas ela aumenta o número de travas no sistema, e não o seu desempenho. As travas de confirmação do travamento de duas versões possibilitam que o coordenador converta as travas de escrita em travas de confirmação, e não as travas de leitura. As travas de intenção no travamento hierárquico permitem que as travas nos níveis inferiores indiquem a necessidade de usar as configurações das travas de nível superior, e não o inverso. A promoção de travas pode ocorrer quando uma trava menos exclusiva se torna mais exclusiva. Uma trava de leitura é menos exclusiva do que uma trava de escrita. Logo, uma trava de escrita não pode ser promovida a uma trava de leitura. 3. O controle de concorrência otimista parte da hipótese de que o ônus da implantação das medidas de controle é maior do que o ônus gerado pela ocorrência de conflitos. Sobre o controle de concorrência otimista, é correto afirmar: Resposta: As alterações realizadas nas versões de tentativa são tornadas permanentes na fase de atualização. É correto afirmar que as alterações realizadas nas versões de tentativa são tornadas permanentes na fase de atualização, pois essa fase usa essas estruturas para identificar eventuais conflitos. Mesmo usando uma perspectiva otimista, a abordagem considera a ocorrência de conflitos, mas trata-os na fase de validação. As versões de tentativa realmente atuam como uma cópia de determinado objeto; no entanto, elas são criadas na fase de trabalho, e não na fase de atualização. As operações de leitura ocorrem diretamente no objeto durante a fase de trabalho, pois as versões de tentativas são empregadas somente em operações de escrita. Na abordagem de validação para trás, a transação é validada em relação às transações sobrepostas precedentes. As transações sobrepostas precedentes são consideradas na abordagem de validação para frente. 4. A ordenação por carimbo de tempo consiste em um importante método de controle de concorrência de transações de sistemas distribuídos, sendo empregada, por exemplo, no sistema Dynamo de armazenamento da Amazon. Assinale a alternativa correta sobre o funcionamento dessa abordagem: Resposta: A versão múltipla de ordenação por carimbo de tempo elimina a ocorrência de conflitos em operações de escrita de diferentes transações. O correto é afirmar que a versão múltipla de ordenação por carimbo de tempo elimina a ocorrência de conflitos em operações de escrita de diferentes transações, pois cada transação escreve sua própria versão confirmada nos objetos que acessa. As versões de tentativa têm um conjunto de carimbos de leitura. As operações de escrita são registradas nas versões de tentativa dos objetos, o que torna as alterações invisíveis para outras transações. A versão múltipla de ordenação por carimbo de tempo evita operações de leituras atrasadas, pois as leituras são sempre permitidas. Quando ocorre uma operação de leitura, a operação é direcionada para a versão de tentativa com o maior valor de carimbo de escrita e leitura. Além de armazenar a referência das versões de tentativa para cada objeto, a versão múltipla de ordenação guarda as versões confirmadas antigas para usar em situações de leituras tardias. 5. Um carimbo de tempo, ou timestamp, consiste em um valor inteiro que representa a combinação de um horário de uma data específica capaz de representar o momento de criação de uma operação de uma transação. A abordagem de ordenação por carimbo de tempo emprega esse valor como critério para determinar a prioridade de uma operação. Assuma a existência de cinco transações, T1, T2, T3, T4 e T5, em que a relação entre o valor dos seus carimbos é T1>T2>T3>T4>T5. Com base nesse cenário, é correto afirmar: Resposta: Se T4 escreve e T1 já estava registrada, então depois da operação a ordem será T4, T1. O correto é afirmar que, se T4 escreve e T1 já estava registrada, então depois da operação a ordem será T4, T1, pois T1 tem o maior valor entre os carimbos de tempo. Pelo mesmo motivo, se T1 escreve e T2 já estava registrada, então depois da operação a ordem será T2, T1. Se T2 escreve e T5 já estava registrada, então depois da operação a ordem será T5, T2, pois T5 tem o menor valor de carimbo de tempo. Essa mesma explicação justifica que, se T5 escreve e T3 já estava registrada, então depois da operação a ordem será T5, T3. Se T3 escreve e T4 já estava registrada, então depois da operação a ordem será T4, T3, pois T3 é maior do que T4. Coordenação de processos 1. O consenso em sistemas distribuídos refere a necessidade de os processos entrarem em acordo sobre ações ou operações que vão ser realizadas em um instante de tempo seguinte. A aplicação de mecanismosde consenso entre processos é indispensável em sistemas distribuídos que necessitam obrigatoriamente de: Resposta: consistência, atomicidade e ordem para as operações realizadas. O mecanismo de consenso é obrigatório em sistemas distribuídos que necessitam de consistência, atomicidade e ordem para as operações realizadas. Uma vez que todos os processos devem concordar com as operações realizadas, que podem, por exemplo, modificar o estado de uma variável, essa modificação deve ser consistente, isto é, caso ocorrer uma falha, depois de modificar o estado, é possível retornar ao estado anterior da variável; além disso, deve ser atômica, ou seja, executada por completo; e , por fim, ter a mesma ordem nas operações realizadas, para que o valor da variável seja o mesmo, não resultando em conflito entre os processos, quando estes necessitarem fazer uso do estado da variável. Considerando o exemplo, o estado dessa variável, após a operação, deve ser visível e igual para todos os processos. Entretanto, a padronização não impacta a visão do estado da variável para os processos; além disso, todo sistema distribuído possui lógica e organização mínima em suas operações para seu funcionamento. O consenso e o acordo entre processos são utilizados exclusivamente para sistemas distribuídos que necessitam, obrigatoriamente, garantir as propriedades de consistência, atomicidade e ordem para operações realizadas; propriedades essas que não são necessárias em todo tipo de sistema. 2. Um dos tipos de coordenação de processos é a eleição. Em determinados momentos, um processo é eleito para desempenhar uma função de coordenador no sistema. Em uma situação em que dois processos detectam simultaneamente que o coordenador falhou e deixou o sistema, e ambos convocam uma nova eleição utilizando o algoritmo do valentão, o que acontece? Resposta: Os processos com maiores números de processo receberão duas mensagens de eleição, uma delas será ignorada e a eleição continuará normalmente. Utilizando o algoritmo do valentão, quando o coordenador falha, o processo que identificou a falha envia uma mensagem de eleição para os processos que têm números de processo maiores que ele. Assim, caso dois processos identifiquem a falha, os processos com maiores números de processo vão receber duas mensagens de eleição, uma será desconsiderada e o algoritmo de eleição continuará normalmente, até que seja definido o coordenador. O fato de duas mensagens de eleição serem enviadas para um mesmo processo não resulta em conflito; apenas uma delas será descartada e as próximas etapas do algoritmo serão aplicadas. No algoritmo do valentão, a mensagem de eleição nunca é enviada para processos que têm os menores números de processo (processo ID); a ideia do algoritmo é exatamente aplicar bullying nesses processos e só considerar para eleição aqueles que têm os maiores números de processo dentro do grupo. 3. A coordenação de processos é necessária, dentre outros fatores, para possibilitar a exclusão mútua distribuída, permitindo a utilização eficaz dos recursos compartilhados presentes no sistema. Diferentes algoritmos podem ser utilizados para a obtenção da exclusão mútua distribuída. Considerando o algoritmo centralizado, é correto afirmar que: Resposta: quando um processo solicita o uso de um recurso compartilhado que está sob posse de outro processo, o processo solicitante entra em uma fila de espera. Considerando o algoritmo centralizado, o coordenador central, ao observar que um processo solicitou o uso de um recurso compartilhado que está sendo utilizado por outro processo, automaticamente coloca o processo solicitante na fila de espera Esse processo garante a exclusão mútua distribuída. Nesse algoritmo, o processo solicitante não desiste de utilizar o recurso, apenas aguarda sua vez em uma fila de espera. Além disso, o processo solicitante não tem permissão de tomar o recurso à força; o coordenador central é o responsável por gerenciar os recursos compartilhados do sistema. Por fim, vale ressaltar que uma nova eleição só ocorre quando for identificado que o coordenador central falhou e, em seguida, não responde mais a nenhuma ação. 4. Em sistemas distribuídos, a coordenação de processos é fundamental para garantir a exclusão mútua distribuída, impossibilitando que dois ou mais processos acessem um mesmo recurso compartilhado ao mesmo tempo. O algoritmo baseado em anel para exclusão mútua distribuída utiliza um token em sua implementação. Sobre o token e sua finalidade, é correto afirmar que: Resposta: o token indica qual processo pode utilizar o recurso compartilhado. O processo que tiver o token pode fazer uso do recurso e, quando terminar de usá-lo, passa o token para o processo sucessor no anel. O token representa uma ficha e somente o processo que a tiver pode fazer uso do recurso compartilhado, enquanto os demais esperam. Após fazer uso do recurso compartilhado, o processo passa o token para o processo sucessor no anel. No algoritmo baseado em anel para exclusão mútua distribuída, não existe a presença de um coordenador, os próprios processos se coordenam entre si. Desse modo, o processo que tiver o token em um instante de tempo não é o coordenador central. Além disso, o token sempre é passado para o processo sucessor no anel, nunca para o coordenador, pois este não está presente nesse algoritmo. Vale ressaltar que um processo só pode utilizar um recurso uma vez por token. Usou uma vez, deve liberar o recurso e passar o token para o processo sucessor no anel. 5. Os algoritmos de eleição são fundamentais para a coordenação de processos em um sistema distribuído. Esses algoritmos têm como finalidade propiciar o mecanismo de eleição de um coordenador, ou seja, um processo que, dentre todos os outros, é o único que vai desempenhar uma função especial no sistema. No algoritmo de eleição baseado em anel, o coordenador é eleito no momento em que: Resposta: A mensagem de eleição volta para o processo que a disparou inicialmente. Desse modo, esse processo pode verificar o conteúdo da mensagem e, com base nos números de processos presentes nela, indicar qual processo será o novo coordenador, ou seja, o processo que tiver o número de processo mais alto. No algoritmo de eleição baseado em anel, um processo identifica que o coordenador falhou e, então, envia uma mensagem para o processo sucessor no anel contendo seu número de processo. Assim, todos os processos colocam seus números de processo na mensagem e a mesma mensagem vai circulando pelo anel. Quando a mensagem volta para o processo que a disparou, este verifica qual processo tem o maior número de processo para ser eleito como novo coordenador. Note que, nesse algoritmo, não importa para a eleição qual processo está de posse do token e, independente de qualquer coisa, o processo que tiver o maior número de processo será eleito o coordenador. Vale destacar que o coordenador antigo não participa do processo de eleição, uma vez que entrou em colapso e seu processo caiu. Modelos de consistência 1. Os modelos de consistência em sistemas distribuídos são definidos como contratos que são seguidos pelo sistema e definem as regras para consistência, assim como os seus limites. Considerando o modelo de consistência centrado em dados na consistência causal, operações de escritas causadas em decorrência de outras, devem ser vistas: Resposta: Por todos os processos do sistema na mesma sequência. Entretanto, operações de escritas executadas de modo concorrente, que não têm relação de causalidade, podem ser vistas em uma ordem diferente por processos diferentes. Considerando a consistência causal, as operações de escrita causadas em decorrência de outras operações de escrita devem ser vistas por todos os processos do sistema em uma mesma sequência ordenada. Entretanto, operações de escritas que ocorrem de modo concorrente e que não têm relação de causalidade podem ser vistas em uma ordem diferente por processos diferentes, uma vez que, quando operações de escrita têmcausalidade entre si, a ordem em que elas são vistas pelas réplicas é importante, pois inverter essa ordem gera resultados diferentes do esperado, ou seja, inconsistentes entre réplicas. Todavia, quando as operações não têm relação casual, elas, em geral, são executadas concorrentemente e não importa se vão seguir ordens diferentes em processos e réplicas diferentes, pois como não estão relacionadas, o resultado permanecerá o mesmo. 2. Os servidores e os dados de sistemas, em geral, são replicados para possibilitar, principalmente, confiabilidade. Consequentemente, é necessário garantir consistência entre as réplicas. Considere um sistema distribuído que oferece o serviço de e-mail para usuários móveis, ou não, implementado utilizando um banco de dados distribuído de longa distância. Qual tipo de modelo de consistência é mais apropriado para essa situação? Resposta: Modelo de consistência centrado no cliente, leitura monotônica. Para a situação descrita, considerando que o usuário pode ser móvel, o mais indicado é um modelo de consistência centrado no cliente, garantindo o acesso sempre à mesma réplica consistente para o processo cliente. Desse modo, o modelo de consistência centrado em dados é descartado. Considerando ainda que a aplicação oferece o serviço de e-mail, dentre os modelos de consistência centrados no cliente, o apropriado é o de leitura monotônica, pois ele garante que todas as atualizações recentes visitadas pelo processo cliente estarão disponíveis, além de também possibilitar acesso a novas atualizações quando consultada, algo importante quando o cliente acessa sua caixa de entrada no serviço de e-mail. Consistência não garantida integralmente por escritas seguem leituras e escrita monotônica. 3. Os modelos de consistência em sistemas definem regras para consistência e como elas vão ser aplicadas em um ambiente distribuído. Considerando o modelo de consistência centrado em dados na consistência contínua, são utilizadas medições de inconsistência denominadas desvios. Dentre os desvios existentes, o desvio de idade é utilizado para: Resposta: Indicar a última vez que uma determinada réplica foi atualizada. Na consistência contínua, são utilizados os chamados desvios para medir inconsistência em réplicas do sistema. O desvio de idade situa a última vez que uma réplica do sistema foi atualizada. Algumas aplicações podem permitir que uma réplica tenha dados levemente inconsistentes, como, por exemplo, aplicações que forneçam dados meteorológicos para a previsão do tempo. Quando se fala em quantidade limite de operações desordenadas que uma réplica pode ter, não é utilizado o desvio de idade, mas sim o desvio em relação à ordem de operações. Do mesmo modo, não é utilizado o desvio de idade para indicar valores de dados inconsistentes entre réplicas. Para isso, é utilizado o desvio numérico. Além disso, em consistência contínua não são utilizados desvios para indicar a quantidade de réplicas semelhantes entre si. 4. O modelo de consistência centrado no cliente pode ser aplicado de diferentes modos, dependendo das necessidades do sistema, satisfazendo condições específicas. Em um sistema distribuído consistente por escritas monotônicas, a seguinte condição é satisfeita: Resposta: Uma operação de escrita executada por um determinado processo em um dado x é concluída antes de qualquer operação de escrita sucessiva em x pelo mesmo processo. Em muitas situações, é importante que operações de escrita sejam propagadas na ordem correta para todas as réplicas do depósito de dados. Isso é garantido pelo modelo de consistência por escrita monotônica, no qual a seguinte condição é satisfeita: “uma operação de escrita executada por um determinado processo em um dado x é concluída antes de qualquer operação de escrita sucessiva em x pelo mesmo processo”. Assim, concluir uma operação de escrita significa que a réplica na qual uma operação sucessiva é executada reflete o efeito de uma operação de escrita anterior executada pelo mesmo processo. Em outras palavras, uma operação de escrita sobre uma réplica do dado x é realizada somente se essa réplica tiver sido atualizada por meio de qualquer operação de escrita anterior, que pode ter ocorrido em outras réplicas. Se necessário, a nova escrita vai esperar que as velhas sejam concluídas. 5. Em muitos sistemas distribuídos que fazem uso de mecanismos de replicação, nos quais a sua utilização é feita por usuário de dispositivos móveis, o modelo de consistência centrado no cliente é o recomendado. Considerando os modelos de consistência centrados no cliente, a diferença entre o modelo leia suas escritas e escritas seguem leituras consiste em: Resposta: O modelo leia suas escritas está preocupado em manter consistência na leitura com base na escrita mais recente, enquanto que o modelo escritas seguem leituras está preocupado em manter consistência na escrita com base na leitura mais recente. A diferença entre o modelo leia suas escritas e escritas seguem leituras consiste em: “o modelo leia suas escritas está preocupado em manter consistência na leitura com base na escrita mais recente, enquanto que o modelo escritas seguem leituras está preocupado em manter consistência na escrita com base na leitura mais recente”. Considerando o modelo leia suas escritas, uma operação de leitura de um dado x realizado em uma réplica A só é realizada após todas as operações de escritas em x realizadas em outras réplicas também sejam escritas e realizadas na réplica A, garantindo que a leitura seja a mais atual. Entretanto, no modelo escritas seguem leituras existe a preocupação com a escrita ser consistente e, para isso, é alinhada com a última leitura. Uma escrita só é feita em x considerando o valor atual da última leitura feita em x. Assim, as antigas escritas feitas em x devem ser vistas pela réplica que fará a nova escrita. Gestão da replicação 1. A replicação de dados consiste em manter cópias físicas de objetos em diferentes computadores. Para que isso seja possível, uma combinação de um conjunto de hardware com soluções complexas de software é necessária. Algumas motivações justificam todo esse esforço para replicar os dados. Qual das afirmativas a seguir mostra um exemplo correto que justifique isso? Resposta: À medida que cresce o número de usuários de uma aplicação, os dados precisam ser replicados para aumentar sua disponibilidade e evitar lentidão ou negação de serviço. As principais motivações da replicação são: melhoria no desempenho, maior disponibilidade e tolerância a falhas. O fato de haver mais servidores não implica em mais armazenamento (nem, necessariamente, em maior desempenho), pois cada servidor tem cópia dos mesmos dados. A confiabilidade, nesse caso, não diz respeito à segurança da informação, mas à garantia de que o serviço irá responder às requisições. O uso de cache no navegador é um exemplo de replicação e de melhoria do desempenho, não por ter mais servidores, mas por ter os dados acessíveis de forma mais fácil. A replicação pode, e deve, ser usada em sistemas que necessitem de alta disponibilidade, não necessariamente apenas em sistemas críticos. 2. À medida que a disponibilidade aumenta com o uso de dados replicados, aumenta também a complexidade em manter a consistência dos dados. Qual das alternativas a seguir justifica essa afirmação? Resposta: Muitos clientes enviam simultaneamente diversas requisições de atualização de dados. O sistema deve ser capaz de executar as requisições em todos os gerenciadores de réplica na ordem correta. O principal problema de garantir a consistência é conseguir replicar as operações feitas em um servidor em todos os outros, na ordem correta e em tempo hábil. O tempo pode variar de aplicação para aplicação, assim como o nível de consistência. A latência de rede não aumenta, obrigatoriamente, ao aumentar o número de servidores. Mesmo que o front-end tenha que enviar requisição a todos os servidores, o que pode ou não ocorrer não justifica a complexidade de manter a consistência.Dependendo da aplicação, o tempo correto nem é requisito obrigatório e, mesmo assim, há problemas em manter a consistência. Existem algoritmos de consenso e de multicast totalmente ordenado e confiável que garantem o recebimento das requisições. 3. No que se refere a modelos de replicação de dados, podem existir diversas soluções diferentes, de acordo com a aplicação. Um modelo muito conhecido é o de replicação passiva, ou modelo de backup. Sobre esse modelo, assinale a alternativa correta. Resposta: Os servidores secundários aguardam as operações vindas do servidor primário para atualizar suas réplicas. No modelo de replicação primário, os front-ends se comunicam apenas com o servidor primário; porém, pode haver variações, em que as requisições de consultas são direcionadas a outros nós para ganho de performance. Os servidores secundários esperam requisições do servidor primário para, então, atualizar suas réplicas. Esse modelo não tolera falhas bizantinas, visto que os servidores secundários apenas seguem as operações feitas no nó primário. Quando o gerenciador primário falhar, e isso deixar o serviço indisponível, um novo servidor secundário deve ser eleito para assumir seu papel. Portanto, o sistema não precisa ficar indisponível para operações de escrita. O modelo passivo não precisa de muitos servidores, apenas com dois é possível utilizá-lo. A largura de banda necessária depende do volume de dados que será replicado. 4. Sabe-se que, à medida que os dados são replicados e a escalabilidade da aplicação é aumentada, podem ocorrer problemas para garantir a consistência dos dados. Assinale a alternativa que justifica considerar um modelo de consistência fraca. Resposta: Algumas aplicações podem escolher ter uma maior disponibilidade dos serviços em vez de uma consistência mais rígida, pois seus clientes não necessitam dos dados em tempo real, como é o caso das redes sociais. Em aplicações não críticas e que geralmente têm mais operações de leitura, não há grande impacto devido a consistência fraca, se trouxer maior disponibilidade. Existem estratégias para a replicação total, não é uma utopia. Porém, talvez a aplicação precise bloquear operações de escrita até que todos os gerenciadores estejam atualizados. Sistemas de controle aéreo precisam das informações em tempo real, portanto não seria boa prática atualizá-las em tempo de execução. O custo de implantação, por si próprio, não justifica o uso de consistência fraca. 5. A arquitetura Gossip (fofoca) é uma estrutura para serviços de alta disponibilidade por meio de replicação. Quanto a esse assunto, assinale a alternativa correta. Resposta: As mensagens de fofoca são trocadas entre os gerenciadores apenas. É por meio delas que cada servidor sabe o que deve ser atualizado. A fase de acordo não é necessariamente executada após cada requisição, mas ocasionalmente e de forma "preguiçosa". Os front-ends enviam requisições apenas para um gerenciador de réplica. Quando este falha, eles procuram um outro que possa atendê-los. As operações do cliente são transformadas em operações de fofoca, e são estas que modificam o estado de uma réplica. É possível usar consistências mais fortes no modelo Gossip, por meio de ordenação forçada. As respostas das operações de consulta sempre são enviadas de volta para os clientes que ficam aguardando. Tolerância a falhas 1. Um sistema distribuído é um sistema que utiliza diversos dispositivos computacionais para realizar o processamento de forma distribuída e transparente para seu usuário. Quando se utilizam sistemas distribuídos com alto grau de acesso de usuários, é interessante que estes não tenham falhas constantes, visto que seus usuários não irão utilizar um sistema com erros constantes. Vários sistemas podem ser distribuídos, mas, para que sejam tolerantes a falhas, é necessário que haja a ideia de que, mesmo com falhas, o sistema irá continuar funcionando, tornando-se, assim, um sistema distribuído tolerante a falhas. Sistemas distribuídos tolerantes a falhas têm, em seus conceitos e teoria, algo muito similar a outro tipo de sistema. Qual seria esse sistema? Resposta: Sistema confiável. Diversos sistemas podem ser distribuídos, mas nem todos são tolerantes a falhas. Para que um sistema seja tolerante a falhas, é necessário que possa continuar funcionando mesmo quando existe uma falha. Independentemente de o sistema ser multimídia, de arquivos ou arquivos distribuídos, ou mesmo de resolução de nomes, ele só pode ser definido como tolerante a falhas se essa funcionalidade for adicionada a ele. Por mais que seja desejado que ele funcione dessa forma, sua implementação é pura e exclusivamente responsabilidade do administrador desse sistema, gerente ou outros nessa mesma linha. Como apontado por Steen (2009, p. 194), "Há forte relação entre ser tolerante a falhas e os denominados sistemas confiáveis", porque, para um sistema ser considerado confiável, tem, entre seus requisitos, a disponibilidade, que insere a ideia de que o sistema estará disponível a maior parte do tempo, ideia esta muito similar a ser tolerante a falhas, em que o sistema deve ser capaz de continuar funcionando mesmo na presença de falhas. Devido à complexidade natural de um sistema distribuído, não existe (seja em literatura, seja em pesquisas na Internet) a expressão sistema distribuído automático. Existem sistemas distribuídos que têm automação, mas nenhum deles é totalmente automático, dada sua complexidade. 2. Quando se fala em sistemas distribuídos, fala-se de agrupamento de recursos computacionais para determinado fim. Nesse contexto, há basicamente dois tipos: grupo simples e grupo hierárquico. Para grupos simples, existe redundância de links de acesso entre os nós participantes, mas, para o agrupamento hierárquico, existe um nó coordenador que define para qual nó operário determinada comunicação deve ser direcionada. Mas quando esse nó falha e não existe uma replicação direta para ele, o que acontece? Resposta: Assim que os computadores participantes do grupo de nós percebem que não há um coordenador, é feita uma eleição de forma específica e com métricas bem determinadas entre os nós operários para que um deles assuma o papel de coordenador. Como é comum em sistemas distribuídos agrupados de forma hierárquica, os nós participantes conhecem seus vizinhos, e métricas são trocadas para que haja uma eleição entre os nós. Aquele com as melhores métricas assume o papel de coordenador daquele grupo hierárquico. É importante sempre lembrar que o objetivo de um sistema distribuído, sendo ou não tolerante a falhas, é manter a transparência ao usuário. Assim, permitir que o usuário compreenda que houve um erro nunca é o objetivo. Lançar exceções ao usuário só pode ser um contexto aceitável se o cliente conectado estiver utilizando um software que possa tratar essa exceção sem deixar claro para o usuário. Não é concebível a ideia de que um sistema distribuído, tolerante ou não tolerante a falhas, tenha como parte de seu algoritmo tempo de espera e downtime. 3. Existem diferentes formas de classificar um problema em um sistema distribuído; cada tipo remete a uma ideia específica de tratamento de erros. Se um sistema distribuído deixa de responder abruptamente, e o cliente, mesmo com tentativas repetidas de reconexão, não consegue concluir, pode-se afirmar que esse sistema distribuído teve uma: Resposta: falha por queda. O ponto central é a compreensão de que o servidor estava ativo e, sem motivo aparente, parou de responder. Diferentemente da falha por omissão, resposta ou temporização, em que o servidor ainda está de fato ativo, na falha por queda o servidor simplesmente para de responder. Qualquer alternativa em que, no contexto de falha, o servidor ainda está ativo, respondendo requisições (mesmo que erradas), é uma resposta incorreta. O servidor simplesmente para, o que faz perceber que qualquer alternativa que envolva alguma comunicação não pode ser considerada. Para ser considerada uma falha arbitrária, o sistema deve, de