Best Practices bei der Verwaltung lang laufender asynchroner Jobs


12

Ich befinde mich in der Entwurfsphase eines Projekts, in dem der Endbenutzer eine Anfrage von einer Webseite sendet, die einen lang laufenden asynchron verarbeiteten Job erzeugt. Gibt es eine "Best Practice" für dieses Problem? Sind Web-Services und Service-Broker ein guter Weg? Ist die Microsoft-Messaging-Warteschlange hier anwendbar?


Wenn Sie dies über das Internet tun und dies sehr lange dauert, können Sie dem Benutzer nach Abschluss eine SMS oder E-Mail senden.
Job

Antworten:


6

Ich weiß nichts über "Best Practice". Ich kenne die häufigsten Fehler.

Erster Fehler: DOS selbst

Sie verwenden den Webhandler, um den lang laufenden Job zu verarbeiten. Dies kann schlecht oder extrem schlecht sein, abhängig von Ihrem Prozentsatz an Treffern, die zu Jobs mit langer Laufzeit werden, wie lange sie ausgeführt werden und wie viel anhaltenden Datenverkehr Sie erhalten.

Sie möchten sicherstellen, dass Sie nicht mehr als einen Job mit langer Laufzeit innerhalb des Zeitraums erhalten, den dieser Job mit langer Laufzeit benötigt. Wenn Sie dies tun, DOS Sie selbst. Es wird auch schlimmer, je mehr Verkehr Sie erhalten, vorausgesetzt, der Prozentsatz und die Zeit bleiben konstant. Es ist eines dieser Probleme, das dem Verkehrswachstum selbst eine Grenze auferlegt.

Zweiter Fehler: Laichen vom Webhandler

Das Laichen eines Prozesses aus dem Webhandler, um einen lang laufenden Prozess zu handhaben, kann schwierig und daher auch fehleranfällig sein.

  • Sie müssen sich korrekt vom Elternteil trennen, sonst wartet der Webhandler auf den Abschluss des Kindes.
  • Wenn Sie ein Kind unter Unix teilen, erbt es offene Handles vom Elternteil. Diese werden automatisch geschlossen, sofern sie nicht überschrieben werden. Dies umfasst Dinge wie Datenbankverbindungen, Dateihandles und andere offene Netzwerkverbindungen. Alle werden geschlossen, wenn der untergeordnete Prozess abgeschlossen ist.

Optionen

Normalerweise at(1)distanziere ich mich sauber vom Webhandler, ohne mich zu gabeln.

Sie können auch eine Polling-Implementierung mit verwenden cron.

Sie können mit einem anderen Serverprozess kommunizieren, der die Verarbeitung übernimmt. , Dass die Kommunikation mit getan werden sockets, pipesoder höherer Ebene Abstraktionen wie ein RESTES HTTP - Aufruf oder Routing - Nachricht einer Warteschlange.


2

Ich nehme an, Sie sprechen über mehr als ein paar Minuten.

In wenigen Minuten können Sie einen Arbeitsthread im Hintergrund starten und einige Fortschritte auf der Benutzeroberfläche anzeigen. Viele Webanwendungen verwenden diese Methode.

Wenn es länger als beispielsweise 5 Minuten dauert, möchten Sie die Aufgabe möglicherweise an einen dedizierten Dienst delegieren. Ein Beispiel sind die von Google Analytics generierten Berichte.

Die Microsoft Messaging-Warteschlange kann zum Übertragen von Informationen von einem System zu einem anderen oder einer Komponente zu einem anderen verwendet werden.


Wie erreichen Sprachen wie PHP dies? Ich kenne ein paar Web-Apps, die dies tun, aber in PHP geschrieben sind
TheLQ

Ich bin kein PHP-Experte, aber ich denke, anstelle eines Threads, der von derselben Seite gestartet wird, wird ein anderer aufgerufen. Dies ist, was tatsächlich mit AJAX passiert.
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.