Sistemas Distribuídos Aula 24

Transcrição

Sistemas Distribuídos Aula 24
Sistemas Distribuídos
Aula 24
Aula passada
Reliability e
Availability
Modelo de falhas
Falhas na prática
Redundância
Aula de hoje
Triple Module
Redundancy
Tipos de falha
Falhas Bizantinas
Grupos redundantes
Protocolo de acordo
bizantino
Figueiredo – 2016
Organizando Componentes
Três módulos em sequência (A,B,C)
resultado enviado do anterior enviado ao próximo
Entrada
A
B
C
Saída
Como organizar a redundância?
Ideia 0: replicar componentes de forma
independente
ex. três linhas em paralelo
Operacional apenas quando não há falhas
em alguma linha
Figueiredo – 2016
Triple Modular Redundancy (TMR)
Organizar componentes de forma não-independente
Votador: circuito simples, se duas ou mais entradas
são iguais, repassa entrada, caso contrário nada
O que ocorre se A1, B2 e C3 falham?
Funciona mesmo com uma falha em todas as linhas
Figueiredo – 2016
Triple Modular Redundancy (TMR)
Por que temos tres votadores por nível?
um seria suficiente para corretude
Votadores podem falhar!
Precisamos de redundância
O que ocorre se V1 e A1 falhar?
O que ocorre de V1 e V2 falharem?
Figueiredo – 2016
Tipos de Falhas
Sistemas podem falhar por muitas razões
dependência entre as partes
Classificação dos tipos de falha para ataca-las
Mais difícil de lidar!
Figueiredo – 2016
Falhas Bizantinas
Outro nome para “Arbitrary Failures”
nome vem de histórias de traições e corrupção no
Império Bizantino
Modelo mais geral de falha, que também
inclui comportamento malicioso
“qualquer coisa pode acontecer”
Respostas podem ser incorretas, inclusive de
forma proposital (maliciosa)
ex. advesário que deseja parar o sistema
Veremos em breve como lidar com estas falhas!
Figueiredo – 2016
Grupos Redundantes
Como lidar com falhas em
processos (ou subsistemas)?
Redundância!
Ideia: grupo de processos redundantes que
se comunicam, executam a mesma função
“computadores” distintos, que podem responder
um pelo outro (redundância)
ex. grupo de discos, grupo de SGBDs, etc
Outros processos interagem com o grupo
(sem saber que é um grupo)
transparente para outros processos
Figueiredo – 2016
Falha em Grupos Redundantes
Quantos processos podem falhar
e grupo continuar operacional?
Depende do tipo de falha!
Crash failure: basta 1 operacional no grupo com k,
sistema tolera k-1 falhas
Bizantine failure: precisamos garantir que os
processos em falha não vão atrapalhar o grupo
ideia: usar consenso no grupo (maioria decide)
maioria = k+1, falhas =k → grupo = 2k + 1
sistema tolera k falhas bizantinas em grupo de
tamanho 2k+1
Figueiredo – 2016
Acordos em Sistemas Distrib.
Processos em sistemas distribuídos precisam
chegar a acordos
ex. definição de um coordenador, definição de
uma transação (commit/abort), etc
Problema relativamente fácil, ignorando falhas
ou considerando alguns tipos de falha
ex. 2PC tolera alguns tipos de falha
E falhas bizantinas?
É possível chegar a um acordo
neste caso?
Figueiredo – 2016
Acordos com Falhas Bizantinas
Problema: conjunto de processos podem chegar a
um consenso em tempo finito na presença de outros
processos em falha bizantina?
inicialmente estudado por Lamport et al. em 82
Resposta depende das premissas sobre processos,
tipo de comunicação e atrasos
Não é possível
chegar a um
consenso!
Figueiredo – 2016
Protocolo de Acordo Bizantino
Assumir comunicação síncrona, comunicação
unicast, com FIFO e atraso limitado
Problema: N processos, cada um com um valor vi
todo processo operacional deve conhecer vi de
cada processo operacional
Algoritmo proposto por Lamport et al. em 82
1) Cada processo envia a cada outro seu número
2) Cada processo transmite os números recebidos
(vetor de números)
3) Usando vetores recebidos, processo verifica para
cada componente se valor é maioria
Figueiredo – 2016
Exemplo – Fase 1
N=4, 1 processo em falha bizantina (processo 3)
vi = identificador do processo
Fase 1: cada processo
envia seu número a cada
outro processo
Processo 3 envia qualquer
valor aos outros
Todos recebem antes de
iniciar Fase 2 (síncrono, em
ordem e retardo máximo)
Figueiredo – 2016
Exemplo – Fase 2
Valores recebidos
(em ordem)
P1 : (1,2,x,4)
P2 : (1,2,y,4)
P3 : (1,2,3,4)
P4 : (1,2,z,4)
Fase 2: cada processo
envia vetor e números
recebido a cada processo
Processo 3 pode enviar
qualquer coisa a qualquer
processo (inconsistente
com o que de fato recebeu)
Por que precisamos da
fase 2? Por que P1 não
conclui com os valores que
recebeu?
Figueiredo – 2016
Exemplo – Fase 3
Vetores recebidos
P1
P2 : (1,2,y,4)
P3 : (a,b,c,d)
P4 : (1,2,z,4)
P2
P1 : (1,2,x,4)
P3 : (e,f,g,h)
P4 : (1,2,z,4)
P4
P1 : (1,2,x,4)
P2 : (1,2,y,4)
P3 : (i,j,k,l)
Fase 3: usando os vetores recebidos, cada processo
verifica se há uma maioria posição do vetor
Caso positivo, utiliza este número para o processo i,
caso negativo, indefinido
Vetores construídos
P1 : (1,2,-,4)
P2 : (1,2,-,4)
P4 : (1,2,-,4)
Todos os três concordam nos
valores!
Funciona independente dos
valores reportados por P3!
Figueiredo – 2016
Propriedades
Neste caso funcionou, N=4, F=1
Mas quando acordo pode ser obtido?
Se k estão em falha bizantina, precisamos de
2k+1 operacional
de 3k+1 processos apenas k podem estar em
falha bizantina (regra dos 2/3)
Não é possível, caso contrário
ex. N=3, F=1 não é possível chegar a um acordo!
Consensus Protocols foi e ainda é tema de
estudo na academia
problema difícil, mais ainda com premissas
menos rigorosas
Figueiredo – 2016