代理键是 Fastly 对该功能的实现。我编写了我们当前的实现,但没有使用 HashTwo/Hashninja/xkey,所以我不是实现之间差异的权威。Xkey 在https://github.com/varnish/libvmod-xkey作为 vmod 公开可用。
代理键是 Fastly 服务的标准部分,但作为 CDN,我们将其作为托管平台的一部分提供。它不是开源的,主要是没有充分的理由;有一些关于这样做的讨论,但这不是一个重要的优先事项(部分原因是我们的 Varnish 是 2.1.4 的一个分支)。
单个密钥不允许超过 1kb(为什么?),整个密钥列表不允许超过 16kb。大约一年前,我们根据客户的要求提高了这些值的限制(以前总共为 1kb)。只要它们适合该空间,键的数量就没有限制(尽管我意识到这确实有效地限制了键空间)。限制长度的基本原理是键清除会导致一些线性时间操作,我们更愿意保持有界。如果我们当前的限制存在任何实际问题,我会感到惊讶。
我会注意到 xkey 在密钥的长度和数量上也受到限制,因为密钥也是通过标头指定的,并且标头长度有效地受服务于连接的线程的可用工作空间的限制。如果你运行自己的 Varnish,这个长度是可调的,这对你来说可能不是一个实际的限制,但它确实存在。
我注意到扫描代码的另一个小区别是 xkey vmod 支持多个 xkey 标头,而 Fastly Surrogate Keys 来自第一个匹配的标头。在用于实现功能的数据结构方面存在一些差异(部分原因是我们运行多租户 Varnish),但功能似乎是相似的。
最后,我们(此时)在全球范围内拥有数百个 Varnish 安装集群。我们的部分基础设施与通过我们的网络可靠地分发清除和确保它们在全球范围内应用有关。如果您运行 Varnish 节点集群,您可能需要做一些额外的工作来使多个节点的缓存失效(尽管这对于小型集群来说不太可能是一个重大问题)。