代码之家  ›  专栏  ›  技术社区  ›  Sampgun

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

  •  1
  • Sampgun  · 技术社区  · 8 月前

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

    我查过了 节流 请求,但它们似乎是 0 总是。

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

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

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

    1 回复  |  直到 8 月前
        1
  •  0
  •   OtaconKiko    8 月前

    太长,读不下去了 你说得对。AWS可以“在内部缓存这些内容并保存调用”,特别是在您返回相同子路径的原始请求的情况下。

    完整答案

    您发现Lambda调用和CDN请求之间的区别可能在于AWS CloudFront的工作方式Lambda@Edge功能。

    即使您在查看器请求阶段使用Lambda函数并关闭缓存,也不能保证该函数会对每个请求运行。AWS在这方面很聪明,并倾向于根据其估计的响应来优化调用,尤其是Lambda@Edge.

    在您的情况下,Lambda函数只是转发某些子路径的原始请求,AWS可以在幕后缓存该行为。CloudFront旨在减少Lambda调用,如果它发现类似请求的函数输出不会发生太大变化。

    这种优化对于那些根本不调整请求或只根据特定URL路径等简单标准调整请求的函数尤其有效。CloudFront会记住早期调用的结果,并应用相同的逻辑,而无需每次调用Lambda函数。

    你没有看到任何被限制的请求,这一事实支持了这一点。如果CloudFront在繁忙时段(如黑色星期五)为每个请求调用Lambda,你几乎肯定会注意到一些限制。

    值得一提的是,虽然这种优化可以保持速度并降低成本,但它不会干扰您的实际CDN内容缓存。如果你已经禁用了内容的缓存,它仍然会这样工作。

    这种行为已经融入AWS,你无法真正调整,但这通常是一件好事,因为它降低了延迟和成本,同时保持了一切按预期运行。

    如果你绝对需要Lambda为每个请求触发,没有例外,你必须在每个请求中包含一些唯一的东西,比如时间戳或ID。请注意,这可能会增加您的Lambda成本,并在流量很大时可能会减慢速度。