我们使用SES API通过Amazon SES发送消息。我们的发送速率现在是每秒90条消息。但即使我们没有达到这个限制,我们也会得到throttling exception,但只是试图接近它。
现在我们可以稳定地以每秒30条消息的速度发送。问题是如何更快地发送。
让我深入了解一些细节并澄清问题。
这让我可以提出问题:
让我们从另一个问题开始 - “SES如何计算检查发送速率的消息数量?”
让我猜一下。当我们提交新请求时,他们会查看从当前时刻起最后一秒内提交的请求数量,如果此数字小于我们的限制,则接受请求。
但是等等。如果我们有40个线程,并且每个线程每秒不能发送超过2条消息,那么我们永远不会达到限制。但我们确实得到了例外。
Amazon SES博客上有一个关于处理限制的好blog post。我们正试图采用这种方法但尚未成功。
我们在应用程序和PHP SES SDK中使用PHP。
我想这是一项非常常见的任务,但由于某种原因,我找不到完整的解决方案是不幸的。
非常感谢任何帮助或想法。谢谢。
答案 0 :(得分:1)
关键是:
各种因素都会影响您的发送率,例如:邮件大小, 网络性能或Amazon SES可用性。
根据您的说法,您似乎正在使用一些模糊逻辑来尝试计算您发送的邮件数量。这不是完美的,所以如果你的AWS限制为90p / s,那么设置你的代码更低,e / g到60p / s是有意义的(再一次这取决于你的估计的准确度)。
您应该考虑您提到的其他方法,例如您提供的链接中所述的“指数退避”。
您可以考虑的另一件事是利用队列,例如SQS。这样你就可以尽快从列表中选择任务,如果你有点太快,你可以随时退回然后尽快跳回队列。