Ich arbeite derzeit an einer Anwendung (im Grunde ist es eine Art Ausführungs-Engine, die benutzerdefinierte Jobs ausführen und Ausgaben in Echtzeit generieren kann), die Rollback-Funktionen verarbeiten muss. Es mag verrückt klingen, aber es ist möglich, dass so etwas in der Anwendung vorhanden ist Niveau? zB vorstellen , einige Benutzer versucht , einen Job J1 laufen und sobald es gestartet wird , auszuführen er bearbeiten / ändern wollte,
- das hat die laufenden Job Mittel getötet werden,
- alle bisherigen Maßnahmen müssen rückgängig gemacht und werden
- Wieder- Führen Sie den Job J1 erneut aus
Ein paar Dinge, die mir in den Sinn kommen, sind, dass wir irgendwie irgendwo Anwendungszustände speichern oder pflegen müssen und dann das Rollback-Zeug zusammen mit den vorherigen Speicherpunkten aufrufen müssen. Ich habe nur wenige Artikel zum Rollback auf DB-Ebene gelesen, aber das Szenario passt in diesem Fall nicht, da es in einer Echtzeitumgebung funktionieren muss.
Ich bin jedoch nicht in der Lage, einen angemessenen Ansatz zu finden, wie vorzugehen ist und was sonst noch berücksichtigt werden sollte. Bitte lassen Sie mich wissen, wenn dies unklar klingt. Ich werde versuchen, wenn möglich weitere Informationen bereitzustellen.
Hilfe oder Rat?
Antworten:
Echtzeitsystem oder nicht, das Erinnerungsmuster ist ein ausgezeichneter Ausgangspunkt.
Ich habe den Wikipedia-Artikel ein wenig aufgelöst, um mich auf einige Punkte zu konzentrieren.
In Ihrem Szenario wird der Urheber Ihr primärer Anwendungscode sein, höchstwahrscheinlich an dem Punkt, an dem Jobs registriert werden und mit der Verarbeitung beginnen.
Der Hausmeister ist das, was Sie erstellen müssen, und kann eine Art Protokollierungssystem oder ein anderer Datenspeicher sein.
Das Andenken wird die relevante Information sein, die rückgängig gemacht und / oder wiederholt werden muss. Ich vermute, dass dies wie eine Jobbeschreibung aussieht, die wieder in die Verarbeitungswarteschlange gestellt werden kann.
Wenn Sie die vorhandenen Änderungen aus dem Job
J1
mit einer Datenbanktransaktion abschließen können, werden Ihre Rollback-Probleme behoben (all the action taken so far must be reverted
). Wenn ein Transaktions-Rollback auftritt, lösen Sie einen Anruf beim Caretaker aus, um den Job erneut in die Warteschlange zu stellenJ1
.Eine Sache, die Sie beachten sollten, ist die letzte Warnung in der Wikipedia-Zusammenfassung. Sie müssen sicherstellen, dass die Änderungen atomar sind und dass sie als zusammenhängende Menge angewendet oder zurückgesetzt werden können.
Ich bin mir nicht sicher, ob eine Echtzeitumgebung einen großen Einfluss darauf hat, wie Sie das Erinnerungsmuster implementieren. Wenn es Fristen für Aktivitäten gibt, müssen Sie möglicherweise einige der Änderungen profilieren, um sicherzustellen, dass das System in angemessener Zeit reagiert. Ich denke, ich würde zuerst die Funktionalität implementieren und dann überprüfen, ob Sie Ihre anderen Anwendungsanforderungen erfüllen. Ich sehe nicht voraus, dass Sie auf etwas stoßen, das das, was Sie bisher beschrieben haben, ungültig machen würde.
quelle