《HTTP權威指南》作者Anshu Aggarwal:用大資料來節能(圖靈訪談)

盼盼姐發表於2013-07-03

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


更多精彩,加入圖靈訪談微信!

相關文章