S3 Express One Zone 的性能准则和设计模式 - Amazon Simple Storage Service

S3 Express One Zone 的性能准则和设计模式

构建从 Amazon S3 Express One Zone 上传和检索对象的应用程序时,请遵循最佳实践准则以优化性能。要使用 S3 Express One Zone 存储类,您必须创建 S3 目录存储桶。S3 Express One Zone 存储类不支持与 S3 通用存储桶一起使用。

有关其他所有 Amazon S3 存储类和 S3 通用存储桶的性能准则,请参阅最佳实践设计模式:优化 Amazon S3 性能

应用程序在使用 S3 Express One Zone 存储类和目录存储桶时,要想获得最佳性能,我们建议遵循以下准则和设计模式。

将 S3 Express One Zone 存储与您的 AWS 计算资源联合托管在一个位置

每个目录存储桶存储在创建存储桶时选择的单个可用区中。首先,在计算工作负载或资源所在的可用区中,可以创建一个新的目录存储桶。然后就可以立即开始享受到延迟非常低的读取和写入。目录存储桶是第一种可以选择 AWS 区域中可用区的 S3 存储桶,可以减少计算和存储之间的延迟。

如果您跨可用区访问目录存储桶,则延迟会增加。为了优化性能,我们建议您尽可能从位于同一可用区的 Amazon Elastic Container Service、Amazon Elastic Kubernetes Service 和 Amazon Elastic Compute Cloud 实例访问目录存储桶。

目录存储桶

每个目录存储桶均可支持数十万的每秒事务数(TPS)。与通用存储桶不同,目录存储桶将键分层组织到目录中,而不是前缀中。前缀是对象键名称开头的一串字符串。您可以把前缀视为一种以类似于目录的方式组织数据的方式。但是,前缀不是目录。

前缀在通用存储桶的平面命名空间中组织数据,通用存储桶中的前缀数量没有限制。每个前缀每秒可以实现每秒至少 3500 个 PUT/POST/DELETE 或 5500 个 GET/HEAD 请求。您还可以并行处理多个前缀的请求以扩展性能。但是,无论是读取操作还是写入操作,此扩展都是逐渐发生的,而不是瞬间发生。当通用存储桶扩展到新的更高请求速率时,您可能会收到一些 HTTP 状态码 503(服务不可用)错误。

对于分层命名空间,对象键中的分隔符很重要。唯一支持的分隔符是正斜杠(/)。目录由分隔符边界确定。例如,对象键 dir1/dir2/file1.txt 会自动创建目录 dir1/ 和 dir2/,并将对象 file1.txt 添加到路径 dir1/dir2/file1.txt 中的 /dir2 目录。

将对象上传到目录存储桶时创建的目录对每个前缀没有 TPS 限制,并且会自动进行预扩展,以减少出现 HTTP 503(服务不可用)错误的可能性。通过这种自动扩展,您的应用程序可以根据需要并行处理目录内和跨目录的读取和写入请求。

目录存储桶横向扩展请求并行化

您可以将多个并行请求发送到目录存储桶,以便在不同的连接上分布请求,尽可能充分利用可用带宽,从而实现出色的性能。S3 Express One Zone 对与目录存储桶建立的连接数没有任何限制。在对同一目录进行大量并发写入操作时,这一目录可以横向自动扩展性能。

在最初创建对象键并且其键名包含目录时,将自动为该对象创建该目录。后续对象上传到相同目录时不需要创建目录,这样可以减少将对象上传到现有目录的延迟。

虽然目录存储桶中支持以浅层目录结构和深层目录结构存储对象,但目录存储桶可以自动横向扩展,同时上传到相同目录或并行同级目录的延迟更低。

使用基于会话的身份验证

S3 Express One Zone 和目录存储桶支持基于会话的新型授权机制,用于对发送到目录存储桶的请求进行身份验证和授权。使用基于会话的身份验证,AWS SDK 会自动使用 CreateSession API 操作创建临时会话令牌,该令牌可用于对发送到目录存储桶的数据请求进行低延迟授权。

AWS SDK 使用 CreateSession API 操作请求临时凭证,然后代表您每 5 分钟自动创建和刷新令牌。为了充分利用 S3 Express One Zone 存储类的性能优势,我们建议您使用 AWS SDK 来启动和管理 CreateSession API 请求。有关此基于会话的模型的更多信息,请参阅 使用 CreateSession 对可用区端点 API 操作进行授权

其他 S3 校验和最佳实践

S3 Express One Zone 可让您选择用于在上传或下载过程中验证数据的校验和算法。您可以选择以下安全哈希算法(SHA)或循环冗余校验(CRC)数据完整性检查算法之一:CRC32、CRC32C、SHA-1 和 SHA-256。S3 Express One Zone 存储类不支持基于 MD5 的校验和。

CRC32 是 AWS SDK 在对 S3 Express One Zone 往返传输数据时默认使用的校验和。我们建议使用 CRC32 和 CRC32C,以便在 S3 Express One Zone 存储类上获得最佳性能。

使用最新版本的 AWS SDK 和通用运行时库

一些 AWS SDK 还提供 AWS 通用运行时(CRT)库,以进一步提高 S3 客户端的性能。这些 SDK 包括 AWS SDK for Java 2.x、AWS SDK for C++ 和 AWS SDK for Python (Boto3)。基于 CRT 的 S3 客户端通过自动使用分段上传 API 操作和字节范围提取来自动进行横向扩展连接,从而以高性能和可靠性向 S3 Express One Zone 往返传输数据。

要使用 S3 Express One Zone 存储类实现极佳的性能,我们建议使用包含 CRT 库的 AWS SDK 的最新版本使用 AWS Command Line Interface(AWS CLI)。

性能故障排除

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

S3 Express One Zone 专为提供稳定的高性能而设计,无需额外调整。但是,设置更主动的超时值和重试次数可以进一步推动实现稳定的延迟和性能。AWS SDK 具有可配置的超时和重试值,您可以进行调整以符合特定应用程序的容限。

AWS Common Runtime(CRT)库和 Amazon EC2 实例类型搭配

执行大量读取和写入操作的应用程序,相比不执行这些操作的应用程序会需要更多的内存或计算容量。在为具有高性能要求的工作负载启动 Amazon Elastic Compute Cloud(Amazon EC2)实例时,应选择具有您的应用程序需要的这些资源量的实例类型。S3 Express One Zone 高性能存储非常适合与更大、更新的实例类型搭配使用,这些实例类型具有更大的系统内存以及计算能力更强的 CPU 和 GPU,可以利用性能更高的存储。我们还建议使用启用了 CRT 的 AWS SDK 的最新版本,这样可以更好地加速并行读取和写入请求。

在 AWS SDK 而不是 HTTP REST API 中使用基于会话的身份验证

借助 Amazon S3,在使用 HTTP REST API 请求时,您还可以遵循 AWS SDK 中相同的最佳实践,以此来优化性能。但是,对于 S3 Express One Zone 使用的基于会话的授权和身份验证机制,我们强烈建议您使用 AWS SDK 管理 CreateSession 及其托管会话令牌。AWS SDK 使用 CreateSession API 操作,自动代表您创建和刷新令牌。使用 CreateSession 可减少 AWS Identity and Access Management(IAM)授权各个请求的请求往返延迟。