【问题标题】:Return a synthetic response then fetch and cache object in Varnish?返回合成响应然后在 Varnish 中获取和缓存对象?
【发布时间】:2013-07-15 13:49:39
【问题描述】:

我想知道我的(可能很奇怪)用例是否可以用 VCL 在 Varnish 中实现。我的应用程序依赖于从具有非常低延迟(即如果可能的话,亚毫秒)的可缓存 API 服务器接收响应。应用程序的编写方式可以适当地处理“空”响应(在某些情况下是有效响应),并且 API 的设计方式是使非空响应长时间有效(即天)。

所以,我想做的是配置清漆:

  1. 尝试查找(并返回)给定 API 调用的缓存响应
  2. 在缓存未命中时,立即返回“空”响应,并将请求排队等待后端
  3. 在将来调用 #2 中缓存未命中的 URL 时,返回现在缓存的响应

是否可以单独使用 VCL 使 Varnish 以这种方式运行?如果没有,是否可以编写一个 VMOD 来执行此操作(如果可以,将不胜感激指针、提示等!)

【问题讨论】:

    标签: varnish varnish-vcl


    【解决方案1】:

    我认为你不能单独使用 VCL 来做到这一点,但我认为使用 VCL 和一些客户端逻辑你可以很容易地管理它。

    在 vcl_miss 中,使用错误 200 返回一个空文档,并在默认情况下设置一个名为 X-Try-Again 的响应标头。 在客户端应用程序中,当接收到设置了 X-Try-Again 的空响应时,异步请求相同的资源,但在请求中添加一个名为 X-Always-Fetch 的标头。您的应用程序不会等待响应或在响应到达后对其执行任何操作。 同样在 vcl_miss 中,检查是否存在相同的 X-Always-Fetch 标头。如果存在,则返回(获取)而不是空文档。这将从后端请求内容并将其缓存以供将来请求。

    我还发现这篇文章可能会提供一些帮助,尽管与仅使用您的客户端代码相比,实现对我来说有点笨拙:http://lassekarstensen.wordpress.com/2012/10/11/varnish-trick-serve-stale-content-while-refetching/

    【讨论】:

    • 感谢您的回答!我有一个类似的用例,想知道您是否知道在过去 5 年中是否发生了任何变化,让 Varnish 自己处理这个问题,而不是让客户重新请求。
    猜你喜欢
    • 2013-03-14
    • 1970-01-01
    • 1970-01-01
    • 2016-08-03
    • 2018-02-11
    • 2023-02-02
    • 2015-06-18
    • 2020-08-08
    • 1970-01-01
    相关资源
    最近更新 更多