Vorweg: Ich möchte nicht, dass ihr meine Hausaufgaben macht, sondern Erkenntnisse sammeln.
Eine Kommilitonin und ich haben den Auftrag, irgend ein verteiltes System zu entwickeln und entschieden uns in unserem jugendlichen Leichtsinn für verteiltes Sortieren.
Wir haben eine Anwendung geschrieben, die Strings aus einer Datei ausliest, sie nach QuickSort sortiert und sortiert in eine Zieldatei schreibt.
Darüber hinaus liest die Anwendung aus einer weiteren Datei beliebig viele IP Adressen und Ports aus, von Servern, die ebenfalls einen Quicksortalgorhitmus implementiert haben.
Jede Rekursionstiefe in der Anwendung nimmt ein Pivot-Element, sortiert die übrigen Elemente in zwei Vectoren nach größer und kleiner als Pivot-Element, startet für den Vector mit der größeren Elementanzahl die nächste Rekursionstiefe und gibt den anderen Vektor an einen Server ab, dass der sich darum kümmert.
Auf allen beteiligten Rechnern läuft die gleiche Anwendung. Das heißt, dass die Server wiederum Server aufrufen, um Teile der Arbeit abzugeben. So kann es passieren, dass ein Server etwas abgibt, was zur Hälfte wieder zurück kommt.
So entsteht zu viel Netzwerktraffic, sodass das verteilte Sortieren (mit 2 Rechnern) vier mal länger dauert, als das Sortieren auf nur einem Rechner.
Erkenntnis:
Das Hin- und Herschicken ist Overhead.
Idee:
Zwei unterschiedliche Anwendungen:
Ein Client, der die Datei einsliest und erstmal alleine rechnet, so lange, bis er gleich viele oder genauso viele zu sortierende Vectoren hat wie Server. Dann schickt er je einen Vector an je einen Server und übernimmt die übrigen Vectoren selbst.
Mehrere Server, die einen Vector empfangen, komplett nach QuickSort sortieren und zurückliefern.
Beispiel (es wird von 3 verfügbaren Servern ausgegangen)
Angst:
Dass auch hier das Sortieren auf einem Rechner schneller läuft, wegen Netzwerktraffic.
Frage:
Hat jemand von euch sich schonmal mit verteilten Algorithmen beschäftigt und kann uns Tips geben bzw. uns mit der Nase auf eine Schwachstelle stubsen?
lg Stephan
Eine Kommilitonin und ich haben den Auftrag, irgend ein verteiltes System zu entwickeln und entschieden uns in unserem jugendlichen Leichtsinn für verteiltes Sortieren.
Wir haben eine Anwendung geschrieben, die Strings aus einer Datei ausliest, sie nach QuickSort sortiert und sortiert in eine Zieldatei schreibt.
Darüber hinaus liest die Anwendung aus einer weiteren Datei beliebig viele IP Adressen und Ports aus, von Servern, die ebenfalls einen Quicksortalgorhitmus implementiert haben.
Jede Rekursionstiefe in der Anwendung nimmt ein Pivot-Element, sortiert die übrigen Elemente in zwei Vectoren nach größer und kleiner als Pivot-Element, startet für den Vector mit der größeren Elementanzahl die nächste Rekursionstiefe und gibt den anderen Vektor an einen Server ab, dass der sich darum kümmert.
Auf allen beteiligten Rechnern läuft die gleiche Anwendung. Das heißt, dass die Server wiederum Server aufrufen, um Teile der Arbeit abzugeben. So kann es passieren, dass ein Server etwas abgibt, was zur Hälfte wieder zurück kommt.
So entsteht zu viel Netzwerktraffic, sodass das verteilte Sortieren (mit 2 Rechnern) vier mal länger dauert, als das Sortieren auf nur einem Rechner.
Erkenntnis:
Das Hin- und Herschicken ist Overhead.
Idee:
Zwei unterschiedliche Anwendungen:
Ein Client, der die Datei einsliest und erstmal alleine rechnet, so lange, bis er gleich viele oder genauso viele zu sortierende Vectoren hat wie Server. Dann schickt er je einen Vector an je einen Server und übernimmt die übrigen Vectoren selbst.
Mehrere Server, die einen Vector empfangen, komplett nach QuickSort sortieren und zurückliefern.
Beispiel (es wird von 3 verfügbaren Servern ausgegangen)
Angst:
Dass auch hier das Sortieren auf einem Rechner schneller läuft, wegen Netzwerktraffic.
Frage:
Hat jemand von euch sich schonmal mit verteilten Algorithmen beschäftigt und kann uns Tips geben bzw. uns mit der Nase auf eine Schwachstelle stubsen?
lg Stephan