由于节流错误,无法达到亚马逊SES发送限制



我们使用Amazon SES API发送消息。我们的发送速率现在是每秒90条消息。但是,即使我们没有达到这个限制,但只是试图接近它,我们也会遇到节流异常。

现在我们可以稳定地以每秒30条消息的速率发送。问题是如何发送得更快。

让我深入研究一些细节来澄清这个问题。

  • 单个API发送请求可能需要0.3到3秒才能完成。这就是为什么如果我们按顺序发送消息,我们很难获得每秒1条消息的速度。幸运的是,我们可以并行发送消息,这就是我们正在做的。
  • 对于每个线程,我们检查它每秒发送的消息数量是否超过允许的数量。例如,如果我们有40个线程,那么我们不允许每个线程每秒发送超过2个消息。是的,这不是最优的。
  • 我们注册每个消息发送和API请求完成的时间(当我们从API获得响应时)。这允许获得一些统计数据。
  • 当我们将发送限制限制为小于允许限制(如60而不是90)时,一切工作正常。
  • 当我们尝试以最大限制发送时,我们开始得到节流错误。就像当速度达到每秒80个请求时,我们开始出现异常。

这允许我提出问题:

Q:如何以允许的最高速度发送消息?

让我们从另一个问题开始——"SES如何计算检查发送率的消息数?"'

让我猜猜。当我们提交一个新请求时,他们会从当前时刻开始查看最后一秒提交的请求数量,如果这个数量少于我们的限制,则接受请求。

但等待。如果我们有40个线程,每个线程每秒不能发送超过2个消息,那么我们永远无法达到限制。但是我们确实有例外。

<标题> 研究

在Amazon SES博客上有一篇很棒的关于处理限制的博文。我们正在尝试采用这种方法,但尚未成功。

我们在应用程序中使用PHP和PHP SES SDK。

我想这是一个很常见的任务,但由于某种原因,我没有幸运地找到完整的解决方案。


任何帮助或想法都将非常感激。谢谢你。

关键是:

有很多因素会影响你的发送率,例如消息大小,网络性能或Amazon SES可用性

根据你所说的,你似乎在使用一些模糊逻辑来尝试计算你发送了多少条消息。这并不完美,所以如果您的AWS限制是90p/s,那么将代码设置得更低,e/g到60p/s是有意义的(再次强调,这完全取决于您的估计有多准确)。

您应该考虑您提到的其他方法,例如您提供的链接中描述的"指数回退"。

您可以考虑的另一件事是利用队列,如SQS。这样你就可以尽可能快地从列表中选择任务,如果你有点太快了,你总是可以后退,然后尽快跳到队列中。

相关内容

  • 没有找到相关文章

最新更新