SPDY对我的暑假做了什么¶
我开始意识到我是潮人中的潮人,在某种意义上,我往往比其他人做得更早,但完全不能传达未来发生的事情,因此当“真正的潮人”赶上时,我已经在一个不同的地方了,更有趣了。
我唯一的幸运突破是 bikeshed email 在那里,我确实坐下来构思了我的一些想法,从而坚定地将一根棍子插在地上,作为第一批认真思考如何组织开源合作的人之一。
我之所以提到这一点,是因为我将要写的东西现在对大多数Varnish用户来说可能看起来非常不重要,但在未来三年、五年甚至十年后,我认为它会变得重要。
在那之前,你可以不读它。
Varnish的演变¶
七年前,当我们开始的时候,我们唯一的、也是全部的目标是构建比Squid更好的服务器端缓存。我们做到了。
从那时起,我们在Varnish(ESI:Includes,gzip支持,VMODS)中添加了一些东西,我现在正在关注流媒体和有条件的后端获取。
Varnish现在不仅仅是一个网络缓存,但基本上仍然是一层抛光层,你把它放在你的网络服务器前面,让它看起来更好,工作更好。
谷歌在SPDY上的试验已经推动了HTTP/2.0的努力,但如果过去的表现是什么的话,那在未来几年里我们都不需要真正担心。IETF工作组还需要设法“澄清”定义了HTTP/1.1的RFC2616,并说SPDY背后有任何哪怕是一点点类似共识的东西都是彻头彻尾的谎言。
RFC2616来自1999年6月,对我来说,这意味着我们在设计HTTP/2.0时应该着眼于2035年,众所周知,预测事情是很难的,特别是关于未来。
那么,一个Varnish建筑师应该做些什么呢?
这个暑假,我所做的就是思考如何设计Varnish来应对SPDY或HTTP/2.0引入的那种变化:流水线、多路传输等,而不会让我们陷入关于2035年生活的科幻小说中。
深刻的洞察力往往听起来非常简单化,近乎琐碎,直到你考虑到全部后果。令人惊讶的是,现行法律中“不要杀人”的实施数量之多。(如果你不这么认为,你可能忘记了#包括《维也纳条约》和关于化学武器和生物武器的公约。)
因此,我对Varnish的看法是,它必须成为一个类似套接字扳手的工具箱,用于处理HTTP流量,这可能会引起许多“DUH!”反应,直到包括我在内的人们更充分地理解其后果。
今天使用Varnish不能做的事情¶
尽管Varnish今天可以被压弯、调整和哄骗去做,但有些事情你不能做,或者至少有一些事情很难做,效率很低。
例如,我们认为“事务”开始于来自客户端的请求,并且涉及对有限大小数据元素的零个或多个后端获取。
未来不是这样的。
例如,SPDY尝试过的一种方法是“服务器推送”,在这种情况下,你获取index.html,网络服务器会说“你还需要main.css和cat.gif”,然后把这些对象推送到客户机上,这样就省去了等待客户请求它们所浪费的往返时间。
今天,这样的事情在Varnish中是不可能的,因为对象是独立的,并且一次只能查找一个。
我已经听到你们中的一些令人惊叹的VCL奇才说“好吧,如果你用内联-C键抓取一个引用计数,然后重启和……”但老实说,事情不应该是这样的。
您应该能够执行以下操作:
if (req.proto == "SPDY" && req.url ~ "index.html") {
req.obj1 = lookup(backend1, "/main.css")
if (req.obj1.status == 200) {
sess.push(req.obj1, bla, bla, bla);
}
req.obj2 = lookup(backend1, "/cat.gif")
if (req.obj1.status == 200) {
sess.push(req.obj2, bla, bla, bla);
}
}
而这样做并不是真的 that 我觉得很难。我们只需要跟踪我们实例化的所有对象,并确保当没有人再使用它们时,它们会消失并消失。
我们早在2006年做出的许多假设在这样的架构下不再有效,但正是这些假设赋予了Varnish如此惊人的性能,所以仅仅用标准的CS教科书解决方案(如“垃圾收集”)来取代它们会使Varnish失去很多光彩。
正如你们中的一些人所知道的,在Varnish中隐藏了大量的模块化,但在VCL中并没有完全公开使用。将要发生的大部分事情将是改进和记录这种模块化,并将其发布以供你们玩乐,所以我们不像是从头开始或任何事情。
但是,有些模块化是建立在不再稳固的基础上的;例如,发起请求在后端提取的整个持续时间内都存在。
这些问题需要一些工作才能解决。
但是,在你开始认为我有一个宏伟的计划或甚至是一个明确的路线图之前,我最好明确说明情况并非如此:我在未来的迷雾中感知到一些奇怪的形状,我会朝着那个方向瞄准,时间会证明,它们要么是我怀疑的门口,要么是通往焦油坑的活板门。
我将做很多改变,过去的事情将不再是以前的样子,但我认为从长远来看,它们会更好,所以请容忍我,如果你最喜欢的Varnish如何工作的细节发生了变化。
Varnish不是快速的,Varnish是快速的!¶
正如我所说的,我不是SPDY的粉丝,我真诚地希望,无论未来出现什么HTTP/2.0标准,当前的提案中没有一点是不受挑战的。
但我确实想要感谢这场混乱背后的人,不是因为这场混乱,而是因为他们让我花了一个夏天认真思考我试图用Varnish做什么,以及Varnish在这里要解决什么问题。
这会很有趣的!
保尔-亨宁2012-09-14
《Varnish》的作者
PS:我们在以下时间见 VUG6 我打算在那里更多地谈到这一点。