Google的技術是云計算開源化的主要推動力之一,Hadoop、NoSQL類數據庫等開源軟件都源于Google的技術。但搜索巨頭本身對于自身技術的開源態度卻有點糾結。這種糾結主要源于不想放棄自身的這一競爭優勢,但是在微軟、VMware、EMC等紛紛擁抱開源的大趨勢下,Google終于意識到在開源的環境下推進自己云戰略的重要性,哪怕把它最大的秘密部分開源化也在所不惜,現在這一戰略已經初見成效。
Craig McLuckie把想法告訴了Urs Hlzle,這位Google全球數據中心網絡的監管人并不喜歡這個想法。
McLuckie 跟Google西雅圖分部的兩位工程師希望把Borg再造成一個開源項目。Borg是管理調度Google從搜索到地圖等一切服務所需資源的軟件工具,正是有了它,Google才能將一個個計算任務打包分配到它龐大的全球網絡。多年以來,Borg一直是Google保守得最好的秘密之一。而 McLuckie想把它的藍圖(至少是部分藍圖)共享給互聯網。
“我們第一次去找Urs時,他對這個想法實際上是不高興的,” McLuckie說:“因為我們要做的是把運營Goolgle的秘密武器作為開源技術拱手讓人。”
但 Hlzle等Google要員最終批準了這一項目—Kubernetes這個名字起源于古希臘,是船長或者駕駛員的意思。今天是它推出1周年的日子,過去12個月,已有超過370名程序員給項目提交了12500份“commit”,他們當中大部分都不是Google的人,其中就包括3名頂級貢獻者。
Kubernetes 代表了Google在云計算領域與Amazon、微軟等努力進行競爭時的戰略轉變。傳統上,Google對于驅動其在線帝國的基礎技術的保護是非常嚴的— Borg就是很好的一個例子,且從某種程度上來說仍然如此。但現在Google已經是一家對云計算態度非常認真的公司,它正在邀請別的公司和開發者在自己的基礎設施之上做網站、開發應用(注:類似Amazon當年做AWS的路子),因此是封閉的、不公開的。邀請其他公司在其基礎設施之上開發運行應用,所以開源更多的是面向整個軟件社區做出的一種平等交換。
Kubernetes最初是由McLuckie和其他兩位工程師Joe Beda 、Brendan Burns一起構思的,他們都是Google云服務的開發團隊成員。在他們看來,Kubernetes這個開源項目開源推動開發者使用Google Compute Engine,這項云服務可為外部構思和開發者提供“虛機”,在虛機上面幾乎可以跑任何代碼,而Kubernetes則為代碼的跨環境運行(云服務、本地數據中心)提供有效的管理手段。Hlzle最終同意這一點值得犧牲掉保留自己代碼的優勢。“云對于Google來說絕對是勢在必行,” McLuckie說:“我們必須用新的方式運營。我們必須把自己的專長帶給社區。”
Google的演進
Google 的舉動也是對云計算崛起所推動的更大轉變的響應。現在開發者很容易就可以在一堆機器上面開發軟件,而且往往都是用開源的。在那么多機器上跑專用軟件的成本高昂,滿足特定需求很困難。無論是提供像Google Compute Engine這樣的服務,還是為此類服務開發軟件,現在的云公司都必須擁抱開源。微軟也已經意識到這個不爭的趨勢,為了推動其Azure云計算服務的發展而擁抱開源。VMware和EMC也已經這樣做了。
但Google的態度有點掙扎。它的技術是云計算領域開源力量崛起的主要推動力之一。只是這家公司一直對開源運動保持著適當的距離。現在它走得更近了。
過去10年,Google開發出軟件來管理軟件在其成千上萬臺機器上的運行。它疑心很重,把運行大規模機器的能力視為自己的競爭性優勢,不想讓人看到這一軟件的面目。然后,過了幾年,Google會時不時公布1、2篇相關技術的論文,開源界就會開始山寨Google的技術,很多技術都是這樣,如 MapReduce催生了Hadoop,BigTable公布出來后,一大堆“NoSQL”數據庫就如雨后春筍般冒出來了。
Borg的情況大抵也是一樣的。幾年前,Twitter和加州大學伯克利分校的工程師開發了一款名為Mesos的工具,現在,它成了Twitter、Airbnb等知名互聯網服務的基礎。還有好些項目也在圍繞著Docker容器技術(Borg的運作也是這樣,將軟件打包進軟件“容器”然后通過Google網絡到處交付出去)開發類似的工具。
不過現在在云業務需求等力量推動下,Google正在改變角色。它分享出來的不僅僅只是一篇研究論文,把一些小的在線基礎設施開源,而是把整個體系轉變成開源項目(至少在某種程度上)。
如 Burns所述,他和Beda 、McLuckie都看到了有很多其他項目正在利用Borg及容器技術的想法,所以他們認為Google可以幫助推進這件事情。“我們感覺大家在把一塊塊碎片拼接完整是遇到了困難,”他說:“我們有那個圖案。我們有10年的經驗,知道怎么把碎片拼到一起。”
誠然,Kubernetes并不是開源的Borg。它沒有Borg或者Borg的繼任者Omega那么復雜。從目前情況來看,它不能管理那么多臺機器。“我們仍在朝著接近Borg同等規模努力,”Beda說:“Kubernetes初期關注的焦點是核心概念要對。”
但是Borg和Omega的部分開發者也在做Kubernetes,其中包括Uber的工程師Eric Brewer、John Wilkes及Brian Grant。有做過的人來做Kubernetes對于這個開源項目來說意義重大,而這個項目的未來目標是糾正Borg、Omega的錯誤,最終超越這兩位前輩。
在這個對開源如此器重的世界里,這是Google參與競爭的最好方式。對于很多人來說,容器就是軟件開發的未來。而Google現在正扮演著這個未來的領導角色。
隨便跑
不過,曾在Pivotal幫助開發過類似系統的Mark Kropf質疑Google對這個項目的態度究竟有多認真,他指出Beda已經離開了公司。而云服務提供商Digital Ocean的CEO Ben Uretsky則認為,Kubernetes等系統的應用情況并沒有那么廣泛。“容器技術尚未成熟,”他說:“我們還處在炒作周期的頂峰。”
但無論Kubernetes的命運如何,從很多意義上來說,它仍指出了軟件開發的未來。
Google 在自己的數據中心使用著自己的軟件容器。不過1年前推出Kubernetes時,它找到開源的Docker作為搭檔。當Docker母公司尋求將自己的容器技術與某些自己的軟件工具進行捆綁時,Google和Kubernetes項目卻開始擁抱Docker的替代品Rocket—一個完全獨立的容器格式。
McLuckie 強調,Kubernetes現在同時支持Docker和Rocket。他希望業界最終能回歸到一個獨立的容器格式去,但他解釋說這不是選邊站。他說,Kubernetes“應該成為瑞士。”聽起來有點理想主義,但這是云公司必須干的事情:提供開源軟件,然后隨便別人怎么用。McLuckie 說:
正在發生的這場顛覆要比任何一家公司都要大。