Amazon SES のスループットを上げる - Amazon Simple Email Service

Amazon SES のスループットを上げる

E メールを送信するときは、最大送信レートで許可される頻度で Amazon SES を呼び出すことができます。(最大送信レートの詳細については、「Amazon SES 送信制限の管理」を参照してください)。ただし、それぞれの Amazon SES の呼び出しが完了するまで時間がかかります。

Amazon SES API または SMTP インターフェイスを使用して Amazon SES を複数回呼び出す場合は、次のヒントを考慮するとスループットを高めることができます。

  • 現在のパフォーマンスを測定してボトルネックを識別する - 考えられるパフォーマンステストには、アプリケーションのコードループ内で複数のテスト E メールをできる限り早く送信する操作が含まれます。各 SendEmail リクエストのラウンドトリップレイテンシーを測定します。次に、同じマシン上でアプリケーションの追加インスタンスを増分的に起動して、ネットワークレイテンシーへの影響を調べます。また、このテストを複数のマシンおよび異なるネットワークで実行すると、考えられるあらゆるマシンリソースボトルネックや存在する可能性があるネットワークボトルネックを特定するのに役立ちます。

  • (API のみ) 永続的な HTTP 接続の使用を検討する - 永続的な HTTP 接続を使用して、API リクエストごとに別個の新しい HTTP 接続を確立するオーバーヘッドを回避します。つまり、複数の API リクエストに対して同じ HTTP 接続を再利用します。

  • 複数のスレッドの使用を検討する — アプリケーションが単一のスレッドを使用する場合、アプリケーションコードは Amazon SES API を呼び出し、API 応答を同期的に待機します。通常、E メール送信では I/O 負荷が高いため、複数のスレッドからこの操作をする方がよりスループットが向上します。任意の数の実行スレッドを使用して、同時にメールを送信できます。

  • 複数のプロセスを使用することを検討する - 複数のプロセスを使用すると、Amazon SES に対してより多くの同時アクティブ接続を持つことになるため、スループットが向上します。たとえば、目的のメールを複数のバケットにセグメント化した後、E メール送信スクリプトの複数のインスタンスを同時に実行できます。

  • ローカルメールリレーを使用することを検討する - アプリケーションは、ローカルメールサーバーにメッセージを迅速に送信できます。次に、ローカルメールサーバーを使用して、メッセージをバッファ処理し、非同期的に Amazon SES に送信します。一部のメールサーバーでは、同時配信がサポートされています。つまり、アプリケーションがメールサーバーに送る E メールがシングルスレッドで生成される場合でも、メールサーバーから Amazon SES に E メールを送信するときは複数のスレッドが使用されます。詳細については、「Amazon SES を既存の E メールサーバーと統合します」を参照してください。

  • Amazon SES API エンドポイントに近い場所でアプリケーションをホストすることを検討する - Amazon SES API エンドポイントに近いデータセンターか、Amazon SES API エンドポイントと同じAWS地域の Amazon EC2 インスタンスでアプリケーションをホストすることを検討してください。これにより、アプリケーションと Amazon SES の間のネットワークレイテンシーが小さくなり、スループットが向上する可能性があります。Amazon SES を使用できる地域のリストについては、AWS全般のリファレンスの「Amazon Simple Email Service (Amazon SES)」を参照してください。

  • 複数のマシンを使用することを検討する - ホストマシンのシステム構成によっては、単一 IP アドレスへの同時 HTTP 接続の数に制限がある場合があります。つまり、単一マシンでの特定の同時接続数を超えた場合に並列処理の利点が制限されることになります。これがボトルネックとなる場合は、複数のマシンを使用して同時 Amazon SES リクエストを実行することを検討してください。

  • SMTP エンドポイントではなく Amazon SES クエリ API を使用することを検討する - Amazon SES SMTP エンドポイントとのやり取りには複数のネットワークリクエスト (たとえば、EHLO、MAIL FROM、RCPT TO、DATA、QUIT) から構成される SMTP 対話が含まれるのに対し、 クエリ API を使用すると、単一のネットワーク呼び出しを使用して E メール送信リクエストを送信できます。Amazon SES クエリ API の詳細については、Amazon SES API を使用して E メールを送信する を参照してください。

  • Amazon SES メールボックスシミュレーターを使用して最大スループットをテストする - 実装した変更をテストするために、メールボックスシミュレーターを使用できます。メールボックスシミュレーターを使用すると、日次送信クォータを使い果たすことなくシステムの最大スループットを判定できます。メールボックスシミュレータの詳細については、「手動でメールボックスシミュレーターを使用する」を参照してください。

SMTP インターフェイスを介して Amazon SES にアクセスする場合は、「Amazon SES SMTP の問題スループットに影響を与える可能性がある特定の SMTP 関連の問題」を確認してください。