Zum Hauptinhalt springen

Task-System

OpenVLE führt ressourcenintensive und zeitaufwendige Operationen asynchron im Hintergrund aus. Das Task-System basiert auf Redis Queue (RQ) und besteht aus Worker-Containern für die Aufgabenausführung und einem Scheduler für periodische Aufgaben.

Architektur

Backend/Scheduler → Redis Queue → Worker → Ausführung
  1. Enqueue — Das Backend oder der Scheduler legt eine Aufgabe in eine benannte Redis-Queue.
  2. Dequeue — Der zuständige Worker holt die nächste Aufgabe aus seiner Queue.
  3. Ausführung — Der Worker führt die Aufgabe aus (z. B. VM klonen, E-Mail senden).
  4. Ergebnis — Das Ergebnis wird in der Datenbank als Task/SubTask gespeichert und dem Benutzer angezeigt.

Queues

Das System verwendet mehrere benannte Queues, die jeweils für einen bestimmten Aufgabenbereich zuständig sind:

Die Umgebungsvariable WORKER_MAX_RETRY (Standard: 5) steuert die maximale Anzahl an Wiederholungen für die meisten Queues. Einige Queues verwenden einen festen Wert.

QueueZweckMax. RetriesRetry-Intervalle
pve_vm_cloneVM-Klonen und -LöschenWORKER_MAX_RETRY10s, 30s, 60s
pve_vm_actionsVM-Aktionen (Start, Stop, Reset, Migrate)WORKER_MAX_RETRY5s, 10s, 15s
pve_periodicProxmox-Polling (Node-Info-Sync)3 (fest)5s, 10s, 15s
mailsE-Mail-VersandWORKER_MAX_RETRY30s, 60s, 120s
guacamoleGuacamole-VerbindungsverwaltungWORKER_MAX_RETRY10s, 30s, 60s
moodleMoodle-Kurs- und BenutzerverwaltungWORKER_MAX_RETRY10s, 30s, 60s
core_periodicVeranstaltungs-Lifecycle, E-Mail-Bereinigung3 (fest)5s, 10s, 15s

Worker

Im Produktivbetrieb laufen drei Worker-Typen als separate Docker-Container. Jeder Typ lauscht auf bestimmte Queues:

Worker-TypSERVICE_ROLEQueuesReplicas
Workerworkercore_periodic, guacamole, mails, moodle, pve_vm_actions4
Worker VM-Cloneworker-vm-clonepve_vm_clone1
Worker Periodicworker-periodicpve_periodic1

Die Aufteilung auf mehrere Worker-Typen stellt sicher, dass langlaufende VM-Klon-Operationen nicht die Verarbeitung anderer Aufgaben blockieren.

Lokale Entwicklung

In der lokalen Entwicklungsumgebung können alle Queues von einem einzelnen Worker (SERVICE_ROLE=worker-all) abgearbeitet werden.

Aufgabentypen

AufgabeQueueAuslöserBeschreibung
VM klonenpve_vm_cloneBenutzer/SchedulerErstellt eine neue VM aus einer VM-Vorlage auf Proxmox
VM starten/stoppen/resettenpve_vm_actionsBenutzerStartet, stoppt oder setzt eine VM auf Proxmox zurück
VM löschenpve_vm_cloneBenutzer/SchedulerLöscht eine VM von Proxmox und bereinigt die Datenbank
VM migrierenpve_vm_actionsBenutzerVerschiebt eine VM auf einen anderen Proxmox-Node
E-Mail versendenmailsSystemVersendet Benachrichtigungen über SMTP
Guacamole provisionierenguacamoleSystemErstellt Guacamole-Benutzer, Verbindungen und Sharing-Profile
Guacamole bereinigenguacamoleSystemLöscht Verbindungen und Sharing-Profile
Moodle-Kurs deployenmoodleSystemDupliziert Moodle-Vorlagenkurs für eine Veranstaltung
Moodle-Benutzer einschreibenmoodleSystemErstellt Benutzer in Moodle und schreibt sie in Kurse ein
Veranstaltung deployencore_periodicSchedulerErstellt alle VMs und Verbindungen für eine Veranstaltung
Veranstaltung archivierencore_periodicSchedulerLöscht alle VMs und bereinigt Verbindungen nach Veranstaltungsende

Job-Abhängigkeiten

Jobs können Abhängigkeiten zu anderen Jobs haben (depends_on). Damit werden Ausführungsketten gebildet, z. B.:

Guacamole-Verbindung löschen → VM stoppen → VM löschen

Der nächste Job wird erst gestartet, wenn der vorherige erfolgreich abgeschlossen ist.

Fehlerbehandlung

Fehlgeschlagene Jobs werden automatisch wiederholt. Die maximale Anzahl an Wiederholungen und die Retry-Intervalle sind pro Queue konfiguriert (siehe Queues). Nach Ausschöpfung aller Versuche wird der Job als dauerhaft fehlgeschlagen markiert.

Einige Fehler werden als permanent erkannt und nicht wiederholt (z. B. SMTP-Fehlercode 550 bei ungültiger Empfängeradresse).

Logs

Fehlerhafte Jobs und ihre Fehlermeldungen sind in den Worker-Logs sichtbar, z. B. docker logs openvle-worker-vm-clone. Weitere Informationen zum Logging findest du unter Logs.

Task-Tracking

Jede asynchrone Operation wird in der Datenbank über zwei Modelle nachverfolgt:

  • Task — Repräsentiert eine logische Operation (z. B. "VM klonen")
  • SubTask — Einzelne Ausführungsversuche eines Tasks mit Status (processing, success, error), Fehlermeldung und Versuchsnummer

Der Fortschritt wird in der Benutzeroberfläche angezeigt.

Scheduler

Der Scheduler läuft als eigener Container (SERVICE_ROLE=scheduler) und verwendet rq cron mit Cron-Expressions, um periodische Aufgaben in die Redis-Queue einzureihen. Die Worker führen diese dann aus.

Periodische Aufgaben

AufgabeQueueZeitplanBeschreibung
Proxmox-Node-Infopve_periodicAlle WORKER_PVE_PERIODIC_INTERVAL Sekunden (Standard: 60s)Synchronisiert VM-/Template-Status und Node-Informationen aus dem Proxmox-Cluster
Veranstaltungs-Lifecyclecore_periodicTäglich um 01:00 UTCPrüft ob Veranstaltungen gestartet oder archiviert werden müssen, versendet Vorab-Benachrichtigungen
E-Mail-Bereinigungcore_periodicTäglich um 02:00 UTCLöscht versendete E-Mails, die älter als MAIL_MAX_AGE_WEEKS (Standard: 4 Wochen) sind
Vorbereitungszeit

Die Vorbereitungszeit für automatische Deployments und Archivierungen wird über EVENTS_START_PREP_TIME_DAYS und EVENTS_END_PREP_TIME_DAYS gesteuert (Standard: jeweils 7 Tage). Siehe Konfigurationsreferenz — Veranstaltungen.

Zusammenspiel der Komponenten

KomponenteRolleVerbindungen
BackendErstellt Aufgaben auf Benutzeranfrage→ Redis (Enqueue)
SchedulerErstellt periodische Aufgaben nach Zeitplan→ Redis (Enqueue)
RedisQueue-SystemEmpfängt und hält Jobs in benannten Queues
Worker (4x)Verarbeitet allgemeine Aufgaben→ Redis, → MariaDB, → Proxmox, → Guacamole, → Moodle, → SMTP
Worker VM-CloneVerarbeitet VM-Klon/Lösch-Operationen→ Redis, → MariaDB, → Proxmox
Worker PeriodicVerarbeitet Proxmox-Polling→ Redis, → MariaDB, → MongoDB, → Proxmox

Weiterführende Informationen