微信号:qconchina

介绍:QCon是由InfoQ主办的全球顶级技术盛会,每年在伦敦、北京、东京、纽约、圣保罗、上海、旧金山召开.QCon内容源于实践并面向社区,演讲嘉宾依据热点话题,面向5年以上的技术团队负责人、架构师、工程总监、高级开...

Google为什么要把 20 亿行代码放到一个仓库中?

2016-12-30 18:42 臧秀涛

根据2015年的一些公开报道,Google内部的源代码已经有 20 亿行,支撑Google提供的各项互联网服务,包括搜索、Gmail、地图等不同业务。


Google的工程师Piaw Na在Quora上提到,这些代码中大概有50%是C++代码,25%的Java代码,还有25%是Python和其他语言代码(像sawzall、protocol buffer声明、Go等)。


大部分公司习惯于为不同的项目创建单独的仓库,而Google是将这么多代码放在一个仓库中的。


Google的工程经理Rachel Potvin分享过"Why Google Stores Billions of Lines of Code in a Single Repository"(https://www.youtube.com/watch?v=W71BTkUbdqE)。具体介绍了Google的代码规模,内部的代码管理系统以及单一代码库的优势。(注:本文所截图片均来自该视频,版权归原作者所有。)


Google有一个内部开发的版本控制系统,管理这一共享的代码仓库,大部分Googole工程师的开发流程都是依托完善的内部系统进行的。


数据



先看一组数据:


10亿文件,900万源文件,20亿行源代码,86TB数据。




Google大约有2万5000名工程师,遍布全球各地。日常的代码提交就比较惊人了。




如果感觉不够直观,可以拿Linux内核这一大型开源项目对比一下。Linux内核大约有1500万行代码,分布在4万个文件中。




这种量级的代码,并没有成熟的商用或开源方案可供选择,所以Google构建了自己的版本控制系统——Piper。(像Facebook也遇到过Git的性能问题,http://thread.gmane.org/gmane.comp.version-control.git/189776 )


Google的代码提交流程





Google的代码审核是非常严格的。


下面我们来看看Google的版本控制系统。



Piper负责保存单一的大规模代码仓库,构建于Google的分布式基础设施之上(之前用到Bigtable,现在是Spanner)。Piper也分布在Google的10多个数据中心中,使用Paxos算法保证一致性。


大部分开发者都是通过CitC(Clients in the Cloud)访问Piper。CitC支持代码浏览和常用的Unix工具,而不需要将代码拖到本地。对文件的所有写入都会以快照形式保存再CitC中。


另外,Google还有一系列完善的代码审核、搜索、静态分析等工具。



单一代码仓库的优势




  • 统一的版本,只有一个可信的源头

  • 广泛的代码共享和复用

  • 简化依赖管理

  • 原子化变更

  • 大规模重构

  • 夸团队协作

  • 灵活的团队边界和代码所有权


下面可以具体看看。



当然,Google为支持这个模型也投入了大量的成本。



结论




就Google而言,该模型工作得很好。像Twitter,也在搞这样的模式。是不是适合别的公司呢,这就得自己权衡了。




不过瘾?在明年4月的QCon北京2017上,Lambda Lab 联合创始人、前 Google 工程师赵扶摇将和大家聊聊开发工具的云端化。


赵扶摇,Lambda Lab 公司的联合创始人,专注于为开源社区及软件公司提供云端的代码智能平台。之前在 Google 的工具与效率部参与开发了云端构建平台 Blaze/Forge,代码理解系统 Grok,Android Studio IDE 等前沿工具产品并发表相关专利。硕士毕业于卡内基梅隆大学(CMU),专注于编译器与软件工程领域。本科毕业于中南大学,期间获得 ACM-ICPC 竞赛亚洲区金奖及湖南程序设计竞赛第一名。


他将分享的具体内容有如下几点: 

  1. Google 开发者典型的一天:描述一个 Google 的工程师在开发过程中所用到云端化工具的全景。

  2. 单根代码树:Google, Twitter, Facebook 为什么要用单根代码树,与多库通用优劣比较。比较各个公司单一代码库的实现方式。

  3. 云端构建与测试:在单一代码库下,编译构建完全云端化的优劣。如何最大化地做缓存和并发。如何优化用户体验,做到云端工作空间和本地工作空间的融合。

  4. 云端的Code Intelligence:Google 建立了一套基于代码语义的知识图谱(Grok),这套系统的原理是什么。这套系统是如何革新了代码搜索和代码审查工具。如何改进了其他工具的可用性,比如与异常跟踪,日志。

  5. 总结:为什么 Google 会最终做出这么一套工具链,他们每一环直接的相互依赖是什么。对其他互联网公司的工具建设有什么启发。


关于 QCon 的更多信息,可以扫描下图中的二维码,访问大会网站。






 
QCon 更多文章 QCon 热点演讲视频及幻灯片索引 QCon 热点演讲视频及幻灯片索引 2016 年不可错过的 QCon 精彩演讲 2016 年不可错过的 QCon 精彩演讲 2016 年不可错过的 QCon 精彩演讲
猜您喜欢 HBase作为在线存储解决方案的稳定性保障探讨 开源公司黄页之腾讯开源软件推荐 消息总线重构之简化客户端 未来十年,大数据和人工智能将如何接管我们的一切? 史上最全的全球数据收集网站,值得收藏!