在无服务器环境中缓存HTTP请求



我有一个无服务器lambda,它可以执行以下操作:

  • 从查询中的一组ids开始(example.com?ids=a,b,c(
  • 对我不控制的另一个Web服务(基于给定的ids(进行HTTP请求
  • 基于其他Web服务响应呈现网站

一切正常,到目前为止没有任何问题。

今天我为我的网站介绍了一个新的用户界面。用户可以在";"表视图";以及";列表视图";。因为这些差异视图也可以通过(另一个(查询参数来控制;重定向";到我自己的网站。假设我当前正在查看表视图;显示列表视图";text字段我有一个简单的<a href="example.com?ids=a,b,c&view=list">[...]<a>

当然,这种重定向会导致对";其他网络服务";。即使我可以非常确定内容自上次通话(几秒钟/分钟前(以来没有改变。

我的问题是:

我可以以某种方式缓存lambda中的HTTP请求,这样我们就不会再调用了吗?我对Cache-Control标头有所了解,但由于它是一个无服务器环境,它可以(而且可能会(!我不知道,但我甚至不在乎😅)另一台没有此缓存的机器。因此,它不会是缓存命中,无论如何都会处理请求。

请不要用";使用JavaScript来改变UI";。我知道这是可能的,但我的主要问题是如何(甚至是否可以(在无服务器环境中缓存此类请求。

提前感谢!

从文档和常见最佳实践中,我们得到的印象是,无服务器函数或更具体地说,AWS Lambda函数的使用寿命非常短。关键是,我们需要假设一个函数只为单个调用提供到其(爆竹(微容器中,然后再取消提供。

然而,为了保护资源和提高性能,Lambda的生命周期是:资源调配、用于几个不同的函数调用、取消资源调配。

这意味着无论使用的语言如何,容器都会在一定的时间内得到重用。在那段时间内创建的全局资源(全局变量、静态对象、文件(将在单个函数调用之后继续存在。

您的案例

在您的具体情况下,您可以实现您想要的任何缓存策略。这应该在大多数情况下适用于您的用例,其中有两个陷阱需要注意:

  • 微容器在不同客户端之间的请求之间重复使用。这意味着您当然需要有一种访问控制缓存的方法,如果这与您的用例相关的话
  • 您不能直接控制Lambda的超时时间,这意味着您应该预料到,偶尔用户会因为时间不好而体验到非缓存请求的开销

让我们了解您的最终解决方案。

最新更新