0

我正在开发一个支持用户和组的 API 网关服务器。

我有一个类似于以下的 API 端点。

/authorization/users/1?resource=users

基本上,它是在问“这个用户 1 可以访问‘用户’吗?”。

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

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

用户级缓存失效很容易,因为我只需要将 PURGE 请求发送到单个 URL。

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

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

有没有更好的方法?

4

1 回答 1

1

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

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

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

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

于 2015-07-29T10:58:19.723 回答