Ich arbeite an einer Consumer-Webanwendung, die einen lang laufenden Hintergrundprozess ausführen muss, der an jede Kundenanfrage gebunden ist. Mit lang laufen, meine ich irgendwo zwischen 1 und 3 Minuten.
Hier ist ein Beispiel für den Ablauf. Das Objekt/Widget ist nicht wirklich wichtig.
- Der Kunde kommt auf die Website und gibt das gesuchte Objekt/Widget an.
- Wir suchen/bereinigen/filtern nach Widgets, die einigen Anfangskriterien entsprechen. <-- langwieriger Prozess
- Der Kunde konfiguriert weitere Details über das gesuchte Widget.
- Wenn der langwierige Prozess abgeschlossen ist, kann der Kunde die letzten Schritte vor der Umstellung durchführen.
Die Schritte 3 und 4 sind nicht wirklich wichtig. Ich erwähne sie nur, weil wir damit etwas Zeit gewinnen können, während wir den langwierigen Prozess durchlaufen.
Die Umgebung, in der wir arbeiten, ist ein LAMP-Stack - derzeit mit PHP. Es scheint kein gutes Design zu sein, wenn ein lang laufender Prozess einen Apache-Thread in mod_php (oder einen Fastcgi-Prozess) in Anspruch nimmt. Die Apache-Schicht unserer Anwendung sollte auf die Bereitstellung von Inhalten und nicht auf die Datenverarbeitung konzentriert werden IMO.
Ein paar Fragen:
- Ist unsere Überlegung richtig, dass wir diesen "langlaufenden" Teil aus der Apache/Web-App-Schicht herauslösen sollten?
- Gibt es eine Standard/Typisch wie man das unter Linux/Apache/MySQL/PHP lösen kann (wir sind offen dafür, eine andere Sprache für die Verarbeitung zu verwenden, falls dies angemessen ist)?
- Irgendwelche Vorschläge, wie man es herausbekommen kann? Erstellen wir z.B. einen Deamon, der eine FIFO-Warteschlange durchläuft?
Edit: Nur zur Klarstellung: Nur etwa 1/4 des langwierigen Prozesses ist datenbankzentriert. Wir arbeiten daran, diesen Teil zu optimieren. Es gibt einige Arbeiten, die wir potenziell tun könnten, aber wir sind in der Menge, die wir im Moment tun können, begrenzt.
Danke!