我正在開發一個 Varnish 管道,該管道混合使用公共資源和受限資源。
由於對公共資源的存取佔流量的絕大多數(> 99.9%),因此我想創建快捷方式來繞過非受限資源的身份驗證令牌驗證和其他此類操作,或者更好的是,僅通過authN/Z如果資源位於某種黑名單中,則為路徑。
該黑名單最多可包含約 1M(在未來幾年內)的 UUID4 條目。這樣的純文字檔案在磁碟上佔用約 3.7Gb,因此具有良好 RAM 容量的機器應該能夠將其全部保存在記憶體中。
我的問題是如何實現這個黑名單,以便查找速度非常快。我考慮過「原生」哈希集、Memcached 或類似的方法。如果是分散式的,Memcached 很可能會減慢速度。有人實施過類似的方法嗎? Varnish 有哪些工具可供我使用?
答案1
在 Varnish 中,您無法直接存取物件的雜湊值。
但是,正如您所指出的,您可以將受限資源清單儲存在鍵值儲存中。
Varnish Enterprise 中的 KVStore
當我們談論純粹的執行速度時,Varnish Enterprise 有一個 KVStore 模組。這KV商店保存在本機記憶體中,並且可以在重新啟動時從檔案重建。
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
如果清漆企業不適合你,也可以使用卡洛斯·阿巴爾德的 Redis VMOD。它是免費的、開源的,而且工作得很好。
你可以奔跑路亞VCL 內的腳本可在 Redis 內執行更複雜的邏輯。
如果您擔心 Redis 會降低您的速度,您可以限制連線數量,甚至確保連線是共享的。