Ich entwickle ein asynchrones Queue / Worker-System, in diesem Fall mit PHP & amp; BeanstalkdD (obwohl die eigentliche Sprache und der Daemon nicht wichtig sind). Die Aufgaben selbst sind nicht zu schwer - ein Array mit den Befehlen und Parametern in JSON für den Transport durch den Beanstalkd-Daemon codieren und sie in einem Worker-Skript aufnehmen, um sie nach Bedarf zu bearbeiten.
Es gibt eine Reihe anderer ähnlicher Warteschlangen- / Worker-Setups wie Starling , Gearman , Amazon SQS und andere" Unternehmen " orientierte Systeme wie IBM MQ und RabbitMQ. Wenn Sie etwas wie Gearman oder SQS ausführen - wie startet Sie den Worker-Pool? Die Fragen beziehen sich auf den anfänglichen Start des Arbeiters, und dann können weitere zusätzliche Worker hinzugefügt und nach Belieben heruntergefahren werden (obwohl ich eine Nachricht durch die Warteschlange senden kann, um sie herunterzufahren - solange ein "Watcher" nicht automatisch erscheint) starte sie neu). Dies ist kein PHP-Problem, es geht um direkte Unix-Prozesse, bei denen ein oder mehrere Prozesse beim Start oder beim Hinzufügen von weiteren Arbeitern zum Pool eingerichtet werden.
Ein Bash-Skript zum Schleifen eines Skripts ist bereits vorhanden - dies ruft das PHP-Skript auf, das dann Aufgaben aus der Warteschlange sammelt und ausführt, gelegentlich aussteigen, um sich selbst reinigen zu können (es kann auch ein paar Sekunden nach einem Fehler oder über ein geplantes Ereignis anhalten). Das funktioniert gut und der Aufbau der Worker-Prozesse wird nicht sehr schwierig sein.
Bei einem guten Worker-Controller-System geht es um Flexibilität, indem beim Start eines Rechners ein oder zwei automatisch gestartet werden und in der Warteschleife weitere Befehle von der Befehlszeile hinzugefügt werden können, während die Extras abgeschaltet werden, wenn sie nicht mehr benötigt werden.
Ich habe einem Freund geholfen, der an einem Projekt arbeitet, das eine Gearman-basierte Warteschlange enthält, die verschiedene asynchrone Jobs an verschiedene PHP- und C-Daemons in einem Pool von mehreren Servern verteilt.
Die Worker wurden so gestaltet, dass sie sich genau wie klassische Unix / Linux-Daemons verhalten, dank einfacher Shell-Skripte in /etc/init.d/ und Befehlen wie:
invoke-rc.d myWorker start|stop|restart|reload
Dieser Mechanismus ist einfach und effizient. Und da es sich auf Standard-Linux-Funktionen stützt, können sogar Leute mit eingeschränkten Kenntnissen Ihrer App einen Daemon starten oder einen stoppen, wenn sie wissen, wie er systemweise heißt (im obigen Beispiel auch "myWorker").
Ein weiterer Vorteil dieses Mechanismus ist, dass er auch die Poolverwaltung Ihrer Mitarbeiter vereinfacht. Sie könnten 10 Daemons auf Ihrem Rechner haben (myWorker1, myWorker2, ...) und einen "worker manager" starten oder stoppen lassen, abhängig von der Warteschlangenlänge. Und da diese Befehle über ssh ausgeführt werden können, können Sie problemlos mehrere Server verwalten.
Diese Lösung mag billig klingen, aber wenn Sie sie mit gut codierten Daemons und zuverlässigen Verwaltungsskripts erstellen, sehe ich nicht, warum sie weniger effizient als Big-Bucks-Lösungen für jeden Durchschnitt (wie in "nicht kritisch ") Projekt.
Real Message Queuing Middleware wie WebSphere MQ oder MSMQ bieten "Trigger", bei denen ein Service, der Teil des MQM ist, einen Worker startet, wenn neue Nachrichten in eine Warteschlange gestellt werden.
AFAIK, kein "Web Service" Warteschlangensystem kann das, aufgrund der Natur des Biests. Allerdings habe ich SQS nur intensiv angeschaut. Dort müssen Sie die Warteschlange abfragen, und bei Amazon wird übermäßig viel Aufwand für Sie mit realem Geld verbunden sein.
Ich habe kürzlich an einem solchen Tool gearbeitet. Es ist noch nicht ganz fertig (ich dachte, es sollte mehr als ein paar Tage dauern, bis ich etwas erreiche, was ich 1.0 nennen könnte) und eindeutig noch nicht produktionsbereit, aber der wichtige Teil ist bereits codiert. Jeder kann sich den Code hier ansehen: Ссылка .
Supervisor ist ein gutes Monitor-Tool. Es enthält eine Web-Benutzeroberfläche, auf der Sie Mitarbeiter überwachen und verwalten können.
Hier ist eine einfache Konfigurationsdatei für einen Arbeiter.
%Vor%Tags und Links queue message-queue worker-process gearman amazon-sqs