我让Laravel 5.0在负载均衡器后面运行多个Web服务器。我使用laravel Scheduler定期执行和运行命令。其中大多数不是特定于服务器的命令,而是全局的(跨所有服务器的整个应用程序)。
问题是每个服务器都会执行每个命令 - 因此3个服务器意味着每小时/每分钟运行3个命令。
如何在服务器之间同步执行这些命令? Laravel有任何原生选择吗?还有其他推荐套餐吗?
发生的一个想法是依赖Laravel通过使用基于文件的互斥锁实现其无重叠功能的方式,并使用共享存储在服务器之间分发文件。可能会工作,但任何延迟都是共享存储打破了这一点 - 不够可靠。
我目前的解决方法是让命令将作业发送到队列,并将逻辑构建到作业处理程序本身,以使用DB在服务器之间同步自身。很优雅,但完成工作。
这与Laravel Task Scheduler across multiple servers without overlap
有关答案 0 :(得分:0)
你试过这个jdavidbakr/multi-server-event package吗? 此程序包管理多服务器配置的事件,以便只有一个服务器将触发已调度的事件。