Coordenação e consenso Nazareno Andrade Universidade Federal de Campina Grande 02/2008 Sistemas...

Post on 18-Apr-2015

102 views 0 download

Transcript of Coordenação e consenso Nazareno Andrade Universidade Federal de Campina Grande 02/2008 Sistemas...

Coordenação e consenso

Nazareno AndradeUniversidade Federal de Campina Grande

02/2008

Sistemas Distribuídos

2

FundamentosCoordenando processosConstruíndo sistemasSistemas construídos

3

FundamentosCoordenando processosConstruíndo sistemas

– Sincronização– Eleição e consenso– Replicação

Sistemas construídos

4

Objetivos

Entender algoritmos de eleição

Entender algoritmos de consenso famosos e o espaço de soluções

5

Problema da eleição

Diversos algoritmos distribuídos são facilitados com o conceito de líder– Multicast ordenado com coordenador– Sincronismo com coordenador– Redes p2p com supernós

Algoritmos de eleição elegem líders eficientemente– Safety: num instante, todos os nós ou escolheram P ou ainda não

escolheram nó algum– Liveness: em algum momento, nós escolhem um líder ou falham

Consideramos que nós já tem valor que determina eleito e podem falhar

6

Algoritmo do valentão

Cada processo conhece o id de todos os outros

Quando alguém percebe a falha do líder, inicia eleição– Contacta nós com id mais alto, – Cada um deles responde como novo encarregado inicia

uma nova eleição– Quando um novo encarregado inicia eleição e não recebe

respostas, ele é o novo líder e avisa os demais

7

Note que qualquer processo poderia falhar no caminhoE que esse algoritmo só é prático para grupos pequenos

– Pior caso gera O(n^2) mensagens

8

Algoritmo de anel

Nós se organizam numa topologia de anelQuando um nó percebe que líder anterior

falhou, inicia eleição– Passa vetor com seu id adiante no anel– Quando recebe vetor de volta com seu id, o

vetor deu a volta e quem tem o maior id é o novo líder

Em média mais eficiente que o algoritmo do valentãoPorém ainda adequado apenas para grupos

pequenos

9

Eleições em grande escala

Problema: eleger uma série de supernós em um sistema p2p

Abordagem 1: numa DHT, nós responsáveis por ids que satisfazem uma condição são supernós– Supernó com id == (k AND 11100000) é o responsável pelo nó com

chave k– Sou supernó == sou responsável por (meuID AND 11100000)?

Abordagem 2: oganizar nós em um espaço geométrico imaginário e distribuir fichas entre eles– Cada nó procura se seus vizinhos têm fichas– Fichas exercem força de repulsão e fazem nós as transmitirem

10

Consenso

Um dos problemas mais fundamentais de SDs

Informalmente: como fazer um grupo de processos concordar em um valor– Qual é a hora– Fazer ou não fazer commit– Quem é parte do grupo– Quem é o líder do grupo– Podemos seguir para o próximo passo do algoritmo

Já vimos algumas instâncias, agora vejamos o mais geral

11

Um pouco de formalismo

Conjunto de nós– Falhas por fail-stop ou bizantinas – Mais tarde: fail-stop + recuperação

Objetivo: todos os processos pi põem o mesmo valor em uma variável di

– Não queremos amarrar de onde vem vi

– vi pode ser proposto por um nó ou decidido a partir de várias propostas

12

Um pouco de formalismo

Desejamos:1. Concordância: Todos os nós escolhem o mesmo valor para di

2. Validade: O valor escolhido deve ter sido proposto por algum nó3. Terminação: Alguma hora, todos decidem um valor

O que é safety e o que é liveness aqui?

Pode ser descrito de formas ligeiramente diferentes: generais bizantinos, consistência interativa, atomic broadcast, ...

13

Consenso

Consenso com líder(generais bizantinos)

Consistência interativa

14

Uma boa nova

Esses problemas são equivalentes– Resolvemos um, resolvemos todos

Por exemplo:– CI a partir de GB: GB várias vezes, cada processo é líder

uma vez– C de CI: roda CI, depois nós aplicam mesma função a vetor

para decidirPor aí vai...

15

Uma péssima nova

Nenhum desses consensos pode ser garantido em um sistema assíncrono com crash– Não podemos decidir não levar em conta a opinião de um nó; ele

pode estar apenas lento e mandar a mensagem na hora errada

Consenso pode acontecer freqüentemente ou pode acontecer raramente

Não funciona com crash não funciona com falhas bizantinas

16

Mas a vida continua

Se consenso não funciona em um sistema assíncrono e:– Multicast totalmente ordenado?– Replicação consistente?– Commits em grupo?

Na prática, vivemos com isso:– Tentamos até que o sistema se comporte como síncrono– Mascaramos falhas: esperamos até o processo responder– Usamos detectores de falha:

• Crash fail-stop (sempre que funciona, claro)

17

Voltando ao problema

O commit é um problema de consenso– Um dos lados não pode fazer nada se não souber o que o outro fez

18

Primeira solução: 2-phase commit

Você quer marcar um chopp, que protocolo você usa?

Votos são booleanos, vi é proposto pelo coordenador

19

Funcionamento

2PC atende nossos requisitos?– Mesmo em um sistema assíncrono?

Qual seu custo?

E se nós puderem falhar (fail-stop)?– Coordenador ou nó antes de qualquer mensagem– Coordenador após (algumas) propostas– Nós após (algumas) propostas– Coordenador após (algumas) respostas

20

Falha do coordenador durante votos

Se nós guardam votos por algum tempo, é possível mudar de coordenador– Mas e se um coordenador + um nó falharem?

Algo semelhante acontece para falhas durante o commit

21

Na prática

Custo não é muito alto (3N-1) Latência é baixa (3 msgs)

Porém, na prática, é comum um coordenador ser um participante– A falha dele pára o sistema– Como o TCP lida com isso?

Útil para aplicações onde o protocolo pode reiniciar por timeouts a qualquer instante– Perigoso para aplicações onde isso não é permitido

22

Resolvendo o 2PC 3PC

Problema do 2PC: um nó pode fazer commit e falhar com o coordenador– Nesse caso, nunca saberemos o que eles tinham decidido

Solução: adicionamos uma outra fase antes, que informa a decisão antes de qualquer açãoO que isso muda na recuperação de falhas?

.

23

Se o coordenador e um nó falharem após um commit, todos os outros nós receberam prepare-commit– Se algum nó não recebeu prepare-commit, ninguém fez

commit

Podemos relaxar o recebimento de N confirmações antes do prepare-commit– Para tolerar f falhas, precisamos de f+1 confirmações

24

O cúmulo do robusto: Paxos

Para algumas situações, 3PC não é robusto– Coordenador recebe prepare-commit de N-1 nós e falha– Substituto começa a enviar commits– Coordenador volta das cinzas e começa a cancelar commit

Fail-recover é uma aproximação de sistemas assíncronos– Equivale a errar na detecção de falhas, o que acontece no mundo real

Paxos é um algoritmo para consenso em sistemas assíncronos com crash (ou fail-recover)– Paxos roda em sistemas da Google, Yahoo, ...

25

Como pode?

Consenso em sistema assíncrono?– É impossível garantir safety e liveness em um sistema assíncrono– Paxos pára até que haja sincronia

Na prática, sistemas se alternam entre síncrono e assíncrono– Quando não há sincronia, não há liveness– Em compensação, safety nunca é violada

Entender isso levou mais tempo do que parece necessário...

26

Idéia geralAcontece em turnos

Em cada turno, há um proponente e vários aceitadores– Se um falha, outro nó vira proponente– Se há vários, paramos até que só um deles se

mantenha– Proposta tem valor e contador (totalmente

ordenado)

Aceitadores respondem uma proposta rejeitando ou aceitando um valor e dizendo que propostas estão aceitando

– Assim, proponentees sabem de propostas mais atuais que as suas e propostas antigas não são aceitas

Proponentees enviam commit se receberam N/2+1 respostas positivas. Se não, novo turno

27

Comentário

Eleição é um consenso– Caso paxos dependesse de eleição, não resolvia nada

Em lugar disso, não há acordo sobre quem é líder– Qualquer um pode achar que é – Se gente demais achar que é, há um livelock

Como um líder não bagunça trabalho do outro?– Propostas são ordenadas– Todos os nós sabem qual a mais recente que conhecem

Coordenador resolve commit se maioria aceita proposta– Se maioria aceitou, qualquer maioria contém alguém que conhece a

proposta mais atual

28

Mais sobre a ordenação

Quando recebe uma proposta, o aceitador checa:– Se essa é a proposta mais atual, responde aceitando ou

rejeitando e não aceita mais propostas anteriores– Se a proposta é mais antiga, responde dizendo o número

da mais atual (assim um proponente pode continuar o algoritmo em caso de falha)

29

Por que maioria

Quaisquer duas maiorias têm um nó em comum– proponente um avisa N + 1 nós de pr1– proponente dois enviará pr2 a pelo menos um nó que

conhece pr1– proponente tês enviará pr3 a um nó que conhece p1 e p2

ou a um nó que conhece p1 e um nó que conhece p2

Qualquer proponente consegue descobrir última Qualquer proponente consegue marcar sua proposta

como mais recente para qualquer outro

30

Detalhe a mais

Quando um aceitador envia a proposta previamente aceita para um novo proponente, envia também o valor concordado– Um proponente continuando o algoritmo não pode mudar

o valor da proposta

Propositores podem co-existir– Porém eles se atrapalham e precisam se detectar– O sistema se organiza quando ficar síncrono em um

período e permitir isso

31

Na prática

Implementado no Chubby, do GoogleImplementado no Zookeper, da Yahoo

Notadamente difícil de entender e implementarCaro

Quando usar?