So entwerfen Sie eine Anwendung mit Rollback-Funktion

9

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?

user2720864
quelle
6
Ich schlage vor, das Erinnerungsmuster nachzulesen
Oded
1
Die meisten Datenbanken bieten Rollback mit Transaktionsmechanismen. Wenn Sie den gesamten Status in einer Datenbank speichern könnten, könnten Sie dies verwenden.
Pieter B
Welche Faktoren sollten bei der Festlegung, was und wann gespeichert werden soll, berücksichtigt werden?
user2720864
Können Sie klarstellen: Benötigen Sie ein Rollback in Bezug auf Transaktionen (ein Job wird entweder abgeschlossen oder nicht, es gibt keine Teiljobergebnisse) oder benötigen Sie eine Funktion zum Rückgängigmachen?
Bart van Ingen Schenau
2
Bitte bearbeiten Sie Ihre Frage nicht, um eine neue Frage zu stellen. Nur ein Beitrag eine neue Frage, die auf diese verweist. Vielen Dank.
maple_shaft

Antworten:

18

Echtzeitsystem oder nicht, das Erinnerungsmuster ist ein ausgezeichneter Ausgangspunkt.

Das Erinnerungsmuster ist ein Software-Entwurfsmuster, mit dem ein Objekt in seinen vorherigen Zustand zurückversetzt werden kann (Rückgängigmachen per Rollback).
Das Erinnerungsmuster wird mit drei Objekten implementiert: dem Urheber, einem Hausmeister und einem Erinnerungsstück.
Der Urheber ist ein Objekt, das einen internen Zustand hat.
Der Hausmeister wird dem Urheber etwas antun, möchte aber in der Lage sein, die Änderung rückgängig zu machen. Der Hausmeister bittet den Urheber zunächst um ein Erinnerungsobjekt. Dann führt es die Operation (oder Abfolge von Operationen) aus, die es ausführen wollte.
Um vor den Operationen in den Status zurückzukehren, wird das Erinnerungsobjekt an den Absender zurückgegeben.
Das Erinnerungsobjekt selbst ist ein undurchsichtiges Objekt (eines, das der Hausmeister nicht ändern kann oder sollte).
Bei Verwendung dieses Musters sollte darauf geachtet werden, dass der Urheber andere Objekte oder Ressourcen ändert - das Erinnerungsmuster wird für ein einzelnes Objekt ausgeführt.

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 J1mit 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 stellen J1.

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