Por que o problema de consenso é tão importante na computação distribuída?

19

Na computação distribuída, o problema de consenso parece ser um dos tópicos centrais que atraiu pesquisas intensivas. Em particular, o artigo "Impossibilidade de consenso distribuído com um processo defeituoso" recebeu o prêmio PODC Influential Paper Award 2001 .

Então, por que o problema de consenso é tão importante? O que podemos alcançar com consenso na teoria e na prática?

Quaisquer referências ou exposições seriam realmente úteis.

hengxin
fonte

Respostas:

18

O artigo que você mencionou é importante por 2 razões:

  1. Isso mostra que não há algoritmo de consenso determinístico assíncrono que tolera até uma única falha de falha. Observe que na configuração síncrona , existe um algoritmo determinístico que termina em rodadas de quando f processos falham.f+1f
  2. Ele introduz bivalência e univalência de configurações (*), que são usadas em muitos limites inferiores e provas de impossibilidade posteriormente.

Formulários

Uma aplicação importante do problema de consenso é a eleição de um coordenador ou líder em um ambiente tolerante a falhas para iniciar alguma ação global. Um algoritmo de consenso permite que você faça isso rapidamente, sem precisar fixar um "supernó" com antecedência (o que introduziria um único ponto de falha).

Outro aplicativo está mantendo a consistência em uma rede distribuída: suponha que você tenha diferentes nós de sensores monitorando o mesmo ambiente. No caso em que alguns desses nós do sensor travam (ou até começam a enviar dados corrompidos devido a uma falha de hardware), um protocolo de consenso garante robustez contra essas falhas.


C1C10CCC

Pedro
fonte
2
@AJed Como um complemento: dei uma olhada na sincronização de artigos de Maurice Herlihy e agora posso apresentar outras implicações teóricas adicionais do problema de consenso. Usando a idéia do número de consenso , pode-se mostrar que existe uma hierarquia infinita de primitivas de sincronização, de forma que nenhuma primitiva em um nível possa ser usada para uma implementação sem espera de quaisquer primitivas em níveis mais altos. Simplificando, os problemas de consenso são uma teoria unificada para definir o poder relativo das operações primitivas de sincronização. É elegante.
Hengxin
11
Tenho alguma dificuldade em entender a prova do resultado da impossibilidade de FLP. Você poderia me dar algumas dicas? Consulte [Prova de FLP] ( stackoverflow.com/q/15131730/1833118 ). Obrigado.
Hengxin
"onde todo processo decidiu" talvez devesse estar "onde todo processo correto decidiu"?
Nbro 9/1118
Você deve explicar em quem o adversário se encontra "não importa o que o adversário faça".
nbro 9/11/18
"todas as extensões possíveis de C", o que você quer dizer com "extensão de C"? O que é uma extensão de uma configuração, em geral?
Nbro 9/1118
7

Isso mostra que não há algoritmo determinístico tolerante a falhas. Um resultado teórico bastante forte, que força os designers a lidar de maneira diferente com a tolerância a falhas, alguns dos quais são sincronização e randomização.

Comentário: Na minha opinião, a sincronização é uma suposição adicional do sistema que dificilmente é encontrada em aplicações práticas.

Para referências, consulte o link da Wikipedia . Confira também este blog para aplicações práticas

AJed
fonte
11
Sim, eu prefiro a randomização à sincronização. O ambiente em que a computação distribuída é reproduzida é muito ruim no sentido de assincronização, atraso ilimitado, falha inesperada e excesso de determinação. Contanto que não seja perfeito, por que não usamos a randomização, obtendo algumas garantias e evitando muita complexidade?
precisa saber é o seguinte
11
Falando em sincronização, simplesmente não gosto da suposição em teoria . No entanto, na indústria , a sincronização ou sincronização parcial é aplicada com freqüência. Por exemplo, o Spanner do Google é um banco de dados replicado de forma síncrona distribuído globalmente . Isso me torna menos decisivo. qual e sua OPINIAO?
Hengxin
Eu acho que é melhor ver como a sincronização é implementada lá. Mas é uma referência muito interessante. - o que quero dizer, não é uma característica natural do sistema. Deve ser adicionado a ele.
AJed
Em geral, você não deve dar como referência a Wikipedia. Acabei de ler esse artigo da Wikipedia: é bastante incompleto e desorganizado; também pode ser confuso.
Nbro 9/1118
5

Um dos motivos pelos quais os problemas de consenso são importantes é que eles são muito simples e são um tipo de problema universal para sistemas de computação distribuídos.

Se pudermos resolver o consenso em um sistema distribuído assíncrono, podemos usá-lo para linearizar ações em objetos compartilhados e obter linearizabilidade para objetos compartilhados.

Por simplicidade, quantos problemas você consegue pensar que são mais simples do que concordar com um valor?

O resultado da impossibilidade sobre o consenso em sistemas distribuídos assíncronos (puros) nos diz que não podemos resolver problemas que queremos resolver em sistemas distribuídos assíncronos (puros) sem algumas "coisas" adicionais. Isso leva a modelos assíncronos, onde podemos resolver consensos, por exemplo, algoritmos aleatórios, detectores de falhas, modelos de sincronia parcial, etc.

Essa também é a razão pela qual, na prática, algoritmos que resolvem consensos como o Paxos de Lamport, o Chubby do Google, o Apache ZooKeeper e, mais recentemente, o Raft estão no centro dos sistemas distribuídos, onde geralmente queremos replicar um estado entre os servidores.

Kaveh
fonte
0

Eu apenas acrescentaria que a natureza da computação está se tornando cada vez mais distribuída na pilha: muitas CPUs, muitos processos em uma máquina, muitas máquinas conectadas por LANs, muitas LANs conectadas por Internet.

Isso torna o problema do estado comum (distribuído / global) primordial - cada algoritmo assume determinado estado e se a computação deve ser executada em mais de um local, o estado também deve ser distribuído.

Artigos influentes ( Paxos e, mais recentemente, Raft ) nesse domínio foram publicados após o artigo que você está citando. Ambos abordam as questões de consenso na presença de algumas falhas.

Erros bizantinos podem ser evitados em sistemas distribuídos usando poucas abordagens.

Dê uma olhada na entrada da Wikipedia sobre Tolerância a falhas bizantinas .

diginoise
fonte
O resultado da impossibilidade de FLP se aplica mesmo na configuração da falha mais básica (falha), então não tenho certeza de qual é o objetivo do parágrafo sobre como evitar falhas bizantinas. Observe que, se não temos falhas, o consenso é bastante fácil: um processo fixo transmite seu valor e cada processo decide esse valor assim que é recebido.
22416 Kaveh