0

我希望你能帮忙

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

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

我想做的是:

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

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


万一有人感兴趣:

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

以下是每天:

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

2 回答 2

2

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

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

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

https://github.com/varnish/libvmod-curl
于 2013-04-27T17:29:09.020 回答
1

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

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

于 2016-04-28T15:10:52.373 回答