【发布时间】:2016-10-24 22:07:33
【问题描述】:
我有 Laravel 5.0 在负载均衡器后面运行多个 Web 服务器。我使用 laravel Scheduler 定期执行和运行命令。其中大部分不是特定于服务器的命令,而是全局的(跨所有服务器的整个应用程序)。
问题在于每台服务器都会执行每条命令 - 所以 3 台服务器意味着每小时/每分钟/任何时间运行 3 条命令。
如何在服务器之间同步执行这些命令? Laravel 有任何原生选项吗?有没有其他推荐的包?
一个想法是依靠 Laravel 通过使用基于文件的互斥体实现其无重叠功能的方式,并使用共享存储在服务器之间分发文件。可能有效,但任何延迟都是共享存储打破了这一点 - 不够可靠。
我当前的解决方法是让命令将作业触发到队列中,并将逻辑构建到作业处理程序本身中,以使用数据库在服务器之间同步自身。几乎没有优雅,但可以完成工作。
这与Laravel Task Scheduler across multiple servers without overlap有关
【问题讨论】:
标签: laravel laravel-5 webserver scheduled-tasks job-scheduling