框架介绍
yadcc是广泛投产于腾讯广告后台的C++分布式编译系统。
我们在调研学习了业界的ccache、sccache、distcc、icecc等开源的编译加速系统之后,根据我们实际的工业生产场景,设计了这样一套系统。
目前我们实际生产环境:
- 有~1700编译核心;
- 使用512并发编译(实际并发度取决于本地预处理能力,32逻辑核以上可达到512并发);
- 每天编译产出(含命中分布式缓存)300,0000+个目标文件;
- 每天编译产出总计约3~5TB。
本着回馈社区的目的,我们现将这套分布式编译系统对外开源。
基本原理
与ccache、sccache、distcc、icecc等类似,可通过创建名为g++等的符号链接至yadcc的客户端,并将之加入PATH,来截获编译器调用。之后yadcc的客户端会将任务分发出去至编译机编译,降低本地负载。
也因此,通常而言,使用分布式编译可以加大本地并发度(因为单个任务很多时候是在休眠等待网络上的编译结果返回),实现更高的编译吞吐。例如8逻辑核的机器通常可以通过make -j100来加速编译。
需要注意的是,分布式编译通常只能提高吞吐,但是不能降低单个文件的编译耗时(暂不考虑命中缓存的情况)。对于无法并发编译的工程,除非命中缓存,否则分布式编译通常不能加快编译,反而可能有负面效果。
主要特点
我们首先分析了我们实际生产环境下的一些使用困难:
- 用户众多,如果没有中心节点统一调度并必要时阻塞新请求,则容易导致集群过载
- 需要某种方式可以便捷的下发、更新编译集群列表,降低运维成本
- 网络抖动、编译机由于各种原因离线等需要一定的容灾能力
- 多个用户(机器)在同一代码库工作,可能存在不必要的重复编译
C++分布式编译系统yadcc开源详解

yadcc是腾讯广告后台广泛使用的C++分布式编译系统,现对外开源。它解决了用户众多、编译集群管理、网络波动等问题,通过中心调度节点和本地守护进程优化编译效率和并发控制。系统包括调度器、编译缓存和守护进程,支持多版本编译器并避免不必要的重复编译。项目已在GitHub和腾讯工蜂开源。
最低0.47元/天 解锁文章
927

被折叠的 条评论
为什么被折叠?



