laravel队列系统适合大项目吗?

时间:2016-06-15 05:23:31

标签: php laravel redis queue beanstalkd

我需要知道laravel 5队列管理系统是否适合大型项目(拥有大约100.000个用户)。我想每天都做一些像消息(而不是垃圾邮件:)用户的事情 redis是否适合这项工作(排队)?或者最好使用专门用于排队的lib(如beanstalkd)?

1 个答案:

答案 0 :(得分:6)

为了公平起见并尝试对这个问题发表合理的答案,我们应该考虑以下事项:

  • 订阅者数量
  • 要传递的内容
  • 运行同步队列所需的系统资源

100,000个订阅的电子邮件需要在RAM中存储100,000 x [数据],因此请将电子邮件地址长度平均为32个字符(字节)。

100,000 x 32字节= 3.2MB

当然,Laravel的队列系统会将对象序列化,因此实际的内存使用量可能会更高(Redis内存用于Laravel队列),但不足以让自己关注。

我过去曾建议,发送订阅电子邮件的看似成功设置会在以下内容中运行:

  • 最低2GB RAM
  • 2个处理器/核心

Laravel运行的队列系统对服务器来说并不太费力。与往常一样,按要求进行扩展。

此类软件(使用Laravel)将包含以下内容:

  • Redis的

将Redis设置为Laravel的队列驱动程序。请记住composer require predis/predis

您还需要创建用于存储失败作业的迁移。 Laravel默认内置了一个:

php artisan queue:failed-table

php artisan migrate

安装Supervisor后,在/etc/supervisor/conf.d中创建一个conf文件,以便Supervisor可以获取队列的配置:

touch /etc/supervisor/conf.d/myprojectqueue.conf nano /etc/supervisor/conf.d/myprojectqueue.conf

在那里,布置适合您环境的配置。在以下演示设置中,将立即在队列上执行4个队列运行程序:

    [program:myprojectqueue]
    command=php /path/to/project/artisan queue:listen --tries=1
    directory=/path/to/project
    stdout_logfile=/path/to/project/storage/logs/supervisord.log
    redirect_stderr=true
    autostart=true
    autorestart=true
    numprocs = 4
    process_name = %(program_name)s%(process_num)s

保存conf文件。启动/重启主管。

了解更多信息:

https://laravel.com/docs/master/queues

https://laravel.com/docs/master/queues#supervisor-configuration

https://laravel.com/docs/master/mail#queueing-mail

https://laravel.com/docs/master/scheduling