3 Desenvolvimento de Sistemas Distribuídos
3 Desenvolvimento de Sistemas Distribuídos
3 Desenvolvimento de Sistemas Distribuídos
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?
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?
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?
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).
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:
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.
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.
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.
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.
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.
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:
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: 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.
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.
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.
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.
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: 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.
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.
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.
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.
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.
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.
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
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.
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.
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.
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.
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.
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: 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
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.