Skip to content

构建系统哲学 = Fast + Correct ​

解决什么问题:构建慢 + 不一致 = 开发体验差—— Bazel 的核心理念:Fast(增量)+ Correct(确定性)。

业务问题 ​

真实场景 ​

场景 1:构建慢 = 开发慢

- 工程师修改一行代码
- 等待 5-10 分钟构建
- 期间无法测试
- 一天 50 次构建 = 半天等待

场景 2:构建不一致 = 调试噩梦

- 工程师 A 构建成功
- 工程师 B 构建失败(同一代码)
- "在我机器上能跑"
- 浪费时间在环境差异

Fast + Correct ​

Fast:
  - 一键构建
  - 增量构建(只重建改动)
  - 远程 cache
  - 远程执行

Correct:
  - 确定性(同一输入 = 同一输出)
  - 沙箱化(无外部依赖)
  - 完整依赖图

Bazel 核心理念 ​

任务图(Task Graph):
  - 自动生成(从 BUILD 文件)
  - 增量构建(只重做改动)
  - 缓存(远程 + 本地)
  - 并行执行

规则(Rules):
  - 声明式(不是命令式)
  - 可扩展(自定义规则)
  - 语言无关

远程构建 ​

本地构建瓶颈:
  - CPU 限制
  - 网络限制
  - 缓存限制

远程构建:
  - 远程 cache(团队共享)
  - 远程执行(大规模并行)
  - 类似 Google 的 Borg

工程实践 ​

决策 1:何时需要专业构建系统 ​

判断:
  - 构建时间 > 5 分钟 → 考虑 Bazel
  - 多语言 → 考虑 Bazel
  - 团队 > 50 → 考虑 Bazel
  - 否则 → 简单工具(Make/Gradle/npm)

决策 2:构建系统的关键能力 ​

能力清单:
  ✓ 增量构建
  ✓ 远程缓存
  ✓ 确定性
  ✓ 依赖图
  ✓ 并行执行
  ✓ 跨平台
  ✓ 多语言

与 L 层对位 ​

关键洞察 ​

  1. Fast + Correct 是构建系统的 2 个核心——不能妥协。
  2. 确定性比速度重要——错误的速度不可接受。
  3. 远程缓存是规模化的关键——团队越大收益越大。
  4. 声明式 > 命令式——依赖图自动管理。
  5. 与 cybernetics 同构——Ch 4 §4.6 确定性 = 构建的"不变量"。

从名家方法论与工程化思路中蒸馏出自己的工程体系。