当前位置: 首页 > 面试题库 >

laravel队列系统是否适合大型项目?

邢小云
2023-03-14
问题内容

我需要知道laravel 5队列管理系统是否适合大型项目(拥有约100.000用户)。我想每天一次执行类似消息传递(不是垃圾邮件:))用户的操作。
Redis是否足以胜任这项工作(排队)?还是最好使用专门用于排队的库(例如beantalkd)?


问题答案:

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

  • 订阅人数
  • 要交付的内容
  • 运行同时队列所需的系统资源

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

100,000 x 32字节= 3.2MB

当然,Laravel的队列系统会序列化对象,因此实际的内存使用率可能会更高(Redis内存用于Laravel队列),但不足以引起您的注意。

过去我曾建议过,用于发送订阅的电子邮件的 看似 成功的设置应在以下设备上运行:

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

Laravel运行的队列系统对服务器的负担不是很大。与往常一样,根据需求扩展。

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

  • 雷迪斯
  • 主管

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

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

php artisan queue:failed-table

php artisan migrate

安装Supervisor后,在其中创建一个conf文件,/etc/supervisor/conf.d以便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

保存配置文件。启动/重新启动主管。

想要查询更多的信息:

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



 类似资料:
  • Kafka根据制作者分配的分区将传入的消息分成多个分区。来自分区的消息随后被不同使用者组中的使用者消费。 这种体系结构使我对使用Kafka作为工作/任务队列保持警惕,因为我必须在生产时指定分区,这间接限制了哪些使用者可以在其上工作,因为一个分区只发送给一个使用者组中的一个使用者。我宁愿不要提前指定分区,这样任何一个可以接受该任务的使用者都可以这样做。有没有一种方法可以在Kafka体系结构中构造分区

  • 我正试图通过服务提供者API在运行时由加载一个jar。然而,结果却是失败的。 以下是我所做的: null 我尝试了抽象类而不是我的SPI接口的接口,当我无法实现我的目标时,将它改回接口; 我已尝试获取资源并将我的作为输入参数传递,但没有工作; 我尝试了Apache实现的,但它也找不到适当的资源; 我的问题是如何通过从外部jar加载资源?SPI可能是一种解决方案吗?

  • 本文向大家介绍比较传统队列系统与Apache Kafka相关面试题,主要包含被问及比较传统队列系统与Apache Kafka时的应答技巧和注意事项,需要的朋友参考一下 答:让我们比较一下传统队列系统与Apache Kafka的功能: 消息保留 传统的队列系统 - 它通常从队列末尾处理完成后删除消息。 Apache Kafka中,消息即使在处理后仍然存在。这意味着Kafka中的消息不会因消费者收到消

  • 我最近设置了一个Laravel队列系统。最基本的是cronjob调用一个命令将作业添加到队列中,并调用第二个命令发送电子邮件。 当我通过ssh连接到服务器并运行php artisan queue:listen时,系统会工作,但如果我关闭终端,侦听器就会关闭,作业会堆积起来并在队列中等待,直到我通过ssh重新连接并再次运行listen。 保持队列系统在后台运行而不需要通过ssh保持连接打开的最佳方法

  • 什么是Laravel系列?PHP数组和Laravel集合之间有什么区别? 集合似乎与数组非常相似。例如,通过方法检索的结果是数据的集合。但是当我们想将其用作数组时,我们必须使用toArray()方法。为什么啊?

  • 问题内容: 我试图分裂循环即 使用multiprocessing.Process,它对于较小的N值效果很好。当我使用较大的N值时,就会出现问题。在p.join()之前或期间发生了一些奇怪的事情,并且程序没有响应。如果我将print i放在函数f的定义中,而不是q.put(i),则一切正常。 我将不胜感激任何帮助。这是代码。 问题答案: 您正在尝试无限制地增加队列,并且您正在加入一个等待队列中有空间