Por que não conseguimos desenvolver uma teoria da complexidade unificada da computação distribuída?


41

O campo da computação distribuída ficou muito aquém do desenvolvimento de uma única teoria matemática para descrever algoritmos distribuídos. Existem vários 'modelos' e estruturas de computação distribuída que simplesmente não são compatíveis entre si. A pura explosão de propriedades temporais variáveis ​​(assincronia, sincronia, sincronia parcial), várias primitivas de comunicação (passagem de mensagens vs. memória compartilhada, broadcast vs. unicast), modelos de múltiplas falhas (falha de parada, recuperação de falha, envio de omissão, bizantino e assim por diante) on) nos deixou um número intratável de modelos, estruturas e metodologias de sistema, que comparar resultados de solvabilidade relativos e limites mais baixos entre esses modelos e estruturas se tornou árduo, intratável e, às vezes, impossível.

Minha pergunta é muito simples, por que isso acontece? O que há de tão fundamentalmente diferente na computação distribuída (de sua contraparte seqüencial) que não conseguimos coletar a pesquisa em uma teoria unificada da computação distribuída? Com a computação seqüencial, as Máquinas de Turing, as Funções Recursivas e o Cálculo Lambda são todos equivalentes. Foi apenas um golpe de sorte ou fizemos realmente um bom trabalho ao encapsular a computação seqüencial de uma maneira que ainda está para ser realizada com a computação distribuída?

Em outras palavras, a computação distribuída é inerentemente inflexível para uma teoria elegante (e, em caso afirmativo, como e por quê?), Ou simplesmente não somos inteligentes o suficiente para descobrir tal teoria?

A única referência que pude encontrar que aborda esse problema é: " Avaliando duas décadas de pesquisa em teoria da computação distribuída " por Fischer e Merritt DOI: 10.1007 / s00446-003-0096-6

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

Respostas:


26

Minha opinião é que o modelo de computação da máquina de Turing, motivado por abstratos, era uma boa aproximação da tecnologia até muito recentemente, enquanto os modelos de computação distribuída, desde o início, foram motivados pelo mundo real, que é sempre mais confuso do que as abstrações.

De, digamos, 1940-1995, o tamanho das instâncias de problemas, a relativa "falta de importância" do paralelismo e da concorrência e a macroescala de dispositivos de computação "conspiraram" para manter as máquinas de Turing uma excelente aproximação dos computadores do mundo real. No entanto, quando você começa a lidar com conjuntos de dados maciços, necessidade onipresente de simultaneidade, biologia por meio de lentes algorítmicas etc., fica muito menos claro se existe um modelo "intuitivo" de computação. Talvez problemas difíceis em um modelo não sejam difíceis - estritamente menos computacionalmente complexos - em outro. Portanto, acredito que a complexidade computacional convencional finalmente está alcançando (!) A computação distribuída, começando a considerar vários modelos de estruturas de computação e dados, motivados por considerações do mundo real.


7
Considere também as questões de definição dos respectivos campos. "Suponha que você possa calcular perfeitamente. Quais são os limites do que você pode e não pode fazer?" vs. "Suponha que você tenha um canal, processador ou falha com um adversário. Como você pode calcular com êxito quando se depara com esses obstáculos?" A primeira pergunta tem mais chances de gerar respostas "limpas". O segundo é um pedido para cientificamente desarrumar.
Aaron Sterling

21

Eu responderei isso da perspectiva de problemas clássicos de gráfico (ou problemas de entrada / saída): temos uma rede, cada nó recebe algo como entrada e cada nó deve produzir algo como saída. Eu acho que isso é o mais próximo do mundo da complexidade computacional tradicional.

Estou certamente tendenciosa, mas eu acho que neste cenário, não é um simples e modelo bastante comumente usado de computação distribuída: algoritmos distribuídos síncronos , com a definição que time = número de rodadas síncronos em execução . Na terminologia da Peleg, esse é o modelo LOCAL .

Esse modelo é bom, pois possui muito poucas "partes móveis", sem parâmetros, etc. No entanto, é muito concreto: faz sentido dizer que o tempo de execução de um algoritmo é exatamente 15 neste modelo. E você pode provar limites inferiores incondicionais, teóricos da informação: dessa perspectiva, a complexidade distribuída de muitos problemas de gráfico (por exemplo, coloração de gráfico) é bastante bem compreendida.

Este modelo também fornece uma abordagem unificada para muitos aspectos da computação distribuída:

  • Passagem de mensagens x memória compartilhada, broadcast x unicast: irrelevante neste modelo.
  • Seu sistema do mundo real é assíncrono? Não tem problema, basta conectar o sincronizador . A complexidade do tempo (com definições adequadas) não é afetada.α
  • Você gostaria de ter um algoritmo para redes dinâmicas ou gostaria de se recuperar de falhas? Bem, se o seu algoritmo síncrono é determinístico, você pode usá-lo para construir um algoritmo auto-estabilizador . Novamente, a complexidade do tempo não é afetada.

Agora, tudo isso é bom, desde que você estude problemas "realmente distribuídos" no sentido de que o tempo de execução do seu algoritmo é menor que o diâmetro do gráfico , ou seja, nenhum nó precisa ter informações completas sobre a estrutura do gráfico. No entanto, também existem muitos problemas que são inerentemente globais: o algoritmo mais rápido nesse modelo tem um tempo de execução linear no diâmetro do gráfico. No estudo desses problemas, o modelo acima não faz mais sentido, e precisamos recorrer a outra coisa. Normalmente, começa-se a prestar atenção ao número total de mensagens ou bits comunicados na rede. Essa é uma das razões pelas quais temos vários modelos diferentes.


Então, é claro, temos o problema de que a comunidade de computação distribuída é na verdade duas comunidades diferentes, com surpreendentemente poucas coisas em comum . Se você amontoar todos os modelos de duas comunidades, que vão certamente olhar um pouco confuso ... Minha resposta acima está relacionada com apenas uma metade da comunidade; Eu acredito que os outros irão preencher em relação à outra metade.


Se eu entendi isso corretamente, o ponto é que existe uma teoria elegante apenas para sistemas síncronos e não muito mais. Com relação a sistemas diferentes dos síncronos, estamos confluindo problemas / focos de duas comunidades diferentes, e isso apresenta questões metodológicas com o desenvolvimento de uma única teoria. Eu entendi seus argumentos corretamente?
Srikanth Sastry

Obrigado pela resposta muito informativa. Eu aceitaria isso como a resposta.
Mohammad Al-Turkistany

5

Uma idéia romântica para capturar vários modelos de computação distribuída foi através da topologia algébrica. A idéia central é construir complexos simples, permitindo que os pontos sejam estados do processo, cada um rotulado com um ID do processo. Esta é uma cartilha sobre o tópico. A resposta mais próxima de sua pergunta provavelmente foi abordada por Eli Gafni em seu artigo - Computação distribuída - Um vislumbre de uma teoria. Em seu artigo, ele mostra simulações de como começar com memória compartilhada assíncrona para dois ou três processadores (para parada de falha e bizantino) - mostra como aplicar isso ao modelo de transmissão de mensagens. Crucial para entender suas simulações é a noção de visualizar uma computação distribuída topologicamente


4

Eu acho que a situação parece bem diferente se vista em contexto: a partir dos primeiros trabalhos e os resultados da impossibilidade no acordo bizantino ( PSL80 LSP82 FLP85), ficou claro em breve que problemas fundamentais na computação distribuída só podem ser resolvidos com suposições estritas de sincronia e um alto grau de redundância. Como esses limites inferiores dos recursos teóricos incondicionais foram considerados inviáveis ​​para quaisquer fins práticos, a pesquisa se concentrou no desenvolvimento de modelos mais refinados que permitiam concessões cada vez mais refinadas de premissas (garantias de tempo ou modos de falha, por exemplo) vs. garantias (ou seja, número de falhas simultâneas de que tipos e que tipo de componentes são tolerados (por exemplo, processadores, links), a fim de fornecer aos projetistas do sistema as ferramentas para encontrar a solução certa para o sistema em questão.


Entendo que os modelos refinados foram introduzidos para entender a resolubilidade 'prática' dos problemas no espaço distribuído. Seria de esperar que esses modelos refinados se organizassem perfeitamente em uma hierarquia no que diz respeito à resolubilidade, complexidade de tempo e complexidade de mensagens. Infelizmente, esse não é o caso. Minha pergunta aqui é: qual é o motivo dessa balcanização? Se houver algum atributo inerente à computação distribuída, quais são eles?
Srikanth Sastry
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.