Das Gebiet des verteilten Rechnens ist bei der Entwicklung einer einzelnen mathematischen Theorie zur Beschreibung verteilter Algorithmen völlig unzulänglich. Es gibt verschiedene Modelle und Frameworks für verteilte Berechnungen, die einfach nicht miteinander kompatibel sind. Die bloße Explosion variierender zeitlicher Eigenschaften (Asynchronität, Synchronität, Teilsynchronität), verschiedener Kommunikationsprimitiven (Nachrichtenübergabe vs. gemeinsamer Speicher, Broadcast vs. Unicast), multipler Fehlermodelle (Fail-Stop, Crash-Recovery, Sendeauslassung, byzantinisch usw.) on) hat uns eine unlösbare Anzahl von Systemmodellen, Frameworks und Methoden hinterlassen, die es uns erschwert, unlösbar und manchmal unmöglich gemacht haben, relative Lösbarkeitsergebnisse und Untergrenzen über diese Modelle und Frameworks hinweg zu vergleichen.
Meine Frage ist ganz einfach, warum ist das so? Was ist an verteiltem Rechnen so grundlegend anders (als an sequenziellem Rechnen), dass wir die Forschung nicht zu einer einheitlichen Theorie des verteilten Rechnens zusammenfassen konnten? Beim sequentiellen Rechnen wurden Turing Machines, Recursive Functions und Lambda Calculus als gleichwertig eingestuft. War dies nur ein Glücksfall oder haben wir wirklich gute Arbeit geleistet, um sequentielles Computing auf eine Weise zu verkapseln, die mit verteiltem Computing erst noch erreicht werden kann?
Mit anderen Worten, ist verteiltes Rechnen von Natur aus einer eleganten Theorie nicht gewachsen (und wenn ja, wie und warum?), Oder sind wir einfach nicht schlau genug, um eine solche Theorie zu entdecken?
Die einzige Referenz, die ich finden konnte, um dieses Problem anzugehen, ist: " Bewertung von zwei Jahrzehnten verteilter Computertheorieforschung " von Fischer und Merritt DOI: 10.1007 / s00446-003-0096-6
Hinweise oder Ausstellungen wären sehr hilfreich.
quelle
Ich werde dies aus der Perspektive klassischer Graphprobleme (oder Eingabe- / Ausgabeprobleme) beantworten: Wir haben ein Netzwerk, jeder Knoten erhält etwas als Eingabe und jeder Knoten muss etwas als Ausgabe produzieren. Ich vermute, dies kommt der Welt der traditionellen Rechenkomplexität am nächsten.
Ich bin sicher voreingenommen, aber ich denke , dass in dieser Einstellung, es ist eine einfache und ziemlich häufig verwendete Modell der verteilten Rechen: Synchron verteilte Algorithmen , mit der Definition , dass Zeit = Anzahl der synchronen Runden laufen . In der Terminologie von Peleg ist dies das LOKALE Modell.
Dieses Modell ist schön, da es nur sehr wenige "bewegliche Teile", keine Parameter usw. enthält. Dennoch ist es sehr konkret: Es ist sinnvoll zu sagen, dass die Laufzeit eines Algorithmus in diesem Modell genau 15 beträgt. Und Sie können bedingungslose, informationstheoretische Untergrenzen nachweisen: Aus dieser Perspektive ist die verteilte Komplexität vieler Grafikprobleme (z. B. Grafikfärbung) ziemlich gut verstanden.
Dieses Modell bietet auch einen einheitlichen Ansatz für viele Aspekte des verteilten Rechnens:
Nun ist all dies in Ordnung, solange Sie Probleme untersuchen, die in dem Sinne "wirklich verteilt" sind, dass die Laufzeit Ihres Algorithmus kleiner als der Durchmesser des Graphen ist , dh, kein Knoten muss vollständige Informationen über die Struktur des Graphen haben Graph. Es gibt jedoch auch viele Probleme, die von Natur aus global sind: Der schnellste Algorithmus in diesem Modell hat eine Laufzeit, die im Durchmesser des Diagramms linear ist. Bei der Untersuchung dieser Probleme macht das obige Modell keinen Sinn mehr, und dann müssen wir auf etwas anderes zurückgreifen. Typischerweise beginnt man, auf die Gesamtzahl der im Netzwerk übertragenen Nachrichten oder Bits zu achten. Das ist ein Grund, warum wir verschiedene Modelle bekommen.
Dann haben wir natürlich das Problem, dass es sich bei der Distributed-Computing-Community tatsächlich um zwei verschiedene Communities handelt, die erstaunlich wenige Gemeinsamkeiten aufweisen . Wenn Sie alle Modelle aus zwei Communitys zusammenfassen, wird dies sicherlich etwas verwirrend aussehen. Meine Antwort oben bezieht sich nur auf eine Hälfte der Community. Ich vertraue darauf, dass andere die andere Hälfte besprechen.
quelle
Eine romantische Idee zur Erfassung verschiedener Modelle des verteilten Rechnens war die algebraische Topologie. Die Kernidee besteht darin, einfache Komplexe zu konstruieren, indem Punkte Prozesszustände sein lassen, die jeweils mit einer Prozess-ID gekennzeichnet sind. Dies ist eine Einführung in das Thema. Die naheliegendste Antwort auf Ihre Frage wurde wahrscheinlich von Eli Gafni in seinem Aufsatz "Distributed Computing - Ein Schimmer einer Theorie" angesprochen. In seiner Arbeit zeigt er Simulationen, wie mit asynchronem Shared Memory für zwei bis drei Prozessoren (für Fail Stop und Byzantine) begonnen werden kann. Er zeigt, wie dies auf das Message-Passing-Modell angewendet werden kann. Entscheidend für das Verständnis seiner Simulationen ist die topologische Betrachtung eines verteilten Rechners
quelle
Ich denke, die Situation sieht im Kontext ganz anders aus: Ausgehend von den frühen Arbeiten und den Unmöglichkeitsergebnissen des byzantinischen Abkommens ( PSL80 LSP82 FLP85)) war es bald klar, dass grundlegende Probleme im verteilten Rechnen nur mit strengen Synchronitätsannahmen und einem hohen Grad an Redundanz überhaupt gelöst werden können. Da diese unbedingten theoretischen Ressourcenuntergrenzen für alle praktischen Zwecke als nicht realisierbar angesehen wurden, konzentrierte sich die Forschung auf die Entwicklung verfeinerter Modelle, die einen immer feinkörnigeren Kompromiss zwischen Annahmen (zum Beispiel Zeitgarantien oder Ausfallmodi) und Garantien (dh Anzahl der Garantien) ermöglichten Gleichzeitige Fehler welcher Art auf welcher Art von Komponenten toleriert werden (z. B. Prozessoren, Links), um den Systementwicklern die Werkzeuge zu geben, um den richtigen Kompromiss für das jeweilige System zu finden.
quelle