2016-06-22 20 views
1

Ich habe Laravel 5.0 mehrere Webserver hinter einem Load Balancer laufen. Ich benutze Laravel Scheduler, um Befehle auszuführen und regelmäßig auszuführen. Die meisten sind keine serverspezifischen Befehle, sondern global (über die gesamte App auf allen Servern).Synchonise Laravel Taskplaner auf mehreren Servern

Das Problem ist, dass jeder Server jeden Befehl ausführt - also 3 Server bedeutet, dass 3 Befehle jede Stunde/Minute/was auch immer ausgeführt werden.

Wie würde man die Ausführung dieser Befehle zwischen Servern synchronisieren? Hat Laravel irgendwelche nativen Optionen? Irgendwelche anderen Pakete zu empfehlen?

Eine Idee, die auftrat, war, sich auf die Art und Weise zu verlassen, wie Laravel seine Funktion ohne Überlappung mithilfe dateibasierter Mutexe implementiert und freigegebenen Speicher verwendet, um die Dateien zwischen Servern zu verteilen. Könnte funktionieren, aber jede Latenz ist der gemeinsame Speicher bricht dies - nicht zuverlässig genug.

Meine aktuelle Problemumgehung besteht darin, dass die Befehle Aufträge in die Warteschlange befördern und die Logik im Auftragshandler selbst erstellen, um die DB für die Synchronisierung zwischen Servern zu verwenden. Kaum elegant, aber erledigt den Job.

Dies wird Laravel Task Scheduler across multiple servers without overlap

Zusammenhang
+0

Mögliches Duplikat von [Laravel Task Scheduler über mehrere Server ohne Überlappung] (http://stackoverflow.com/questions/33485478/laravel-task-scheduler-across-multiple-servers-without-overlap) –

Antwort

0

Hast Du diesen jdavidbakr/multi-server-event package versucht? Dieses Paket verwaltet die Ereignisse der Multiserverkonfiguration, sodass nur einer der Server das geplante Ereignis auslöst.