Was ist verteilte Programmierung?
Verteilte Programmierung ist eine Form der parallelen Programmierung oder des parallelen Rechnens. Parallele Programmierung umfasst Computer und Rechnereinheiten in Computern, die gleichzeitig an einem bestimmten Problem arbeiten, z. B. an der Vorhersage des Wetters von morgen. Die Recheneinheiten können sehr nah beieinander liegen und koordiniert sein oder voneinander entfernt sein. Wenn die Recheneinheiten getrennt sind, spricht man von verteilter Programmierung. In einem solchen Szenario unterscheiden sich die Recheneinheiten sehr oft voneinander, und das Betriebssystem und die Netzwerkeinrichtung unterscheiden sich ebenfalls, was die Programmierung der Rechenaktivität besonders schwierig macht.
Wenn ein Problem auf verteilte Weise gelöst wird, muss das Programm aufgeteilt werden, damit Teile des Programms auf den verschiedenen Recheneinheiten ausgeführt werden können. Diese Teile werden oft als "Prozesse" bezeichnet. Die Prozesse laufen gleichzeitig ab, müssen aber Inputs und Ergebnisse miteinander kommunizieren. Wenn die Prozesse auf unterschiedlicher Hardware ausgeführt werden, z. B. ein Teil unter Intel und ein anderer unter SUN, müssen die Programme unterschiedlich kompiliert und optimiert werden.
Eine Möglichkeit, ein hinreichend schwieriges Problem zu lösen, besteht darin, die Eingabeteile aufzuteilen und die verschiedenen Recheneinheiten mit demselben Algorithmus, dem Regelsatz oder den Schritten zur Problemlösung an den verschiedenen Teilen arbeiten zu lassen. Um beispielsweise ein Genom von 10.000 Paaren zu knacken, könnten die ersten 1.000 Paare der ersten Recheneinheit, die zweiten 1.000 Paare der zweiten Recheneinheit usw. zugewiesen werden, wobei alle denselben Algorithmus verwenden. Bei der verteilten Programmierung besteht ein Vorteil darin, dass die verschiedenen Recheneinheiten unterschiedliche Algorithmen ausführen können, um das gleiche Problem zu lösen, was zu einer erheblich besseren Lösung führt. Dies ist vergleichbar mit dem Lösen eines Puzzles, bei dem einige Leute die Grenze zusammensetzen, während andere Teile einer bestimmten Farbe zusammensetzen.
Die Koordination der verteilten Rechenprozesse kann eine besonders schwierige Aufgabe sein. Einige Rechnereinheiten können ausfallen oder unterbrochen werden, um andere Arbeiten auszuführen. Nachrichten, die die Eingaben oder die Ergebnisse der Berechnung enthalten, erreichen möglicherweise ihre Ziele nicht. Wenn die Programme naiv geschrieben sind, kann der Verlust einer Rechnereinheit oder einiger Nachrichten dazu führen, dass die gesamte Gruppe von Computern hängen bleibt.
Bei der verteilten Programmierung kann ein Prozess der Steuerungsprozess sein, der im Wesentlichen die Arbeit der anderen Prozesse erledigt, oder alle Prozesse können auf Peer-to-Peer-Weise funktionieren, ohne dass ein Prozess der "Master" ist. Einige Beispiele für Probleme bei der verteilten Programmierung sind die Analyse geologischer Daten für Ressourcen wie Erdöl, die Modellierung von Proteinen und biologischen Molekülen, das Knacken codierter Nachrichten und militärische Simulationen. Das SETI-Projekt zur Suche nach intelligentem außerirdischem Leben aus den von der Erde empfangenen Funknachrichten ist vielleicht eines der bekanntesten Beispiele.