Ich habe mehrere Server, die zu bestimmten Zeiten geplante Jobs ausführen müssen.Sicherstellen, dass ein einzelner Server eine Task ausführt
Die Jobs sind in einer Datenbank definiert, mit der jeder Server kommuniziert. Ich muss sicherstellen, dass ein Job von NUR einem Server ausgeführt wird.
So dieses Szenario vorstellen:
Ein Job einige Zeit T in Zukunft geplant ist.
Bei T, beide Server aufwachen und führen Sie die folgende Abfrage:
update messages set claimedBy = <server_id> where claimedBy = null and timeToRun = <the scheduled time> limit 10
Jeder Server führt seine Arbeit und am Ende setzt die
processed
Spaltetrue
, so dass wir wissen, dass es tatsächlich verarbeitet wurde (Diese wird helfen, wenn ein Server abstürzt etc.).
Wie klingt dieses Schema? Siehst du irgendwas falsch damit?
Oder vielleicht ist es eine bessere Idee, einen Server zu haben, die andere „koordiniert“ durch die Jobs sie vorbei, so dass das Problem existiert nicht?