Amazon Simple Storage Service
开发人员指南 (API 版本 2006-03-01)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

Amazon S3 的性能准则

当构建用于从 Amazon S3 上传和检索存储的应用程序时,请遵循我们的最佳实践准则以优化性能。我们还提供了更详细的性能设计模式

要在 Amazon S3 上获得应用程序的最佳性能,我们建议遵循以下准则。

衡量性能

当优化性能时,查看网络吞吐量、CPU 和 DRAM 要求。根据针对这些不同资源的组合需求,可能需要评估不同的 Amazon EC2 实例类型。有关实例类型的更多信息,请参阅 Amazon EC2 用户指南(适用于 Linux 实例) 中的实例类型

它还有助于在衡量性能时使用 HTTP 分析工具查看 DNS 查找时间、延迟和数据传输速度。

横向扩展存储连接

跨许多连接分布请求是一种常用的横向扩展性能的设计模式。当构建高性能应用程序时,将 Amazon S3 视为非常大的分布式系统,而不是类似于传统存储服务器的单个网络终端节点。您可以通过将多个并行请求发到 Amazon S3 来实现最佳性能。跨单独的连接分布这些请求以最大限度地提高 Amazon S3 的可用带宽。Amazon S3 对于对存储桶进行的连接数没有任何限制。

使用字节范围提取

通过在 GET 对象请求中使用 Range HTTP 标头,您可以从对象中提取字节范围,而只传输指定的部分。您可以使用到 Amazon S3 的并行连接,从相同对象中提取不同的字节范围。这有助于您通过单一整个对象请求实现更高的聚合吞吐量。通过提取较小范围的大型对象,您的应用程序还可以在请求中断时改善重试次数。有关更多信息,请参阅获取对象

字节范围请求的典型大小为 8 MB 或 16 MB。如果使用分段上传来 PUT 对象,则最佳实践是以相同的分段大小来 GET 它们(或者至少与分段边界相符)以获得最佳性能。GET 请求可以直接面向单独的分段;例如,GET ?partNumber=N.

延迟敏感型应用程序的重试请求

大量的超时和重试会导致持续不断的延迟。考虑到 Amazon S3 的大规模,如果第一个请求较慢,则退出的请求可能采取不同的路径并快速成功。AWS 开发工具包具有可配置的超时和重试值,您可以进行调整以符合特定应用程序的容限。

在同一个 AWS 区域中组合 Amazon S3(存储)和 Amazon EC2(计算)

尽管 S3 存储桶名称全局唯一,但每个存储桶存储在您创建它时所选择的区域中。为了优化性能,我们建议您尽可能从位于同一个 AWS 区域的 Amazon EC2 实例中访问此存储桶。这可以减少网络延迟和数据传输成本。

使用 Amazon S3 Transfer Acceleration 最大限度地减少因距离导致的延迟

Amazon S3 Transfer Acceleration 可在客户端与 S3 存储桶之间管理快速、轻松和安全的长地理距离文件传输。Transfer Acceleration 利用 Amazon CloudFront 中的全球分布式边缘站点。当数据到达某个边缘站点时,会通过经过优化的网络路径路由至 Amazon S3。Transfer Acceleration 适合定期跨大洲传输 GB 到 TB 的数据。它也适用于全球各地需要上传到集中式存储桶的客户。

您可以使用 Amazon S3 Transfer Acceleration 速度比较工具来比较各个 Amazon S3 区域内加快的上传速度和未加快的上传速度。此速度比较工具使用分段上传来将文件从浏览器传输到各种使用和未使用 Amazon S3 Transfer Acceleration 的 Amazon S3 区域。

使用最新版本的 AWS 开发工具包

AWS 开发工具包为许多用于优化 Amazon S3 性能的建议准则提供内在的支持。这些开发工具包提供了更简单的 API 以便从应用程序内部利用 Amazon S3,并定期更新以遵循最新的最佳实践。例如,这些开发工具包包含自动对 HTTP 503 错误重试请求的逻辑,并投资编写代码来应对和适应慢速连接。

这些开发工具包还提供传输管理器,以便在适当的时机使用字节范围请求来自动横向扩展连接,从而实现每秒数千个请求。务必使用最新版本的 AWS 开发工具包,以获取最新的性能优化功能。

您还可以在使用 HTTP REST API 请求时优化性能。当使用 REST API 时,您应遵循属于开发工具包一部分的相同最佳实践。对于慢速连接允许超时和重试,并使用多个连接以允许并行提取对象数据。有关使用 REST API 的信息,请参阅 Amazon Simple Storage Service API Reference