我正在开发一个类似API网关的服务器,它支持用户和组。
我有一个类似如下的API端点:
/authorization/users/1?resource=users
基本上,它在问"这个用户1可以访问'users'吗?"
我想缓存"/authorization/users/1? "resource=users
权限包括用户级别和组级别。每个用户至少属于一个组。
用户级缓存失效很容易,因为我只需要向单个URL发送PURGE请求。
当涉及到组时,情况很复杂。一个组可以有50000个以上的用户。如何使这些用户无效?
查看https://www.varnish-software.com/blog/advanced-cache-invalidation-strategies,使用X-Article-ID可能是一个很好的解决方案。我担心的是……它如何处理大量对象?会有大量的CPU使用吗?它处理50000个对象的速度有多快?
有更好的方法吗?
使用清漆禁令将把您想要禁止的请求放入清漆禁令列表中。检查每个请求是否在禁止列表中。
如果对象在清漆缓存中,时间戳比禁止列表中的项更早。然后条目将从缓存中删除,并从后端请求一个新的副本。
在此清漆之上还使用了一个称为"禁止潜伏者"的过程,该过程主动从清漆缓存中删除禁止列表中的项目。如何快速完成这可以配置,有关这方面的更多信息,请查看https://www.varnish-software.com/blog/ban-lurker
就我个人而言,当使用这种类型的清漆禁令时,我没有任何cpu和内存使用问题。但这一切都取决于一个项目被添加到禁止列表的频率,以及你使用的禁止页面的正则表达式有多高级。