面對 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的規模。
相關文章
- 面對人生這道程式,該如何編碼?
- 專案管理:軟體企業如何面對(轉)專案管理
- 軟體企業如何面對專案管理(轉)專案管理
- Google之類公司的程式碼質量如何?Go
- Google是如何做程式碼審查的?Go
- 通知 | 與Google AR/VR技術團隊面對面深入交流GoVR
- Facebook是如何管理程式碼的
- 盲人 Google 工程師是如何寫程式碼的?Go工程師
- 谷歌將關閉程式碼專案管理平臺Google Code谷歌專案管理Go
- 如何管理好10萬行程式碼的前端單頁面應用行程前端
- 面對裁員潮,程式設計師如何安身立命程式設計師
- 面對下不去手的程式碼怎麼辦
- Google Inbox 是如何跨平臺重用程式碼的?Go
- 谷歌程式碼庫已超過 20 億行程式碼,他們是如何管理的?谷歌行程
- 結對程式設計:肩並肩還是面對面程式設計
- 面對枯燥的原始碼,如何才能看得下去?原始碼
- 程式碼質量管理——如何寫出優雅的程式碼
- 前端頁面測試如何定位漏測程式碼前端
- 如何面對後Hadoop時代?Hadoop
- Google 是如何審批20億行程式碼的?coding style 真的很重要!Go行程
- 面對上層管理者的不合適的決策如何優化優化
- 如何在程式碼層面提供CPU分支預測效率
- 如何透過Python程式碼旋轉PDF頁面Python
- Google JavaScript 程式碼風格指南GoJavaScript
- 活動通知 | 7\/27-與開發者面對面交流Google AR\/VRGoVR
- 程式設計實戰:如何管理程式碼裡的常量程式設計
- 直播小程式原始碼,小程式頁面左右滑動如何解決原始碼
- 如何優雅地管理複雜前端程式碼前端
- 自顧不暇的系統管理員如何面對開發人員的“Challenge”?|航海日誌 Vol.20
- 資料庫密碼安全面臨挑戰企業如何面對?資料庫密碼
- 如何防止Google Voice號碼被回收Go
- jQuery如何實現頁面載入完畢再去程式碼jQuery
- 體面編碼之程式碼提交
- 從面對程式碼下不去的文章,到DBA群討論
- 頁面常用程式碼整理
- Google有多大?20億行程式碼,等於40個Windows !Go行程Windows
- 面對海量資料,如何才能查得更快?
- IT建設如何面對“短板”和“孤峰”?