【发布时间】:2017-08-17 07:34:22
【问题描述】:
我对 ruby 中的 sidekiq 有疑问。 我正在构建一个系统来发送活动电子邮件,10k - 50k 电子邮件/活动。 现在我使用 Redis 和 Sidekiq,为每封电子邮件创建一个工作人员,如下所示:
receivers.each do |receiver|
begin
email_sending_log = EmailSendingLog.create(email:
receiver["email"], sender: sender["email"], content:
content["value"], status: "REQUESTED")
EmailWorker.perform_async(adapter, receiver, sender, content, subject, email_sending_log.id.to_s)
rescue Exception => e
end
end
但是太慢了, 你们有什么想法可以加快我的系统吗? 或者一些加速sidekiq、redis的例子?
【问题讨论】:
-
"任何加快我的系统的想法" - 是的。第一步是找出究竟慢的地方。只有这样你才能开始考虑改进它。
-
是的,但实际上我真的不明白为什么它这么慢。我使用 sidekiq 的方式是否正确?
-
你猜怎么着,我们也不[理解为什么你的应用这么慢]。
-
“我使用 sidekiq 的方式是否正确?” - 是的,sidekiq api 在这里的使用似乎很好。
-
@TungLe : 圈出问题所在 - 你的生产者慢吗,即你上面生成 EmailWorker 的代码慢吗?您的消费者慢吗?即消费者客户端是否运行得足以处理负载?每个工作进程是否需要太多时间才能完成?例如在 web ui 中监控。另外,请阅读 sidekiq 并发(权衡)。是第 3 方通话(比如 SES)让您放慢了速度吗?我能想到的只有几件事。