![快速访问 Varnish 中的哈希集](https://linux22.com/image/756641/%E5%BF%AB%E9%80%9F%E8%AE%BF%E9%97%AE%20Varnish%20%E4%B8%AD%E7%9A%84%E5%93%88%E5%B8%8C%E9%9B%86.png)
我正在开发一个服务于公共资源和受限资源的 Varnish 管道。
由于对公共资源的访问占流量的绝大部分(> 99.9%),我想创建快捷方式来绕过对非限制资源的身份验证令牌验证和其他类似操作 - 或者更好的是,仅当资源在某种黑名单中时才通过 authN / Z 路径。
此黑名单最多可包含约 1M 个(未来几年内)UUID4 条目。此类纯文本文件在磁盘上占用约 3.7Gb,因此具有良好 RAM 容量的机器应该能够将其全部保存在内存中。
我的问题是如何实现这个黑名单,以便查询速度非常快。我考虑过“本机”哈希集、Memcached 或类似方法。如果是分布式的,Memcached 很可能会降低速度。有人实现过类似的方法吗?Varnish 有哪些工具可供我使用?
答案1
在 Varnish 中,您无法直接访问对象的哈希值。
但是,正如您所指出的,您可以在键值存储中存储受限资源列表。
Varnish Enterprise 中的 KVStore
当我们谈论纯粹的执行速度时,Varnish Enterprise 有一个 KVStore 模块。 这KVStore保存在本地内存中,重新启动时可以从文件重建。
Varnish Enterprise 并非免费,需要购买许可证密钥。如果您希望降低企业版的入门门槛,AWS、Azure、GCP 和 OCI 上有 Varnish Enterprise 的官方机器映像。适用于 Ubuntu 和 Red Hat。您无需预付许可证费用,按小时收费。请参阅https://aws.amazon.com/marketplace/pp/B07L7HVVMF?ref_=srh_res_product_title有关 AWS 的示例
Redis VMOD
如果清漆企业不适合你,你也可以使用Carlos Abalde 的 Redis VMOD。它是免费的、开源的,并且工作起来相当出色。
你甚至可以运行路亚系统VCL 内部的脚本在 Redis 内部运行更复杂的逻辑。
如果您担心 Redis 会减慢您的速度,您可以限制连接数,甚至确保连接是共享的。