天天看點

面對20億行代碼,Google如何管理?

面對“google 這家公司有多大?”這種問題,你可能會用收入、股票價格、客戶數量或者是形而上學的影響力來回答這個問題。但是,這還不是全部。google 作為全球最大的網際網路公司,我們當然可以用“網際網路思維”來思考這個問題,比如用代碼數量來衡量它。

來自于 google 的 rachel potvin,在周一舉辦的矽谷工程會議上給了我們一個可以參考的答案。她表示,運作所有 google 網際網路服務的軟體,包括了 google 搜尋、gmail、google地圖等,大約有20億行代碼。相比之下,從20世紀80年代就開始開發的 windows 作業系統——有史以來為單一計算機所開發的最複雜的軟體工具之一,隻有5000萬行代碼。

是以簡單一刀切的話,建立 google 相當于建40個 windows 系統。

當然,5000萬行代碼驅動的僅僅是 windows 系統本身,而20億行代碼則是 google 的全部。google 的業務覆寫範圍及其廣,包含了搜尋、地圖、文檔、社交、月曆、郵件、視訊,以及其他網際網路服務,所有20億行代碼都存放在代碼資源庫中,提供給全部2.5萬名 google 工程師調用。在公司内部,google 對待它的代碼就像對待一個巨大的作業系統。potvin 表示:“雖然不能證明這一點,但我認為這是全球最大的單一資訊庫。”

google 是一個極端例子,但它展示了如今的軟體在網際網路時代有多複雜,以及我們如何改變使用的編碼工具和理念,以适應這種複雜性。google 的巨大資源庫僅适用于内部程式員,但在某種程度上,它已經類似于github——一個向所有公衆開放的源代碼庫,工程師可以通過網際網路共享代碼。我們正在走向一個需要經常大規模合作代碼的世界,也隻有這樣才能跟上現代網際網路服務的發展。

github 就表示:“google 擁有2.5萬名工程師,他們可以與内部擁有各種不同技能的人分享代碼。但是小公司可以使用 github 和開源,得到同樣的優勢。”

另一方面,建立并運作一個20億行代碼的龐大系統,并不簡單。lambert 表示:“這是一項技術挑戰,也是一個巨大壯舉,數字相當驚人。”

github 可以讓程式員輕松共享代碼和協作,它涵蓋了數以百萬計的項目,但沒有直接容納軟體項目。google 則更進了一步,将很多項目合并成一個。鑒于涉及許多工程師以及同時應付如此多代碼的難度,能做到這一點十分地瘋狂。

piper

google 為了同時應付所有代碼,已經建立了自己的“版本控制系統”:piper。它在整個龐大的網絡基礎設施上運作,系統覆寫了10個不同的 google 資料中心。

這一系統不僅将所有20億行代碼都存放在單一的系統内,并提供給公司内部工程師調用,更給工程師提供了更多自由,可以使用及合并橫跨無數項目的代碼。potvin 表示:“當你開始一個新項目,google 已經提供了有豐富資源的圖書館,幾乎一切事情都已經幫你完成。更重要的是,工程師可以在所有 google 服務中進行代碼變更和立即部署。更新一件事,就能夠更新一切。”

當然使用這個系統也有限制。potvin 表示,某些高度機密的代碼,如pagerank 搜尋算法,被存儲在一個單獨的資源庫中,隻提供給特定員工。而且,由于android 和 chrome兩個作業系統與那些線上服務有非常大的差別,google 會将它們的代碼存儲在單獨的版本控制系統中。但在大多數情況下,google 代碼都是一個整體。

機器程式員

lambert 指出,建構和運作這樣的一個系統,不僅需要知道如何做到這種事,還需要龐大的計算能力。piper 每天需要處理大約85tb的資料(即85000gb),google 的 2.5萬名工程師每天會對資源庫做出45000次送出(修改)。

與此同時,piper 還必須能删去人類程式員所産生的大量備援。它必須確定代碼準确無誤,程式員不會互相幹涉,要能從資源庫中删除錯誤和未使用的代碼。而正是存在這一切困難,piper不得不接手一些人類的工作。現在,google 已經從之前的一個版本控制系統perforce,切換到了 piper,讓機器來完成一部分工作。

這并不意味着 google 要讓機器人編寫代碼,但它們确實可以生成很多運作軟體所需的資料和配置檔案。程式員和機器人需要協調一緻,維護代碼健康。現在已經不隻有人類在維護代碼了。

讓所有人受惠的 “piper”

其他公司能否受益于同類系統呢?當然能,而且也确實有公司這樣做了。facebook 的主應用有2000萬行以上代碼,公司把整個事情作為一個單獨的項目。還有一些公司以較小規模在做同樣的事情,而當這些公司不斷接近 google 或 facebook 的規模,也會做同樣的事。但google 和 facebook 都在探索能夠改變每個人的方法。

兩家巨頭正在開發一個開源的版本控制系統,任何人都可以用它來處理大規模代碼。它基于現有系統mercurial,google正試圖擴充 mercurial 資源庫,達到google的規模。

原文釋出時間為:2015-09-21

本文來自雲栖社群合作夥伴“大資料文摘”,了解相關資訊可以關注“bigdatadigest”微信公衆号