我有一个要求,我应该能够每秒运行 100 个 sidekiq 作业。我将服务器容量增加到 8 个 CPU,并创建了 4 个 sidekiq 进程,但它仍然每分钟提供 50 个作业。我不确定我在哪里失踪
1013 次
2 回答
5
我得到了该问题的解决方案,因此回答了我的问题。
我正在使用sidekiq 4。根据sidekiq 文档,此版本的sidekiq 每秒能够运行800 个作业。
因此,我刚刚编写了一个没有逻辑的虚拟工作者,并创造了大约 10 万个工作岗位。这些作业以每秒 666 个作业的速度运行。
所以我得出的结论是,不是 sidekiq 配置达到了性能,而是我的工作逻辑需要更多时间来执行工作。
我开始优化 sidekiq 工作逻辑并减少其执行时间。它对我有用
现在我可以为 1 个 sidekiq 进程每秒运行 30 个作业。如果我们增加 sidekiq 进程,那么每秒的作业数量也会增加。
这就像(每秒的作业数)*(sidekiq 进程数)。
最后,总是创建轻量级的worker,显着提高sidekiq的性能然后去增加服务器容量
于 2020-07-28T08:56:55.753 回答
4
请提供一些关于您当前正在做什么的详细信息,但不知道您已经在做什么:
[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”相同的参数,但需要一个数组数组。
于 2020-07-25T13:43:14.570 回答