我需要每周发送大约200-300k的电子邮件,用于我们的每周简报。这个数字预计会随着时间的推移而增加,这就是为什么我想让lambda为我们处理缩放的原因。
员工将有一个用户界面触发这些电子邮件的发送。我最初的想法是将电子邮件地址列表添加到SNS主题,并使用lambda函数订阅它以触发实际发送电子邮件。我读过这可能会导致一些意想不到的行为,并不是最好的追踪错误。
我们目前的限制是每秒90封电子邮件。这与5分钟执行lambda函数的最大时间相结合,让我想知道如何拆分它。我是否需要将这些批量发送到SNS,以便可以均匀地旋转多个lambda容器来完成工作?我知道lambda可以扩展为诸如向S3添加文件之类的事件但是我如何明确地告诉lambda旋转多个来处理所有需要发送的电子邮件?是否有更好的设计模式?
我的另一个想法是将电子邮件添加到SQS队列中,以便电子邮件可以保持不变,但需要做一些解决方法,以便与lambda很好地协作。
答案 0 :(得分:5)
从表面上看,Lambda似乎是一个很好的解决方案,但事实并非如此。
您需要开发自己的软件或移植/迁移现有解决方案。管理电子邮件列表和发送电子邮件是一项适合普通EC2实例(适当大小)以及RDS的任务。发送单个电子邮件的过程很慢(对于许多SMTP服务器,每封电子邮件几秒钟),因此重叠至关重要。使用Lambda,您将支付Lambda等待SMTP服务器接受每封电子邮件的所有秒数。
发送批量(大量)电子邮件时存在很多问题。这就是第三方服务变得如此受欢迎的原因。它们提供了一个托管服务,您只需将其插入应用程序并继续执行下一个任务即可。
如果您打算使用AWS发送电子邮件,请考虑阅读此最佳做法文档:
答案 1 :(得分:0)
在实施基于Lambda的解决方案时要记住的一件事是每个lambda保证至少运行一次 。偶尔会有一个小故障,你的一些用户将收到重复的电子邮件。 Here据估计,大约0.02%的调用会导致多次执行。