我们使用 SES API 通过 Amazon SES 发送消息。我们的发送速率现在是每秒 90 条消息。但是即使我们没有达到这个限制而只是试图接近它,我们也会遇到限制异常。
现在我们可以稳定地以每秒 30 条消息的速度发送。问题是如何发送更快。
让我深入了解更多细节并澄清问题。
- 完成单个 API 发送请求可能需要 0.3 到 3 秒。这就是为什么如果我们按顺序发送消息,我们几乎不会获得每秒 1 条消息的速度。
- 幸运的是,我们可以并行发送消息,这就是我们正在做的事情。
- 对于每个线程,我们检查它每秒发送的消息数量是否超过允许的数量。例如,如果我们有 40 个线程,那么我们不允许每个线程每秒发送超过 2 条消息。是的,这不是最优的。
- 我们记录每条消息发送和 API 请求完成的时间(当我们从 API 获得响应时)。这允许获得一些统计数据。
- 当我们将发送限制限制为小于允许的限制(如 60 而不是 90)时,一切正常。
- 当我们尝试以最大限制发送时,我们开始遇到限制错误。就像当达到每秒 80 个请求的速度时,我们开始收到异常。
这让我可以提出以下问题:
问:如何以允许的最高速度发送消息?
让我们从另一个问题开始——“SES 如何计算消息数量以检查发送率?”
让我猜猜。当我们提交一个新请求时,他们会查看从当前时刻起最后一秒提交的请求数量,如果这个数量小于我们的限制,那么请求就会被接受。
可是等等。如果我们有 40 个线程并且每个线程每秒不能发送超过 2 条消息,那么我们永远无法达到限制。但我们确实得到了例外。
研究
Amazon SES 博客上有一篇关于处理限制的精彩博文。我们正在尝试采用这种方法,但尚未成功。
我们在我们的应用程序和 PHP SES SDK 中使用 PHP。
我想这是很常见的任务,但出于某种原因,我并不幸运地找到了完整的解决方案。
任何帮助或想法将不胜感激。谢谢你。