日期: 2016年7月 2日
谷歌和 Facebook 都只有一个代码仓库,全公司的代码都放在这个库里。
我一直很困惑,为什么要这样做,不同语言的项目放在一个库有什么好处?
最新一期的《ACM通信》(59卷第7期)有一篇论文《为什么 Google 要把几十亿行代码放在一个库?》,作者是谷歌基础设施小组的工程师,可以看作官方对这个问题的详细解答。我读后感到收获很大,下面就是摘录。
一、概况
谷歌最早使用 CVS 进行代码管理,1999年改为 Perforce。那时是一台 Perforce 主机,加上各种缓存机。
当时,全公司的代码就在一个仓库里面,后来一直沿用这种做法。由于规模不断增长,Perforce 已经无法满足需求,谷歌就开始使用自己开发的版本管理系统 Piper。
Piper 架设在谷歌自己的分布式数据库系统(以前叫 Bigtable,现在改名 Spanner)之上,分布在全世界10个数据中心,保证世界各地的谷歌员工都有良好的访问速度。
目前,这个代码仓库包含10亿个文件、3500万次提交记录,大小为86TB,用户达到几万人。工作日每秒有50万次请求,高峰时80万次,大部分来自自动构建和测试系统。
谷歌90%以上的代码,放在 Piper 里面。对于那些开源的、需要外部协作的项目,代码放在 Git,主要是 Android 项目和 Chrome 项目。Git 的特点是,所有历史记录都会复制到用户的本地机器,所以不适合大型项目,必须拆分成更小的库。以 Android 为例,该项目一共包含800多个独立的仓库。
二、Piper 的设计
2.1 结构
整个仓库采用树状结构。每个团队有自己的目录。目录路径就是代码的命名空间。每个目录都有负责人(owner),他负责批准该目录的文件变动。
2.2 权限控制
Piper 支持文件级别的权限控制。99% 的代码对所有用户可见,只有少部分重要的配置文件和机密的关键业务,设有访问限制。
如果机密信息不小心放上了 Piper,文件可以被快速清除。并且,所有的读写都有日志,管理员能够查到谁读过这个文件。
2.3 工作流
Piper 的工作流(workflow)如下图。
开发者先创建文件的本地拷贝,这叫做"工作区"(workspace)。完成开发后,工作区的快照共享给其他开发者进行代码评审。只有通过了评审,代码才能合并到中央仓库。
2.4 客户端
大多数开发者通过一个叫做 CitC 的客户端,访问 Piper。
开发者通过 CitC 浏览和同步 Piper 上的文件,但是编辑和修改是在自己工作区,里面只保存有变动的文件(一个工作区一般不超过10个文件)。CitC 带有云储存机制,每个工作区就是云上的一个目录。通过代码评审以后,这些文件才从 Citc 合并进 Piper。
不使用 CitC 也是允许的,所有代码保存在本地,最终用 Git 客户端提交到 Piper。不过,由于 CitC 提供更多的功能,目前使用率达到 80% 。
2.5 主干开发
Google 采用"主干开发"(trunk-based development)。代码一般提交到主干的头部。这样保证了所有用户看到的都是同一份代码的最新版本。
"主干开发"避免了合并分支时的麻烦。谷歌一般不采用分支开发,分支只用来发布。大多数时候,发布分支是主干某个时点的快照。以后的除错和功能增强,都是提交到主干,必要时 cherry-pick 到发布分支。与主干长期并行的开发分支,在谷歌极少见。
由于不采用"分支开发",谷歌引入新功能,一般在代码中使用开关控制。这避免了另起一个分支,也使得通过配置切换功能变得容易,一旦新功能发生故障,很容易切换回旧功能。等到新功能稳定,再彻底删除旧代码。谷歌有类似A/B测试的路由算法,评估代码的表现,由于存在配置开关,这种测试很容易实现。
阅读全文直接点击:
http://click.aliyun.com/m/9974/
分享到:
相关推荐
行政管理对于一个国家而言十分重要,目前政府将重点放到如何提高行政效率上,所有行政工作都以此为目标和基础,除此之外,世界各国都在寻求最优的解决方案,为了国家能够长久发展并让行政效率得以提升,所应用的方法...
提升数据库Oracle开发性能探究.pdf
互联网环境下企业网络营销渠道的开发与管理探究.pdf
半导体制冷效率探究.pdf
C语言编程中优化代码运行效率的方法探究.pdf
热电公司行政管理效能提升探究.doc
提升职业院校舞蹈课堂教学效率的策略探究
国企人力资源开发与管理探究.docx
基于大数据背景下编辑策划能力的提升问题探究.pdf
多元化集团企业预算管理信息化提升方案探究.docx
电力系统人力资源管理的现状及提升对策探究.pdf
信息时代医院建筑医疗服务效率探究.pdf
探究如何利用建筑行业信息化管理提升建筑工程管理水平.docx
以数据挖掘提高计算机课堂效率探究.pdf
基于沙堆模型的基层医疗机构服务能力提升路径探究.pdf
探究提升高中政治课堂教学效率的策略.docx
ARM启动代码的探究
为探究煤炭企业管理人员的认知风格与管理行为之间的关系,采用问卷调查与眼动实验主观与客观相结合的方式,从3方面对煤炭企业管理人员的认知风格进行了探究,即认知效应,决策偏好与展示方式偏好。研究结果表明,场独立型...
SQL Server 2005管理工具 探究为管理员和开发人员提供的多种新的管理工具.pdf
大数据时代计算机专业设备管理探究.pdf