PROJECT / 工程实践

分布式增量构建缓存

先判断哪些结果可以复用,再把复用能力延伸到不同节点。

项目目标

增量构建的价值来自跳过已经完成且仍有效的工作。华为 CloudBuild 时期基于 Bazel、BuildBarn、ccache 处理分布式增量构建缓存,并优化 CMake、Maven 构建链路;后续基础设施实践将同一思路延续到 BuildKit registry 远程缓存。两段实践具有共同目标,但不是同一套系统。

组件与架构

历史编译链路使用 Bazel、BuildBarn 与 ccache;后续镜像构建链路使用 BuildKit registry cache。架构图抽象共同的输入、复用判断和结果关系,刻意不将两套工具画成已经串接的生产流水线。

分布式增量构建缓存:脱敏逻辑图构建输入 → 复用判断 → 缓存结果 → 后续构建。仅表达功能与流程关系,不是私有部署图。脱敏逻辑图 · 功能与流程构建输入复用判断缓存结果后续构建职责关系示意 · 不含内部地址与私有部署细节历史成果与验证边界见下文
脱敏逻辑图:仅展示已记录的功能关系,不代表客户私有部署或当前运行状态。

关键流程

先明确构建输入与可复用产物,再观察命中与未命中时的实际工作量。对后续 BuildKit 实践,采用不同 daemon 之间 export、import 的方式确认远程复用;对历史编译实践,仅陈述已记录的技术与优化职责。

工程取舍

缓存的存在不等于缓存正确,更不等于交付必然加速。工程重点是把可复用的边界解释清楚,使结果可以跨节点使用,并具备回读与回滚意识。不同构建工具的粒度、输入与产物不同,因此不把某一链路的结果直接套用到另一链路。

成果与证据口径

2026-09-09 素材与既有履历记录了历史编译工具和后续远程缓存实践。跨 daemon 全层 CACHED 属于 2026-08-25 的 BuildKit 验收结果;本页没有独立新增命中率或加速百分比,也不把超大仓项目的历史收益视为所有增量缓存场景的通用指标。