Benötigt diese Webanwendung eine Aufgabenwarteschlange?

8

Hintergrund

Ich habe eine Web-App, die ein Bild aus Benutzereingaben erstellt. Die Bilderstellung könnte einige Sekunden dauern.

Problem

Wenn ich den Server-Thread, der die Anfrage / Antwort bearbeitet, auch das Bild generieren lasse, wird das für einige Sekunden einen Thread binden und möglicherweise meinen Server blockieren, die Leistung beeinträchtigen, Welpen töten usw.

Frage

Soll ich eine Aufgabenwarteschlange verwenden, z. B. Sellerie , damit der Server die Erstellung des Bildes übernehmen und zurückgehen kann um Anfragen / Antworten zu bearbeiten? Ich habe kein Problem damit, den Benutzer, der das Bild erstellt, warten zu lassen, aber ich möchte nicht, dass andere Benutzer auf die Seite zugreifen.

    
random_person 26.08.2010, 18:21
quelle

3 Antworten

6

Ich werde Nein sagen - vorerst.

  • Ein paar Sekunden sind nicht so lang.
  • Sie müssen sowieso irgendeine Art von Polling (oder Kometenverarbeitung) implementieren, um das Bild dem Benutzer zurückzugeben.
  • Es wird Ihr System komplexer machen.
  • Entwerfen Sie das System so, dass später das Hinzufügen zu einer Aufgabenwarteschlange möglich und einfach ist.

Also, behalte es zunächst einfach und mach es in Ordnung, aber behalte im Hinterkopf, dass du später eine Aufgabenwarteschlange hinzufügen kannst.

Implementieren Sie diese Aufgabenwarteschlange, wenn / wenn Sie skalieren müssen.

    
Anonym 26.08.2010, 18:30
quelle
0

Ich habe auch eine Bilderzeugungsseite ( Names4Frames ) und habe diese Dinge über AJAX (und PHP) gemacht. Ich hatte keine merklichen Verlangsamungen (oder tote Welpen), aber die fragliche Seite erzeugt auch keine großen Mengen an Verkehr. Ich bin kein Experte für Threads, und um ehrlich zu sein, bin ich mir nicht 100% sicher, was genau Ihr Anliegen ist und welche Technologien Sie verwenden ...

Grundsätzlich muss eine Seite das Bild von einer anderen Seite anfordern (vielleicht sogar auf einem anderen Server), und wenn es fertig ist, gibt die zweite Seite alle relevanten Informationen über das Bild zur Verarbeitung / Anzeige an die erste zurück. Wenn wir nur ein paar Sekunden sprechen, kann ich nicht sehen, dass das ein echtes Problem ist, es sei denn, es handelt sich um MASSIVE Besucher, die ständig diesen Image-Erstellungs-Service nutzen.

    
Dutchie432 26.08.2010 18:26
quelle
0

Faustregel: Verwenden Sie eine Warteschlange, wenn sich Aufgaben häufen könnten.

In Ihrem Fall könnte die Aufgabe bis zu 2 Sekunden dauern, unter der Annahme von 8 Stunden pro Tag könnten Sie bis zu 8 * 60 * 60/2 = 14400 Bilder pro Tag ohne Nebenläufigkeit machen. Wenn Sie mehr als 7200 Anfragen pro Tag erhalten, haben Sie eine 50% ige Chance, dass sich einer von ihnen überschneidet. Es gibt ausgeklügeltere Analysen, um das erwartete Überschneidungsniveau zu zeigen, das Sie wahrscheinlich erhalten werden. aber es scheint sicher zu sagen, dass Sie mehr als tausend Bilder pro Tag machen könnten, bevor Sie überlastet werden.

Jetzt scheint die Frage einfacher zu sein: Glauben Sie, dass Sie in absehbarer Zeit mehr als tausend oder zwei Image-Kreationen pro Tag bekommen werden? Wenn ja, dann setze eine Warteschlange; Wenn nicht, lassen Sie es für später.

In jedem Fall, halten Sie gute Protokolle; Stellen Sie sicher, dass Sie erkennen können, wenn Überschneidungen bei der Verarbeitung auftreten. Denken Sie daran, dass, wenn Sie zwei Aufgaben gleichzeitig bearbeiten, werden sie länger dauern und die Wahrscheinlichkeiten erhöhen, dass ein dritter ankommen könnte, bevor die anderen beiden beendet werden, und ein viertes ... wenn Sie an einer unsichtbaren Schwelle ankommen, wird die Leistung drastisch sinken. Verlier nicht den Schlaf, lass es nicht geschehen, bevor du es bemerkst.

    
Javier 26.08.2010 18:46
quelle

Tags und Links