未來的云計算語言?Go 在 Google 內部崛起
前VMware云平臺首席技術官Derek Collison曾斷言Go語言兩年內將成為云計算的主流語言,這也許有些聳人聽聞,但Go語言在Google內部確實取得了令人矚目的成績。Wired 最近發表文章講述了Go語言在Google內部崛起的故事,IT經理網編譯整理如下:
當一部分“老弱”程序代碼不能正常工作時,Google就會派出負責Go語言項目的“地鼠特工隊”負責除舊迎新。
Brad Fitzpatrick在使用Google軟件最常用的功能時卡住了——下載進度條在99%的地方停下了。雖然下載失敗是很常見的問題,但 Fitzpatrick卻并無遷就之意,他是地球上最懂技術的企業——Google的工程師,他不能容忍此類問題發生在Google身上。
“1k大的文件都托管不好對Google來說是很丟人的事情,”Fitzpatrick在上周俄勒岡的開源大會上說道,“所以我在內部的Google+站點上就此問題大吐其槽。”
其實Fitzpatrick并不孤單,多年來很多人都曾抱怨dl.google.com系統不夠穩定,而該系統極其重要,處理幾乎所有Google的下載任務,包括Chrome瀏覽器安裝文件、Android源代碼,到體積小些的JavaScript庫。
問題的根源是該文件服務器系統的底層代碼的年齡已經超過五年,可謂破敗不堪。
“如果代碼不能得到持續的關愛就會變成一堆屎,”Fitzpatrick說道。
最初的C++代碼缺乏規范的文檔,自動化測試也不達標,沒有人能搞明白它是如何工作的。人們只是不停地做一些增量改變,最后在負責維護的程序員眼 里,這些代碼變成了“一坨面條”。系統的不穩定差不多要把服務器運營團隊逼瘋了,但是沒有人有時間重寫技術上還能使用的代碼。于是Fitzpatrick 自告奮勇接手這個任務,他來自Google的一個25位工程師組成的團隊——地鼠隊,負責開發一種定制化的編程語言——Go.
Fitzpatrick對重寫依然在生產環境使用的代碼感到非常興奮,因為他終于有機會能在真實的系統中測試Go了。
Dennis Ritchie (站立者)與 Ken Thompson在最早的小型機 PDP-11 前工作, 1972年 Photo:Courtesy of Bell Labs
Go由計算機科學的三位大神Robert Griesemer、Rob Pike和Ken Thompson共同創建。Thompson也是Unix操作系統的聯合開發者,同時也是C語言之父。Pike則是Thompson在貝爾實驗室的同事。 Griesemer因在Java編譯器方面的工作而廣為人知。
Go的初衷是實現即能像古怪的電信語言Erlang或流行的服務器端javaScript平臺Node.js那樣處理大規模并發用戶,同時又能像C++那樣迅捷。一個很夠處理大規模并發下載請求的分布式文件系統應當是最能發揮Go長處的應用。
事實也是如此,新的用Go編寫的dl.google.com軟件代碼上簡潔不少,內存開銷也更少,更重要的是,更加可靠。Fitzpatrick表示在開發過程中更加深入了解了Go,開發了一個新的開源緩存庫,同時也發現了Go語言的一些不足。
“很榮幸我是第一個體驗此類痛點的人,”在接受開源大會上接受采訪時Fitzpatrick表示,Google的團隊在用Go處理集群和文件傳輸時 進行了很多改進。項目大獲成功,如今Go團隊開始經常幫助其他團隊完成小項目。正如Griesemer所言:這只“地鼠特工隊”對研究團隊、Chrome 團隊、客戶調查團隊以及其他“有關團隊”也提供了很多幫助。
雖然Go語言在Google內部戰績彪炳,但是“地鼠特工隊”并未在Google內部呼吁用Go全面取代其他編程語言。不少團隊不希望改變目前使用 的語言,也不愿做重復開發。Google開源經理Chris DiBona認為:對于不同的任務我們會使用最好的軟件來完成,無論這些軟件是Java、Python或是什么別的語言編寫的。對于這一 點,Fitzpatrick也表示贊同。
Go語言目前在Google以外的應用還很少,但在業界依然引起了重視。
前VMware云平臺首席技術官Derek Collison曾斷言Go語言兩年內將成為云計算的主流語言:
管理層和基礎架構層決定了云計算的交付模型,兩年內大多數云程序都將用Go語言編寫。
此外,網游公司Zynga和NTT DoCoMo都在使用的開源數據庫Couchbase就是部分用Go編寫的,其開發者還用到了Erlang、C和C++。但是Couchbase的軟件架構師J.Chris Anderson表示Go是最棒的:
我們發現Go的并發模型與Erlang、C和C++的幾乎一樣強大,而且是對開發者非常友好的一種系統。
Collison對Go的預言也許有些夸大,但他新創立的云計算公司Apcera確實已經在使用Go語言,而且目前Go語言已經有了一個重大的成功案例,那就是Google自己,新的dl.google.com系統的可靠性得到了大幅提升。