Sei sulla pagina 1di 43

Leccin 12: Algoritmos de consenso

Introduccin Enunciado del problema Consenso: Algoritmo de una ronda Consenso: Algoritmo de los generales bizantinos Consenso: Algoritmo del rey

Programacin de Sistemas Concurrentes y Distribuidos

J. Ezpeleta-P. lvarez Univ. de Zaragoza

Introduccin
Los sistemas distribuidos son propensos a fallos La replicacin es una estrategia habitual para conseguir que un sistema sea ms fiable
Si replico y no hay fallos, todos los nodos deberan calcular el mismo resultado (suponiendo que los datos de entrada y el algoritmo de clculo es el mismo) Si replico y hay fallos, pueden generarse distintos resultados
Resultado vlido determinado por medio de algoritmos de consenso

Tipos de fallos a considerar:


Fallos por cadas: un nodo deja de enviar mensajes Fallos bizantinos: un nodo enva mensajes arbitrarios

Programacin de Sistemas Concurrentes y Distribuidos

J. Ezpeleta-P. lvarez Univ. de Zaragoza

Enunciado del problema


Lamport, Shostak, Pease, 1982

Un grupo de ejrcitos bizantinos est rodeando una ciudad enemiga. El balance de fuerzas es tal que si todos los ejrcitos atacan simultneamente, pueden capturar la ciudad; en caso contrario, todos deben retirarse para evitar la derrota. Los generales tienen mensajeros fiables capaces de entregar con xito cualquier mensaje enviado de un general a otro. El problema es que algunos de los generales son traidores y tienen como objetivo que los ejrcitos sean derrotados. El objetivo es definir un algoritmo que facilite que todos los generales leales lleguen a un consenso sobre el plan de actuacin. La decisin final ser por votacin de la mayora sobre sus elecciones iniciales. Si empatan, la decisin es retirada.
Programacin de Sistemas Concurrentes y Distribuidos
J. Ezpeleta-P. lvarez Univ. de Zaragoza 3

Enunciado del problema


Interpretacin del problema:
Los generales son los nodos de cmputo Los mensajeros son los canales de comunicacin Los generales pueden fallar, pero no los mensajeros

Los generales traidores representan los fallos en el sistema


Fallo por cada: un traidor que simplemente deja de enviar mensajes
asumimos que podemos detectar cundo un nodo cae

Fallo bizantino: un traidor que manda mensajes confusos

La decisin final (consenso) est basada en la opinin de la mayora

Programacin de Sistemas Concurrentes y Distribuidos

J. Ezpeleta-P. lvarez Univ. de Zaragoza

Consenso: Algoritmo de una ronda


Cada general enva su plan a los dems generales y espera los planes de stos
planType finalPlan planType array[generals] plan

process General P1: P2: P3: P4: P5: P6:

plan[myID]:= chooseAttackOrRetreat for all other generals G send(G, myID, plan[myID]) for all other generals G receive(G, plan[G]) finalPlan:= majority(plan)

Programacin de Sistemas Concurrentes y Distribuidos

J. Ezpeleta-P. lvarez Univ. de Zaragoza

Consenso: Algoritmo de una ronda


Sean 3 generales, supongamos que uno de ellos es traidor (Basilio) y sufre un fallo por cada:

A Basilio
-A A R A R

Basilio "peta" despus del primer mensaje

Zoe

Len

Programacin de Sistemas Concurrentes y Distribuidos

J. Ezpeleta-P. lvarez Univ. de Zaragoza

Consenso: Algoritmo de una ronda


A Basilio
-A A R A R

Basilio "peta" despus del primer mensaje

Zoe

Len
Len General Basilio Len Zoe Majority

R
Plan A R A A
J. Ezpeleta-P. lvarez Univ. de Zaragoza 7

Zoe General Basilio Len Zoe Majority

Plan R A R

Programacin de Sistemas Concurrentes y Distribuidos

Consenso: Algoritmo de una ronda


A Basilio
-A A R A R

Zoe

Len
Len General Basilio Len Zoe Majority

R
Plan A R A A

Zoe General Basilio Len Zoe Majority

Plan R A R

Decisiones de los generales leales Plan final =

R
8

Programacin de Sistemas Concurrentes y Distribuidos

J. Ezpeleta-P. lvarez Univ. de Zaragoza

Consenso: Algoritmo de los generales bizantinos


El algoritmo anterior atribuye la misma importancia a los planes de los distintos generales Por qu no dar ms importancia a los planes de los generales leales? deberamos conocer su identidad
En un sistema distribuido no se puede conocer la identidad de los generales traidores (nodos que fallarn)

Por tanto, la solucin pasa por asegurar que los planes de los traidores no afecten al consenso de los leales
Envo de planes basado en doble vuelta:
Primera vuelta: generales envan su decisin Segunda vuelta: generales envan los planes recibidos de otros generales

Programacin de Sistemas Concurrentes y Distribuidos

J. Ezpeleta-P. lvarez Univ. de Zaragoza

Consenso: Algoritmo de los generales bizantinos


planType planType planType planType finalPlan array[generals] plan array[generals, generals] reportedPlan array[generals] majorityPlan

process General

P1: plan[myID]:= chooseAttackOrRetreat P2: for all other generals G P3: send(G, myID, plan[myID]) P4: for all other generals G P5: receive(G, plan[G]) P6: for P7: P8: P9: for P10: P11: all other generals G for all other generals send(G, myID, all other generals G for all other generals receive(G, G, // First round

// Second round G except G G me dice que G, plan[G]) G except G reportedPlan[G,G])


J. Ezpeleta-P. lvarez Univ. de Zaragoza

G le dijo...

Programacin de Sistemas Concurrentes y Distribuidos

// First and second Vote

10

Consenso: Algoritmo de los generales bizantinos


planType planType planType planType finalPlan array[generals] plan array[generals, generals] reportedPlan array[generals] majorityPlan

process General

P1: plan[myID]:= chooseAttackOrRetreat P2: for all other generals G P3: send(G, myID, plan[myID]) P4: for all other generals G P5: receive(G, plan[G]) P6: for P7: P8: P9: for P10: P11: all other generals G for all other generals send(G, myID, all other generals G for all other generals receive(G, G, // First round

// Second round G except G G me dice que G, plan[G]) G except G reportedPlan[G,G])


J. Ezpeleta-P. lvarez Univ. de Zaragoza

G le dijo...

Programacin de Sistemas Concurrentes y Distribuidos

// First and second Vote

11

Consenso: Algoritmo de los generales bizantinos


// First and Second Round P12: for all generals G // First vote P13: majorityPlan[G]:= majority(plan[G] reportedPlan[*,G]) P14: majorityPlan[myID] := plan[myID] P15: finalPlan:= majority(majorityPlan) // Second vote

Programacin de Sistemas Concurrentes y Distribuidos

J. Ezpeleta-P. lvarez Univ. de Zaragoza

12

Consenso: Algoritmo de los generales bizantinos


Los siguientes escenarios pretenden demostrar que:
Ejemplo 1: El algoritmo evita decisiones inconsistentes como consecuencia de fallos por cadas Ejemplo 2: El algoritmo puede llevar a decisiones inconsistentes si se trata de fallos bizantinos (2 generales leales, 1 general traidor) Ejemplo 3: El algoritmo puede garantizar decisiones consistentes si se trata de fallos bizantinos (3 generales leales, 1 general traidor)

Programacin de Sistemas Concurrentes y Distribuidos

J. Ezpeleta-P. lvarez Univ. de Zaragoza

13

Consenso: Algoritmo de los generales bizantinos


Ejemplo 1: cada en primera vuelta
A Basilio -Zoe A A R A Len R A R

Basilio "peta" despus del primer mensaje

Zoe General Basilio Len Zoe Majority Plan Reported by Basilio Len Basilio Len Zoe Majority Majority General Plan

Len Reported by Basilio Zoe Majority

Programacin de Sistemas Concurrentes y Distribuidos

J. Ezpeleta-P. lvarez Univ. de Zaragoza

14

Consenso: Algoritmo de los generales bizantinos


Ejemplo 1: cada en primera vuelta
A Basilio -Zoe A A R A Len R A R

Basilio "peta" despus del primer mensaje

Zoe General Basilio Len Zoe Majority Plan R A Reported by Basilio Len A A R A A Basilio Len Zoe Majority A R A Majority General Plan

Len Reported by Basilio Zoe A R A A


15

Majority

Programacin de Sistemas Concurrentes y Distribuidos

Basta con que un general enve un mensaje para que todos lo sepan J. Ezpeleta-P. lvarez
Univ. de Zaragoza

Consenso: Algoritmo de los generales bizantinos


Ejemplo 1: cada en segunda vuelta
A Basilio -Zoe
(Zoe, A) (Len, R) (Basilio, A) (Basilio, A) (Zoe, A)

Basilio enva 1 vuelta Basilio enva parte 2

Len

Zoe General Basilio Len Zoe Majority Plan Reported by Basilio Len Basilio Len Zoe Majority Majority General Plan

Len Reported by Basilio Zoe Majority

Programacin de Sistemas Concurrentes y Distribuidos

J. Ezpeleta-P. lvarez Univ. de Zaragoza

16

Consenso: Algoritmo de los generales bizantinos


Ejemplo 1: cada en segunda vuelta
A Basilio -Zoe
(Zoe, A) (Len, R) (Basilio, A) (Basilio, A) (Zoe, A)

Basilio enva 1 vuelta Basilio enva parte 2

Len

Zoe General Basilio Len Zoe Majority Plan A R A Reported by Basilio Len A A R A A Basilio Len Zoe Majority A R A Majority General Plan

Len Reported by Basilio Zoe A A A R A A


J. Ezpeleta-P. lvarez Univ. de Zaragoza 17

Majority

Programacin de Sistemas Concurrentes y Distribuidos

Consenso: Algoritmo de los generales bizantinos


Ejemplo 2: Fallo bizantino en segunda vuelta
A Basilio
(Len, R) (Zoe, R) (Len, R) (Basilio, A) (Basilio, A)

Basilio miente sobre Zoe


(Zoe, A)

A
Zoe General Basilio Len Zoe Majority Plan A R A

Zoe

Len

R
Len

Reported by Basilio Len

Majority

General Basilio Len Zoe Majority

Plan A R A

Reported by Basilio Zoe

Majority

Programacin de Sistemas Concurrentes y Distribuidos

J. Ezpeleta-P. lvarez Univ. de Zaragoza

18

Consenso: Algoritmo de los generales bizantinos


Ejemplo 2: Fallo bizantino en segunda vuelta
A Basilio
(Len, R) (Zoe, R) (Len, R) (Basilio, A) (Basilio, A)

Basilio miente sobre Zoe


(Zoe, A)

A
Zoe General Basilio Len Zoe Majority Plan A R A R

Zoe

Len

R
Len

Reported by Basilio Len A

Majority A R A A

General Basilio Len Zoe Majority

Plan A R A

Reported by Basilio Zoe A R

Majority A R R R
19

Programacin de Sistemas Concurrentes y Distribuidos

Inconsistencia en las decisones de los generales J. leales! Ezpeleta-P. lvarez


Univ. de Zaragoza

Consenso: Algoritmo de los generales bizantinos


Ejemplo 3: Fallos bizantinos

Escenario para 4 generales:


Basilio (A), Juan (A) y Len (R) son leales Zoe es el traidor

R a Basilio y Leo A a Juan

Estructura de datos de Basilio con los mensajes recibidos por los generales leales:
Basilio General Basilio Juan Len Zoe Majority Plan A A R ? R ? ? A ? ? Reportedby Juan Len Zoe A A R ? ?
J. Ezpeleta-P. lvarez Univ. de Zaragoza 20

Majority

Puede conocerse con certeza la decisin de cada general leal, independientemente de lo que diga el general traidor

Programacin de Sistemas Concurrentes y Distribuidos

Consenso: Algoritmo de los generales bizantinos R a Basilio y Leo


A a Juan Supongamos que Zoe enva en primera vuelta mensajes contradictorios:
Los mensajes intercambiados entre los generales leales en segunda vuelta son correctos
Basilio General Basilio Juan Len Zoe Majority Plan A A R R R A R A ? ? Reportedby Juan Len Zoe A A R R R Majority

El traidor puede influir en la decisin final de los generales leales, pero entre estos existir consenso (R).

Programacin de Sistemas Concurrentes y Distribuidos

J. Ezpeleta-P. lvarez Univ. de Zaragoza

21

Consenso: Algoritmo de los generales bizantinos


Cul sera la decisin final si todos los generales leales hubieran inicialmente elegido el mismo plan (A)?
Basilio General Plan Reportedby Juan Basilio Juan Len Zoe Majority A A A ? A ? ? A ? ? Len Zoe A A A ? ?
J. Ezpeleta-P. lvarez Univ. de Zaragoza 22

Majority

Programacin de Sistemas Concurrentes y Distribuidos

Consenso: Algoritmo de los generales bizantinos


Y si el traidor manda mensajes contradictorios, pero la mayora de estos mensajes es atacar (A)?
Basilio General Plan Reportedby Juan Basilio Juan Len Zoe Majority A A R A R A R A ? ? Len Zoe A A R ? ? Majority

Programacin de Sistemas Concurrentes y Distribuidos

J. Ezpeleta-P. lvarez Univ. de Zaragoza

23

Consenso: Algoritmo de los generales bizantinos


Correccin del algoritmo basada en Knowledge Trees (KT)
Un KT almacena informacin sobre el general representado en su nodo raz

Ejemplo:

Basilio A Zoe A Len A

Decisin de Basilio (A)

Plan enviado por Basilio en primera vuelta Intenciones de Basilio difundidas en segunda vuelta
J. Ezpeleta-P. lvarez Univ. de Zaragoza 24

Len A

Zoe A

Programacin de Sistemas Concurrentes y Distribuidos

Consenso: Algoritmo de los generales bizantinos


Sean 3 generales (uno de ellos traidor, Basilio), el algoritmo de los generales bizantinos ser correcto ante fallos por cada si:
para cualquier escenario, los generales leales siempre llegan a la misma conclusin sobre los planes del traidor

Programacin de Sistemas Concurrentes y Distribuidos

J. Ezpeleta-P. lvarez Univ. de Zaragoza

25

Consenso: Algoritmo de los generales bizantinos


Sean 3 generales (uno de ellos traidor, Basilio), el algoritmo de los generales bizantinos ser correcto ante fallos por cada si:
para cualquier escenario, los generales leales siempre llegan a la misma conclusin sobre los planes del traidor

Caso 1: Basilio no manda ningn mensaje.


Len X Zoe X Len Y Zoe Y

Consistente !
Programacin de Sistemas Concurrentes y Distribuidos
J. Ezpeleta-P. lvarez Univ. de Zaragoza 26

Consenso: Algoritmo de los generales bizantinos


Sean 3 generales (uno de ellos traidor, Basilio), el algoritmo de los generales bizantinos ser correcto ante fallos por cada si:
para cualquier escenario, los generales leales siempre llegan a la misma conclusin sobre los planes del traidor

Caso 2: Basilio enva un nico mensaje en primera vuelta a un nico general leal (por ejemplo, a Len).
Basilio X Len X Zoe X
Programacin de Sistemas Concurrentes y Distribuidos

Consistente !
J. Ezpeleta-P. lvarez Univ. de Zaragoza 27

Consenso: Algoritmo de los generales bizantinos


Sean 3 generales (uno de ellos traidor, Basilio), el algoritmo de los generales bizantinos ser correcto ante fallos por cada si:
para cualquier escenario, los generales leales siempre llegan a la misma conclusin sobre los planes del traidor

Caso 3: Basilio enva correctamente los mensajes de primera vuelta, pero cae antes de enviar los de segunda vuelta
Basilio X Zoe X Len X Len X Zoe X

Consistente !
J. Ezpeleta-P. lvarez Univ. de Zaragoza 28

Programacin de Sistemas Concurrentes y Distribuidos

Consenso: Algoritmo de los generales bizantinos


Sean 3 generales (uno de ellos traidor, Basilio), el algoritmo de los generales bizantinos ser correcto ante fallos por cada si:
para cualquier escenario, los generales leales siempre llegan a la misma conclusin sobre los planes del traidor

Caso 4: Basilio enva correctamente los mensajes de primera vuelta, pero no el segundo a Zoe qu conoce Zoe de Len?
Basilio X Zoe X Len X Len X Zoe X Zoe Y Basilio Y Len Y Basilio Y

Consistente !
J. Ezpeleta-P. lvarez Univ. de Zaragoza 29

Programacin de Sistemas Concurrentes y Distribuidos

Consenso: Algoritmo de los generales bizantinos


Sean 4 generales (uno de ellos traidor, Zoe), el algoritmo de los generales bizantinos ser correcto ante fallos bizantinos si:
para cualquier escenario, los generales leales siempre llegan a la misma conclusin sobre los planes del traidor

Programacin de Sistemas Concurrentes y Distribuidos

J. Ezpeleta-P. lvarez Univ. de Zaragoza

30

Consenso: Algoritmo de los generales bizantinos


Sean 4 generales (uno de ellos traidor, Zoe), el algoritmo de los generales bizantinos ser correcto ante fallos bizantinos si:
para cualquier escenario, los generales leales siempre llegan a la misma conclusin sobre los planes del traidor

KT de un general leal:
Len X

Basilio X Juan X Zoe X

Juan X Basilio X Zoe X

Zoe X Basilio Y Juan Z


31

Programacin de Sistemas Concurrentes y Distribuidos

J. Ezpeleta-P. lvarez Univ. de Zaragoza

Consistente !

Consenso: Algoritmo de los generales bizantinos


Sean 4 generales (uno de ellos traidor, Zoe), el algoritmo de los generales bizantinos ser correcto ante fallos bizantinos si:
para cualquier escenario, los generales leales siempre llegan a la misma conclusin sobre los planes del traidor

KT del general traidor:


Zoe

Basilio X Juan X Len X

Juan Y Basilio Y Len Y

Len Z Basilio Z Juan Z


32

Programacin de Sistemas Concurrentes y Distribuidos

J. Ezpeleta-P. lvarez Univ. de Zaragoza

Consistente !

Consenso: Algoritmo de los generales bizantinos


Por tanto, el algoritmo de los generales bizantinos evita inconsistencia en la informacin en:
Cualquier escenario que experimente fallos por cadas Aquellos escenarios que experimenten fallos bizantinos si el nmero de generales es >= 3t+1, siendo t el nmero de generales traidores

No obstante, este algoritmo requiere un elevado flujo de mensajes, especialmente conforme aumenta el nmero de generales

Programacin de Sistemas Concurrentes y Distribuidos

J. Ezpeleta-P. lvarez Univ. de Zaragoza

33

Consenso: Algoritmo del rey


Basado en la idea de que un nmero pequeo de traidores no puede influir en las intenciones de la mayora
El intercambio de mensajes es menor Pero requiere que el nmero de generales sea (4t+1), siendo t el nmero de generales traidores

En cada ronda el voto de un general tiene una mayor importancia (status de Rey)
La identidad del Rey no es conocida por el resto de los nodos El Rey puede ser un general leal o traidor

Programacin de Sistemas Concurrentes y Distribuidos

J. Ezpeleta-P. lvarez Univ. de Zaragoza

34

Consenso: Algoritmo del rey


planType finalPlan, myMajority, kingPlan planType array[generals] plan Integer votesMajority, kingID

process General

P1: plan[myID]:= chooseAttackOrRetreat

5 generales (t = 1)
P2: do TWO times P3: for all other generals G //first and third round P4: send(G, myID, plan[myID]) P5: for all other generals G P6: receive(G, plan[G]) P7: myMajority:= majority(plan) P8: votesMajority:= number of votes for myMajority

Programacin de Sistemas Concurrentes y Distribuidos


J. Ezpeleta-P. lvarez Univ. de Zaragoza 35

Consenso: Algoritmo del rey


P2: do TWO times

P9: P10: P11: P12: P13: P14: P15: P16: if my turn to be king //second and fourth round for all other generals G send(G, myID, myMajority) mayor que plan[myID]:= myMajority (generales/2)+t else receive(kingID, kingPlan) if (votesMajority > 3) plan[myID]:= myMajority else plan[myID]:= kingPlan // Final decision
J. Ezpeleta-P. lvarez Univ. de Zaragoza 36

P17: finalPlan:= plan[myID]

Programacin de Sistemas Concurrentes y Distribuidos

Consenso: Algoritmo del rey


Escenarios de ejemplo con 5 generales (Miguel es el traidor)
Planes iniciales: Basilio y Juan (A); Zoe y Len (R)

Inters por la consistencia de las estructuras de datos de los generales leales:


Ejemplo 1: el primer Rey es un general leal (Zoe) Ejemplo 2: el primer Rey es un general traidor (Miguel) y ste enva mensajes contradictorios

Programacin de Sistemas Concurrentes y Distribuidos

J. Ezpeleta-P. lvarez Univ. de Zaragoza

37

Consenso: Algoritmo del rey


Ejemplo 1

Escenario con 5 generales (Miguel es el traidor):


Basilio Basilio A Basilio A Basilio A Basilio A Juan A Juan A Juan A Juan A Len R Len R Len R Len R Miguel R Miguel A Miguel A Miguel R Zoe R Juan Zoe R Len Zoe R Zoe Zoe R myMajority R votesMajority 3
J. Ezpeleta-P. lvarez Univ. de Zaragoza 38

myMajority R myMajority A myMajority A

votesMajority 3 votesMajority 3 votesMajority 3

kingPlan

kingPlan

kingPlan

kingPlan

Programacin de Sistemas Concurrentes y Distribuidos

Consenso: Algoritmo del rey


Ejemplo 1

Zoe es el Rey (R)


Basilio Basilio R Juan Basilio Juan R Len Basilio Juan Len R Zoe Basilio Juan Len Miguel Zoe R myMajority votesMajority kingPlan Miguel Zoe myMajority votesMajority kingPlan R Len Miguel Zoe myMajority votesMajority kingPlan R Juan Len Miguel Zoe myMajority votesMajority kingPlan R

Programacin de Sistemas Concurrentes y Distribuidos

J. Ezpeleta-P. lvarez Univ. de Zaragoza

39

Consenso: Algoritmo del rey


Ejemplo 1

Tercera ronda de envo de planes:


Basilio Basilio R Basilio R Basilio R Basilio R Juan R Juan R Juan R Juan R Len R Len R Len R Len R Miguel ? Miguel ? Miguel ? Miguel ? Zoe R Juan Zoe R Len Zoe R Zoe Zoe R myMajority R votesMajority 45 kingPlan myMajority R votesMajority 45 kingPlan myMajority R votesMajority 45 kingPlan myMajority R votesMajority 45 kingPlan

Ezpeleta-P. lvarez 40 slidas,J. decisin final (R) Programacin de Sistemas Concurrentes Mayoras y Distribuidos Univ. de Zaragoza

Consenso: Algoritmo del rey


Ejemplo 2

Supongamos que el primer Rey es el traidor (Miguel):


Basilio Basilio R Juan Basilio Juan A Len Basilio Juan Len A Zoe Basilio Juan Len Miguel Zoe R myMajority votesMajority kingPlan R
J. Ezpeleta-P. lvarez Univ. de Zaragoza 41

Juan

Len

Miguel

Zoe

myMajority

votesMajority

kingPlan R

Len

Miguel

Zoe

myMajority

votesMajority

kingPlan A

Miguel

Zoe

myMajority

votesMajority

kingPlan A

Programacin de Sistemas Concurrentes y Distribuidos

Consenso: Algoritmo del rey


Ejemplo 2

Tercera ronda de envo de planes:


Basilio Basilio R Basilio R Basilio R Basilio R Juan A Juan A Juan A Juan A Len A Len A Len A Len A Miguel ? Miguel ? Miguel ? Miguel ? Zoe R Juan Zoe R Len Zoe R Zoe Zoe R myMajority ? votesMajority 3
J. Ezpeleta-P. lvarez Univ. de Zaragoza 42

myMajority ? myMajority ? myMajority ?

votesMajority 3 votesMajority 3 votesMajority 3

kingPlan

kingPlan

kingPlan

kingPlan

Programacin de Sistemas Concurrentes y Distribuidos

Consenso: Algoritmo del rey


Ejemplo 2

Cuarta ronda, Zoe es el Rey (A):


Basilio Basilio A Juan Basilio A Len Basilio A Zoe Basilio Juan Len Miguel Zoe A
J. Ezpeleta-P. lvarez Decisin final (A) Programacin de Sistemas Concurrentes y Distribuidos Univ. de Zaragoza 43

Juan

Len

Miguel

Zoe

myMajority

votesMajority

kingPlan A

Juan

Len

Miguel

Zoe

myMajority

votesMajority

kingPlan A

Juan

Len

Miguel

Zoe

myMajority

votesMajority

kingPlan A

myMajority

votesMajority

kingPlan

Potrebbero piacerti anche