本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
增加 Amazon SES 吞吐量
在发送电子邮件时,您调用 Amazon SES 的频率可以等于允许的最大发送速率。(有关最大发送速率的更多信息,请参阅管理您的 Amazon SES 发送限制。) 但是,每次调用 Amazon SES 需要花费一定时间才能完成。
如果使用 Amazon SES API 或 SMTP 接口进行多次 Amazon SES 调用,可能需要考虑以下提示,以帮助提高吞吐量:
-
测量当前性能以确定瓶颈 – 性能测试的方法包括在应用程序的代码循环中以尽可能快的速度发送多个测试电子邮件。策略每个
SendEmail
请求的往返操作延迟。然后,以增量方式在同一台计算机上启动应用程序的其他实例,并监视是否对网络延迟有影响。您可能还需要在多台计算机上和不同网络中运行此测试,以帮助查明可能存在的任何机器资源瓶颈或网络瓶颈。 -
(仅 API)考虑使用持久 HTTP 连接 – 使用持久 HTTP 连接,而不是为每个 API 请求建立单独的新 HTTP 连接并因此产生开销。也就是说,为多个 API 请求重复使用相同的 HTTP 连接。
-
考虑使用多个线程 – 在应用程序使用单个线程时,应用程序代码调用 Amazon SES API,然后同步等待 API 响应。发送电子邮件通常是 I/O 密集型操作,使用多个线程工作可提供更高的吞吐量。您可以根据需要使用多个线程并发执行发送。
-
考虑使用多个进程 – 使用多个进程可帮助提高吞吐量,因为您将获得更多与 Amazon SES 的并发活跃连接。例如,您可以将预期的电子邮件分配到多个存储桶,然后同时运行电子邮件发送脚本的多个实例。
-
考虑使用本地邮件中继 – 您的应用程序可以快速将邮件传送到本地邮件服务器,这可以帮助缓冲该邮件并将它们异步传送给 Amazon SES。有些邮件服务器支持送达并发,这意味着即使您的应用程序以单线程的方式生成传送至邮件服务器的电子邮件,邮件服务器在发送至 Amazon SES 时也将使用多个线程。有关更多信息,请参阅将 Amazon SES 与您现有的电子邮件服务器集成。
-
考虑在更接近 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 请求。
-
考虑使用 Amazon SES 查询 API 代替 SMTP 终端节点 – 使用 Amazon SES 查询 API 让您可以使用单次网络调用提交电子邮件发送请求,而与 SMTP 终端节点相连接涉及包含多个网络请求(例如 EHLO、MAIL FROM、RCPT TO、DATA、QUIT)的 SMTP 对话。有关 Amazon SES 查询 API 的更多信息,请参阅使用 Amazon SES API 发送电子邮件。
-
使用 Amazon SES 邮箱模拟器测试您的最高吞吐量 – 您可以使用邮箱模拟器测试您实施的任何更改。邮箱模拟器可帮助您确定系统的最大吞吐量,并且不会用完您的日发送配额。有关邮箱模拟器的信息,请参阅手动使用邮箱模拟器。
如果您通过 Amazon SES 的 SMTP 接口访问它,请参阅Amazon SES SMTP 问题,以了解可能会影响吞吐量的特定 SMTP 相关问题。