Die beste Methode, um eine starke Verarbeitung (wie das Ändern der Bildgröße) aus der PHP-Anfrage heraus zu laden

8

Ich arbeite an einer PHP-Weboberfläche, die sehr viel Traffic bekommen wird. Einige Einfüge- / Aktualisierungsanforderungen enthalten Bilder, deren Größe auf einige gängige Größen geändert werden muss, um den weiteren Abruf zu beschleunigen.

Eine Möglichkeit besteht darin, eine asynchrone Warteschlange auf dem Server einzurichten. Z.B. Richten Sie eine Tabelle in einer Datenbank mit einer Aufgabenwarteschlange ein, die von PHP-Anforderungen ausgefüllt wird, und lassen Sie andere Prozesse auf dem Server die Tabelle überwachen und alle wartenden Aufgaben verarbeiten. Wie würdest du das machen? Was wäre die richtige Umgebung für diesen langwierigen Prozess? Java, oder vielleicht etwas leichteres tun?

    
aaimnr 04.04.2009, 15:21
quelle

5 Antworten

14

Wenn Sie wirklich viel Volumen haben, dann suchen Sie etwas wie beanstalkd . Es ist ein verteilter Arbeitswarteschlangenprozessor. Sie legen einfach einen Job in die Warteschlange und vergessen ihn dann.

Natürlich brauchen Sie dann am anderen Ende etwas, das die Warteschlange liest und die Arbeit verarbeitet. Es gibt mehrere Möglichkeiten, dies zu tun.

Am einfachsten ist es wahrscheinlich, einen Cron-Job zu haben, der ausreichend oft ausgeführt wird, um die Arbeitswarteschlange zu lesen und die Anforderungen zu verarbeiten. Alternativ können Sie eine Art persistenter Daemon-Prozess verwenden, der durch die Verfügbarkeit von Arbeit geweckt wird.

Der Vorteil dieser Art von Ansatz besteht darin, dass Sie die Anzahl der Worker an die Arbeitsanforderungen anpassen können und dass beanstalkd die verteilte Verarbeitung behandelt (in dem Sinne, dass die Listner sich auf verschiedenen Computern befinden können).

    
cletus 04.04.2009, 15:23
quelle
2

Sie können eine Cron-Task festlegen, die die Queue-Tabelle überprüft. Das Skript, das Aktionen behandelt, die in der Warteschlange warten, kann z.B. in PHP, so dass Sie die Implementierungssprache nicht ändern müssen.

    
empi 04.04.2009 15:25
quelle
2

Ich benutze Perl für einen langen Prozess in Kombination mit Bohnenstange. Das Schöne ist, dass der Beanstabld-Client für Perl eine Sperrreserve-Methode hat. Auf diese Weise wird fast keine CPU-Zeit benötigt, wenn nichts zu tun ist. Aber wenn es seine Aufgabe erfüllen muss, wird es automatisch mit der Verarbeitung beginnen. Sehr effizient.

    
Peter Stuifzand 07.04.2009 01:22
quelle
2

Sie möchten einen Daemon erstellen, der für einen bestimmten Zeitraum "schläft" und dann die Datenbank nach zu verarbeitenden Elementen durchsucht. Sobald es die zu bearbeitenden Objekte gefunden hatte, wurden sie verarbeitet und dann erneut überprüft, sobald es fertig war, wenn nicht mehr, dann schlafen. Sie können Dämonen in jeder Sprache erstellen, einschließlich PHP.

Alternativ können Sie einfach PHP ein Skript ausführen lassen und weitermachen. Damit PHP nicht darauf wartet, dass das Skript beendet wird, bevor es fortgesetzt wird, führen Sie es im Hintergrund aus.

%Vor%

Obwohl Sie damit vorsichtig sein müssen, da Sie zu viele Prozesse im Hintergrund ausführen können, da keine Warteschlangen vorhanden sind.

    
Brent Baisley 04.04.2009 23:10
quelle
1

Sie könnten einen Dienst wie IronWorker verwenden, um die Bildverarbeitung im Hintergrund durchzuführen und die Server zu entlasten. Da es sich um einen Dienst handelt, müssen Sie nichts verwalten oder etwas anderes einrichten, und es wird mit Ihnen skaliert, wenn Sie wachsen. Wenn Sie ein Bild damit erstellen können, können Sie Millionen von Bildern ohne Aufwand skalieren.

Hier ist ein Artikel, wie man eine Reihe von Bildverarbeitungstransformationen durchführt:

Ссылка

Die Beispiele gibt es in Ruby, aber Sie könnten das gleiche mit PHP ganz einfach machen.

    
Travis Reeder 31.05.2012 21:36
quelle

Tags und Links