如何为我的 rails 应用程序扩展 sidekiq 性能。需要 运行 每秒 100 个 sidekiq 作业

How to scale sidekiq performance for my rails application. Need to run 100 sidekiq jobs per second

我有一个要求,我应该能够每秒 运行 100 个 sidekiq 作业。 我将服务器容量增加到 8 个 CPU,并创建了 4 个 sidekiq 进程,但它仍然每分钟处理 50 个作业。 我不确定我错过了什么

请详细说明您目前正在做什么,但不知道您已经在做什么:

[1] 使用缓存数据库连接的连接池:

Sidekiq.redis do |conn|
  conn.pipelined do
    # do stuff
  end
end

这应该会显着减少队列的处理时间。

[2] 你总是可以像这样使用 'push_bulk':

args = model.map {|uid| [uid] }
Sidekiq::Client.push_bulk('class' => YourWorker, 'args' => args)

这消除了 redis 往返延迟。它采用与 'push,' 相同的参数,但需要一个数组数组。

我找到了问题的解决方案,因此回答了我的问题。

我正在使用 sidekiq 4。根据 sidekiq 文档,此版本的 sidekiq 每秒能够 运行 800 个作业。

所以我刚刚编写了一个没有逻辑的虚拟工人并创造了大约 10 万个工作岗位。这些作业 运行 以每秒 666 个作业的速度。

所以我得出的结论是,影响性能的不是 sidekiq 配置,而是我的 worker 逻辑需要更多时间来执行作业。

我开始优化 sidekiq worker 逻辑并减少其执行时间。它对我有用

现在我可以 运行 1 个 sidekiq 进程每秒处理 30 个作业。如果我们增加 sidekiq 进程,那么每秒的作业数也会增加。

这就像(每秒作业数)*(sidekiq 进程数)。

最后,始终创建可显着提高 sidekiq 性能的轻量级 worker 然后去增加服务器容量