Google 使用单一仓库存储全公司代码

查看原文

本文介绍了Google的代码仓库不是一个服务一个仓库,而是全公司95%的代码都存在一个单一仓库中。截止 2016 年的一些数据:

  • 25k 开发者
  • 十数个全球办公室
  • 每天 16k 个变更,24k 个系统自动变更
  • 800k qps 高峰时段
  • 86T 数据
  • 二十亿行代码

这个系统的一些特征:

  • 名叫 Piper
  • 分布式部署在 10 个 Google 全球数据中心
  • 使用 Google 自家的数据库技术 Spanner
  • 使用 Paxos 算法确保数据复制的一致性
  • 需要配缓存,使用异步操作优化性能
  • 支持文件级别的权限控制
  • 大部分文件面向所有开发者公开,敏感配置文件或者核心商业算法相关的文件不全公开
  • 文件读写都有审计
  • 误提交的文件会被 Purge
  • 提交的变更在一个 workspace 里面,有点像 svn 或者 git clone
  • workspace 的快照用来做 review
  • 客户端是一个叫做 Clients in the Cloud, or CitC 的系统,在 Linux 上使用 FUSE 把存储挂到云上。
  • 不需要下载同步什么的,可以通过普通的 Unix 工具查看,只能修改自己的 workspace
  • 平均一个 workspace 只有 10 个文件
  • 可以支持一些 Git 操作,但是普遍使用 CitC 系统。
  • Piper 是一个 trunk-based 的仓库系统

衍生思考:开发协作工具的 Edge Case 很多。基于 Fuse 的设计很惊艳,有没有人可以做一个 GitHub-Fuse 的客户端。