Was genau ist verteiltes Rechnen? [geschlossen]


14

Was genau macht verteiltes Rechnen aus und wie unterscheidet es sich von parallelisiertem / simultanem Rechnen?

Stellt die Verwendung von Mutexen und Semaphoren in mehreren parallelen Threads, die versuchen, den Zugriff auf eine Ressource zu synchronisieren, ein Problem im Bereich des verteilten Rechnens dar?

Antworten:


8

Was genau ist verteiltes Rechnen?

Distributed Computing ist eine von Natur aus parallele Sammlung von Verarbeitungselementen, die miteinander kommunizieren, um ein oder mehrere Probleme zu lösen. Diese Verarbeitungselemente sind ausreichend voneinander getrennt, so dass es nicht praktikabel ist, eine zuverlässige und zeitnahe Nachrichtenstruktur zwischen ihnen aufzubauen, so dass es unmöglich wird, eine globale Kenntnis des Systemzustands zu erhalten. Besondere Merkmale mit verteilten Systemen von Messaging sind , dass Nachrichten werden verloren gehen, werden verstümmelt erhalten, werden verzögert bekommen - Lösungen in diesem Bereich Rechnung zu nehmen. Bei verteilter Programmierung geht es also um den Umgang mit Netzwerken und Nachrichten, Parallelität und einen Mangel an globalen Informationen.

Die einfachste Methode, um die Probleme zu umgehen, besteht darin, ein einzelnes Verarbeitungselement als speziell, dh für eine bestimmte Information, maßgeblich zu kennzeichnen. Dann können die anderen Elemente entweder jedes Mal darauf zurückgreifen oder die Informationen zwischenspeichern und hoffen, dass sie nicht veraltet sind (da sie nicht damit rechnen können, über Änderungen informiert zu werden). Dies ist die klassische Client / Server-Architektur.

Bei Internet-Computing handelt es sich um verteiltes Computing, ohne jedoch steuern zu können, was die meisten verteilten Knoten tatsächlich tun.

Stellen mehrere parallele Threads, die versuchen, den Zugriff auf eine Ressource zu synchronisieren, ein Problem im Bereich des verteilten Rechnens dar?

Sie stellen eine mögliche Lösung dar , die beim Erstellen des Client / Server-Modells hilfreich ist, jedoch zu Lasten einer potenziell dramatischen Zunahme der Ressourcenkonflikte. Für das Lesen ist das keine große Sache (vorausgesetzt, es gibt genügend Hardware), aber für das Schreiben ist es in der Tat ein großes Problem.

Was Sie jedoch vermeiden möchten, sind verteilte Sperren. Das Fehlen einer zuverlässigen und zeitnahen Nachrichtenübermittlung erschwert verteilte Entscheidungsprotokolle, es sei denn, Sie verwenden ein ähnliches Protokoll wie das Paxos-Protokoll . Das grundlegende Problem beim verteilten Rechnen ist, dass "Nachrichten schlechte Sachen passieren". Relativ niedrige Protokolle, wie TCP, verringern die Probleme, aber Sie können immer noch schwer hängen bleiben.


6

Stellen mehrere parallele Threads, die versuchen, den Zugriff auf eine Ressource zu synchronisieren, ein Problem im Bereich des verteilten Rechnens dar?

Dies ist der Fall, wenn diese Threads möglicherweise auf verschiedenen Computern ausgeführt werden oder sogar, wenn sie auf demselben Computer, jedoch in unterschiedlichen Prozessen ausgeführt werden.


1
Threads, die auf verschiedenen Computern ausgeführt werden, können im Prinzip nicht wie herkömmliche Mutexe und Semaphoren synchronisiert werden.
Jan Hudec

@ JanHudec Ich denke, das war der Punkt der Frage des Interviewers. Ohne atomare Test-and-Set- oder Compare-and-Swap-Anweisungen oder Shared Memory muss sich das verteilte Rechnen für die Synchronisation auf die Nachrichtenübertragung zwischen Computern verlassen. Glücklicherweise gibt es Algorithmen, die dies erreichen.
Caleb

Ich bin mit dem "Glück" nicht einverstanden. Die Algorithmen sind kompliziert und nicht fehlertolerant, daher sollten sie vermieden werden.
Jan Hudec

5

Distributed Computing ist ein Computersystem, dessen Verarbeitung auf verschiedenen Computern (dh auf einem verteilten System) stattfindet. Die einzelnen Programme kommunizieren über eine Reihe von Kommunikationskanälen miteinander. Diese Kanäle sind normalerweise Netzwerkverbindungen (z. B. TCP-Sockets), verwenden jedoch häufig andere Kommunikationsprotokolle und -geräte (wie DeviceNET, BACNet, SECS-2, Modbus usw.) oder sogar Protokolle, die speziell für ein bestimmtes Gerät erstellt wurden.

Verteilte Systeme sind normalerweise viel komplizierter als Systeme, die für die Ausführung auf einem einzelnen Computer ausgelegt sind. Zusätzlich zu Parallelitäts- und Ressourcensperrproblemen, mit denen Multithread-Anwendungen zu kämpfen haben, müssen verteilte Systeme Kommunikationsfehler und Fehler bei der Verarbeitung von Knoten behandeln. Transaktionen (und Rollbacks), für deren Ausführung mehrere Prozessoren erforderlich sind, können ebenfalls schwierig sein.

Verteilte Systeme nehmen viele Formen an und werden gegenwärtig in vielen Anwendungen verwendet. Webanwendungen sind verteilte Systeme. Ein N-Tiered-System verfügt normalerweise über mindestens N verschiedene Prozessoren (mit unterschiedlichen Anwendungen). Verteilte Systeme werden auch in vielen Fabrikautomationssystemen verwendet.

Der Artikel über verteiltes Rechnen in Wikipedia ist eine Lektüre wert.

Als Antwort auf Ihre Frage, ob eine Multithread-Anwendung eine verteilte Anwendung darstellt, wird das System nicht verteilt, wenn die Threads auf einem einzelnen Computer ausgeführt werden. Es muss einige der Probleme lösen, die verteilten Systemen inhärent sind, aber nicht alle.


3

Genau genommen ist "verteiltes Rechnen" jede Lösung, bei der eine einzelne Transaktion / Anforderung / Berechnung auf mehr als einem Computer verarbeitet wird.

Sie werden auch auf den Begriff "Verteilte Systeme" stoßen, der ein Sammelbegriff für Windows-, Unix- und andere kleine Systemserver ist, die ursprünglich außerhalb des zentralen Rechenzentrums bereitgestellt worden wären. Obwohl es heutzutage normal ist, dass diese Systeme im Rechenzentrum bereitgestellt werden, ist der Begriff geblieben.


3

Zur Beantwortung Ihrer allgemeinen Frage, was Distributed Computing ausmacht, empfehle ich den Artikel A Note on Distributed Computing von Ann Wollrath, Geoff Wyant, Jim Waldo und Samuel C. Kendall . Es befasst sich mit der jüngsten Geschichte verteilter Systeme und ihren Ausfällen und schlägt vor, dass verteiltes Rechnen ein anderes Denken über die damit verbundenen Probleme erfordert.

Obwohl in der Veröffentlichung weder Mutexe noch Semaphore erwähnt werden, bietet es wertvolle Einblicke in das ordnungsgemäße Engineering eines verteilten Softwaresystems.

Ich stimme @Caleb zu, warum Ihr Interviewer nach Mutexen und Semaphoren gefragt hat:

Dies ist der Fall, wenn diese Threads möglicherweise auf verschiedenen Computern ausgeführt werden oder sogar, wenn sie auf demselben Computer, jedoch in unterschiedlichen Prozessen ausgeführt werden.

Das einzige, was ich hinzufügen möchte, ist, dass Mutexe und Semaphore Low-Level-Locking-Primitive sind, mit denen Sie die Arbeit auf mehrere Computergeräte verteilen können. Ihr Betrieb ist (normalerweise) entscheidend für den Erfolg der Anwendung. Das hängt natürlich von der verwendeten Sprache und Technologie ab. Wenn Sie Erlang oder Scala verwenden, werden Sie wahrscheinlich die auf dem Actor-Modell basierende Parallelität anstelle der herkömmlichen, auf Sperren basierenden Parallelität verwenden.


2

Das Wort sagt alles. Sie müssen einige Rechenoperationen ausführen und wenn Sie Teile dieser Rechenoperationen so verteilen könnten, dass jede Rechenoperation unabhängig von der anderen Rechenoperation ausgeführt wird, kombinieren Sie das Ergebnis jeder Rechenoperation, um die Antwort der Hauptrechenoperation zu erhalten. Beispiel wäre: Map-Reduce


1

Wir hatten einen Kurs über "verteilte Systeme" und obwohl ich mich nicht genau an die Definition erinnere, war dies in etwa so:

  1. kann auf mehreren separaten Knoten ausgeführt werden, die über Nachrichten kommunizieren (Speicher kann nicht gemeinsam genutzt werden)
  2. Objekte können zwischen Knoten migriert werden
  3. Objekte behalten bei der Migration ihre Identität und können bei der Migration transparent angesprochen werden
  4. Objekte hängen nicht von dem Knoten ab, von dem sie erstellt wurden
  5. Das System kann Knoten hinzufügen und entfernen

(Ich glaube, es gab noch mehr und ich bin mir nicht sicher über den letzten Punkt)

Jetzt haben wir im Kurs gelernt, wie verteilte Transaktionen und verteilte Sperren implementiert werden. Die Lektion ist, dass die verteilte Sperre im Grunde genommen mithilfe von verteilten Transaktionen implementiert wird, was im Gegensatz zu den lokalen Transaktionen umgekehrt ist und von Natur aus nicht fehlertolerant ist, was eher den Zweck zunichte macht, ein verteiltes System zu haben.

Bearbeiten: Diese Definition ist für "verteiltes System" im engeren Sinne von Betriebssystem oder Datenbanksystem und im Gegensatz zu nur Client-Server-System. Alles, was die erste Bedingung erfüllt, kann in manchen Zusammenhängen als verteilt bezeichnet werden.

Zufällig entspricht die Definition dem Unterschied zwischen verteilten und traditionellen Versionskontrollsystemen, die alle mindestens Client-Server sind und oftmals auch repliziert werden.


Das ist ein ganz besonderer Stil des verteilten Rechnens. Es gibt andere, und das einzige, was sie wirklich teilen, ist der erste Punkt. Messaging ist entscheidend, die anderen ... nicht so sehr.
Donal Fellows

1
@DonalFellows: Nun, dies ist ein verteiltes System im Sinne eines Betriebssystems oder eines Datenbanksystems. Dort sind Migration und Fehlertoleranz die Hauptpunkte dafür. Distributed Computing ist alles, was auf mehreren Knoten ausgeführt wird.
Jan Hudec

Nun, in diesem Fall hätte es das Problem der Entscheidungsfindung abdecken müssen. In einem verteilten System ist das schwierig. (Außerdem machen die meisten wissenschaftlichen Arbeiten, die ich zu diesem Thema gesehen habe, völlig unrealistische Annahmen über die zugrunde liegende Graphentopologie und geben gültige, aber nutzlose Schlussfolgerungen.)
Donal Fellows

@DonalFellows: Der Kurs befasste sich natürlich mit der Entscheidungsfindung und all den Schlichtungs- und Split-Brain-Dingen (nicht zu tief, es war nur einleitend). Dies definiert jedoch nicht die Eigenschaft eines verteilten Systems. Es ist nur eine Hürde, die man überwinden muss, wenn man eine schaffen will.
Jan Hudec

0

Distributed Computing ist der "Non-Marketting" -Begriff für Enterprise Computing, den Sie in der Praxis möglicherweise noch viel mehr hören. Die allgemeine Idee, auf die andere hingewiesen haben, lautet jedoch "Sie verwenden mehr als einen Computer für die Arbeit".

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.