使用 Amazon CloudFront Origin Shield
CloudFront Origin Shield 是 CloudFront 缓存基础设施中的一个附加层,有助于最大限度地减少源的负载、提高其可用性并降低其运营成本。借助 CloudFront Origin Shield,您可以获得以下优势:
- 更好的缓存命中率
-
Origin Shield 可以帮助提高 CloudFront 分配的缓存命中率,因为它在源之前提供了额外的缓存层。当您使用 Origin Shield 时,从 CloudFront 缓存层到源的所有请求都会通过 Origin Shield,从而增加缓存命中的可能性。CloudFront 可以使用从 Origin Shield 到您的源的单个源请求检索每个对象,CloudFront 缓存的所有其他层(边缘站点和区域边缘缓存)可以从 Origin Shield 中检索对象。
- 减少源负荷
-
Origin Shield 可以进一步减少针对同一对象发送到源的同时请求的数量。对不在 Origin Shield 缓存中的内容的请求将与对同一对象的其他请求合并,从而导致发往源的请求只有一个。在源中处理较少的请求可以在高峰负载或意外流量峰值期间保持源的可用性,并且可以降低即时打包、图像转换和数据传出 (DTO) 等方面的成本。
- 更好的网络性能
-
当您在与源之间的延迟最短的 AWS 区域中启用 Origin Shield 时,可以获得更好的网络性能。对于 AWS 区域中的源,CloudFront 网络流量始终保留在高吞吐量 CloudFront 网络上,直至您的源。对于 AWS 外部的源,CloudFront 网络流量一直保留在 CloudFront 网络上,直至到达 Origin Shield(它与源之间具有低延迟连接)。
使用 Origin Shield 需要支付额外费用。有关更多信息,请参阅 CloudFront 定价
主题
Origin Shield 的使用案例
CloudFront Origin Shield 适用于许多使用案例,包括以下情况:
-
分布在不同地理区域的查看器
-
为实时流式处理或动态图像处理提供即时打包的源
-
具有容量或带宽限制的内部源
-
使用多个内容分发网络 (CDN) 的工作负载
Origin Shield 可能不太适合其他情况,例如通过代理到达源的动态内容、可缓存性低的内容或不经常请求的内容。
以下各节介绍 Origin Shield 在以下使用案例中的优势。
位于不同地理区域的查看器
通过 Amazon CloudFront,您本质上可以减少源上的负载,因为 CloudFront 可以从缓存提供服务的请求不会转到源。除了 CloudFront 的全球边缘站点网络
当查看器位于不同的地理区域时,请求可以通过不同的区域边缘缓存进行路由,其中每个缓存都可以向您的源发送对相同内容的请求。但使用 Origin Shield,您可以在区域边缘缓存和源之间获得额外的缓存层。来自所有区域边缘缓存的所有请求都经过 Origin Shield,从而进一步减少源上的负载。下面的示意图对此进行说明。在下图中,源为 AWS Elemental MediaPackage。
不使用 Origin Shield
如果没有 Origin Shield,源可能会收到针对相同内容的重复请求,如下图所示。
使用 Origin Shield
使用 Origin Shield 有助于减少源上的载荷,如下图所示。
多个 CDN
要提供实时视频活动或热门点播内容,您可以使用多个内容分发网络 (CDN)。使用多个 CDN 可以提供某些优势,但这也意味着源可能会收到许多对同一内容的重复请求,每个请求来自不同的 CDN 或同一 CDN 内的不同位置。这些冗余请求可能会对源的可用性产生不利影响,或导致进程(如即时打包或数据传出 (DTO) 到 Internet)的额外运营成本。
当您将 Origin Shield 与将 CloudFront 分配用作其他 CDN 的源相结合时,可以获得以下好处:
-
减少源收到的冗余请求数量,这有助于减少使用多个 CDN 的负面影响。
-
跨 CDN 的通用缓存密钥,以及面向源的功能的集中管理。
-
提高了网络性能。来自其他 CDN 的网络流量在附近的 CloudFront 边缘站点终止,这可能会提供来自本地缓存的命中。如果请求的对象不在边缘站点缓存中,则对源的请求将一直保留在 CloudFront 网络上直至 Origin Shield,从而为源提供高吞吐量和低延迟。如果请求的对象位于 Origin Shield 的缓存中,则完全避免对源的请求。
重要
如果您有兴趣在多 CDN 架构中使用 Origin Shield,并且享有折扣价格,请联系我们
下图显示了当您使用多个 CDN 提供流行的实时视频活动时,此配置如何帮助最大限度地减少源上的负载。在下图中,源为 AWS Elemental MediaPackage。
不使用 Origin Shield(多个 CDN)
如果不使用 Origin Shield,源可能会收到针对相同内容的重复请求,每个请求来自不同的 CDN,如下图所示。
使用 Origin Shield(多个 CDN)
使用 Origin Shield(将 CloudFront 作为其他 CDN 的源)有助于减少源上的载荷,如下图所示。
为 Origin Shield 选择 AWS 区域
在 CloudFront 具有区域性边缘缓存的 AWS 区域中,Amazon CloudFront 提供 Origin Shield。启用 Origin Shield 后,可以为 Origin Shield 选择 AWS 区域。您应该选择与源之间具有最低延迟的 AWS 区域。您可以将 Origin Shield 与位于 AWS 区域中的源和不在 AWS 中的源结合使用。
对于 AWS 区域中的源
如果您的源位于 AWS 区域,请首先确定您的源是否位于 CloudFront 提供 Origin Shield 的区域。CloudFront 在以下 AWS 区域提供 Origin Shield。
-
美国东部(俄亥俄州)–(
us-east-2
) -
美国东部(弗吉尼亚州北部)–
us-east-1
-
美国西部(俄勒冈州)–
us-west-2
-
亚太地区(孟买)– (
ap-south-1
) -
亚太地区(首尔)– (
ap-northeast-2
) -
亚太地区(新加坡)– (
ap-southeast-1
) -
亚太地区(悉尼)–
ap-southeast-2
-
亚太地区(东京)– (
ap-northeast-1
) -
欧洲地区(法兰克福)–
eu-central-1
-
欧洲地区(爱尔兰)–
eu-west-1
-
欧洲地区(伦敦)–
eu-west-2
-
南美洲(圣保罗)– (
sa-east-1
)
如果您的源位于 CloudFront 提供 Origin Shield 的AWS区域
如果源位于 CloudFront 提供 Origin Shield 的 AWS 区域中(请参阅前面的列表),请在与源相同的区域中启用 Origin Shield。
如果您的源不在 CloudFront 提供 Origin Shield 的AWS区域
如果源不在 CloudFront 提供 Origin Shield 的 AWS 区域中,请参阅下表以确定要在哪个区域中启用 Origin Shield。
如果源位于... |
启用 Origin Shield 的位置... |
---|---|
美国西部(加利福尼亚北部)– |
美国西部(俄勒冈州)– |
非洲(开普敦)– |
欧洲地区(爱尔兰)– |
亚太地区(香港)– |
亚太地区(新加坡)– ( |
加拿大(中部)– |
美国东部(弗吉尼亚州北部)– |
欧洲地区(米兰)– |
欧洲地区(法兰克福)– |
欧洲地区(巴黎)– |
欧洲地区(伦敦)– |
欧洲地区(斯德哥尔摩)– |
欧洲地区(伦敦)– |
中东(巴林)– |
亚太地区(孟买)– ( |
对于之外的源AWS
您可以将 Origin Shield 与本地或不在 AWS 区域中的源结合使用。在这种情况下,请在与源之间的延迟最低的 AWS 区域中启用 Origin Shield。如果您不确定哪个 AWS 区域与源之间的延迟最低,您可以使用以下建议来帮助做出决定。
-
您可以参阅上表,根据源的地理位置,了解哪个 AWS 区域可能与源之间具有最低延迟的近似情况。
-
您可以在地理位置靠近源的几个不同 AWS 区域中启动 Amazon EC2 实例,并使用
ping
运行一些测试来测量这些区域与源之间的典型网络延迟。
启用 Origin Shield
您可以启用 Origin Shield 来提高缓存命中率,减少源上的负载,并帮助提高性能。要启用 Origin Shield,请更改 CloudFront 分配中的源设置。Origin Shield 是源的一个属性。对于 CloudFront 分配中的每个源,您可以在为该源提供最佳性能的任何 AWS 区域中单独启用 Origin Shield。
您可以使用 AWS CloudFormation 或 CloudFront API 启用 CloudFront 控制台中的 Origin Shield。
估算 Origin Shield 成本
您可以根据作为增量层转到 Origin Shield 的请求数量来计算 Origin Shield 的费用。
对于通过代理到达源的动态(不可缓存)请求,Origin Shield 始终是增量层。动态请求使用 HTTP 方法:PUT
、POST
、PATCH
和 DELETE
。
生存时间(TTL)设置小于 3600 秒的 GET
和 HEAD
请求被视为动态请求。此外,已禁用缓存的 GET
和 HEAD
请求也被视为动态请求。
要针对动态请求估计 Origin Shield 的费用,请使用以下公式:
动态请求总数 x 每 10,000 个请求的 Origin Shield 费用 / 10,000
对于采用 HTTP 方法 GET
、HEAD
和 OPTIONS
的非动态请求,Origin Shield 有时是一个增量层。启用 Origin Shield 后,可以为 Origin Shield 选择 AWS 区域。对于自然转到与 Origin Shield 位于相同区域中的区域边缘缓存的请求,Origin Shield 不是增量层。您不会为这些请求累积 Origin Shield 费用。对于转到与 Origin Shield 位于不同区域中的区域边缘缓存,然后转到 Origin Shield 的请求,Origin Shield 为增量层。您确实需要为这些请求累积 Origin Shield 费用。
要针对可缓存的请求估计 Origin Shield 的费用,请使用以下公式:
可缓存请求总数 x(1 - 缓存命中率)x 从不同区域的区域边缘缓存转到 Origin Shield 的请求的百分比 x 每 10,000 个请求的 Origin Shield 费用 / 10,000
有关 Origin Shield 每 10,000 个请求收取的费用的更多信息,请参阅 CloudFront 定价
Origin Shield 高可用性
Origin Shield 利用 CloudFront 区域边缘缓存功能。其中每个边缘缓存都在一个 AWS 区域中使用至少三个可用区
Origin Shield 如何与其他 CloudFront 功能进行交互
以下各节介绍 Origin Shield 如何与其他 CloudFront 功能进行交互。
Origin Shield 和 CloudFront 日志记录
要查看 Origin Shield 何时处理了请求,必须启用以下选项之一:
-
CloudFront 标准日志(访问日志)。免费提供标准日志。
-
CloudFront 实时日志。使用实时日志会产生额外费用。请参阅 Amazon CloudFront 定价
。
来自 Origin Shield 的缓存命中在 CloudFront 日志的 OriginShieldHit
字段中显示为 x-edge-detailed-result-type
。Origin Shield 利用 Amazon CloudFront 的区域边缘缓存。如果请求从 CloudFront 边缘站点路由到充当 Origin Shield 的区域边缘缓存,则在日志中将其报告为 Hit
,而不是报告为 OriginShieldHit
。
Origin Shield 和源组
Origin Shield 与 CloudFront 源组兼容。由于 Origin Shield 是源的一个属性,因此,对于每个源,请求始终会通过 Origin Shield,即使源是源组的一部分也是如此。对于给定的请求,CloudFront 通过主源的 Origin Shield 将请求路由到源组中的主源。如果该请求失败(根据源组故障转移标准),CloudFront 通过辅助源的 Origin Shield 将请求路由到辅助源。
Origin Shield 和 Lambda@Edge
Origin Shield 不会影响 Lambda@Edge 函数的功能,但会影响运行这些函数的 AWS 区域。
当您将 Origin Shield 与 Lambda@Edge 一起使用时,面向源的触发器(源请求和源响应)会在启用 Origin Shield 的 AWS 区域中运行。如果 Origin Shield 主位置不可用并且 CloudFront 将请求路由到 Origin Shield 备用位置,则面向源的 Lambda@Edge 触发器也将转为使用备用 Origin Shield 位置。
面向查看器的触发器不受影响。