241241024

199IT資料中心微信賬戶:i199IT

譯者:boxi

Google Search、Google Maps、Google Docs、 Google+、Google Calendar、Gmail、YouTube ……,實現所有 Google 服務的全部 20 億行程式碼統統放到一個程式碼庫進行管理,這也許是全球在用的最大的單一程式碼庫了。

Google 有多大?我們可以用收入、用股票價格、客戶規模,或者用虛的影響力來回答這個問題。不過這些並不是全部。Google 還是一個軟體帝國。因此我們可以用程式碼來回答這個問題。

在幾天前出席 @Scale 大會時,Google 的 Rachel Potvin 給出了一個相當接近的答案。她估計執行 Google 所有網際網路服務(搜尋、Gmail、Google Maps 等)所需的軟體大概相當於 20 億行程式碼。相比之下,自 1980年 代開始就一直研發的微軟 Windows 作業系統(有史以來最複雜的單機軟體之一)大概是 5000 萬行。

也就是說 Google 的開發量相當於 Windows 的 40 倍。

更令人吃驚的是,供 Google 25000 為工程師使用的這 20 億行程式碼全部都放在了一個程式碼庫。在公司內部,Google 把它的程式碼當作了一個巨大的作業系統。“歲雖不能證明,” Potvin 說:“但我估計這是全世界在用的最大的單一程式碼庫。”

Google 是一個極端的例子。但它的例子顯示出在網際網路時代我們的軟體已經發展到何等複雜的地步—同時還顯示了我們是如何變革程式碼工具和哲學來適應這種增加的複雜性的。Google 的龐大程式碼庫僅面向內部使用。但是從某種程度來看,它相當於大家在網際網路上共享海量程式碼的開原始碼託管工具 GitHub。我們正在快速走向大規模程式碼協作的世界。這是我們跟上快速演變的網際網路服務的唯一辦法。

GitHub 系統總監 Sam Lambert 說:“像 Google 這樣擁有 25000 名開發者,就意味著有著各種不同技能的人一起分享程式碼。但是作為小公司你一樣可以利用 GtHub 和開源獲得其中的一部分優勢。也就是老話所謂的 ‘水漲船高。’”

不好的一面是開發運營 20 億行規模的巨無霸並非簡單的任務。

GitHub 實現的是讓寫程式碼的人很容易就能分享程式碼和協作。不過 GitHub 託管的不是一個軟體專案,而是數百萬。Google 則走得更遠,把許多專案組合成了一個。由於要在那麼多的工程師間協調如此龐大規模的程式碼,這聽起來似乎有點瘋狂。但 Potvin 說他們做到了。

Piper 在彈奏

實際上,Google 開發了自己的 “版本控制系統” 來管理這些程式碼,這個系統叫做 Piper,Piper 跑遍了 Google 搭建的執行其所有線上服務的所有基礎設施,覆蓋了 Google 的 10 個資料中心。

當然,這個系統並不是裝了 20 億行程式碼讓公司內部人人都能訪問那麼簡單。它還賦予了 Google 工程師非同尋常的自由去使用和組合來自無數專案的程式碼。Potvin 說:“這樣的話做新專案的時候手上就有了海量的庫。幾乎所有事情都幹完了。” 此外,工程師的一次程式碼變更可以馬上部署到所有 Google 服務。也就是說一次更新就完成了全部升級。

這套系統也有一些限制。Potvin 說一些高度機密的程式碼—如 Google 的 PageRank 搜尋演算法是放在單獨的庫裡面,僅供特定員工訪問的。此外,Google 的裝置作業系統 Android 和 Chrome 由於不在網上跑,而且跟其他服務有很大的不同,所以也是單獨存放在獨立的版本控制系統裡面的。但大部分 Google 程式碼都是可以讓軟體模組、創意和解決方案進行自由流動的一個整體。

機器人助手

與此同時,Piper 還必須減輕人類編碼者的大部分負擔。它必須確保編碼者程式碼中新增了所有必要的檔案頭;確保程式碼變更時不會互相踩踏;確保可以方便地排除錯誤和沒用的程式碼。這些事情都非常棘手,棘手到其中的部分工作已經不是人可以乾的了。所以 Google 已經從原來的版本控制系統 Perforce 遷移到 Piper,現在大部分的 commit 都是由機器人自動完成了。

這不是說機器人去寫程式碼。它們的工作是生成軟體執行所需的大量資料和配置檔案。“需要齊心協力才能保持程式碼健康,” Potvin 說:“而這不僅僅是人的工作,也包括機器人的。”

Piper 為人人

其他人是否也能受益於類似的系統?當然。而且的確也有人這麼做了。Facebook 的主應用大概有 2000 萬行程式碼,他們也是把這些程式碼當作一個專案。還有的也在做類似的事情,只是規模要小一些。但是一旦那些公司接近 Google 或 Facebook 這樣的規模,那後勤保障可能就會出問題。好訊息是 Google 和 Facebook 正在探索改變這一點—替所有人改變這一點。

這兩家巨頭目前正在合作一款開源版本控制系統,讓所有人都可以進行大規模的程式碼處理。其基礎是 Mercurial。“我們在嘗試看能不能讓 Mercurial 達到 Google 程式碼庫的規模,” Potvin 說。她表示,Google 正在監管 Facebook 類似工作的程式設計大牛 Bryan O’ Sullivan 等人密切合作。

這種做法似乎有些極端。從現在來看,沒有幾家公司的程式碼能做到 Google 或者 Facebook 的規模。但在不久的將來,會的。因為軟體正在蠶食世界。

摘自:36Kr