使用sidekiq、redis发送邮件
Sending email using sidekiq, redis
我对 ruby 中的 sidekiq 有疑问。
我正在构建一个系统来发送活动电子邮件,10k - 50k emails/campaign。
现在我正在使用 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 的例子?
发送活动电子邮件是一项非常标准的任务 - 必须发送 N 封电子邮件(您的 N=10k..50k)。
初学者选择两种相反的方式:一个带有 N-loop 的后台作业或一个发送的 N 个后台作业。
两者都不好:
- 长 N 循环容易出错并强制关闭(app deploy
等)- 很多消息可能会发送两次,很多消息可能会丢失。
- 由于作业处理开销(您的情况),N 个作业需要花费大量时间。
怎么办?
批次。使用 M 个作业和 K 循环,每个作业 M*K=N。示例:100 多个作业,每个作业有 100 个循环。尝试不同的 M、K,然后选择最适合您的。这不是灵丹妙药,而是反其道而行之的中庸之道。
电子邮件发送服务。如果您的广告系列是marketing emails(我认为是),最好的方法是使用 Sendgrid、SES、Mailchimp 等电子邮件发送服务, Mailgun, Elasticemail 等等。
它们允许您为每个活动创建电子邮件模板(带替换),然后通过一个 API 调用(地址和替换作为调用的参数)发送整个活动。这是最快和最可靠的方式,而且电子邮件发送服务提供额外的好处。唯一的缺点是要付费。
我对 ruby 中的 sidekiq 有疑问。 我正在构建一个系统来发送活动电子邮件,10k - 50k emails/campaign。 现在我正在使用 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 的例子?
发送活动电子邮件是一项非常标准的任务 - 必须发送 N 封电子邮件(您的 N=10k..50k)。
初学者选择两种相反的方式:一个带有 N-loop 的后台作业或一个发送的 N 个后台作业。
两者都不好:
- 长 N 循环容易出错并强制关闭(app deploy 等)- 很多消息可能会发送两次,很多消息可能会丢失。
- 由于作业处理开销(您的情况),N 个作业需要花费大量时间。
怎么办?
批次。使用 M 个作业和 K 循环,每个作业 M*K=N。示例:100 多个作业,每个作业有 100 个循环。尝试不同的 M、K,然后选择最适合您的。这不是灵丹妙药,而是反其道而行之的中庸之道。
电子邮件发送服务。如果您的广告系列是marketing emails(我认为是),最好的方法是使用 Sendgrid、SES、Mailchimp 等电子邮件发送服务, Mailgun, Elasticemail 等等。
它们允许您为每个活动创建电子邮件模板(带替换),然后通过一个 API 调用(地址和替换作为调用的参数)发送整个活动。这是最快和最可靠的方式,而且电子邮件发送服务提供额外的好处。唯一的缺点是要付费。