Also hier ist mein Problem:
Ich habe mehrere verschiedene Konfigurationsserver. Ich habe verschiedene Berechnungen (Jobs); Ich kann vorhersagen, wie lange ungefähr jeder Job dauern wird, bis er abgeschlossen wird. Außerdem habe ich Prioritäten. Meine Frage ist, wie alle Maschinen 99-100% geladen und die Jobs optimal geplant werden.
Jede Maschine kann mehrere Berechnungen gleichzeitig durchführen. Aufträge werden an die Maschine gesendet. Die zentrale Maschine kennt die aktuelle Belastung jeder Maschine. Außerdem möchte ich hier eine Art maschinelles Lernen zuordnen, da ich Statistiken über jeden Job (angefangen, fertig, CPU - Auslastung etc.) Kennen werde.
Wie kann ich Aufträge (Berechnungen) bestmöglich verteilen und dabei die Prioritäten berücksichtigen?
Irgendwelche Vorschläge, Ideen oder Algorithmen?
FYI: Meine Plattform .NET.
Als alternativen Ansatz könnten Sie die Spitzenleistungsschätzwerte jeder Maschine zum Planen von Aufträgen verwenden. Dies kann nur sehr effektiv sein, wenn Sie die CPU-Laufzeitleistung eines Systems mit Lastenausgleich in Betracht ziehen. Probleme bezüglich E / A, Größe des Clusters, Netzwerkleistung, Typen des Speichermodells usw. werden bei diesem Ansatz vernachlässigt. Werfen Sie einen Blick auf Ссылка
Ein Vorschlag für einen genaueren Ansatz (nahezu ausgeglichene Lastverteilung) wird Algorithmus sein - Computerarchitektur abhängig. In diesem Fall kann Job mit höherer Priorität auf den besten Server geplant werden, der seine Anforderungen erfüllt. Sie müssen jedoch zuerst eine optimale Zuordnung von Jobs zum Server ermitteln. Sie können auch einige Methoden der OS-Scheduling-Algorithmen auf Multiprozessoren (nicht auf Uniprozessoren) anwenden. Ich hoffe, Sie finden das hilfreich.
Sieht so aus, als ob das sehr wenig mit .NET zu tun hat.
Aber denken Sie an Ihre Maschinen als "Arbeiter-Threads", erstellen Sie einen Pool verfügbarer Maschinen, die auf der verfügbaren CPU (oder einer anderen wichtigen Ressource) bestellt werden, und verwenden Sie dann Ihr Wissen für jede Aufgabe, um jeden Job auf die am besten geeignete Maschine zu übertragen.
Wenn Sie alle Jobs im Voraus kennen, können Sie wahrscheinlich einen "Best Fit" -Algorithmus verwenden, um sie in der richtigen Reihenfolge auf den richtigen Rechnern zu planen. Sie können sich auch die Algorithmen für den Schneidstoffschnitt ansehen. Ссылка ...
Microsoft hat vor kurzem ein Papier auf seinem Quincy-Scheduler veröffentlicht. Wenn Sie lediglich die CPU-Auslastung optimieren, kann ein sehr einfacher Solver das globale Optimum finden. Wenn Sie Optimierung über mehrere Achsen benötigen, wird der Problemraum offensichtlich komplizierter.
Wie groß ist Ihr Cluster? Wie gehen Sie mit der Optimierung von Fehlerfällen um? Sind sie wichtig? Gibt es IO? Haben Daten eine Festplattenaffinität? Gibt es mehr als einen Ort, um ein Stück Arbeit zu erledigen? Alle Dinge zu beachten.
Tags und Links algorithm machine-learning load-balancing