Varnish Hashtwo/Xkey 和 Fastly 的 "Surrogate Keys" 一样吗?

Are Varnish Hashtwo/Xkey and Fastly's "Surrogate Keys" the same?

我目前正在决定是管理我自己的 Varnish 服务器还是使用像 Fastly 这样的托管服务。这里最重要的决定因素之一是有效的基于标签的缓存失效,因为我计划将 Varnish 放在我们的 API 前面,我们需要经常发出清除请求以使许多相关页面无效。

Fastly 提供 Surrogate Keys, and Varnish appears to offer a separate module 有许多名称,包括 Hashtwo、Hashninja 和 XKey。这些特征看起来是相同的。它们实际上是相同的,还是这两个功能之间存在一些关键的技术或效率差异,但从关于它们的博客文章中并不清楚?

xkey 和 hashtwo(某些营销中的 hashninja material)相同。

我认为与 Fastly 产品的主要区别在于 xkey 不对每个 object/URL 的密钥长度或数量添加任何限制。据我所知,两者都很好用。 (完全披露:我在 Varnish Software 工作)

Surrogate Keys 是 Fastly 对此功能的实现。我写了我们当前的实现,但没有使用 HashTwo/Hashninja/xkey,所以我不是实现之间差异的权威。 Xkey 在 https://github.com/varnish/libvmod-xkey.

作为 vmod 公开可用

代理键是 Fastly 服务的标准部分,但作为 CDN,我们将其作为托管平台的一部分提供。它不是开源的,大多没有充分的理由;已经有一些关于这样做的讨论,但这不是一个重要的优先事项(部分原因是我们的 Varnish 是 2.1.4 的一个分支)。

单个密钥不允许超过 1kb(为什么?)并且整个密钥列表不允许超过 16kb。大约一年前,我们应客户要求提高了这些值的限制(以前总共为 1kb)。键的数量没有限制,只要它们适合space(尽管我意识到这确实有效地绑定了键space)。限制长度的基本原理是密钥清除会导致一定数量的 linear-time 操作,我们更愿意将其限制在一定范围内。如果我们当前的限制存在任何实际问题,我会感到惊讶。

我会注意到 xkey 的长度和键数也有限制,因为键也是通过 header 指定的,并且 header 长度实际上受可用工作的限制space 用于为连接提供服务的线程。如果你 运行 你自己的清漆,这个长度是可调的,这对你来说可能不是一个实际的限制,但它确实存在。

我在扫描代码时注意到的另一个小区别是 xkey vmod 支持多个 xkey headers,而 Fastly Surrogate Keys 取自第一个匹配 header。在用于实现功能的数据结构方面存在一些差异(部分原因是我们 运行 一个 multi-tenant Varnish),但其他功能似乎相似。

最后,我们(此时)在全球拥有数百个 Varnish 安装集群。我们的部分基础设施必须通过我们的网络可靠地分发清除并确保它们在全球范围内应用。如果你 运行 一个 Varnish 节点集群,你可能需要做一些额外的工作来使跨多个节点的缓存无效(尽管这对于小型集群来说不太可能是一个重大问题)。