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.
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.
quelle
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.
quelle
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:
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.
quelle
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
quelle
Wir hatten einen Kurs über "verteilte Systeme" und obwohl ich mich nicht genau an die Definition erinnere, war dies in etwa so:
(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.
quelle
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".
quelle