使用sidekiq发送电子邮件,redis

时间:2017-08-17 07:34:23

标签: ruby email redis sidekiq

我对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?

1 个答案:

答案 0 :(得分:1)

发送广告系列电子邮件是非常标准的任务 - 必须发送N封电子邮件(您的N = 10k..50k)。
初学者选择两种相反的方式:一个具有N-loop OR N后台作业的后台作业,一个发送。

两者都不好:

  • Long N-loop容易出错并强制关机(app deploy 等) - 许多消息可能会被发送两次,很多消息可能会丢失。
  • 由于工作处理开销(您的情况),N-jobs需要花费大量时间。

怎么办?

批次。在M * K = N的情况下,使用带有K循环的M个作业。示例:100个作业,每个作业100个循环。尝试不同的M,K并为您选择最好的一个。它不是一颗银弹,而是一种反其道而行的中庸之道。

电子邮件发送服务。如果您的广告系列是marketing emails(我认为是),最好的方法是使用Sendgrid,SES,Mailchimp,Mailgun,Elasticemail等电子邮件发送服务等等。
它们允许您为每个广告系列创建电子邮件模板(带替换),然后通过一次API调用(地址和替换作为调用的参数)执行整个广告系列发送。它是最快速,最可靠的方式,而且电子邮件发送服务提供了额外的好处。唯一的缺点就是支付了。