我目前正在决定是否管理我自己的Varnish服务器或使用像Fastly这样的托管服务.这里最重要的决策因素之一是基于标签的高效缓存失效,因为我计划将Varnish放在我们的API前面,我们需要经常发出使许多相关页面无效的清除请求.
快速提供代理键,Varnish似乎提供了一个单独的模块,包括许多名称,包括Hashtwo,Hashninja和XKey.这些功能看起来是一样的.它们实际上是相同的,还是这两个功能之间存在一些关键的技术或效率差异,这些关于它们的博客文章并不清楚?
代理键是Fastly实现此功能.我编写了当前的实现,但没有使用HashTwo/Hashninja/xkey,所以我不是实现之间差异的权威.Xkey在https://github.com/varnish/libvmod-xkey上作为vmod公开提供.
代理密钥是Fastly服务的标准部分,但作为CDN,我们将其作为托管平台的一部分提供.它绝不是开源的,没有充分的理由; 关于这样做有一些讨论,但这不是一个重要的优先事项(部分原因是我们的Varnish是2.1.4的分支).
个别密钥不允许超过1kb(因为为什么?)并且整个密钥列表不允许超过16kb.我们在大约一年前的客户要求时提高了这些值的限制(以前总共为1kb).键的数量没有限制,只要它们适合该空间(虽然我意识到它确实有效地限制了键空间).限制长度的基本原理是密钥清除导致一些线性时间操作,我们希望保持有限.如果我们目前的限制存在任何实际问题,我会感到惊讶.
我会注意到xkey的长度和密钥数量也受到限制,因为密钥也是通过标头指定的,并且标头长度实际上受到服务于连接的线程的可用工作空间的限制.如果你运行自己的清漆,这个长度是可调的,这对你来说可能不是一个实际的限制,但确实存在.
我注意到扫描代码的另一个细微差别是xkey vmod支持多个xkey标头,而Fastly Surrogate Keys则从第一个匹配标头中获取.在用于实现功能的数据结构方面存在一些差异(部分原因是我们运行多租户清漆),但功能似乎相似.
最后,我们(此时)在全球范围内拥有数百个清漆装置.我们的部分基础设施与通过我们的网络可靠地分配清除并确保它们在全球范围内应用有关.如果运行Varnish节点集群,则可能需要执行一些额外的工作来使多个节点上的缓存无效(尽管这对于小型集群来说不太可能是一个重要问题).