使大量 Varnish 对象无效的最佳方法?

Best way to invalidate a large number of Varnish objects?

我正在开发 API 网关式服务器,它支持用户和组。

我有一个 API 端点,如下所示。

/authorization/users/1?resource=users

基本上,它在询问 "Can this user 1 have access to 'users'?"。

我想在 Varnish 中缓存“/authorization/users/1?resource=users”。

可以设置用户级别或组级别的权限。每个用户至少属于一个组。

用户级缓存失效很容易,因为我只需要向单个 URL.

发送 PURGE 请求

当涉及到组时,它很复杂。一个组可以有超过 50000 个用户。我如何使这些用户无效?

查看 https://www.varnish-software.com/blog/advanced-cache-invalidation-strategies,使用 X-Article-ID 可能是一个很好的解决方案。我担心的是……它如何处理大量对象? CPU 的使用量会很大吗?它能以多快的速度处理 50000 个对象?

有没有更好的方法?

使用varnish ban 会将您要禁止的请求放入varnish ban 列表中。 检查每个请求是否在禁止列表中。

如果对象在清漆缓存中的时间戳早于禁止列表中的项目。然后该项目将从缓存中删除,并从后端请求一个新的副本。

除此之外,varnish 还使用了一个名为 "ban lurker" 的进程,它会主动从 varnish 缓存中删除禁止列表中的项目。可以配置完成的速度,有关此的更多信息,请查看 https://www.varnish-software.com/blog/ban-lurker

就我个人而言,在使用这种清漆禁令时,cpu 和内存使用没有任何问题。但这完全取决于将项目添加到禁止列表的频率以及您用于禁止页面的正则表达式的高级程度。