3

SES API を使用して Amazon SES でメッセージを送信します。私たちの送信レートは現在、1 秒あたり 90 メッセージです。ただし、この制限に達していなくても、制限に近づこうとしている場合でも、スロットリング例外が発生します。

現在、毎秒 30 メッセージの速度で安定して送信できます。問題は、より速く送信する方法です。

もう少し詳細に掘り下げて、質問を明確にしましょう。

  • 1 つの API 送信要求が完了するまでに 0.3 ~ 3 秒かかる場合があります。これが、メッセージを順次送信すると、1 秒あたり 1 メッセージの速度が得られない理由です。
  • 幸いなことに、メッセージを並行して送信できます。これが私たちが行っていることです。
  • 各スレッドについて、1 秒あたりの許容数を超えるメッセージを送信していないことを確認します。たとえば、40 個のスレッドがある場合、各スレッドが 1 秒あたり 2 件を超えるメッセージを送信することを許可しません。はい、これは最適ではありません。
  • すべてのメッセージ送信と、API リクエストが完了した時刻 (API からの応答を取得した時刻) を登録します。これにより、いくつかの統計を取得できます。
  • 送信制限を許可された制限 (90 ではなく 60 など) 未満に制限すると、すべてが正常に機能します。
  • 最大制限で送信しようとすると、スロットリング エラーが発生し始めます。毎秒 80 リクエストの速度に達したときのように、例外が発生し始めます。

これにより、質問をすることができます:

Q: 許可されている最高速度でメッセージを送信するにはどうすればよいですか?

別の質問から始めましょう - 「SES は送信レートをチェックするためにメッセージ数をどのように計算しますか?」

私に当てさせてください。新しいリクエストを送信すると、現在の瞬間から最後の 1 秒間に送信されたリクエストの数が調べられ、この数が制限よりも少ない場合、リクエストは受け入れられます。

ちょっと待って。40 個のスレッドがあり、各スレッドが 1 秒あたり 2 件を超えるメッセージを送信できない場合、制限に達することはありません。しかし、例外があります。

リサーチ

制限の処理に関する素晴らしいブログ投稿が Amazon SES ブログにあります。私たちはこのアプローチを採用しようとしていますが、まだ成功していません。

アプリケーションと PHP SES SDK で PHP を使用しています。

これは非常に一般的なタスクだと思いますが、何らかの理由で完全な解決策を見つけることができません。


どんな助けやアイデアも大歓迎です。ありがとうございました。

4

1 に答える 1

1

要点は次のとおりです。

メッセージ サイズ、ネットワーク パフォーマンス、Amazon SES の可用性など、さまざまな要因が送信速度に影響を与える可能性があります。

あなたが言ったことに基づいて、送信しているメッセージの数を計算しようとするために、少しファジーなロジックを使用しているようです. これは完璧ではないため、AWS の制限が 90p/s の場合、コードをより低く設定することは理にかなっています。

提供したリンクで説明されている「指数バックオフ」など、言及した他のアプローチを検討する必要があります。

考慮できるもう 1 つのことは、SQS などのキューを利用することです。このようにして、リストからできるだけ早くタスクを選択できます。少し速すぎる場合は、いつでも後戻りして、できるだけ早くキューに戻ることができます。

于 2013-09-12T04:07:52.473 に答える