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 的客户端。