我正在开发一个 Varnish 管道,它为公共资源和受限资源提供服务。
由于对公共资源的访问占流量的绝大多数(> 99.9%),我想创建快捷方式来绕过身份验证令牌验证和其他此类非受限资源的事情 - 或者更好的是,只通过 authN/Z如果资源在某种黑名单中,则为路径。
此黑名单最多可包含大约 1M(在未来几年内)UUID4 条目。这样的纯文本文件在磁盘上占用大约 3.7Gb,因此具有良好 RAM 容量的机器应该能够将其全部保存在内存中。
我的问题是关于如何实现这个黑名单,所以查找速度非常快。我想到了一个“本机”哈希集,或者 Memcached,或者类似的方法。如果 Memcached 是分布式的,它很可能会减慢速度。有没有人实施过类似的方法?Varnish 有哪些工具可供我使用?
在 Varnish 中,您无法直接访问对象的哈希值。
但是,正如您所指出的,您可以将受限资源列表存储在键值存储中。
Varnish Enterprise 中的 KVStore
当我们谈论纯粹的执行速度时,Varnish Enterprise 有一个 KVStore 模块。此KVStore保存在本地内存中,并且可以在重新启动时从文件中重建。
Redis VMOD
如果Varnish Enterprise不适合您,您也可以使用Carlos Abalde 的 Redis VMOD。它是免费的,它是开源的,并且做得很好。
您甚至可以在 VCL 中运行LUA脚本,以在 Redis 中运行更复杂的逻辑。
如果你担心 Redis 会拖慢你的速度,你可以限制连接数,甚至确保连接是共享的。