在 Laravel/Lumen 中动态创建的工作守护进程队列

Posted

技术标签:

【中文标题】在 Laravel/Lumen 中动态创建的工作守护进程队列【英文标题】:Dynamically created worker daemon queues in Laravel/Lumen 【发布时间】:2016-05-31 15:18:10 【问题描述】:

我需要在每个帐户的基础上为每种类型的作业创建多个专用的守护进程工作队列。

例如,假设我有 1000 个帐户,需要为每个作业类型设置一个专用侦听器。每种作业类型都需要它自己的专用工作者来并行处理 50 个实例。我不希望任何帐户阻止来自另一个帐户的工作人员,并且我希望一个帐户的所有工作人员异步运行。我希望所有 50,000 名工人都能愉快地哼唱而不会阻塞。

如何在代码中为每个帐户动态生成侦听器?

运行 1000 个守护程序侦听器会占用大量内存吗?还是它们是轻量级的?

Redis、Beanstalkd 等特定服务是否更适合此类目标?

计划在 Laravel 或 Lumen 5.2 中尝试这个。

【问题讨论】:

【参考方案1】:

基于具有 2Gb RAM 和 CPU 频率为 3.3GHz(1 核)的 linux VM,以及来自ps aux 命令的统计结果:

一个队列的驻留集大小最低约为 52 MB (50888 KiB),最高约为 70 MB (68752 KiB)。

1000 名工作人员 = 52,000 MB (52 GB) - 70,000 MB (70 GB)

cpu 使用率似乎微不足道。

注意:我的 php-fpm 目前是 5.x 版本。如果您以 php 7.x 为目标,则可以获得更多的性能提升。

【讨论】:

非常好的统计数据!您是如何通过代码动态生成每个单独的守护程序侦听器的?您知道减少总体内存占用的方法吗? 使用Supervisord 来监控和生成队列工作者。至于内存占用,您必须深入了解框架的启动过程并卸载一些模块。此外,您可以通过在启动侦听器时提供 --memory 选项来设置内存限制,但默认情况下为 128 兆字节。通过负载均衡器后面的自动缩放,在一个 VM 或多个 VM 上生成多个队列工作器。

以上是关于在 Laravel/Lumen 中动态创建的工作守护进程队列的主要内容,如果未能解决你的问题,请参考以下文章

无法从工匠命令 Laravel/Lumen 进行 Crypt::decrypt

Laravel/Lumen - 如何从网站触发工作流程?

Laravel Lumen 5.2 Cors 中间件不工作

Laravel/Lumen 5.3.3:在迁移中覆盖 env 值

Laravel Lumen 队列失败与队列:工作但不是队列:听

在 laravel/lumen 中使用客户端 ID 和密钥访问 API