JobRunr-Alternative finden
Problem
JobRunr (unsere derzeitige Library zur Verarbeitung asynchroner Jobs im Hintergrund) zeichnet sich durch folgende Probleme aus:
- Bei kurzzeitigem Verlust der Datenbankverbindung stürzt JobRunr vollständig ab und kann sich nicht selbst wieder in einen funktionierenden Zustand versetzen. Dies soll mit der zahlungspflichtigen Pro-Version möglich sein, aber die Verwaltung solcher Lizenzen erzeugt weitere organisatorische und logistische Probleme. Es ist nicht nachvollziehbar, warum für solch grundlegende Funktionen bezahlt werden soll.
- Die Serialisierung und Deserialisierung von Job-Objekten ist nicht konfigurierbar. Serialisat kann nur auf die exakt selbe Java-Klasse deserialisiert werden, was Typ-Migrationen sehr erschwert.
- Jobs in der Datenbank beziehen sich immer auf eine konkrete Methode einer konkreten Java-Klasse. Dies erschwert Refactorings sehr.
- Es ist nicht möglich, verschiedene Jobrunr-Instanzen parallel zu betreiben, weil sich diese gegenseitig die Jobs wegnehmen würden, ohne dass man dies in irgendeiner Weise steuern könnte. Dies hat sich in der Vergangenheit als Fallstrack bei Integrations- oder Systemtests erwiesen, weil sporadische, schwer zu reproduzierende, Fehler auftreten.
Im Rahmen dieser Story soll eine Alternative zu JobRunr gefunden werden, die folgende Kriterien erfüllt:
- Unterstützung von wiederkehrenden Jobs
- Unterstützung von einmaligen, individuell erzeugten Jobs mit Payload
- Wiederaufnahme fehlgeschlagender Jobs nach eigens festgelegten Delays
- Clusterfähigkeit: Bei mehreren JVM-Instanzen soll nie ein Job doppelt verarbeitet werden
- Volle Recovery bei Datenbank-Ausfällen oder JVM-Absturz mitten in der Job-Verarbeitung
- Einfache und robuste Mechanismen, um Typ-Migrationen bei Job-Payload und Job-Executor-Klassen durchführen zu können
- Leichtgewichtigkeit
- Reife
- (Optional) Möglicher Parallelbetrieb in Tests
Acceptance criteria
-
Eine alternative Abhängigkeit wurde gefunden, die die Kriterien oben erfüllt -
Entscheidung ist als ADR dokumentiert und mit dem Architekten abgestimmt
follow-up
- Erstellung des Implementierungs-Issues auf Basis des ADRs
- Die Code-Basis wurde auf die Alternative umgestellt
- Eine DB-Migration ist vorhanden, die bestehende Einträge aus der Jobrunr-Tabelle in die neue überführt
Edited by Wojciech Gdaniec