Anshu Aggarwal现任1 efficiency公司的技术副总裁。他有20年编程和技术领导经验,他创过业,也进过大公司。Anshu的专长是设计、开发、部署高性能的系统。2008年,Anshu创立了Zebek公司,这是世界上第一个以对象为基础的个人化搜索引擎。随后在2011年,Zebek被Quewey收购。在此之前,Anshu在Inkomi任职,并编写了HTTP处理引擎。Anshu取得了科罗拉多大学博德分校的计算机科学博士和硕士学位,并有波士顿大学电气工程硕士学位和计算机工程的学士学位。他是《HTTP权威指南》的合著者之一。

《HTTP权威指南》最初是在2002年出版的。10年之后,这本书的中文版问世。虽然这是一本“老书”,却受到中国开发者们的欢迎。你觉得可能的原因是什么?

HTTP/1.1 RFC是一套构思巧妙的规范,因为根据它确定的协议可以在高性能的要求下广泛使用。花了10年的时间,当今科技才终于可以跟上这套规范,而且可以说现在仍然没有暴露出协议的局限性,它现在这么流行,而且在可以预见的未来也将如此。

从某种角度上说,这有些像下一代的TCP/IP。当这本书最开始出版的时候,很多人仍然在写网络代码,编程语言C/C++对此也有很好的支持。但是网络层面的编程很难写,对于调试来说也是噩梦一场。虽然网络级编程对于性能来说很必要,但是硬件制造者和软件开发者都提升了一个档次。硬件制造者已经通过各种支持把TCP/IP变得又快又稳,而软件开发者从此就没有了后顾之忧。所以,他们可以在假设HTTP存在的共识下,专注在HTTP上构建新的东西。

也正因为如此,HTTP才能成为一个基本的传输协议。这个协议易用,而且已经通过高级的构建被多数编程语言(如Java, PHP, Ruby等)所支持——并且,它还具有可扩展性。RFC定义了如何扩充协议,比如可以使用扩展报头,这样就不会影响到遗留系统了。这份协议真的是个多面手,很多软件应用直接拿来就能用(这里可没有专属供应商的小把戏)。

因为这份协议等级较高,所以在恶意软件面前它也更安全,大多数防火墙对HTTP通信都没有限制。这更加鼓励了协议的广泛应用。很多新网络语言和框架比如Javascript, Ajax, ember,都把HTTP默认为底层协议。似乎很多web开发方面的东西都会把HTTP设定为传输工具——这是一种新的改变,比如客户端和服务器端的技术现在就可以专注在性能和编程简易性上。它们并不关注连接管理或者请求-响应破解。这是由浏览器与服务器完成的。所以web开发者一直都处在一个比较高的层次上。但是HTTP仍然因为一些高级功能而很有趣,比如特定报头可以用来记录、分析,以及传输数据。

HTTP的最新版本是HTTP/1.1,是在1999年拟定的。在过去的14年中,因特网有了巨大的发展,为什么还没有新的版本诞生?

围绕着下一代的HTTP一直都有一些活动,现在来说应该是HTTP 2.0。这就要从推动力说起了。当HTTP最开始问世,0.9版本是非常有限的,所以 HTTP/1.0其实是第一个真正可用的HTTP版本。但是它仍然会造成严重的性能瓶颈。HTTP/1.1在建立之初的目的就是通过引入稳固连接、范围请求以及对中间网络元素的支持(如代理和缓存)来解决这些性能瓶颈。这些提升联合起来让以HTTP为基础的系统性能有了一个显著的提高。

有很多解决方案是以经济为驱动力的。HTTP/1.1提供了高性能的实现,直到Google提出的SPDY,这是一个可以提升性能的很有吸引力的提案,很多现行的软件应用都对它很感兴趣。磁盘I/O在过去的几十年中一直都是一个瓶颈,而现在持续走低的固态存储价格,以及很多服务器端的缓存解决方案为网络通信的进一步提高提供了可能性。新的HTTP 2.0将要着眼于解决这些多路通信的连接问题。我认为,几年之后,这些提升就会加速人们接受HTTP/2.0协议。

大规模的移动应用和无线网基建覆盖改变了人们对于因特网的需求,Google的SPDY也由此应运而生。你认为HTTP的未来是怎样的?

就像上面所说的。我认为SPDY非常有趣,我在见证它成长的过程中也感到很兴奋。我认为HTTP/1.1的定义真的是构思巧妙,并且很具有前瞻性。SPDY也应如此。网络技术变化的速度日新月异。SPDY不仅需要解决今天和明天的需求,也需要考虑到十年后的需求。

很多读者提到他们需要阅读《HTTP权威指南》才能完全理解表述性状态传输(REST)。REST是由HTTP应运而生的,在这本书中还有其他类似可以挖掘的点吗?

我认为对这本书透彻的阅读就是容许机敏的读者在其中发现很多缓存技术和连接使用方面的方法,并把这种价值最大化。大家都期待用户和服务器之间的通信是无缝的。大家对于浏览器的耐心越来越少。由Pinterest 和 Facebook引发的“无限滚动”的概念正在变得无处不在,Google docs也让自动提交变得越来越时髦。这些技术其实都是连接和缓存技术的巧妙应用(当然,还有服务器应用设计)。

另外,这本书中还讨论了delta编码。我们可以思考,在HTTP/1.1问世的14、15年后的今天,全新的SPDY还在讨论关于报头压缩这么基础的问题。其实对于聪明的开发者们来说,如果想要提高性能,还有无数这样唾手可得的彩蛋等待大家来发现。

作为搜索引擎方面的专家,你怎么看待SNS的搜索引擎?它们对传统搜索引擎构成威胁吗?

大概在6年前,我开办了一家叫Zebek的公司,就是为了解决本地搜索质量较低的问题。我利用了定向加权图的概念构建了一个广义的模型来处理搜索相关性问题。通过还连接着其他节点的节点,来解决网络排名的泛化问题,而不需要某个超链接网页。比如,有一项业务,被一个使用者评价并且发布在一个网站上就是一个4节点定向图(业务是一个节点,评价是一个,用户是一个,网站是一个)。利用这个概念,你就可以为查找这个业务的人提供相关性。Zebek利用这样的方法建立了海量的定向图,这样用户无论搜索什么,都可以为他们提供了个人化的相关性。

利用这个模型,SNS上的内容是构建这样的定向图的绝佳领域。所以,我的答案是:没错,它们确实可以提供更相关的搜索结果。而这个概念如果运用正确的话,就可以得到极其相关的搜索结果。Zebek只是在本地搜索方面浅尝辄止,但是这个概念其实可以应用得更广。我通过Zebek学到的另外一件重要的事是,SNS上的主要链接并不是非常有用,一般来说,二级甚至三级链接才是最有趣的。比如说,如果我搜索川菜,那么关于我的朋友喜欢什么的信息就不够了(甚至有时是错误的)。 这里的窍门就是要把SNS的数据和标准搜索引擎的数据结合起来。现在唯一有办法来做这件事的公司就是Google,因为Google+有社交网络方面的条件。

HTTP过程处理引擎似乎和建筑物的能效似乎不太沾边,是什么让你在职业生涯上做出这样的选择?

我开始清洁能源空间的事业主要有两个原因:一、我相信现存系统的效能可以得到提高;二、我想尝试着把我知道的东西应用在一个完全不同的领域中。其实,最根本的概念都是相同的。就是从大数据里分析提取有用的信息。提高能源使用率就是这样。根据很多因素的不同,诸如天气、占用方式、结构、以及使用率来分析一个建筑物的能源使用状况,我们就可以找到减少消耗的方法。

当我在做HTTP相关工作的时候,我的源动力也是相似的:有一些ISP在向服务器供电的时候出现了问题,而服务器当时正在忙于处理很大的数据流量。所以,我们就建了一个网络缓存,这样成功的减少了40%的传输压力。用同样的资源,也可以处理同样的客户传输问题。10年后,我面对的问题是相似的。

很多中国读者对你现在做的工作很感兴趣,你能向我们解释一下如何通过软件来提高一栋建筑物的能源使用效率吗?

从最根本上说,这其实是机器学习。同样,其中最有意思的部分其实是经济驱动的。导向一栋建筑物的电流需要经过不同角色:生产者,传输者,以及交付者。每一个角色都会根据市场需求所定的价格买进卖出电力。我们先来看看能量交付公司(也就是每个月底都给你寄账单的公司)。这家公司需要建造很多基础设施来满足最大可能的能量需求。需要的能量越多,基础设施的成本越高。进一步说,它还需要从传输者那里获得能量。传输者面临着相似的问题,但是它需要面临的问题还包括,传输者需要从不同的能量供应商那里获得能量。

供应者其实很愿意用更低的价格把能源卖给承诺购买一定量的顾客,而“灵活”部分的价格会定的更高一些。假设一栋建筑物开始需要更多的能量。这时候就会发生一系列的事情:交付者需要从传输者那里要求更多的能量,传输者需要从供应者那里获得更多的能量。因为这部分是灵活的,供应商就会增加收费。传输者增加了能量流所以成本增加,供应者的系统性能下降,所以成本也随之增高。

每个人都在惩罚其他人,而使用者就是最后买单的人。事实上,这个系统是这样运作的,给终端使用者的费率是由用电最贵的15分钟决定的。所以,如果在某天中午,你多开了一会儿空调,你整个月份的电费率都随之升高了。

这是一个有趣的问题。我们要解决的问题其实是,我们要在使用者即将面临罚单之前提醒他们,以降低能源使用量。我们还要告诉能量交付者下个月他们应该提供的电量,以及告诉传输者应该预先从供应商那里购买的电量以获得一个更好的价格。

这些问题都可以用建模以及机器智能来解决。

你的工作中最具挑战性的部分是什么?你感到最有收获的部分是什么?

有两件事是最困难的,一件是要很好地理解经济模型,让能量供给链中的每个成员都能获得有价值的信息,还有一件是得到充足的实时数据来做必须的分析工作。

最有收获的部分是看到计算机科学在减少能量消耗方面可以如此简单直接的达到效果,这对环境来说大有益处。

大数据已经开始改变世界了,你认为在未来,什么是最值得期待的变化呢?

预测。我认为这方面可以做的事情有很多。大数据会被越来越多的应用在各种各样的预测中。尽管我们都愿意认为自己是独特的,但是经过看似了无生趣的电脑的分析,通过我们的行为可以预测出我们的决定。这确实给我们上了一课,但是很有趣。这里面人的因素观察起来会很有趣:下一代人会如何处理机器和计算机,要知道这些机器可比他们自己更了解他们。

你有什么建议想给年轻的开发者们吗?

编码。尽可能多地编码。为你的朋友编码。为你的家人编码。每次结束一个项目的时候,无论这个项目有多小,都再做一个类似的,改变一些东西,让你自己从中学到一些东西。比如说,帮你的朋友建一个Wordpress站点。一旦完成了,再帮助另一个朋友做一个,加进一些有趣的widget,下一个朋友,从零开始建一个网站,然后再找一个朋友,用ember.js给他写,下一个,要用上NoSQL,然后,学点Mahout,然后,再用python做一个,再然后,用上网络分析,再下一个,要用上A/B分析,然后,在Arduino上做些文章,下一个,用上Raspberry Pi,以此类推。

很多年前,我和一个滑雪滑得很棒的朋友一起去科罗拉多滑雪。我不太会滑,所以我上了滑雪缓坡。她和我一起去了,我问她,为什么要和我在缓坡上浪费时间。她说:“我可以在缓坡上练习转弯,我想转得更好,我不会浪费时间的。”

无论任务有多么简答,都会有你可以从中学到的东西。所以不要怀疑,接受任务吧。

没有什么能像手把手的练习这样更能帮助你学习了。读书更简单。合上书,编码去吧。这更难。激励自己,不要贪图安逸,突破自己的极限。别怕看起来像傻瓜一样,该求助的时候求助。在班级中,问问题的学生一般都是理解了课程内容的学生。

世界在变化,你也需要不断地更新。在过去的20年中我一直在编码,但是我仍然在不断激励自己,让我的大脑敏捷,永远和时代一起变化。亨利·福特在60岁的时候才发明了流水作业线。现在就学吧,不早,也不晚。

感谢我的读者们花时间问了这些有趣的问题。我回答的时间有些长,因为这都是我深思熟虑后的答案。

English version of this interview


更多精彩,加入图灵访谈微信!