Wenn Sie eine Aufgabe hatten, die Sie nur einmal auf einem Cluster von Servern ausführen wollten, was wäre der beste Weg, um dies in regelmäßigen Abständen zu erreichen? In diesem Fall besteht die Definition von Cluster aus zwei oder mehr identischen Servern mit verteilten Sitzungen, die sich hinter einem Lastenausgleich befinden.
Anwendungsfall: Sie haben eine Aufgabe, deren Ausführung teuer ist und die nur einmal pro Stunde ausgeführt werden sollte. Dieser Job kann beispielsweise eine Reihe von Datensätzen durchlaufen und deren Status aktualisieren.
- Im schlimmsten Fall werden Ihre Daten ungültig, wenn der Job zweimal ausgeführt wird.
- Das beste Szenario ist, dass der Job auf allen Servern Ressourcen verbraucht.
Zusammenfassung der Anforderungen:
- Der Job muss weiterhin ausgeführt werden, auch wenn einer der Knoten inaktiv ist.
- Der Job darf nur einmal pro Zeitplan ausgeführt werden.
- Wenn mehrere Jobs gleichzeitig oder zu überlappenden Zeiten geplant sind, wird die Anzahl der ausgeführten Jobs gleichmäßig auf die Server verteilt.
- Die Maschinen müssen dieselbe Codebasis haben und über NTP synchronisiert werden.
- Die Konfiguration kann je nach Umgebungsvariablen zwischen Knoten und Knoten unterschiedlich sein.
- Der Job muss pünktlich oder innerhalb eines bestimmten Intervalls der zugewiesenen Zeit beginnen. (sagen wir zum Beispiel 5 Minuten)
Mögliche Lösungen
- Legen Sie einen Knoten als Masterknoten fest. Dies funktioniert nicht, da der oben angegebene Wert 1 verletzt.
- Fordern Sie den Load Balancer an, um den Job zu starten. Leider hat dies den Nebeneffekt, dass mehrere Jobs, die gleichzeitig ausgeführt werden, möglicherweise alle auf demselben Computer ausgeführt werden.
Dies müsste in Java in einem Servlet-Container ausgeführt werden. Es codiert jedoch nicht die Jobs, die ich suche.
Dies ist sicherlich ein gelöstes Problem mit der bekannt besten Lösung.
Verwandte Frage. /programming/5949038/schedule-job-executes-twice-on-cluster
Dies ist kein Duplikat, da die Lösung gemäß den oben angegebenen fünf Anforderungen nicht ausreicht. Die am besten bewertete Lösung weist ein Rassenproblem auf und die zweite Lösung verstößt gegen Anforderung 3