神农架网站建设,杭州正晖建设工程有限公司网站,查域名解析,建设网站公开教学视频原理
既然 ActionResult 可以被不同的 Bazel 任务共享#xff0c;说明 ActionResult 和 Action 在哪里执行并没有关系。因此#xff0c;Bazel 在构建时#xff0c;可以把 Action 发送给另一台服务器执行#xff0c;对方执行完#xff0c;向 CAS 上传 ActionResult#x…原理
既然 ActionResult 可以被不同的 Bazel 任务共享说明 ActionResult 和 Action 在哪里执行并没有关系。因此Bazel 在构建时可以把 Action 发送给另一台服务器执行对方执行完向 CAS 上传 ActionResult然后本地再下载。
这种做法减少了本地执行 Action 的开销使得我们设置更高的构建并发度。
Bazel 为 Remote Cache 和 Remote Execution 设计了专门的协议 Remote Execution API用于规范协议的客户端和服务端的行为。
完整的流程如下图所示 远程执行流程
可以看到Client 和 Server 的直接交互是很少的大部分情况还是和 CAS 交互这部分采用了增量的设计Client 先调用 findMissingBlobs 接口该接口的请求参数是一堆 Blob Digest 列表返回值是 CAS 缺失的 Digest 列表。这样 Client 只上传这些 Blob可以减少网络传输的浪费。
Remote Execution API 是一套通用的远程执行协议客户端部分由 Bazel 实现服务端部分可自行定制。Bazel 团队开发两款开源实现分别是 Bazel Remote(CAS) 和 Buildfarm (Remote Executoin CAS)除此之外也有 BuildbarnBuildgrid 等开源实现以及 EngflowBuildbuddy 这样的企业版。
企业版除了提供更稳定弹性的远程执行服务外通常还提供数据分析能力用户可以根据自己的条件选择合适的开源软件或企业版服务。
部署
待补充 本文属于如下文章中的子章节
bazel学习系列章节汇总_m0_74043383的博客-CSDN博客