【问题标题】:Sending mass email with AWS lambda, ses, sqs, sns使用 AWS lambda、ses、sqs、sns 发送大量电子邮件
【发布时间】:2018-03-31 21:12:57
【问题描述】:

我需要每周发送大约 200-300k 封电子邮件,用于我们的每周通讯。这个数字预计会随着时间的推移而增加,这就是为什么我想让 lambda 为我们处理缩放。

将有一个用户界面供员工触发这些电子邮件的发送。我最初的想法是将电子邮件地址列表添加到 SNS 主题并让 lambda 函数订阅它以触发电子邮件的实际发送。我读到这可能会导致一些意外行为,并且不是追踪错误的最佳选择。

我们目前的限制是每秒 90 封电子邮件。这与执行 lambda 函数的最长时间为 5 分钟相结合,让我想知道如何将其拆分。我是否需要将这些批量发送到 SNS,以便可以均匀地启动多个 lambda 容器来完成工作?我知道 lambda 可以针对诸如将文件添加到 S3 之类的事件进行扩展,但我如何明确告诉 lambda 启动多个以处理所有需要发送的电子邮件?有没有更好的设计模式?

我的另一个想法是将电子邮件添加到 SQS 队列中,以便在出现错误时可以保留电子邮件,但需要采取一些变通方法以使其与 lambda 很好地配合。

更新

我晚了几年,但 Lambda 的工作就像一个魅力。这是详细介绍架构的博客文章:https://read.iopipe.com/how-to-use-aws-lambda-to-send-high-volume-emails-at-scale-10efe65b2f32

还有关于更多细节和经验教训的后续帖子:https://read.iopipe.com/6-lessons-learned-sending-mass-emails-with-aws-lambda-3c5e56e19571

【问题讨论】:

  • 我认为你让这件事变得太难了。我刚刚查看了sendgrid.com,每月 120 万封电子邮件甚至不是他们的最高级别。它并不便宜 - 每月大约 650 美元,但您不必构建在其他地方已经存在的确切东西。他们有工具可以让您自定义和处理垃圾邮件/取消订阅/打开计数等等。我对它们没有经济利益(还有其他提供商),但过去曾成功使用过它们。
  • @Austin 我愿意打赌你可以用第三方来做这件事。我使用过 Mailgun,他们有一个用于发送电子邮件和支持 webhook 的 API。我严重怀疑 Sendgrid 或 Mailgun 无法做到这一点。
  • 如果 Mailgun 或 Sendgrid 不行,为什么 SNS 还可以?
  • SES 不是第三方电子邮件服务,Sendgrid 是吗?
  • SES 在您的 VPC 中不存在。这是一个外部服务。

标签: amazon-web-services aws-lambda amazon-ses


【解决方案1】:

从表面上看,Lambda 似乎是一个很好的解决方案,但实际上并非如此。

您需要开发自己的软件或移植/迁移现有解决方案。管理电子邮件列表和发送电子邮件是一项非常适合普通 EC2 实例(大小适当)和 RDS 的任务。发送一封电子邮件的过程很慢(对于许多 SMTP 服务器来说,每封电子邮件需要几秒钟),因此重叠非常重要。使用 Lambda,您将为 Lambda 等待 SMTP 服务器接受每封电子邮件的所有时间付费。

发送大量(大量)电子邮件存在很多问题。这就是为什么第三方服务变得如此受欢迎的原因。它们提供托管服务,您只需将其插入您的应用程序并继续执行下一个任务。

如果您打算使用 AWS 发送电子邮件,请考虑阅读此最佳实践文档:

Amazon Simple Email Service Email Sending Best Practices

【讨论】:

  • 我们目前正在使用我们的旧实现以每秒约 20 个速度发送它们。
【解决方案2】:

在实施基于 Lambda 的解决方案时要记住的一点是,每个 lambda 都保证至少运行一次。偶尔会出现故障,您的一些用户会收到重复的电子邮件。 Here 估计大约 0.02% 的调用会导致多次执行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-15
    • 1970-01-01
    • 2016-11-17
    • 1970-01-01
    • 2020-11-25
    • 1970-01-01
    • 1970-01-01
    • 2016-10-31
    相关资源
    最近更新 更多