我正在开发一个API gateway-ish服务器,它支持用户和组。
我有一个类似于以下内容的API端点。
/authorization/users/1?resource=users
基本上,它问“这个用户1可以访问'用户'吗?”。
我想在Varnish中缓存“/ authorization / users / 1?resource = users”。
权限可以设置为用户级别或组级别。每个用户至少属于一个组。
用户级缓存失效很简单,因为我只需要向单个URL发送PURGE请求。
说到群体,这很复杂。一个组可以拥有超过50000个用户。如何使这些用户无效?
查看https://www.varnish-software.com/blog/advanced-cache-invalidation-strategies,使用 X-Article-ID 可能是一个很好的解决方案。我担心的是..它是如何与大量的对象一起工作的?是否会有巨大的CPU使用率?它能以多快的速度处理50000个物体?
有没有更好的方法?
答案 0 :(得分:1)
使用varnish ban会将您要禁止的请求放入清漆禁令列表中。 检查每个请求是否在禁止列表中。
如果对象位于清漆缓存中,其时间戳早于禁止列表中的项目。然后该项目将从缓存中删除,并将从后端请求新的新副本。
除此之外,清漆还使用了一个名为" ban lurker"这将从清单缓存中主动删除禁止列表中的项目。可以配置多快的速度,有关详细信息,请查看https://www.varnish-software.com/blog/ban-lurker
Personaly我在使用这种类型的清漆禁令时没有任何cpu和内存使用问题。但这一切都取决于项目被添加到禁令列表的频率以及正用于禁止页面的正则表达式的高级程度。