A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

1 O Problema Do Acordo Distribuído (Acordo Bizantino) Trabalho realizado por: Luís Almeidanº 15101.

Apresentações semelhantes


Apresentação em tema: "1 O Problema Do Acordo Distribuído (Acordo Bizantino) Trabalho realizado por: Luís Almeidanº 15101."— Transcrição da apresentação:

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

2 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.

3 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.

4 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.

5 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.

6 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.

7 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.

8 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.

9 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.

10 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.

11 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. …

12 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 v i 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 v i para cada um dos restantes n-2 nós. 3. Para cada nó i, seja v j o valor recebido pelo nó j (j ≠ i). O nó i utiliza o valor majority(v 1, …, v n-1 ).

13 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.

14 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)

15 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”.

16 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).

17 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.

18 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.

19 19 Acordo Bizantino - Protocolos com mensagens assinadas Algoritmo SM(m)  No início V i = ø 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) V i = {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 : j 1 : j 2 : … : j k e v não pertence a V i, então (i) adiciona v a V i, e (ii) se k

20 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.

21 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.

22 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.

23 23 Acordo Bizantino - Protocolos com mensagens assinadas: Exemplo No inicio :  V i = ø, 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) V 1 = {“atacar”}. V 2 = {“retirar”}.

24 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 V i = {v}

25 25 Acordo Bizantino - Protocolos com mensagens assinadas: Exemplo Passo (2) (A) (ii)

26 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 : j 1 : j 2 : … : j k, 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 V 1 -> executar o sub-passo (i). i = 2 -> recebeu: “atacar” : 0 : 1 “atacar” ainda não está em V 2 -> executar o sub-passo (i). Passo (2) (B) (i) Passo (2) (B) (ii)  Verificar se k < m. m = 1. Temos v : 0 : j 1 -> 1 = 1, logo não se executa o sub-passo (ii). V1 = {“atacar”, “retirar”}, V2 = {“atacar”, “retirar”}.

27 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(V i ).  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.


Carregar ppt "1 O Problema Do Acordo Distribuído (Acordo Bizantino) Trabalho realizado por: Luís Almeidanº 15101."

Apresentações semelhantes


Anúncios Google