Protocolo de Ordem Total Fernando Ney da Costa Nascimento.
-
Upload
marcela-belmonte-vilarinho -
Category
Documents
-
view
216 -
download
1
Transcript of Protocolo de Ordem Total Fernando Ney da Costa Nascimento.
Protocolo de Ordem Total
Fernando Ney da Costa Nascimento
Multicast com ordem total
Camadas abaixo: Camada Multicast com Ordem Causal (MOC). Camada de Gerenciamento de Grupo.
Idéia: Examinar o C-DAG e determinar a ordem total (em todos os processos).
Sem mensagens adicionais além das mensagens da camada MOC.
Esboço do Algoritmo
G = {Ø,Ø} //DAG causalA = Ø //msg´s com ordem totalwave = 1forever when causal-deliver(mij), insert mij in G loop until exit compute C(G) //candidatos compute S(G) //fontes if Consensus(G) deliver S(G) in a deterministic order A = A U S wave++ else exit
Definições
C(G): conjunto de mensagens candidatas a serem entregues. Raízes do grafo G. (candidatas)
S(G): conjunto de mensagens a serem entregues em uma determinada onda do protocolo. (fontes)
Entrega é realizada quando Consensus é satisfeito. O protocolo deve garantir que cada processo irá entregar o mesmo conjunto de mensagens S (fontes). O Consensus é atingido quando S(G) não pode mudar,
mesmo se mais mensagens são recebidas.
Consenso
Uma simples estratégia para o consenso é esperar uma mensagem de cada processo no C-DAG e entregar as raízes do grafo (fontes) em uma ordem deterministica. Sem custo adicional de mensagens O sistema opera na velocidade do processo mais lento
É possível dar prioridade as primeiras mensagens recebidas com base na maioria dos processos.
Entrega Antecipada
A idéia é desenvolver uma regra de estabilidade que funciona sem necessitar que uma mensagem seja recebida de cada processador.
O conjunto S deve permanecer o mesmo em cada possível extensão G´ de G. (Condição de Segurança)
G´ estende G se e somente se G G´: Future(G) = {G´ | G´ seja uma extensão de G}
Condições de Segurança (Estabilidade)
Cada mensagem candidata não-fonte em G não pode torna-se uma fonte em G´. se m C(G) \ S(G), então m C(G´) \ S(G´) para todo G´
Future(G) Cada fonte em G é também uma fonte em G´.
se m S(G), então m S(G´) para todo G´ Future(G) Mensagem não recebidas não podem torna-se fontes em G´.
se i tail(G), então para todo j, mij S(G´) para todo G´ Future(G)
Se G satisfaz as 3 condições acima, G é dito ser estável.
* tail(G): conjunto de processos com mensagens em G.
Condições de Vivacidade
Enquanto as condições de segurança garantem que cada processo irá receber os mesmos conjuntos de mensagens, é preciso ainda garantir, que eventualmente, alguma mensagem seja entregue.
Condições de Vivacidade: se |tail(G)| = M, então S(G) ≠ se |tail(G)| = M, então G é estável
Protocolo TOP
Voto de Processo: A 1a mensagem mij do processo pi em G vota nas
mensagens candidatas do DAG causais a mij. Cada mensagem vota em si própria.
A cada mensagem está associado um vetor de votos, VV(m)[i]. VV(m)[i] =
1, se processo i votou em m 0, se processo i votou mas não em m *, se processo i ainda não votou
Protocolo TOP
Número de processos que enviaram mensagens causualmente a m: ntail(m) = |tail(m)|
Número de processos que ainda não votaram: u = |P – ntail(G)| = |{j : VV(m)[j]=*}| = M – ntail(G)
Número de votos de uma mensagem candidata: nvt(m) = |{i : VV(m)[i]=1}|
Mensagens candidatas são comparadas com base nos votos que as mesmas recebem:
votes(m1,m2) = |{j : VV(m1)[j]=1 VV(m2)[j]=0}| win(m1,m2) =
1, se votes(m1,m2) > threshold 0, se votes(m2,m1) > threshold X, casos contrários
* threshold = M/2
Protocolo TOP
O valor de win é definido com base no grafo G atual. É necessário uma função em relação as extensões de G, G´.
win[G´](m1,m2) = {win[G´](m1,m2), onde G´ estende G} O único interessante modo de G´ estender G é especificando votos de processos que ainda não
votaram. Dessa forma, 1 win[G´](m1,m2) se e somente se o número de processos que votam em m1 mas não em m2,+ o número de votos não processados, seja maior que threshold:
1 win[G´](m1,m2) se votes(m1,m2) + u > threshold X win[G´](m1,m2) se X win(m1,m2) 0 win[G´](m1,m2) se 1 win[G´](m2,m1)
Ainda temos: 1 win[G´](m1,m2) votes(m1,m2) + u ≤ threshold win[G´](m1,m2) = {1} win(m1,m2) = 1
Seja M(G) o número de candidatos no DAG causal G. O conjunto de fontes, S(G), é definida como:
i S(G) i M(G) j M(G), 1 win[G´](j,i) ou seja, a mensagem i é uma fonte se ela nunca perde para qualquer outra mensagem j já em G.
TOP: Regras de Entrega
1) Entrega antecipada Se m M(G)\S(G) m´ S(G), win[G´](m´,m) = 1 s S(G), nvt(s) > threshold
2) Entrega normal Se ntail(G) = M
TOP: Corretude
Como mensagens são recebidas em ordem causal, um processo p que já tem uma mensagem em G, não irá votar para mensagens a serem recebidas. A primeia mensagem de p vota para as candidatas que ela causalmente segue que já estão em G.
Entrega Antecipada: Existe uma fonte s com pelo menos threshold+1 votos. s pode ainda
compartilhar esses votos com outras candidatas, mas todos os processos (threshold+1) que ja votaram para s não iram votar para mensagens ainda não recebidas. Quando s´ é recebida, se s´ é uma candidata, a mesma não se tornará um fonte. s´ irá perder para s, desde que a maioria votou para s e não irá votar para s´: votes(s,s´) > threshold
Uma candidata não-fonte i não irá torna-se uma fonte se i perde para uma candidata j: win(j,i) = 1 win[G´](j,i) = 1
Entrega normal: A condição de vivacidade é satisfeita desde se ntail(G) = M, ou a entrega
antecipada é satisfeita ou todas as candidatas são entregues.
TOP: Tolerância a falhas
Mudanças de configuração no grupo são consistentemente informadas pela camada de gerenciamento de grupo.
Um processo falho vota numa mensagem candidata m da seguinte forma: VV(m)[i] = 0, caso i seja um processo falho
TOP: Exemplo
B
G C
F I
H
A D E
TOP: Exemplo
B
A B C D E F G H I JM A * 0 * * * * * * * *
M B * 1 * * * * * * * *
M C * 0 * * * * * * * *
M D * 0 * * * * * * * *
M E * 0 * * * * * * * *
M F * 0 * * * * * * * *
M G * 0 * * * * * * * *
M H * 0 * * * * * * * *
M I * 0 * * * * * * * *
M J * 0 * * * * * * * *
TOP: Exemplo
A B C D E F G H I JM A * 0 * * * * * * 0 *
M B * 1 * * * * * * 0 *
M C * 0 * * * * * * 0 *
M D * 0 * * * * * * 0 *
M E * 0 * * * * * * 0 *
M F * 0 * * * * * * 0 *
M G * 0 * * * * * * 0 *
M H * 0 * * * * * * 0 *
M I * 0 * * * * * * 1 *
M J * 0 * * * * * * 0 *
B I
TOP: Exemplo
A B C D E F G H I JM A * 0 * * * * 0 * 0 *
M B * 1 * * * * 1 * 0 *
M C * 0 * * * * 0 * 0 *
M D * 0 * * * * 0 * 0 *
M E * 0 * * * * 0 * 0 *
M F * 0 * * * * 0 * 0 *
M G * 0 * * * * 1 * 0 *
M H * 0 * * * * 0 * 0 *
M I * 0 * * * * 0 * 1 *
M J * 0 * * * * 0 * 0 *
B
G
I
TOP: Exemplo
A B C D E F G H I JM A * 0 * * * 0 0 * 0 *
M B * 1 * * * 0 1 * 0 *
M C * 0 * * * 0 0 * 0 *
M D * 0 * * * 0 0 * 0 *
M E * 0 * * * 0 0 * 0 *
M F * 0 * * * 1 0 * 0 *
M G * 0 * * * 0 1 * 0 *
M H * 0 * * * 0 0 * 0 *
M I * 0 * * * 0 0 * 1 *
M J * 0 * * * 0 0 * 0 *
B
G
F I
TOP: Exemplo
A B C D E F G H I JM A * 0 0 * * 0 0 * 0 *
M B * 1 1 * * 0 1 * 0 *
M C * 0 1 * * 0 0 * 0 *
M D * 0 0 * * 0 0 * 0 *
M E * 0 0 * * 0 0 * 0 *
M F * 0 1 * * 1 0 * 0 *
M G * 0 0 * * 0 1 * 0 *
M H * 0 0 * * 0 0 * 0 *
M I * 0 0 * * 0 0 * 1 *
M J * 0 0 * * 0 0 * 0 *
B
G C
F I
TOP: Exemplo
A B C D E F G H I JM A * 0 0 * 0 0 0 * 0 *
M B * 1 1 * 1 0 1 * 0 *
M C * 0 1 * 1 0 0 * 0 *
M D * 0 0 * 0 0 0 * 0 *
M E * 0 0 * 1 0 0 * 0 *
M F * 0 1 * 1 1 0 * 0 *
M G * 0 0 * 0 0 1 * 0 *
M H * 0 0 * 0 0 0 * 0 *
M I * 0 0 * 0 0 0 * 1 *
M J * 0 0 * 0 0 0 * 0 *
B
G C
F I
E
TOP: Exemplo
A B C D E F G H I JM A * 0 0 0 0 0 0 * 0 *
M B * 1 1 1 1 0 1 * 0 *
M C * 0 1 1 1 0 0 * 0 *
M D * 0 0 1 0 0 0 * 0 *
M E * 0 0 0 1 0 0 * 0 *
M F * 0 1 1 1 1 0 * 0 *
M G * 0 0 1 0 0 1 * 0 *
M H * 0 0 0 0 0 0 * 0 *
M I * 0 0 0 0 0 0 * 1 *
M J * 0 0 0 0 0 0 * 0 *
B
G C
F I
D E
TOP: Exemplo
A B C D E F G H I JM A * 0 0 0 0 0 0 0 0 *
M B * 1 1 1 1 0 1 0 0 *
M C * 0 1 1 1 0 0 0 0 *
M D * 0 0 1 0 0 0 0 0 *
M E * 0 0 0 1 0 0 0 0 *
M F * 0 1 1 1 1 0 0 0 *
M G * 0 0 1 0 0 1 0 0 *
M H * 0 0 0 0 0 0 1 0 *
M I * 0 0 0 0 0 0 1 1 *
M J * 0 0 0 0 0 0 0 0 *
B
G C
F I
H
D E
TOP: Exemplo
A B C D E F G H I JM A 1 0 0 0 0 0 0 0 0 *
M B 1 1 1 1 1 0 1 0 0 *
M C 0 0 1 1 1 0 0 0 0 *
M D 0 0 0 1 0 0 0 0 0 *
M E 0 0 0 0 1 0 0 0 0 *
M F 0 0 1 1 1 1 0 0 0 *
M G 1 0 0 1 0 0 1 0 0 *
M H 0 0 0 0 0 0 0 1 0 *
M I 0 0 0 0 0 0 0 1 1 *
M J 0 0 0 0 0 0 0 0 0 *
B
G C
F I
H
A D E
TOP: Exemplo
M = 10threshold = 5ntail(G) = 9u = M - ntail(G) = 1M(G) = {B, F, I}
mi B F I
nvt(mi){A,B,C,D,E,G} = 6 {C,D,E,F} = 4 {H,I} = 2
votes B F IB - 3 6F 1 - 4I 2 2 -
TOP: Exemplo
S(G) = i M(G) j M(G), 1 win[G´](j,i) B S(G)
nvt(B) = 6 > threshold F S(G)
votes(B,F) + u = 4 ≤ threshold votes(I,F) + u = 3 ≤ threshold
I S(G) nvt(I) = 2 ≤ threshold B M(G), votes(B,I) + u = 7 > threshold
Entrega Antecipada M(G)\S(G) = {I}
nvt(I) + u = 3 ≤ threshold B S(G), votes(B,I) = 6 > threshold B S(G), nvt(B) > threshold