varnish - 一种从 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 甚至都不会在缓存中。
解决方案
答案很大程度上取决于这些 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
推荐阅读
- c++ - 如何以编程方式打印 ESCPOS 收据?
- machine-learning - Dialogflow - 具有不同参考值和相似同义词的实体
- c# - System.DllNotFoundException:/system/lib/libsqlite.so- Xamarin Forms
- r - 找到数据框中变量更改其值的位置
- sql-server - 由于数据移动而无法找到书签
- charts - 如何用 Chart.js 实现这种热图/条形图
- tensorflow - TF_SessionRun 中的内存重新分配
- javascript - 具体日期或假期实现
- nuget - .net Standard 2.0 项目中的 Nugets 包未显示在 TeamCity 的 NuGet 包选项卡中
- angular - PrimeNG Treenode 组件无法显示数据