CDN 调用与 lambda 调用的巨大差异

问题描述 投票:0回答:1

我们在查看者请求时使用的所有相关行为(大多数请求)中使用 lambda(所有行为均禁用缓存)。 我们一直在检查 lambda 在黑色星期五期间的表现,我们发现在某个时刻 lambda 被调用了大约 34K 次,而 CDN 的调用次数为 900 万次。

我检查了throttled请求,但它们似乎一直是0

那么它到底是如何运作的呢? AWS 是否根据预期响应优化调用?

例如 lambda,对于某些子路径,仅返回原始请求。

AWS 可以在内部缓存这些内容并保存调用吗?

amazon-web-services aws-lambda amazon-cloudwatch cdn
1个回答
1
投票

您观察到的 Lambda 调用和 CDN 请求之间的差异可能是由于 AWS CloudFront(假设这是您正在使用的 CDN)与 Lambda@Edge 函数的交互方式造成的。

当您在查看器请求阶段使用 Lambda 函数并禁用缓存时,并不一定意味着将为每个请求调用 Lambda 函数。 AWS 确实根据预期响应优化调用,特别是对于 Lambda@Edge 函数。

在您的情况下,Lambda 函数返回某些子路径的原始请求,AWS 确实可以在内部缓存此行为。 CloudFront 具有内置优化功能,当它确定函数的输出对于类似请求可能相同时,可以减少 Lambda 调用的数量。

此优化对于不修改请求或仅根据易于缓存的标准(例如特定 URL 路径)修改请求的函数特别有效。 CloudFront 可以记住之前 Lambda 调用的结果并应用相同的修改,而无需在一段时间内再次调用 Lambda 函数。

您没有看到任何受限制的请求这一事实支持了这一解释。如果每个 CDN 请求都尝试调用 Lambda 函数,您可能会在黑色星期五等高流量时段看到流量限制。

需要注意的是,虽然此行为有助于优化性能并降低成本,但它不会影响 CDN 提供的内容的实际缓存。根据您的配置,内容缓存仍处于禁用状态。

此优化是 AWS 基础设施的一项功能,您无法直接控制。但是,它通常是有益的,因为它可以减少延迟和成本,同时保持设置的预期功能。

如果您需要无一例外地为每个请求调用 Lambda 函数,您可能需要在每个请求中包含一些唯一标识符或时间戳,以强制 CloudFront 每次调用该函数。但是,这可能会增加您的 Lambda 成本,并可能影响高流量期间的性能。

© www.soinside.com 2019 - 2024. All rights reserved.