媒体工作负载的最佳实践

本页面介绍了将 Cloud Storage 用于媒体工作负载时的最佳实践。这些工作负载通常包括各种 Trusted Cloud by S3NS 产品,例如媒体 CDNLive Stream APITranscoder APIVideo Stitcher API

概览

Trusted Cloud by S3NS 提供解决方案来优化以下类型的媒体工作负载:

  • 媒体制作:包括电影后期制作(包括视频编辑)等工作负载,这些是计算密集型工作负载,通常使用 GPU 进行高性能计算。通常,Cloud Storage 中的媒体相关数据会由在 Compute Engine 或 Google Kubernetes Engine 中运行的应用进行处理,并且此过程的输出会写回到 Cloud Storage。这些工作负载需要扩容从 Cloud Storage 到计算集群的聚合读写吞吐量,并减少 GPU 空闲时间。它们还需要较低的读写延迟时间,这对于缩短尾延迟时间至关重要。
  • 媒体资源管理:包括整理媒体资源,以实现高效存储、检索和使用。
  • 内容传送和分发:包括向用户流式传输媒体,包括视频点播 (VoD) 和直播服务。在 VoD 期间,当用户请求的内容未在内容分发网络 (CDN) 上缓存时,系统会从 Cloud Storage 存储桶中提取相应内容。对于直播请求,系统会同时将内容写入存储桶并从 CDN 读取内容。

媒体工作负载最佳实践

如需了解适用于媒体工作负载的最佳实践,请参阅以下部分。

数据传输

使用 Storage Transfer Service 将超过 1 TiB 的原始媒体文件从本地来源(例如摄像机或本地存储空间)上传到 Cloud Storage。Storage Transfer Service 可在对象和文件存储系统之间实现无缝数据移动。对于较小规模的传输,请根据您的传输场景,选择服务以便与 Cloud Storage 来回传输数据或在文件系统之间传输数据。

存储桶位置

对于需要计算资源的工作负载(例如媒体制作),您应在与计算资源相同的区域或双区域中创建存储桶。此方法有助于优化性能(通过降低处理工作负载的读写延迟时间)、费用带宽。如需详细了解如何选择存储桶位置,请参阅存储桶位置注意事项

存储类别

根据媒体工作负载的类型,您应选择的存储类别会有所不同。适用于不同媒体工作负载的建议存储类别类型如下所示:

  • 对于管理媒体资源(例如归档视频),存储桶的默认存储类别应为 Archive Storage。您可以为具有不同可用性或访问需求的对象指定不同的存储类别。
  • 对于媒体制作和内容传送工作负载,由于会经常从 Cloud Storage 存储桶中读取数据,因此您应将数据存储在 Standard Storage 中。

如需详细了解如何为存储桶选择存储类别,请参阅存储类别

数据生命周期管理

如需管理媒体资源,您应通过定义生命周期配置来管理存储桶的对象生命周期。借助对象生命周期管理功能,您可以管理数据生命周期,包括为对象设置存留时间 (TTL)、保留对象的非当前版本以及使对象的存储类别降级来帮助管理费用。

如果可预测数据访问模式,您可以为存储桶设置生命周期配置。而对于未知或不可预测的数据访问模式,您可以为存储桶设置 Autoclass 功能。使用 Autoclass 时,Cloud Storage 会自动将不常访问的数据移至较冷的存储类别。

内容传送和分发工作负载最佳实践

对于 VoD 和直播工作负载,目标是避免在最终用户的视频播放器上播放视频时出现任何播放错误、播放启动延迟或缓冲。这些工作负载还需要扩容读取操作,以应对大量并发观看者。在所有情况下,客户流量读取都应通过 CDN 进行。

如需了解适用于内容传送和分发工作负载的最佳实践,请参阅以下部分。

有效使用 CDN

在 Cloud Storage 存储桶前使用内容分发网络 (CDN) 可改进最终用户体验,因为 CDN 会通过减少延迟时间和提高带宽效率来缓存内容。借助 CDN,您可以减少带宽费用、优化资源利用率并提高性能,从而降低总拥有成本 (TCO)。使用媒体 CDN 有助于降低向最终用户传送内容的 TCO,因为媒体 CDN 的缓存填充费用为零。您可以使用媒体 CDN 作为其他提供商 CDN 的来源。使用其他 CDN 时,如果从此媒体 CDN 缓存(而不是源站)传送内容,您仍然可以降低部分 TCO。

如果您使用第三方 CDN,则 CDN Interconnect 可让所选的提供商在各个位置与 Google 的边缘网络建立直接对等互连链路。通过其中一个链路从 Trusted Cloud by S3NS传出的网络流量可受益于与受支持 CDN 之间的直接连接,并按照优惠价格自动计费。如需查看已获批准的提供商列表,请参阅 Google 批准的服务提供商

下面列出了设置 CDN 时要配置的选项:

选择源站防护位置

源站防护位置是 CDN 和 Cloud Storage 之间的缓存。如果您的 CDN 允许您选择源站防护位置,请遵循 CDN 指南,了解是建议选择靠近 Cloud Storage 存储桶区域还是最终用户流量集中位置的源站防护。源站防护是一种保护措施,可保护源服务器免于过载。具有源站防护的 CDN 可在源站和 CDN 之间添加额外的缓存,从而帮助提高源站分流。例如,媒体 CDN 提供深度分层的边缘基础设施,旨在尽可能主动减少缓存填充。

启用请求合并

确保已为 CDN 启用请求折叠。将多个请求折叠为单个请求可降低 Cloud Storage B 类操作费用。CDN 在全球部署了分布式缓存,但提供了一种将多个最终用户请求折叠为单个源站请求的方法。例如,媒体 CDN 会主动在每个边缘节点,将针对同一缓存键的多个用户发起的缓存填充请求折叠为单个源站请求,从而减少向存储桶发出的请求数量。

在 CDN 上配置重试行为

确保您在 CDN 上针对任何具有 HTTP 5xx 响应代码(502、503、504)的服务器问题配置重试。CDN 支持源站重试,从而允许重试针对源站的失败请求。大多数 CDN 都允许您为当前源站指定重试次数。如需了解如何在媒体 CDN 中重试源站请求,请参阅重试源站请求

内容分发的位置选项

对于从 Cloud Storage 读取未在 CDN 上缓存的数据的工作负载(例如VoD 类型内容的内容传送和分发),在为存储桶选择位置时,请考虑以下因素:

  • 如需优化费用,在单个区域中创建的存储桶具有最低的存储费用
  • 如需优化可用性,请考虑以下事项:
    • 对于大多数媒体工作负载,建议使用双区域存储桶,因为这样可以在两个区域中复制对象,从而提高可用性。
    • 对于需要具有地理位置冗余的内容传送和分析的应用场景,请使用多区域存储桶以实现最高可用性。
  • 如需优化延迟时间并降低网络费用,请考虑以下事项:
    • 对于 VoD,请选择最靠近大多数最终用户所在位置或大多数流量集中区域的区域。
    • 在直播期间,存储桶会收到来自转码器的写入请求,以及来自 CDN 的读取请求(CDN 会缓存内容并将其分发给最终用户)。如需提高流式传输性能,请选择与用于转码的计算资源位于同一位置的区域级存储桶。

为直播优化视频片段时长

对于直播,建议的最小片段大小为 2 秒,因为较短的视频片段对长尾写入延迟时间更敏感。长尾写入延迟时间是指对访问频率较低或请求量较低的内容执行的写入操作速度缓慢或存在延迟。

存储桶位置与最终用户的播放位置之间的物理距离会影响传输时间。如果最终用户距离存储桶位置较远,我们建议采用较大的视频片段大小。

为了向观看者提供最佳体验,建议使用重试策略和请求对冲来处理转码器上的写入操作,以缓解写入 Cloud Storage 时超过 2 秒的长尾延迟时间,并尝试使用大约 10 秒的更长缓冲时间。

逐步提升 QPS

Cloud Storage 存储桶的初始 IO 容量为每秒 1,000 次对象写入和每秒 5,000 次对象读取。对于直播工作负载,建议您逐步扩容请求,从每秒 1,000 次写入和每秒 5,000 次读取开始,每 20 分钟将请求速率翻倍。此方法可让 Cloud Storage 在多个服务器之间重新分配负载,并通过降低发生播放问题的可能性来改进存储桶的可用性和延迟时间。

对于 QPS 较高的直播活动,您应通过预热存储桶或为存储桶启用分层命名空间,对存储桶实现扩容。在对存储桶实现扩容之前,您应执行以下任务:

估算对源站的 QPS

假设某个直播有 100 万观看者,那么 CDN 将收到 100 万 QPS。假设您的 CDN 的缓存命中率为 99.0%,则最终发送到 Cloud Storage 的流量将为 1%。QPS 将是观看者总数(100 万)的 1%,即 QPS 为 10,000。此值大于初始 IO 容量。

监控 QPS 并排查任何扩容错误

您应监控 QPS 并排查任何扩容错误。如需了解详情,请参阅 Cloud Storage 中的监控概览。如需监控读取和写入请求,请在Trusted Cloud 控制台中分别观察读取/列出/获取请求总数图表和写入请求总数图表。如果您对存储桶扩容 QPS 的速度快于上一部分中提到的指定升速指南中的速度,则可能会遇到“429 请求过多”错误。了解如何解决 429 请求过多错误。

以下部分介绍了在估算对源站的 QPS 后,如何扩容您的存储桶以实现更高的 QPS。

通过预热存储桶对存储桶实现 QPS 扩容

您可以通过预热存储桶来加快在直播活动之前进行的扩容过程。在直播活动之前,请向您的存储桶生成合成流量,该流量应符合 CDN 的源服务器预期将收到的针对相应活动的最高 QPS,加上额外的 50% 缓冲区(考虑到 CDN 的预期缓存命中率)。例如,如果您估算对源站的 QPS 为 10,000,那么模拟流量应以每秒 15,000 个请求为目标,以便为活动准备好源站。

对于此模拟流量,您可以使用以前活动的实时 Feed 文件(例如片段和清单)或测试文件。请确保在整个预热过程中,您拥有不同的文件。

生成此模拟流量时,请采用逐步扩容方法,从每秒 5,000 个请求开始,逐步增加,直到达到目标值。在活动之前分配足够的时间,以实现估算的负载。例如,从初始的每秒 5,000 个请求开始,每 20 分钟将负载翻倍,达到每秒 15,000 个请求大约需要 30 分钟。

源服务器会维持容量,直到流量保持稳定。源服务器的容量会在 24 小时内逐渐下降至基准水平。如果源服务器在直播活动之间遇到数小时的间隔,建议您在每个活动之前模拟流量。

使用启用了分层命名空间的存储桶来实现较高的初始 QPS

启用了分层命名空间的 Cloud Storage 存储桶与未启用 HNS 的存储桶相比,可提供高达 8 倍的初始 QPS。更高的初始 QPS 可让您更轻松地扩容数据密集型工作负载,并提高吞吐量。如需了解启用了分层命名空间的存储桶中的限制,请参阅限制

避免为视频片段使用连续名称来进行 QPS 扩容

进行 QPS 扩容时,请求会在多个服务器间重新分配。不过,当所有对象都使用非随机或顺序前缀时,您可能会遇到性能瓶颈。与使用连续名称相比,使用完全随机的名称可让您实现负载的最佳分配。但是,如果您想要将序列号或时间戳用作对象名称的一部分,请通过在序列号或时间戳之前添加哈希值来为对象名称引入随机性。例如,如果您要使用的原始对象名称为 my-bucket/2016-05-10-12-00-00/file1,您可以计算原始对象名称的 MD5 哈希值,并将所得哈希值的前 6 个字符作为前缀添加到对象名称中。新对象变为 my-bucket/2fa764-2016-05-10-12-00-00/file1.。如需了解详情,请参阅使用命名惯例将负载均匀分配到多个键范围中。如果您无法避免为视频片段使用顺序命名,请使用启用了分层命名空间的存储桶,以获取更高的 QPS。

为每个直播使用不同的存储桶

对于并发直播,为每个直播使用不同的存储桶有助于您有效地扩容读取和写入负载,而不会达到存储桶的 IO 限制。为每个直播使用不同的存储桶可减少因扩容延迟而导致的较大异常延迟时间。

后续步骤