1 / 27

O Problema Do Acordo Distribuído (Acordo Bizantino)

O Problema Do Acordo Distribuído (Acordo Bizantino). Trabalho realizado por: Luís Almeida nº 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.

rufina
Download Presentation

O Problema Do Acordo Distribuído (Acordo Bizantino)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  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. 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. 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. 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. 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. 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. 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. 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. 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. 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. Acordo Bizantino- Protocolos com mensagens comuns Algoritmo ICA(0). • O Transmissor envia o seu valor para todos os outros n-1 nós. • 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. • O Transmissor envia o seu valor para todos os outros n-1 nós. • 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. • Para cada nó i, seja vj o valor recebido pelo nó j(j ≠ i). O nó i utiliza o valor majority(v1, …, vn-1).

  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. 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. 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. 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. 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. 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. Acordo Bizantino- Protocolos com mensagens assinadas Algoritmo SM(m) • No início Vi = ø • O transmissor assina os seus valores e envia-os para os outros nós. • 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 : … : jke 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. • Para cada i: quando o nodo i não recebe mais mensagens, ele considera o valor final como sendo choice(Vi).

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

  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}

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

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

  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.

More Related