【如何提高開發效率】探究谷歌的代碼管理

日期: 2016年7月 2日數據庫

谷歌和 Facebook 都只有一個代碼倉庫,全公司的代碼都放在這個庫裏。緩存

我一直很困惑,爲何要這樣作,不一樣語言的項目放在一個庫有什麼好處?分佈式

最新一期的《ACM通訊》(59卷第7期)有一篇論文《爲何 Google 要把幾十億行代碼放在一個庫?》,做者是谷歌基礎設施小組的工程師,能夠看做官方對這個問題的詳細解答。我讀後感到收穫很大,下面就是摘錄。測試

1、概況

谷歌最先使用 CVS 進行代碼管理,1999年改成 Perforce。那時是一臺 Perforce 主機,加上各類緩存機。google

當時,全公司的代碼就在一個倉庫裏面,後來一直沿用這種作法。因爲規模不斷增加,Perforce 已經沒法知足需求,谷歌就開始使用本身開發的版本管理系統 Piper。spa

Piper 架設在谷歌本身的分佈式數據庫系統(之前叫 Bigtable,如今更名 Spanner)之上,分佈在全世界10個數據中心,保證世界各地的谷歌員工都有良好的訪問速度。設計

目前,這個代碼倉庫包含10億個文件、3500萬次提交記錄,大小爲86TB,用戶達到幾萬人。工做日每秒有50萬次請求,高峯時80萬次,大部分來自自動構建和測試系統。日誌

谷歌90%以上的代碼,放在 Piper 裏面。對於那些開源的、須要外部協做的項目,代碼放在 Git,主要是 Android 項目和 Chrome 項目。Git 的特色是,全部歷史記錄都會複製到用戶的本地機器,因此不適合大型項目,必須拆分紅更小的庫。以 Android 爲例,該項目一共包含800多個獨立的倉庫。code

2、Piper 的設計

2.1 結構

整個倉庫採用樹狀結構。每一個團隊有本身的目錄。目錄路徑就是代碼的命名空間。每一個目錄都有負責人(owner),他負責批准該目錄的文件變更。blog

2.2 權限控制

Piper 支持文件級別的權限控制。99% 的代碼對全部用戶可見,只有少部分重要的配置文件和機密的關鍵業務,設有訪問限制。

若是機密信息不當心放上了 Piper,文件能夠被快速清除。而且,全部的讀寫都有日誌,管理員可以查到誰讀過這個文件。

2.3 工做流

Piper 的工做流(workflow)以下圖。

開發者先建立文件的本地拷貝,這叫作"工做區"(workspace)。完成開發後,工做區的快照共享給其餘開發者進行代碼評審。只有經過了評審,代碼才能合併到中央倉庫。

閱讀全文直接點擊:http://click.aliyun.com/m/9974/

相關文章
相關標籤/搜索