【问题标题】:Varnish: How to send hit/miss stats to backendVarnish:如何将命中/未命中统计信息发送到后端
【发布时间】:2013-04-19 17:26:35
【问题描述】:

希望你能帮忙

我有一个动态生成图像的图像服务器。 我正在使用 varnish 来缓存生成的图像。

我需要记录清漆收到多少请求(每张图片)以及它是命中还是未命中(通过被标记为未命中)。目前,我正在将带有命中/未命中的访问日志写入文件,然后我使用 crontab 处理此访问日志文件并将数据写入我的数据库...

我想做的是:

让 Varnish 向我的后端发出请求,通知它缓存命中(如果可能的话,还有响应大小(字节))。 然后我的后端可以保存这些数据...

这有可能吗?如果可以,怎么办?


如果有人感兴趣:

  • 2 个清漆实例,每个实例带有 1 个 (java+tomcat) 后端。
  • 服务根据请求中的要求操作并生成每个图像...

以下是每天:

  • 页面浏览量超过 3500 万,其中每个页面至少包含 3 张图片。
  • Varnish 收到大约 3+ 百万个图像请求(图像也被浏览器缓存)。
  • 清漆的命中率为 87%
  • 点击的响应时间是几微秒
  • 未命中的响应时间为 50 毫秒到 1000 毫秒,具体取决于图像的大小(源和输出)

【问题讨论】:

    标签: caching varnish varnish-vcl


    【解决方案1】:

    如果您要从 vcl 中向统计服务器发送请求,我会尝试合并某种类型的聚合请求,您每 100 个(或其他)请求发送一次,而不是每个传入请求。

    与其他答案一样,我建议将 varnishncsa(或 varnishlog)与跟踪日志文件的进程一起使用。该方法可能会有一些延迟,但如果可以接受,那么我会考虑在 logrotated 运行时对清漆日志进行后处理。这样一来,您就有了一整天的数据,您可以翻阅它,生成您需要的任何报告。

    【讨论】:

      【解决方案2】:

      做到这一点的最好方法是有一个辅助进程来跟踪varnishlog 的输出和 在需要时执行 HTTP 调用。

      您可以通过在vcl_deliver 中使用std.log() 记录必要的数据来做到这一点,因此 辅助进程获取它需要的所有数据。使用obj.hits > 0 检查这是否是缓存命中。

      如果你真的需要内联(并且严重减慢所有缓存命中),你 可以使用libvmod-curl:

      https://github.com/varnish/libvmod-curl
      

      【讨论】:

      • 嗨伊卡斯滕。感谢您花时间回答问题。好的,显然性能非常重要,所以 libvmod-curl 不是一个选项。我目前的解决方案有效,但是,我希望有一个更好的解决方案,我会看看使用 varnishlog 和一个辅助进程(如建议的那样)
      猜你喜欢
      • 2011-07-12
      • 1970-01-01
      • 2011-06-21
      • 2012-03-21
      • 1970-01-01
      • 2014-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多