基于Bazel的分布式构建:如何在两台服务器加速大型项目构建?
利用Bazel在两台服务器上加速大型项目构建的方案
当代码库规模庞大时,依赖链会变得极深——哪怕是一个简单的二进制文件,也可能依赖数万个构建目标,单服务器构建的效率会严重受限。以下是基于两台服务器的具体优化方案:
1. 配置远程缓存共享构建产物
通过共享构建中间产物和最终输出,避免两台服务器重复构建相同目标:
- 选择一台服务器搭建缓存服务,可使用Bazel原生HTTP缓存、Redis或对象存储实现;
- 在两台服务器的
.bazelrc文件中添加配置:
这样任意一台服务器完成的构建任务,另一台可直接复用缓存内容,无需重新编译。build --remote_cache=http://<缓存服务器IP>:<端口> build --remote_upload_local_results=true
2. 启用远程执行分发构建任务
将构建任务拆分并分发到两台服务器并行执行,充分利用双机计算资源:
- 搭建远程执行服务(可选用Buildbarn、Bazel自带的远程执行服务等),部署在其中一台服务器上;
- 在另一台服务器的
.bazelrc中配置执行节点:
也可配置双机互为执行节点,让Bazel自动将任务分配到空闲机器上。build --remote_executor=http://<执行服务端IP>:<端口> build --jobs=<双机总核心数的合理值>
3. 拆分项目模块并行构建
将大型项目拆分为独立子模块,让两台服务器分别负责不同模块的构建:
- 梳理项目依赖关系,划分出可独立构建的子模块(如按业务线、组件类型拆分);
- 在服务器A执行:
bazel build //module_a/... - 在服务器B执行:
bazel build //module_b/... - 最后在任意一台服务器上构建最终目标时,配合远程缓存可直接复用另一台的构建产物。
4. 优化Bazel构建参数适配双机场景
调整核心参数进一步提升效率:
--disk_cache:保留本地缓存,减少远程缓存的访问压力;--incompatible_enable_cc_toolchain_resolution:优化C++工具链解析速度,加快任务启动;--remote_timeout:设置合理的远程任务超时时间,避免网络问题拖慢构建流程。
内容的提问来源于stack exchange,提问作者skytree
相关产品推荐
相关产品推荐

