Webanwendungsarchitektur - Job / Aufgabenwarteschlange benötigt?

8

Ich entwerfe gerade eine Webanwendung, mit der Benutzer Aufgaben planen können, die (im Auftrag von ihnen) gegen eine HTTP-API ausgeführt werden. Die Aufgaben können wiederkehrend sein und die minimale Zeitauflösung, die für die Planung verwendet werden kann, beträgt eine Minute. Aufgrund der Art der Aufgaben ist es sinnvoll, sie asynchron auszuführen. Wie aber sollte die Architektur dieses Teils aussehen?

Ich habe überlegt, eine Aufgabenwarteschlange zu verwenden, um Aufgaben von der Webanwendung zu erstellen und sie von einem Mitarbeiter ausführen zu lassen. In diesem Fall habe ich mehrere Fragen:

  • Wie gehe ich mit wiederkehrenden Aufgaben um?
  • Wie speichere ich einfach die Ergebnisse der Aufgaben?
  • Ist es leicht möglich, die Warteschlange "persistent" zu machen?
  • Sollen die Arbeiter direkt mit einer Datenbank interagieren?
  • Soll ich wiederkehrende Aufgaben manuell in die Warteschlange stellen?

Was könnte ich sonst noch beachten? Da ich davon ausgehe, dass ich nicht der Einzige bin, der über diese Art von Webanwendungsarchitektur nachdenkt, gibt es irgendwelche "Best Practices"? Ist eine Aufgabenwarteschlange der richtige Weg?

    
Simon 30.04.2011, 09:13
quelle

1 Antwort

9

Ja, das ist ein bekanntes Muster für die Behandlung langlebiger Aufgaben am Ende einer Webanwendung. Abhängig von Ihrer Sprache und Ihrem Anwendungsrahmen gibt es eine Reihe von Warteschlangenimplementierungen - z. Resque oder Beanstalkd oder ActiveMQ oder wenn Ihre Leistungsanforderungen nicht hoch sind, können Sie eine Datenbank als Tabelle verwenden Art der Warteschlange.

Die Grundidee besteht darin, dass Ihre Webanwendung Jobs in eine Warteschlange mit genügend Inhalt stellt, damit der Job fortgesetzt werden kann. Eine Gruppe von Worker-Prozessen im Hintergrund (idealerweise unabhängig von Ihrer Webanwendung) liest die Jobs aus der Warteschlange und führt sie aus. Die Ergebnisse können in eine Antwortwarteschlange geschrieben oder in eine Datenbank geschrieben werden. Es hängt davon ab, wie Sie die Ergebnisse dem Benutzer anzeigen möchten. Für eine Webanwendung ist das Schreiben von Ergebnissen in die Datenbank wahrscheinlich sinnvoller.

Abhängig vom Warteschlangen-Handler können sie Jobs persistent machen. Z.B. ActiveMQ unterstützt persistente Nachrichtenübertragung, sodass Nachrichten in einer Warteschlange bei einem Fehler wiederhergestellt werden.

Sie fragen nach wiederkehrenden Jobs - und ich denke, die Antwort hängt davon ab, wann sie wiederkehren müssen.

Eine gerade Nachrichtenwarteschlange verarbeitet / gibt Nachrichten an die Mitarbeiter aus, sobald sie verfügbar sind. Eine Planung ist also schwierig oder unmöglich. Zur Unterstützung von geplanten Jobs (einschließlich Jobs, die zu einem bestimmten Zeitpunkt oder nach einer bestimmten Zeit wiederkehren) sollten Sie wahrscheinlich eine Datenbanktabelle als einfache Warteschlange mit einem Attribut "Startzeit" verwenden.

Ich habe kürzlich ein ähnliches Muster hier beschrieben.

    
scaganoff 06.05.2011, 12:32
quelle