一种从 Varnish 中快速清除非常大的 URL 列表的方法

A way to quickly purge very large list of URLs from Varnish

我的 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 中的大部分很可能甚至不会在缓存中。

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

  • 使用多个软清除 [1](当心 'soft' 部分;为此您需要清除 VMOD)由外部循环触发(抱歉,您不能这样做在 VCL 中)。软清除将 TTL 设置为 0,而不是从存储中完全删除对象。

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

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

[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