# 分布式编译系统CloudBuild ## 为什么需要分布式编译技术 - 大型项目过长的编译耗时将会给开发、测试和调试都带来延迟,所以缩短大型项目的编译时间的分布式编译系统有重要意义 - 使用分布式编译系统编译项目可以利用计算机集群提高编译效率,缩短项目编译时间 - 在实际开发时,同一个团队大量的编译任务时相同的。CloudBuild提供的编译缓存可以避免重复上传和重复编译,从而进一步加快编译效率 ## 总体架构 ### 系统总体架构 ![alt text](/public/cloudbuild/architecture.png) - Ninja:客户端,该机器上需要保存有完整的待编译项目源代码。 - Action Cache:服务端缓存,主要保存编译任务的执行结果。 - CAS Cache:服务端缓存,主要保存客户端上传的依赖文件,编译结果文件。 - Scheduler:任务调度器,将编译任务id分发到各个编译节点。 - Redis:主要存储具体的编译任务供编译节点领取执行,也可存储Action Cache和 CAS Cache中的内容加速编译。 - MySQL:主要存储编译过程中的任务统计信息。 - Executor:各个编译节点 ### 部署示意图 ![alt text](/public/cloudbuild/system-diagram.png) CloudBuild主程序分为三个部分:Client、Server、Executor。 - Client:运行在客户端,和用户对接,用于生成待执行的远程编译任务, 同时也作为本地编译节点执行本地任务。 - Server:运行在主服务器,主要用于连接各个编译节点,以及 将客户端上传的编译任务调度到与其连接的各个编译节点上。 - Executor:运行在编译节点,负责接收并执行编译任务,是编译任务真正执行的地方。 ### 系统分层结构 ![alt text](/public/cloudbuild/layered-system-architecture.png)