Replicação
Replicação
Programação Distribuída com
Programação Distribuída com
Variáveis Compartilhadas
Variáveis Compartilhadas
TM X SM
Replicação de Variáveis Compartilhadas
Protocolo de Atualização Síncrono
Autores Autores
�
Autores
�Rodrigo Gasparoni Santos �C. Geyer (revisões)
�
Local
�Instituto de Informática, UFRGS �disciplinas:
� Sistemas Operacionais II
� Programação Distribuída e Paralela
�
Versão
Súmula Súmula
�
Súmula
�Conceitos de replicação
�Troca de mensagens X Memória Distribuída Compartilhada �Replicação de Variáveis
�Modelo ORCA
Bibliografia Bibliografia
�
Bibliografia
�Distributed Programming With Shared Data”. Bal, Henri E. & Tanenbaum, Andrew S. Computer Languages, volume 16, nº. 2, 1991, pág. 129-146.
�Tanenbaum, A. S. “Distributed Operating Systems”. 1995.
� capítulo sobre DSM – Distributed Shared Data
�Couloris. “Sistemas Distribuídos – Conceitos e Projeto”. 4ª ed. Bookman.
�
Replicação – conceitos
�Replicação de dados
� Manutenção de cópias dos dados em vários computadores � Motivação: fornecer (mais)
� Melhor desempenho � Alta disponibilidade � Tolerância a falhas
Replicação Replicação
�
Replicação – conceitos
�Replicação de dados
� Exemplos
� Armazenamento de recursos de servidores em � Cache dos navegadores
� Servidores proxies web
� Servidores de nomes como o DNS
� Cópias dos mapeamentos de nomes e atributos de
computadores
Replicação Replicação
�
Replicação – vantagens
�Melhoria de desempenho
� Em replicação de recursos web de servidores
� Carga dos clientes é distribuída entre os servidores
� Ao realizar consulta em um servidor DNS, cliente recebe
� Uma opção de cópia entre uma lista com diversas opções
de servidores idênticos
� Escolha pode ser por rodízio ou o menos carregado no
momento ou ...
Replicação Replicação
�
Replicação – vantagens
�Melhoria de desempenho
� Quando os dados são (quase) imutáveis o custo de
manutenção das cópias é muito baixo
� Quando os dados são frequentemente alterados, é necessário
atualizar as cópias
� Então deve-se comparar o ganho da distribuição da carga
contra a perda pela atualização das cópias
Replicação Replicação
�
Replicação – vantagens
�Maior disponibilidade
� Índice de disponibilidade: ID
� Percentagem do tempo que o serviço está disponível e
com tempo de resposta razoável (mínimo)
� Fatores que prejudicam a disponibilidade � Falha do servidor � Crash � Manutenção de sw � Queda de energia � ... Replicação Replicação
�
Replicação – vantagens
�Maior disponibilidade
� Havendo falha em um servidor o cliente automaticamente
acessa um servidor alternativo com cópia dos recursos
� Cache x replicação de servidores
� Cache usualmente contém cópia parcial de dados � Cache nem sempre melhora disponibilidade
� Exemplo de índice com replicação
� Cada servidor tem probabilidade de falha de 5% � Havendo dois servidores
� ID: 1 – 0,052 = 1 – 0,0025 = 99,75 (%)
Replicação Replicação
�
Replicação – vantagens
�Maior disponibilidade
� Sem conexão � Motivos
� Usuário se desconecta para reduzir gastos � Usuário móvel é desconectado por atingir
localização sem sinal (rede)
� Falha de rede � Solução
� Trabalho desconectado
Cliente (usuário) faz cópia de dados (parcial)
Replicação Replicação
�
Replicação – vantagens
�Maior disponibilidade
� Sem conexão
� Possível problema:
� durante uso desconectado outro cliente pode alterar
a cópia principal (original)
� Caso: agenda para reservas de horários
� Deve ser possível resolver conflitos posteriormente
Replicação Replicação
�
Replicação – vantagens
�Tolerância a falhas
� Dados com alta disponibilidade podem estar incorretos � Por exemplo:
� não foram atualizados
� Cópias não estão consistentes (mesmo valor) � Sistema deve garantir em certas aplicações um
comportamento único, rigoroso, mesmo em casos de falhas
� Sistemas com TF baseada em replicação exigem algoritmos
distribuídos mais complexos
Por exemplo, na atualização das cópias
Replicação Replicação
�
Replicação – requisitos
�Transparência da replicação
� Usuário (cliente) não percebe a replicação
� Operações são chamadas sobre um objeto com identificador
único abstrato
� Operações retornam um único valor
� Mesmo que sejam executadas sobre mais de uma cópia
�Consistência dos dados
� Operações devem retornar valores corretos conforme
especificação
Replicação Replicação
Programação x Replicação Programação x Replicação
�
Programação x Replicação
�Paradigmas usuais de programação:
� Uso de variáveis compartilhadas para sistemas com memória
compartilhada (fortemente acoplados)
� Uso de troca de mensagens para sistemas sem memória
compartilhada (fracamente acoplados) � Abordagem alternativa:
� uso de variáveis compartilhadas para sistemas fracamente
acoplados (redes, SD com memória fisicamente distribuída)
� Frequentemente implica o uso de replicação das variáveis
Motivação Motivação
�
Comparação entre Variáveis Compartilhadas e Troca de
Mensagens
�motivação para modelo com variáveis compartilhadas
� Exemplo: caso ORCA
�Variáveis Compartilhadas: VC �Troca de Mensagens: TM
Comparação SM X TM Comparação SM X TM
�
Semântica
�VC
� semântica mais próxima de linguagens funcionais, lógicas, e
orientadas a objetos
� Semântica dos pacotes de threads � Posix threads
� Java e C# threads
�TM
� mais antigo (para programação distribuída), eficiente e
Comparação SM X TM Comparação SM X TM
�
Atualização de valores
�VC: imediata
� Em memória (fisicamente) compartilhada
�TM:
� latência � banda
Comparação SM X TM Comparação SM X TM
�
Participantes em 1 comunicação
�VC: 1 para N (broadcast)
� Todos podem acessar em leitura o novo valor escrito
�TM: 1 para 1 (ponto-a-ponto; usualmente)
�
Programação segura
�VC: menos segura (correção ou ausência de bugs)
� n processos podem escrever na mesma variável
�TM: protegida
Comparação SM X TM Comparação SM X TM
�
Estruturas complexas
�VC: natural; por exemplo, grafos �TM
� requer operações para empacotamento e desempacotamento
de estruturas complexas
� Pode ser transparente ao programadores nas linguagens OO � Exemplo: Java RMI
�
Sincronização
�VC
Abordagens Abordagens
�
Abordagens Intermediárias
�buscam combinar as vantagens de cada modelo, mas em geral trazem novas desvantagens
�exemplos:
� Portas de Comunicação:
� filas compartilhadas; bloqueante na recepção;
implementado com troca de mensagens
� Variáveis ADA:
� mecanismo de rendez-vous; replicação de variáveis;
semântica confusa
Abordagens Abordagens
�
Abordagens Intermediárias
�exemplos:
� Memória Compartilhada Orientada a Problemas:
� ajustada às necessidades de cada aplicação; semântica
relaxada
� Modelo “Agora” de Memória Compartilhada:
� permite comunicação entre arquiteturas e linguagens
distintas
Abordagens Abordagens
�
Abordagens Intermediárias
�exemplos:
� Espaço de Tuplas (Linda):
� estruturas similares a registros; poucas primitivas
atômicas; dados imutáveis
� Reimplementada em objetos � Java Spaces (Sun)
Abordagens Abordagens
�
Abordagens Intermediárias
�Memória Virtual Compartilhada:
� similar a memória virtual tradicional
� garante que cada leitura obtém última escrita
� baixo desempenho em caso de escritas muito freqüentes
�Variáveis Lógicas Compartilhadas:
� propriedade da “atribuição única”:
� variáveis não podem mudar de valor depois de terem sido
Abordagens Abordagens
�
Abordagens Intermediárias
�estas técnicas diferem amplamente em termos de semântica, endereçamento e mecanismos de sincronização
�um ponto-chave na implementação de qualquer uma delas, entretanto, é o conceito de replicação
� ou seja, a existência de diversas cópias do mesmo dado em
máquinas distintas
�nesse contexto, replicação é utilizada para diminuir o tempo de acesso aos dados
� e não como um recurso de tolerância a falhas
�a replicação traz consigo o problema de manter consistentes as diversas cópias de cada variável
Variáveis Compartilhadas Variáveis Compartilhadas
�
Modelo Orca de Variáveis Compartilhadas
�criado por Henri Bal e Andrew Tanenbaum
�dados compartilhados são encapsulados em objetos passivos
� sendo acessíveis somente através de um conjunto de
operações associadas ao tipo do objeto
�o paralelismo advém da criação dinâmica de processos seqüenciais
� podendo o processo criador passar qualquer um de seus
objetos para os filhos
�o objeto compartilhado é visível para todos estes processos
Variáveis Compartilhadas Variáveis Compartilhadas
�
Modelo de Dados-Objetos Compartilhados
�vantagens sobre o modelo usual (em memória) da variáveis compartilhadas:
� Encapsulamento dos dados e operações
� todas as operações de acesso aos dados são indivisíveis � invocações simultâneas de diversas operações sobre o
mesmo dado são automaticamente serializadas
� mecanismo simples e seguro
� Obs.:
� Essa semântica pode ser implementada em memória
Variáveis Compartilhadas Variáveis Compartilhadas
�
Modelo de Dados-Objetos Compartilhados
�Relembrando diferenças de tempos de acesso
� Latência, banda, ... � RAM: 10 a 150 nanosegundos => 100 ns � SRAM: 10 ns � DRAM: 50 a 150 ns � Disco � 9 a 15 milisegundos (ms) � ou 10.000 ns
Variáveis Compartilhadas Variáveis Compartilhadas
�
Modelo de Dados-Objetos Compartilhados
�Relembrando diferenças de tempos de acesso
� Rede
� Round-trip time: ping, tempo de ida e volta � 50 a 500 ms
� Depende se cabo, DSL, satélite, rede local, ... � Casos especiais: 25 ms
� Média (?): 100.000 ns � Diferença entre RAM e rede
� 100.000 ns / 50 ns
Variáveis Compartilhadas Variáveis Compartilhadas
�
Modelo de Dados-Objetos Compartilhados
�Implementações possíveis:
� Monitor Centralizado
� responsável tanto por operações de leitura quanto de
escrita
� 100 a 1000 vezes mais lento do que acesso local � Cópias Primárias e Secundárias
� operações de leitura são feitas na cópia local � Tempo usual de memória compartilhada
� operações de escrita devem ser propagadas pela rede � Maior custo que escrita em memória compartilhada
Cópias Primárias
Cópias Primárias -- SecundáriasSecundárias
�
Cópias Primárias & Secundárias
�cada dado: 1 cópia primária, k-1 cópias secundárias
� k-1: até n, quantidade de processos (computadores) que
acessam a variável
� k: dinamicamente calculada
�compilador distingue operações de leitura e escrita sobre dados compartilhados
�sistema de run-time mantém estatísticas sobre a utilização de cada variável por cada processo
� manter estatísticas apresenta custo desprezível � objetivo: minimizar troca de mensagens pela rede
Cópias Primárias
Cópias Primárias -- SecundáriasSecundárias
�
Cópias Primárias & Secundárias
�o processo que escreve com maior freqüência num certo dado deve ser escolhido para conter a cópia primária do mesmo
Cópias Primárias
Cópias Primárias -- SecundáriasSecundárias
�
Cópias Primárias & Secundárias
�é necessário um protocolo de propagação das escritas:
� invalidação:
� cada write atualiza cópia local e invalida todas as outras � Mensagem curta
� próximo read busca valor na cópia válida � Se ocorrer
� custo: 3 mensagens por cópia � atualização:
� sobrescrever todas as cópias
Protocolo de Atualização Protocolo de Atualização
�
Protocolo de Atualização de Réplicas
�descrito usando a linguagem Orca, criada pelos autores do artigo �deve manter consistência das diversas cópias
�deve ser independente das velocidades relativas dos processos e dos links de comunicação
�considerar links ponto-a-ponto entre cada par de processos, com entrega confiável e garantia de recepção na mesma ordem do envio
Protocolo de Atualização de Réplicas
X, Y: shared object; # inicializados em 0
Process P1: for i := 1 to � do write(X, i); Process P3: repeat y := read(Y); x := read(X); assert x � y;
Programa aplicação exemplo (para teste do algoritmo):
Process P2: repeat y := read(Y); x := read(X); if x > y then write(Y, x); Protocolo de Atualização Protocolo de Atualização
Protocolo de Atualização Protocolo de Atualização
�
Protocolo de Atualização de Réplicas
�programa exemplo
� X e Y são dados compartilhados, visíveis para os três
processos
� com cópia primária de X em P1 � cópia primária de Y em P2
� processo P1 incrementa X continuamente � processo P2 atualiza Y conforme X
� garante que X não ultrapasse Y
� processo P3 aborta indicando erro se, em algum momento, � verificar que Y possui valor maior do que X
Protocolo de Atualização de Réplicas
Primeira tentativa de protocolo de propagação (incorreto):
#Cópia primária de X
receive (X,novoX) from
CSx;
set write-lock on X;
X:=novoX;
let S = conjunto de
processos com cópia secundária de X forall i � S – [CSx] do send i(X,novoX); for j:=1 to |S| - 1 do #Cópia secundária de X que inicia escrita
send CPx(X,novoX); #Outras cópias secundárias de X receive (X,novoX) from CPx; set write-lock on X; X:=novoX; send CPx(ACK); unlock X; Protocolo de Atualização Protocolo de Atualização
Protocolo de Atualização Protocolo de Atualização
�
Protocolo de Atualização de Réplicas
�Os locks têm semântica local
� Só bloqueiam outros processos tentando acessar a cópia local
Protocolo de Atualização de Réplicas
Seqüência de eventos que gera erro:
X=1 P1 X=1 Y=1 P2 X=0 Y=1 P3
write(X,1) • Todas as cópias inicializadas em
zero
• P1 atualiza X e envia
mensagens para P2 e P3
• P2 tem X=1, atualiza Y e envia mensagem para P3
• P3 recebe mensagem de P2
Protocolo de Atualização Protocolo de Atualização
Protocolo de Atualização Protocolo de Atualização
�
Protocolo de Atualização de Réplicas
�problema:
� tempo arbitrário que as mensagens levam para chegar ao
destino
� P3 observa as mudanças em X e Y na ordem incorreta
�é necessário um protocolo de duas fases:
� lock’s das cópias locais só devem ser liberados após cópia
primária ter certeza de que todos foram atualizados
� garante: se um processo i ler novo valor de X, todos os outros
terão o novo valor de X
� no exemplo:
Protocolo de Atualização de Réplicas
Versão corrigida (cópias primárias multithreaded):
#Cópia primária de X
receive (X,novoX) from
CSx; fork udpate(X,novoX, CSx); process update(X, novoX, CSx) begin set write-lock on X; X:=novoX; let S = conjunto de #fase 1 forall P � S do send P(X,novoX, update-and-lock); for i:=1 to |S| do receive ACK; #fase 2 forall P � S do send P(X,unlock); unlock X; send CSx(ACK); end; #Cópias secundárias de X receive (X,novoX, update-and-lock) from CPx; set write-lock on X; X:=novoX; send CPx(ACK); receive (X, unlock) from CPx; unlock X; Protocolo de Atualização Protocolo de Atualização
Protocolo de Atualização de Réplicas
X=1 P1 X=1 Y=0 P2 X=0 Y=0 P3 update-and-lock (X,1)• Todas as cópias inicializadas em zero
• P1 atualiza X e envia
mensagens para P2 e P3
• P2 tem X=1, mas não atualiza Y enquanto não receber o unlock de P1, o que só ocorrerá depois que P3 confirmar recebimento � falha
ACK
Protocolo de Atualização Protocolo de Atualização
Protocolo de Atualização Protocolo de Atualização
�
Protocolo de Atualização de Réplicas
�protocolo em 2 fases garante que nenhuma cópia secundária lerá valor antigo de um dado X qualquer se outras cópias secundárias já estão lendo o novo valor de X
�com n cópias secundárias, são necessárias 3n mensagens para atualizar todas as cópias
� e 3 passos
�protocolo denominado de protocolo de 2 fases
� atualização
� confirmação ou commit
�para objetos pequenos (como inteiros) que são atualizados com freqüência, protocolo de invalidação pode ser mais eficiente, se
�
Resumo
�Conceitos de replicação
� Vantagens
�Programação distribuída: modelo VC x modelo TM
� Algumas vantagens no modelo VC
�Modelo Orca
� Processos distribuídos mais opção de variáveis explicitamente
compartilhadas
� Para agilizar leitura: réplicas distribuídas das variáveis
(valores)
� Somente quando há mais leituras que escritas
Resumo Resumo
Revisão Revisão �
Revisão
�temas? �comparação SM X TM? � semântica, modelo � tempo da atualização � participantes de 1 comunicação � programação segura � estruturas complexas � sincronizaçãoRevisão Revisão �
Revisão
�abordagens intermediárias � exemplos? � diferenças? � semelhanças?� tolerância a falhas x desempenho?
� qual a conseqüência direta da replicação em termos de
Revisão Revisão
�
Revisão
�modelo Orca (autores)
� dados?
� processos?
� compartilhamento?
� semântica do compartilhamento?
�possíveis abordagens gerais de implementação?
Revisão Revisão
�
Revisão
�cópias primária - secundárias
� quantas?
� quem tem a primária? � quem tem a secundária? � como o compilador ajuda?
� para que servem as estatísticas? custo? � tipos de protocolos de atualização?
Revisão Revisão
�
Revisão
�princípios do protocolo Orca? �exemplo para testes?
� varíáveis? � processos?
� ordem das leituras? � quem é CP? e CS?
Revisão Revisão
�
Revisão
�1o protocolo?
� ack é necessário?
� contra-prova com exemplo?
Revisão Revisão �
Revisão
�2o protocolo � tipos de mensagens? � descrição na CP? � descrição na CS?� os locks locais são necessários? CP? CS?explique � explique a idéia abstrata da solução? o que garante? � qual a complexidade de uma leitura?
Exercícios Exercícios
�
Exercícios
�A) O algoritmo funciona corretamente se o protocolo de comunicação (implementação) não garante a ordem das mensagens entre 2 processos? Explique.
�B) O algoritmo pode ser otimizado havendo um protocolo de comunicação de multicast com ordenação causal? Explique.
� multicast com ordenação causal
� diferentes receptores recebem mensagens na mesma
ordem desde que haja uma dependência entre as mensagens
�
Replicação – vantagens
�Melhoria de desempenho
� Em replicação de recursos web de servidores
� Carga dos clientes é distribuída entre os servidores
� Ao realizar consulta em um servidor DNS, cliente recebe
� Uma opção de cópia entre uma lista com diversas opções
de servidores idênticos
� Escolha pode ser por rodízio ou o menos carregado no
momento ou ...
� Quando os dados são (quase) imutáveis o custo de
manutenção das cópias é muito baixo
� Quando os dados são frequentemente alterados, é necessário
Replicação Replicação
���������������������������������������������������������������������������
��������������������������������������������������������������������������������� �����������������������������������������������������