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 を使用しています。
これは非常に一般的なタスクだと思いますが、何らかの理由で完全な解決策を見つけることができません。
どんな助けやアイデアも大歓迎です。ありがとうございました。