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

发布时间:2019-11-12 发布网站:脚本之家
脚本之家收集整理的这篇文章主要介绍了ruby-on-rails – 如何在使用shoryuken进行后台工作时确定并发(线程)?脚本之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在我的 Ruby on Rails应用程序中,我使用 shoryouken进行后台处理.我的应用程序中有很多sqs队列(6-7).其中一个队列有2000-3000个工作,工作人员需要大约3个小时的时间来处理这2-3k的作业,默认的并发性为25.所以基于什么因素可以决定增加并发性(这是多少线程处理作业).如果问题中有什么不清楚,请做评论.

解决方法

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瓶颈.达到实例的最佳值后,您需要增加运行此作业的实例数量或升级实例.

如果您的数据库或其他资源存在瓶颈,则需要相应调整. (不太可能是这样,但为了彻底的包含)

编辑:优化性能

为了回应您关于优化线程数量的问题,确定最优并发值的最快/最佳方法是更改​​并发性并测量实际吞吐量.还有其他的方法,但性能的黄金规则总是在现场生产环境中进行测量.合成的基准测试只能在镜像实时性能方面有所帮助. (参见:premature optimization).

这是一个你可以很容易地最终反思事情的情况(再次,反思是事物是发展中的常年问题).只需使用适当的度量标准(CPU利用率,内存利用率,每分钟完成的作业数量),并更改线程数,直到最大化吞吐量或遇到瓶颈.

如果您的任务是CPU限制,您将看到您的CPU利用率最大化.如果您的任务是I / O绑定,您将看到,即使您的CPU利用率不高,并发线程的增加也不会转化为吞吐量的增加.

当您读/写的任何资源无法跟上您的CPU需求时,就会发生I / O瓶颈.这包括系统资源(内存,磁盘空间),数据库性能(DB CPU利用率,读/写限制)以及您连接的其他API.网络容量也是一个理论上的瓶颈,但如果你是足够大的雇佣了这方面的经验的人.因为有这么多不同的方法可以实现,唯一真正的方法来确定瓶颈是什么是使您的监控到位.

Re:公式,简单的答案是在这种情况下没有一个可以使用的公式.很长一段时间的答案可能是肯定的,但是在收集您需要计算的所有值的过程中,您将达到最佳值.

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

我意识到我忘了增加一条建议.当您使用用户不等待的后台任务时,您的吞吐量(每单位时间的作业)是您唯一要优化的.不要为个别工作时间优化.这也意味着您无法分析当前(可能无限制)的性能并获得有用的数据,因为瓶颈/约束是目标依赖的.吞吐量存在的约束与单个任务时间的约束不同.

(从技术上讲,您的并发设置是您当前的约束)

总结

以上是脚本之家为你收集整理的ruby-on-rails – 如何在使用shoryuken进行后台工作时确定并发(线程)?全部内容,希望文章能够帮你解决ruby-on-rails – 如何在使用shoryuken进行后台工作时确定并发(线程)?所遇到的程序开发问题。

如果觉得脚本之家网站内容还不错,欢迎将脚本之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:76874919,请注明来意。

脚本之家官方公众号

微信公众号搜索 “ 程序精选 ” ,选择关注!

微信公众号搜索 “ 程序精选 ” ,选择关注!
精选程序员所需精品干货内容!

标签: