在我的文件网关上进行 RefreshCache 操作为什么会花费较长时间?

上次更新时间:2020 年 9 月 25 日

我在 AWS Storage Gateway 中的文件网关上启动了 RefreshCache 操作。但是,该操作花费很长时间才能完成。造成这种延迟的原因是什么?

解决方法

RefreshCache 操作可确定自网关上一次识别和缓存对象后 Amazon Simple Storage Service (Amazon S3) 对象的更改(更新、上传或删除)。为执行此操作,文件网关在 S3 存储桶上运行递归 LIST 操作,然后对每个从 LIST 操作返回的对象运行 HEAD 对象操作。HEAD 操作抓取元数据,然后将其存储在文件网关缓存中。

以下因素可能会影响完成 RefreshCache 操作所需的时间:

  • 如果 S3 存储桶中有大量对象,则 RefreshCache 的运行时间会增加。这是因为文件网关对存储桶中的所有对象运行 HEAD 对象。
  • RefreshCache 操作特定于文件网关中的单个文件共享。一个文件共享在给定的任何时间支持两个 RefreshCache API 操作。如果您发送更多请求以启动缓存刷新,那么即使在正在进行的操作完成之前,也会触发更多操作。这可能会导致 InvalidGatewayRequestException 错误
  • S3 存储桶每秒钟可以为每个前缀支持 3500 个 PUT/COPY/POST/DELETE 或 5500 个 GET/HEAD 请求。这些支持的请求速率也适用于文件网关对 S3 存储桶发出的请求,从而影响完成 RefreshCache 操作的速度。如果 S3 存储桶还被除文件网关以外的服务使用,则 RefreshCache 的运行时间会增加。

请考虑以下方法,您可以减少 RefreshCache 操作的运行时间:

  • 您可以减少存储桶中的对象数量。
  • 您可以部署多个与 S3 存储桶中的单独前缀对应的文件共享,而不是为整个存储桶部署一个文件共享。注意:您最多可以为单个文件网关创建 10 个文件共享。由于 RefreshCache 操作是按文件共享运行的,因此此方法有助于减少完成单个 RefreshCache 操作所需的时间。
  • 如果您对整个 S3 存储桶使用一个文件共享,请考虑将 RefreshCache 操作的重点放在正在使用新对象更新的存储桶的特定前缀或文件夹上。这样便缩小了操作范围,从而帮助降低运行时间。当您使用 AWS 命令行界面 (AWS CLI)Storage Gateway API 运行操作时,您可以将 RefreshCache 操作的目标定为特定的文件夹。此选项目前在 Storage Gateway 控制台中不可用。
    注意:如果在运行 AWS CLI 命令时收到错误,请确保您使用的是最新版本的 AWS CLI
  • 您可以在非高峰时间对 S3 存储桶的其他请求运行 RefreshCache 操作。您可以使用 AWS Lambda 和 Amazon CloudWatch 在定时器上触发操作

这篇文章对您有帮助吗?


您是否需要账单或技术支持?