2016-06-15 61 views
0

我需要知道laravel 5队列管理系统是否适合大项目(拥有大约100,000名用户)。我想每天做一些类似消息传递(而不是垃圾邮件:)的用户。
对于这份工作(排队),redis是否足够好?或者最好使用专门用于排队的库(如beanstalkd)?laravel排队系统适合大项目吗?

+1

为何否决?如果你对此一无所知,你可以不回答。 –

回答

4

为了公平起见,并尝试发布一个合理的回答这个问题,我们应该考虑以下几点:

  • 内容交付
  • 需要对系统资源的用户数运行同步队列

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

100,000×32个字节= 3.2MB

当然,Laravel的排队系统串行化对象,所以实际的内存使用量可能会更高(用于Laravel队列Redis的内存),但还不足以与关心自己。

我建议在过去,对于发出订阅电子邮件消息的看似成功安装将在以下运行:

  • 至少2GB RAM
  • 2处理器/核心

Laravel运行的队列系统对服务器不是太重要。一如既往,按照需求进行扩展。

软件对这种(使用Laravel)将包括以下内容:

  • Redis的
  • 主管

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

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

php artisan queue:failed-table

php artisan migrate

一旦安装了监控器,在/etc/supervisor/conf.d所以创建conf文件是主管可以在配置拿起您的队列:

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

在那里,布置一个配置,以适应您的环境NT。在下面的演示设置中,将立即在您的队列上执行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

+0

谢谢@Justin。这是一个完整而有说服力的答案。我试着拉拉维尔用redis排队。我也检查了laravel代码。我发现laravel自己在管理队列,而redis只是一个支持的数据库。我认为这会让队列变慢。只是想知道如果我想实现与我的主项目分离的队列管理系统,那该怎么办。例如用python(django)和芹菜实现?或者用cpp和beanstalk? –