Tempo e sincronização
Nazareno Andrade
Universidade Federal de Campina Grande 02/2008
Fundamentos
Coordenando processos
Construíndo sistemas
Sistemas construídos
Fundamentos
Coordenando processos
– Mensagens (e fluxos): UDP, TCP, MPI, Enfileiramento, Gossiping
– RPC e objetos distribuídos: RMI – Mensagens vs. RPC
– Nomeação
– Sincronização
Construíndo sistemas
Sistemas construídos
Objetivos
Entender como garantir que processos entreguem
mensagens em uma dada ordem
– Ordenação total – Ordenação causal
Entender como organizar sincronizar condições de
corrida em um sistema distribuído
Sincronismo
Sincronia é a organização de eventos no tempo
Investigaremos 2 aspectos de sincronia:
– Como diferentes processos organizam sua visão de eventos no tempo: ordenação de eventos
– Como processos se organizam no tempo para acessar um recurso: exclusão mútua
Mantendo a ordem
Várias vezes, queremos que a ordem de eventos em
diferentes processos seja a mesma
– Mensagens recebidas por um grupo de réplicas – Fornecimento e cancelamento de leases
Exemplo no DB distribuído da Yahoo!:
PNUTS provides a consistency model that is between the two extremes of general serializability and eventual consistency ... We provide per-record timeline
consistency: all replicas of a given record apply all updates to the record in the same order .... The application [can] indicate cases where it can do with some relaxed consistency for higher performance .... [such as reading] a possibly stale version of the record.
O problema da ordem de mensagens
Como garantir que processos têm a mesma visão da
ordem das mensagens?
– Necessário para replicação
m1 m3
m2
P1
P2
Solução 1:
sincronizamos relógios
e usamos
timestamps
– Se o sistema é sincrono, isso é factível
– Se é assíncrono, podemos usar aproximações
Solução 2: inventamos um
tempo lógico
– Boa parte do tempo, só queremos saber o que acontece antes do que
O tempo e relógios
Os relógios de nosso sistema necessitam de um referencial
– Referencial externo
– Sincronização interna de relógios
O referencial externo absoluto é a Terra
– Mas a Terra está desacelerando!
– Além do que turbulências no núcleo do planeta precisam ser levadas em conta
O Bureau International de l’Heure cuida disso:
– Monitora a hora solar e ajusta um relógio de alta precisão a ela
10
Ajustando o tempo
O problema é deixar o relógio de p1 o mais próximo possível do de p2
– Seja P2 um servidor com o tempo UTC ou náo
Como lidar com os atrasos de mensagem se o sistema for síncrono?
– P1 envia tempo para P2 e conhecemos min e max no envio da mensagem E se o sistema é assíncrono? T2 P1 T1 P2 T3 T4
Network Time Protocol
Um dos protocolos mais antigos da Internet
Atinge precisão de 1/100s na Internet e até
Tempo e relógios lógicos
Por vezes, os relógios dos processos não precisam estar
em UTC, apenas concordarem suficientemente
Por vezes, eles não precisam concordar
na hora
também; basta concordar em
o que acontece antes
do que
Duas soluções bem conhecidas:
– Relógios lógicos de LamportRelógios lógicos de Lamport
Idéias chave:
– Queremos poder dizer se e e’; não queremos dizer o quanto – Só queremos ordenar eventos entre processos que interagem
Ordenamos eventos em duas situações:
1. Se e1 e e2 aconteceram em um mesmo processo, o processo sabe se e1 e2
2. Se e1 é o envio de uma mensagem e e2 seu recebimento, e1 e2 Note que é transitivo
• Cada processo tem um contador C • A cada evento local, C += 1
• C vai em toda mensagem enviada
• Quando p1 recebe uma mensagem de p2, C = max(Cp1, Cp2) Se a b, então C(a) < C(b)
Exemplo: Multicast totalmente ordenado
Podemos garantir consistência entre réplicas com essa primitiva
– Mensagens dos clientes chegam sempre na mesma ordem aos servidores
V0: uma abordagem centralizada
Com os relógios de Lamport, podemos fazer isso de maneira distribuída:
– Processos se comunicam por multicast, mensagens recebidas são enfileiradas de acordo com ts(m)
– Para cada mensagem, cada processo envia ‘reconheço’
– Uma mensagem só é entregue se está na frente da fila e depois de receber ‘reconheço’ de todos
Em outras palavras, p só entrega m depois que os contadores de todos os outros processos são maiores que o timestamp lógico de m
C=(1)
P1
P2
P1
P2
P3
P1
P2
P3
Note que eventos potencialmente concorrentes
também são ordenados (ordem total)
Mais sobre multicasts
Há diferentes
semânticas para ordenação das mensagens
– FIFO por processo – Total
– Causal
• Se C(a) < C(b), então a deve ser entregue antes de b F3 F1 F2 T2 T1 Time C3 C1 C2
Relógios vetoriais
O relógiode Lamport não é suficiente para decidir se há causalidade:
– No relógio de Lamport a b implica C(a) < C(b), mas o contrário não é verdadeiro
Relógios vetoriais são um construto para isso
– Cada processo mantém um vetor de relógios lógicos com um contador para cada outro processo, VCi[j]
• VCi[i] é incrementado a cada evento
• i envia VCide carona em cada msg m como ts(m) (um vetor!)
– Ao receber VCi , k faz VCk[j] max(VCk[j], ts(m)[j]) para cada j
• k sabe quantas mensagens i processou
– Mensagem é entregue se:
• ts(m)[i] == VCk[i] + 1 (msg é a próxima esperada de i)
Multicast ordenado por causalidade
VC1=(1,0,0) P1 P2 P3 VC2=(1,1,0) VC1=(1,1,0) VC3=(0,0,0) VC3=(1,0,0) VC3=(1,1,0)VC1=(1,0,0) P1 P2 P3 VC3=(0,0,1) VC1=(1,0,1) VC2=(1,0,1) VC3=(1,0,1)
Mensagens sem causalidade não são mais ordenadas
– Equivale à ordenação total se processos apenas respondem
mensagens (ou estão sincronizados como com condição de corrida) – É mais barato que ordenação total
Quem deve implementar isso?
Multicasts assim estão implementados em bibliotecas
como ISIS, Horus e Ensemble
– Usados em bolsas de valores, controladores de tráfego e coisas assim
Argumento fim-a-fim: quem deve implementar a lógica
de causalidade
– Middleware mais simplicidade, menos inteligência – Applicação mais complexidade, mais inteligência
Onde estamos
Sincronia é a organização de eventos no tempo
Agora nos interessam 2 aspectos:
– Como diferentes processos organizam os mesmos eventos no tempo: ordenação
– Como processos se organizam no tempo para acessar um recurso: exclusão mútua
Exclusão mútua distribuída
Lembre que em SDs,
concorrência é a norma
– Necessitamos de sincronismo entre processos para acessar um recurso
– Não temos semáforos ou variáveis compartilhadas
Duas abordagens para exclusão mútua em SDs:
1. Baseada em fichas (token-based)Antes dos detalhes
Note que o problema é semelhante a acesso ao meio em redes Consideramos um sistema assíncrono sem falhas e com links
confiáveis
Queremos duas propriedades
– Safety: no máximo um processo está na região crítica em cada instante
– Liveness: requisições para entrar na região crítica em algum momento dão certo
Algoritmo 1: centralizado
Um nó é eleito coordenador e mantém a fila de reqs
– Simplicidade e eficiência vs. Escalabilidade e robustezAlgoritmo 2: decentralizado
Podemos replicar o coordenador
– rname-1, rname-2, rname-n em uma DHT
Para obter o lock, p precisa de m > n/2 permissões de
coordenadores
Potencialmente robusto, mas se há falhas, é
probabilístico
Algoritmo 3: distribuído
Baseado em relógios lógicos de Lamport
– Requer ordenação totalProcessos fazem multicast de requisições pela RC e só
entram nela após receber permissão (‘reconheço’)
de todos
– Requisições com tempos lógicos menores têm prioridade – Cada processo mantém variável que contrla RC: [ released
Determinístico
Custo: (n-1) requisições + (n-1) respostas
Falha de qualquer processo necessita de recuperação
– Respostas negativas aumentam isso com maior custo
Decentralização + token, versão 1
Nó que tem o token tem direito à RC
Token guarda quando cada nó acessou a RC
Quando acaba, dono do token passa-o para próximo processo com requisição pendente
Mais barato:
– N-1 requisições + 1 resposta
– Apenas falhas do dono do token são críticas
Token ring
Dono do token o usa e o passa
adiante
– Simples
– Eficiente com muita carga
Necessidade de reconfigurar anel
sempre que há falhas
Recapitulando
Ordenando eventos no tempo
– Sincronismo de relógios físicos – Relógios lógicos de Lamport – Relógios vetoriaisOrdenando acesso a uma região crítica
– Algoritmo decentralizado– Algoritmo decentralizado – Algoritmo distribuído
Mais sobre esse assunto
Sincronização de relógios
– Artigo dando uma visão geral sobre o problema e soluções
Ordenação de eventos
– Post em um bom blog sobre o Yahoo PNUTS
– Texto de 1993 explicando uso de multicast ordenado em
diversas aplicações
– Artigo criticando a ordenação de mensagens em
middleware e resposta de K. Birman