如何防止sidekiq平均需要18秒才能接新工作?

问题描述 投票:0回答:1

我有一个在 Heroku 上运行的 Rails 7 API,带有 Web 和 Worker dyno。前端调用对话创建控制器操作,这会触发工作人员的作业。然后紧接着,frontned 调用conversation_entry create 操作,这会再次触发worker 的作业。

第一个作业在调用操作时立即开始,执行并完成它。尽管控制器操作早已完成,但下一个作业仍需要大约 20 秒才能开始执行。

如何缩短 Sidekiq 接受新工作的时间而不是闲着?

我尝试在 Heroku 上将工作人员规模扩大到 2 个,但这没有帮助。

相关代码如下:

sidekiq.rb

require 'sidekiq'

Sidekiq.configure_client do |config|
  config.redis = { :size => 1 }
end

Sidekiq.configure_server do |config|
  config.redis = { :size => 12 }
  config.average_scheduled_poll_interval = 5
  config.concurrency = 5
end

sidekiq.yml

:concurrency: 5
:pidfile: ./tmp/pids/sidekiq.pid
:queues:
  - [urgent, 8]
  - [high, 5]
  - [default, 3]
:production:
  url: <%= ENV['REDIS_URL'] %>
  pool_size: 12
:development:
  :concurrency: 10
  :url: redis://localhost:3001/0
ruby-on-rails jobs sidekiq
1个回答
0
投票

看看这个链接:https://github.com/sidekiq/sidekiq/wiki/Active+Job

基准测试显示,Active Job 将作业推送到 Redis 的速度慢 2-20 倍,并且处理开销约为 3 倍(使用 Rails 5.1.4 和 Sidekiq 5.1.1)。与所有基准测试一样,性能可能会因版本而异,YMMV。

所以...解决方法是在 production.rb 中注释此行:

# config.active_job.queue_adapter = :sidekiq

显然,使用 Sidekiq Active Job 会大大减慢速度!

© www.soinside.com 2019 - 2024. All rights reserved.