如何解决下载或上传到 Amazon S3 时速度缓慢或时快时慢的问题?

2 分钟阅读
0

我想解决从特定网络或计算机下载或上传到 Amazon Simple Storage Service (Amazon S3) 时出现高延迟或速度时快时慢的问题。

解决方法

检查以下内容,确定下载或上传到 Amazon S3 时可能导致速度缓慢或时快时慢的原因并予以缓解:

  • 提出请求的客户端的位置
  • 客户端互联网服务提供商 (ISP)
  • 客户端网络
  • 客户端资源
  • 对 Amazon S3 的请求速率
  • 用于确定周转时间的 Amazon S3 服务器访问日志

提出请求的客户端的位置

使用地理位置尽可能靠近您的客户端的 Amazon S3 桶。用户可在全球各地访问桶,但桶位于特定的 AWS 区域。请求和桶之间的地理距离会影响收到响应所需的时间。

您可以测试客户端与 S3 桶之间地理距离的影响。例如,您可以在桶所在的 AWS 区域中启动 Amazon Elastic Compute Cloud (Amazon EC2) 实例。然后,在另一个区域启动另一个实例。使用这两个实例测试同一个文件的上传和下载情况,然后比较两个区域的吞吐量。

要缩短客户端与 S3 桶之间的距离,请将您的数据移动到距离客户端更近的区域的桶中。您可以配置跨区域复制,以便将源桶中的数据复制到新区域的目标桶中。或者,您也可以考虑将客户端迁移到更靠近 S3 桶的位置。

客户端互联网服务提供商 (ISP)

查看您的网络路径是否存在任何影响您的连接穿越互联网的问题。这些问题可能包括数据包丢失、跃点数过高或其他与 ISP 相关的问题。

诸如 mtrtraceroute 之类的工具可以针对数据包可能丢失的问题帮忙提供线索。它们还能够为发送到远程主机的数据包提供延迟。此外,这些工具还有助于确定是否有网络跃点会导致更长的延迟。

例如,以下 Linux traceroute 命令使用 TCP 端口 80 来测试与 us-west-2(俄勒冈)区域端点的连接情况:

sudo traceroute -P TCP -p 80 s3.us-west-2.amazonaws.com

您可以在 Windows 操作系统上使用名为 tracert 的类似工具。

**注意:**许多网络设备不响应 ICMP。如果测试内容类似于 Amazon S3 请求,请务必对桶的区域端点运行 TCP traceroute 或 mtr。

如果从客户端到 Amazon S3 的互联网路由不是最佳路由,则可以考虑使用 Amazon S3 Transfer Acceleration,此功能可以利用 Amazon CloudFront 的边缘站点。使用 Amazon S3 Transfer Acceleration Speed Comparison 工具,看看 Amazon S3 Transfer Acceleration 能否提高您的用例的性能。

**注意:**启用 Amazon S3 Transfer Acceleration 后,可能需要支付额外的数据传输费用。请务必查看 Amazon S3 的数据传输定价

客户端网络

通过核实内部数据包检查、防病毒扫描或网络访问管理,确认您的客户端网络运行正常。另外,请确认您的客户端或应用程序如何处理 DNS 解析和缓存。

要充分发挥 Amazon S3 的分布式特性和可用性,请避免长时间缓存 DNS 解析

客户端资源

您的应用程序中可能会出现延迟,您发出请求的主机也可能要处理发出的请求和收到的响应。作为最佳实践,请确认主机内部不存在可能导致整体延迟的资源争用情况。例如,主机内的资源争用可能与 CPU、内存或网络带宽有关。

您可以在大多数客户端系统上使用资源监视器top 命令等工具检查数据传输期间的资源使用情况。您可以使用的工具取决于您所用的操作系统。

客户端的存储设备或系统也可能是导致延迟的源头。如果客户端存储设备的延迟较长,则对该设备进行读写操作可能会影响 Amazon S3 的上传或下载性能。您必须解决客户端存储设备 IOPS 存在的问题。您可以使用 Amazon CloudWatch 指标 FirstByteLatency 来分析 Amazon S3 的性能。

**注意:**Amazon S3 CloudWatch 请求指标的计费率与自定义指标相同

FirstByteLatency 显示 Amazon S3 处理来自客户端的请求后再开始将响应发送到客户端需要的时长。CloudWatch 指标提供了桶级别的性能视角。您可以使用 Amazon S3 服务器访问日志缩小调查范围。有关详细信息,请访问用于确定周转时间的 Amazon S3 服务器访问日志章节。

对 Amazon S3 的请求速率

默认情况下,S3 桶可以支持每个前缀每秒数千个请求。如果客户端收到来自 Amazon S3 的 HTTP 5xx 错误响应,则可能表示超出了每个前缀支持的请求速率。要解决 5xx 错误,请参阅如何解决来自 Amazon S3 的 HTTP 500 或 503 错误?

用于确定周转时间的 Amazon S3 服务器访问日志

您可以启用 Amazon S3 服务器访问日志来查看周转时间指标。周转时间是从收到请求的最后一个字节到发送响应的第一个字节之间所用的时间。这是一个首字节时间 (TTFB) 指标。您可以使用周转时间从 Amazon S3 的角度确定操作所用的时间。然后,您还可以评估除了 Amazon S3 之外,还有哪些延迟因素可能导致整体下载或上传速度变慢。

如果您发现延迟率比平时高,则最佳做法是重试请求,而不是等待当前请求结束。有关本指南和其他性能建议的详细信息,请参阅 Amazon S3 的性能准则

AWS 官方
AWS 官方已更新 1 年前