gpt4 book ai didi

ruby-on-rails - 使用 shoryuken 进行后台作业时如何确定并发(线程)?

转载 作者:行者123 更新时间:2023-12-02 09:28:47 33 4
gpt4 key购买 nike

在我的 Ruby on Rails 应用程序中,我使用 shoryouken用于后台处理。我的应用程序中有很多 sqs 队列(6-7)。其中一个队列有 2000-3000 个作业,在默认并发数为 25 的情况下,worker 大约需要 3 个小时来处理这 2-3k 个作业。那么基于什么因素我们可以决定增加并发数(即作业的数量)。线程来处理作业)。如果问题中有任何不清楚的地方,请发表评论。

最佳答案

Concurrency defaults to 25 ,但可以通过更改 shoryuken.yml 配置(见下文)或添加并发参数来更改,如下所示:shoryuken -c {desiredCount}

concurrency: 25  # Update with your desired value.
delay: 25 # The delay in seconds to pause a queue when it's empty. Default 0
queues:
- [high_priority, 6]
- [default, 2]
- [low_priority, 1]

您将需要测试最佳性能值,因为随着并发线程数量的增加,您将遇到 I/O 和 CPU 瓶颈。达到实例的最佳值后,您需要增加运行此作业的实例数量或升级实例。

如果瓶颈存在于您的数据库或其他资源上,您需要进行相应的调整。 (情况不太可能如此,但为了彻底起见,将其包括在内)

编辑:优化性能

针对您关于优化线程计数的问题,确定最佳并发值的最快/最佳方法是更改​​并发并测量实际吞吐量。还有其他方法,但性能的黄金法则始终是在实时生产环境中进行测量。综合基准​​仅在反射(reflect)实时性能的情况下才有帮助。 (另请参阅:premature optimization)。

在这种情况下,你很容易就会过度思考(话又说回来,过度思考是开发中长期存在的问题)。只需使用适当的指标(CPU 利用率、内存利用率、每分钟完成的作业数)进行测量,然后更改线程数,直到最大化吞吐量或遇到瓶颈。

如果您的任务受 CPU 限制,您会发现 CPU 利用率达到最大。如果您的任务受 I/O 限制,您会发现在某个时刻后,即使 CPU 利用率未能上升,并发线程的增加也不会转化为吞吐量的增加。

当您正在读取/写入的任何资源无法满足 CPU 需求时,可能会出现 I/O 瓶颈。这包括系统资源(内存、磁盘空间)、数据库性能(数据库 CPU 利用率、读/写限制)以及您连接的其他 API。网络容量也是一个理论上的瓶颈,但如果是的话,您就足够大,可以聘请在该领域有经验的人。因为发生这种情况的方法有很多种,所以找出瓶颈的唯一真正方法就是进行适当的监控。

回复:公式,简短的回答是,在这种情况下没有可以使用的公式。长的答案可能是肯定的,但您会在收集计算它所需的所有值的过程中得出最佳值。

编辑 2:并发、延迟和吞吐量

我意识到我忘了补充一条建议。当您处理用户不等待的后台任务时,您的吞吐量(每单位时间的作业数)是您想要优化的唯一内容。不要针对个人工作时间进行优化。这还意味着您无法分析当前(可能是未绑定(bind)的)性能并获取有用的数据,因为瓶颈/约束是依赖于目标的。吞吐量存在的约束与单个任务时间存在的约束不同。

(从技术上讲,您的并发设置就是您当前的限制)

关于ruby-on-rails - 使用 shoryuken 进行后台作业时如何确定并发(线程)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42114903/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com