首页 > 解决方案 > 一种从 Varnish 中快速清除大量 URL 列表的方法

问题描述

我的 Varnish 服务器缓存了一个地图切片服务器,它每 1 分钟从 OpenStreetMap 实时更新。通常,地图的整个区域都需要失效——即一次 10,000 甚至 100,000 个图块。每个图块都是一个 URL(无差异)。

有没有一种有效的方法来运行如此大规模的 Varnish 失效?理想情况下,对象应保留在缓存中(以便宽限期将继续工作,除非nograce传入 URL 标志),但标记为不再有效。理想情况下,这种紧密循环将在 VCL 本身中实现。

示例 URL:(http://example.org/tile/10/140/11.pbf无差异,无查询部分)数字在哪里{zoom}/{x}/{y},这些数字的列表(即一次 100,000)每分钟在外部生成并存储在文件中。顺便说一句,很可能大多数这些 URL 甚至都不会在缓存中。

标签: varnishvarnish-vcl

解决方案


答案很大程度上取决于这些 URL 的外观。选项是:

  • 使用由外部循环触发的多个软清除 [1](注意“软”部分;您需要清除 VMOD)(抱歉,您不能在 VCL 中执行此操作)。软清除将 TTL 设置为 0,而不是从存储中完全删除对象。

  • 使用简单的禁令 [2]。然而,禁令将完全(并且懒惰地)从存储中删除匹配的对象(即禁令没有“软”的味道)。

  • 使用 xkey VMOD [3]。VMOD 提供了一个“软”失效选项,但不确定代理索引是否有助于您的用例。

[1] https://varnish-cache.org/docs/trunk/reference/vmod_purge.html

[2] https://varnish-cache.org/docs/trunk/users-guide/purging.html#bans

[3] https://github.com/varnish/varnish-modules/blob/master/docs/vmod_xkey.rst


推荐阅读