27
1 O Problema Do Acordo Distribuído (Acordo Bizantino) Trabalho realizado por: Luís Almeida nº 15101

O Problema Do Acordo Distribuído (Acordo Bizantino)

  • Upload
    rufina

  • View
    27

  • Download
    6

Embed Size (px)

DESCRIPTION

O Problema Do Acordo Distribuído (Acordo Bizantino). Trabalho realizado por: Luís Almeidanº 15101. Blocos Básicos de Construção. O objectivo dos sistemas tolerantes a falhas é o de continuar a fornecer serviços apesar de alguns dos seus componentes falharem. - PowerPoint PPT Presentation

Citation preview

Page 1: O Problema Do Acordo Distribuído (Acordo Bizantino)

1

O Problema Do Acordo Distribuído (Acordo Bizantino)

Trabalho realizado por:

Luís Almeida nº 15101

Page 2: O Problema Do Acordo Distribuído (Acordo Bizantino)

2

Blocos Básicos de Construção

O objectivo dos sistemas tolerantes a falhas é o de continuar a fornecer serviços apesar de alguns dos seus componentes falharem.

Blocos básicos de construção são as suposições feitas acerca do comportamento dos sistemas e dos seu modos de falha e,

Os métodos para suportar essas suposições.

Page 3: O Problema Do Acordo Distribuído (Acordo Bizantino)

3

Acordo Bizantino

Quando um sistema falha, pode comportar-se de maneira totalmente arbitrária.

Esta falha é chamada Falha Bizantina. Protocolos de Acordo Bizantino. O modo de falha considerado é o mais geral. Se se conseguir lidar com o Acordo Bizantino,

então podem-se mascarar a maioria do tipo de falhas.

Page 4: O Problema Do Acordo Distribuído (Acordo Bizantino)

4

Acordo Bizantino- Definição do Problema e Resultados

Impossíveis

Vamos considerar: Um sistema com vários componentes, no qual há

troca de informação entre eles. Um sistema distribuído no qual os nós são os

componentes e a informação é trocada por passagem de mensagens.

Os nodos podem ser defeituosos e podem exibir falhas Bizantinas.

Page 5: O Problema Do Acordo Distribuído (Acordo Bizantino)

5

Acordo Bizantino- Definição do Problema e Resultados

Impossíveis O objectivo a atingir é: Todos os nós não defeituosos devem chegar a um

consenso sobre os valores correctos.

Cada nó deve tomar uma decisão baseada nos valores recebidos dos outros nós, e todos os nós não defeituosos devem tomar a mesma decisão.

Page 6: O Problema Do Acordo Distribuído (Acordo Bizantino)

6

Acordo Bizantino- Definição do Problema e Resultados

Impossíveis

Exigências para o problema geral do consenso: 1. Todos os nós não defeituosos produzem o mesmo

valor. Chamamos v(i) ao valor do nó i. 2. Se o nó emissor, i, funcionar correctamente, então

todos os nós não defeituosos usam o valor que i envia.

Este problema também é chamado Problema da Consistência Interactiva.

Page 7: O Problema Do Acordo Distribuído (Acordo Bizantino)

7

Acordo Bizantino- Definição do Problema e Resultados

Impossíveis

Figura 1: Dois cenários Impossíveis

Impossibilidade de resolver o problema com 3 nós.

Page 8: O Problema Do Acordo Distribuído (Acordo Bizantino)

8

Acordo Bizantino- Protocolos com mensagens comuns

Só é possível chegar a um consenso caso, sendo m o número de nós defeituosos, haja pelo menos um total de 3m+1 nós.

Assume-se que o nó não defeituoso executa o protocolo correctamente.

Um nó defeituoso comporta-se de uma maneira qualquer.

Page 9: O Problema Do Acordo Distribuído (Acordo Bizantino)

9

Acordo Bizantino- Protocolos com mensagens comuns

Suposições assumidas sobre o sistema de passagem de mensagens: S1. Cada mensagem que é enviada por um nó é

entregue correctamente pelo sistema de mensagens ao receptor.

S2. O receptor sabe qual o nó que lhe enviou a mensagem.

S3. A falta de uma mensagem pode ser detectada.

Page 10: O Problema Do Acordo Distribuído (Acordo Bizantino)

10

Acordo Bizantino- Protocolos com mensagens comuns

Algoritmo da Consistência Interactiva: Só funciona se as 3 suposições anteriores forem

satisfeitas. m representa o número total de nós defeituosos. n representa o número total de nós. n >= 3m + 1. 1 nó é o transmissor. Os restantes nós são os receptores.

Page 11: O Problema Do Acordo Distribuído (Acordo Bizantino)

11

Acordo Bizantino- Protocolos com mensagens comuns

Funciona por etapas. Cada etapa consiste em troca de mensagens entre

nós. Etapa 1:

Transmissor envia valores para os outros n-1 nós. Etapa 2:

Cada nó tem de comunicar aos outros n-2 nós o valor que recebeu na etapa 1.

Etapa 3: As mensagens são de novo enviadas.

Page 12: O Problema Do Acordo Distribuído (Acordo Bizantino)

12

Acordo Bizantino- Protocolos com mensagens comuns

Algoritmo ICA(0).1. O Transmissor envia o seu valor para todos os outros n-1 nós.2. Cada nó usa o valor que recebe do transmissor, ou usa o valor

por defeito, se não receber nenhum valor.

Algoritmo ICA(m), m>0.1. O Transmissor envia o seu valor para todos os outros n-1 nós.

2. Seja vi o valor que o nó i recebe do transmissor, ou seja o valor por defeito se não receber nenhum valor. O nó i age como sendo o transmissor no algoritmo ICA(m-1) para enviar o valor vi para cada um dos restantes n-2 nós.

3. Para cada nó i, seja vj o valor recebido pelo nó j (j ≠ i). O nó i utiliza o valor majority(v1, …, vn-1).

Page 13: O Problema Do Acordo Distribuído (Acordo Bizantino)

13

Acordo Bizantino- Protocolos com mensagens comuns

Acaba a recursividade na etapa m+1. O nó transmite a mensagem que recebeu na

etapa m. O valor em maioria é o enviado na etapa m. Este valor “filtra-se para cima” na cadeia de

recursão.

Page 14: O Problema Do Acordo Distribuído (Acordo Bizantino)

14

Acordo Bizantino- Protocolos com mensagens comuns

Figura 2: Algoritmo ICA(1)

Nó 1: majority(x,x,y)

Nó 2: majority(x,x,y)

Nó 1: majority(x,y,z)

Nó 2: majority(x,y,z)

Page 15: O Problema Do Acordo Distribuído (Acordo Bizantino)

15

Acordo Bizantino- Protocolos com mensagens

assinadas

ICA(m) é complicado.

O problema torna-se mais simples se restringirmos a habilidade dos nós em alterar as mensagens.

O transmissor envia uma mensagem “assinada”.

Page 16: O Problema Do Acordo Distribuído (Acordo Bizantino)

16

Acordo Bizantino- Protocolos com mensagens

assinadas Um transmissor envia uma mensagem assinada a

outros nós. Um nó adiciona a sua assinatura à mensagem que

recebe, e envia-a na próxima etapa. Se o nó não for defeituoso, a sua mensagem é igual

à que recebeu do transmissor. Se o nó for defeituoso, este tem de enviar a

mensagem original ou não enviar nenhuma (uma mensagem alterada pode ser detectada).

Page 17: O Problema Do Acordo Distribuído (Acordo Bizantino)

17

Acordo Bizantino- Protocolos com mensagens

assinadas

V -> o conjunto de valores recebidos. choice(V) -> função utilizada para devolver um

único valor do conjunto de valores. Requisitos para a função choice(V):

Se V={} -> choice(V)=0. (pode ser outro) Se V só tiver um valor, então choice(V) = v. Noutros casos a escolha pode ser a média ou a soma

dos valores.

Page 18: O Problema Do Acordo Distribuído (Acordo Bizantino)

18

Acordo Bizantino- Protocolos com mensagens

assinadas

i envia o valor x para outro nó -> x : i.

Se j recebe esse valor e depois o envia então -> x : i : j.

O protocolo SM(m) chega a um consenso com até m nós defeituosos.

Page 19: O Problema Do Acordo Distribuído (Acordo Bizantino)

19

Acordo Bizantino- Protocolos com mensagens

assinadasAlgoritmo SM(m) No início Vi = ø

1. O transmissor assina os seus valores e envia-os para os outros nós.

2. Para cada i:

(A) Se o nodo i recebe uma mensagem do tipo v : 0 do transmissor então (i) Vi = {v}, e (ii) envia a mensagem v : 0 : i para todos os outros nós.

(B) Se o nó i recebe uma mensagem do tipo v : 0 : j1 : j2 : … : jk e v não pertence a Vi , então (i) adiciona v a Vi , e (ii) se k<m envia a mensagem v : 0 : j1 : j2 : … : jk : i para todos os nodos exceptuando j1, j2, …, jk.

3. Para cada i: quando o nodo i não recebe mais mensagens, ele considera o valor final como sendo choice(Vi).

Page 20: O Problema Do Acordo Distribuído (Acordo Bizantino)

20

Acordo Bizantino- Protocolos com mensagens

assinadas

No passo 2, um nó ignora uma mensagem que contenha um valor v que já tenha recebido.

Ignora também qualquer valor que não possua a sequência correcta de assinaturas.

São usados “timeouts” para determinar quando não irão chegar mais mensagens, ou então outros mecanismos.

Page 21: O Problema Do Acordo Distribuído (Acordo Bizantino)

21

Acordo Bizantino- Protocolos com mensagens

assinadas

Se o transmissor não for defeituoso então irá enviar o mesmo valor v para todos os outros nodos.

Desde que a sua assinatura não possa ser falsificada, nenhum nó pode receber qualquer outro valor no passo 2 (B) do algoritmo.

choice irá escolher esse valor.

Page 22: O Problema Do Acordo Distribuído (Acordo Bizantino)

22

Acordo Bizantino- Protocolos com mensagens

assinadas: Exemplo Nos slides seguintes apresenta-se um exemplo para 3

nós sendo 1 deles faltoso. Tem-se então n=3 e m=1. O exemplo consiste em 3 generais (1 comandante e 2

tenentes) que têm de decidir se atacam ou se se retiram. A ordem inicial é dada pelo comandante, aos outros 2 tenentes.

No entanto o próprio comandante pode ser faltoso e enviar informação diferente para cada um dos tenentes. Por isso eles têm de desconfiar da decisão dele, e encontrar uma maneira de chegarem a uma decisão em comum.

Neste exemplo, vamos considerar exactamente o caso, em que o comandante é faltoso.

Page 23: O Problema Do Acordo Distribuído (Acordo Bizantino)

23

Acordo Bizantino- Protocolos com mensagens

assinadas: Exemplo No inicio : Vi = ø, i=1,2. O valor por defeito de choiche(ø) = “retirar”. O Comandante tem o nº 0, o Tenente1 o nº1 e o Tenente2 o nº

2.

Passo (1)

V1 = {“atacar”}.

V2 = {“retirar”}.

Page 24: O Problema Do Acordo Distribuído (Acordo Bizantino)

24

Acordo Bizantino- Protocolos com mensagens assinadas:

Exemplo Passo (2)

Neste ponto temos que saber se executamos o passo (A) ou o (B). No nosso caso cada nó i (1 e 2) recebeu uma mensagem do tipo v : o, logo o passo a executar é o (A).

Passo (2) (A) (i) ->

(ii) -> Enviar v : 0 : i para os outros tenentes (neste caso, o 1 para o 2 e vice-versa).

V1 = {“atacar”}.V2 = {“retirar”}.

-> deixar Vi = {v}

Page 25: O Problema Do Acordo Distribuído (Acordo Bizantino)

25

Acordo Bizantino- Protocolos com mensagens

assinadas: Exemplo

Passo (2) (A) (ii)

Page 26: O Problema Do Acordo Distribuído (Acordo Bizantino)

26

Acordo Bizantino- Protocolos com mensagens assinadas:

Exemplo Temos agora de decidir se voltamos a executar o passo (A) ou vamos executar o passo (B).

Como cada tenente recebeu uma mensagem do tipo v : 0 : j1 : j2 : … : jk , então temos de executar o passo (B).

Passo (2) (B) Para cada i:

i = 1 -> recebeu: “retirar” : 0 : 2 “retirar” ainda não está em V1 -> executar o sub-passo (i). i = 2 -> recebeu: “atacar” : 0 : 1 “atacar” ainda não está em V2 -> executar o sub-passo (i).

Passo (2) (B) (i)

Passo (2) (B) (ii) Verificar se k < m.

m = 1. Temos v : 0 : j1 -> 1 = 1, logo não se executa o sub-passo (ii).

V1 = {“atacar”, “retirar”},V2 = {“atacar”, “retirar”}.

Page 27: O Problema Do Acordo Distribuído (Acordo Bizantino)

27

Acordo Bizantino- Protocolos com mensagens

assinadas: Exemplo Passo (3) Para cada i: Como cada tenente não recebe mais mensagens, então

temos de executar a função choice(Vi). choice({“atacar”, “retirar”}). Neste caso como não existe um valor em maioria, escolhe-se por

exemplo o valor que estava definido por defeito, ou o outro. O importante é que os dois tenentes vão utilizar o mesmo valor para executarem.

Os dois tenentes sabem que o comandante faltoso, porque quando trocaram mensagens entre si, viram que as mensagens dele tinham assinaturas diferentes. E é sabido que só o comandante pode alterar as sua própria assinatura.