Você está na página 1de 22

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?
Resposta: 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 apresenta desvantagens, 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 impacto direto 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 conceito de 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 mecanismos de 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êm causalidade 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 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.

Você também pode gostar