Verteiltes Rechnen

D

Dkl764

Tag zusammen,
ich habe folgendes Problem. Ich habe einen Zahlenbereich:
von 0000000000000000 bis 1999999999999999

Nun habe ich XXX Clients.

Es können dauerhaft Clients hinzukommen oder UNERWARTET verschwinden.

Nun muss dieser Zahlenbereich auf die Clients aufgeteilt werden. Hat jemand einen Vorschlag, wie man das am besten verteilen kann?
Vorallem: Wie soll vorgegangen werden, sobald sich ein neuer Client meldet oder ein Client unerwartet sich nicht mehr meldet? Dann muss der Zahlenbereich des weggefallenen Clients neu auf andere Clients verteilt werden.
 
Zu aller erst benötigt man natürlich sowas wie einen Heartbeat. Also immer Meldungen von den Clients ob sie noch da sind oder nicht und natürlich eine Zuteilung welcher Client welchen Zahlenbereich behandelt.
Fällt dann ein Client weg so hast du recht. Dann muss sein Zahlenbereich auf andere verteilt werden. Davon ausgegangen, dass immer wieder neue hinzukommen kannst du den Zahlenbereich "aufbewahren"für einen Client der demnächst hinzu stoßen wird. Sollte keiner hinzu stoßen kannst du den Zahlenbereich auch einem Client überlassen der als nächstes mit seinem fertig wird.

Ein weiteres Problem ist, dass sollte ein Client wegfallen auch dessen Ergebnisse weg sind. Um das zu verhindern sollte man jeden zu vergebenden Zahlenraum nochmals in kleinere Zahlenräume unterteilen von denen dann zwischendurch immer die Ergebnisse abgeliefert werden.

Die schweren Fälle einer solchen Anwendung sind natürlich Start, Ende und Zeiten in denen sich wenige Clients beteiligen. Zum Start ist vor allem die Frage entscheidend wie viele Clients sich vermutlich beteiligen werden. Weiß man dies nicht, so sollten die Zahlenbereiche so gewählt werden, dass diese in absehbarer Zeit (z.B. 5 min) abgearbeitet werden können. Dadurch lässt sich ein einzelner Client gut auslasten und sollten weitere hinzukommen so kann man diese auch auslasten.
Was das Ende betrifft, so sollte, sobald dieses absehbar ist, also alle Zahlenbereiche verteilt sind und die Fertigstellung nahe rückt keine weitere Aufsplittung der Zahlenbereiche erfolgen, da es praktisch überflüssig ist jedem Client nur noch eine einzelne Zahl zuzuweisen die er zu bearbeiten hat. Für dieses Szenario wäre der Overhead größer als die Beschleunigung durch weitere Clients.

Für den Fall, dass sich viel zu wenige Clients beteiligen würde ich so vorgehen wie im Startzustand, da die Zustände praktisch identisch sind: zu wenige Teilnehmer und es ist ungewiss wie viele noch kommen werden.

Über den Fall, dass so viele Clients zusammenkommen, dass nicht genügend Zahlbereiche vorhanden sind mache ich mir zu dieser Uhrzeit mal keine Gedanken mehr.
 
Die Antwort von Technoblade gibt eine Menge Ideen zur Lösung. Kostenloses consulting gibts hier nicht, streng mal selbst deine Birne an.
 
Zurück