Zadig 提供了面向容器运行时环境、大规模微服务的云原生持续交付方案,被企业和社区广泛采用。在实际使用中,批量服务接入 ok 了,多套环境拉起完美了,最后却在构建上遭遇滑铁卢:一个工作流任务耗时很长才结束,多个工作流任务一直在排队等待...
这 Zadig 到底该怎么用,才能让构建效率最大化?别慌,最佳实践姿势和常见排障思路来了。下面我们给出能提升构建效率的系统配置实践,就 Java/Golang/NodeJS 技术栈给出 demo 示例,并在文末提供一些关于构建效率常见的优化思路。
集群配置
集群缓存配置
系统设置集群管理
经测试,相比对象存储缓存,使用集群 PVC 缓存平均可提升构建效率 40%+。
Dind 配置
在集群管理里修改 Dind 资源配置,按需调整 Dind 副本数和资源规格,并使用集群存储资源作为镜像缓存。
- 设置 Dind 多副本后,同一个服务的构建任务会被尽可能调度到同一个 Dind 实例,不同服务的构建任务会被尽可能打散调度到不同的 Dind 实例,避免因单个 Dind 实例承载过多的构建任务而增加失败概率。
- 使用集群存储资源可避免因 Dind 重启后导致已有缓存失效的问题。
项目配置
构建缓存配置
修改构建,开启缓存配置,在自定义目录中指定需要缓存的目录。下文中也提供了 Java/Golang/NodeJS 技术栈的构建缓存配置示例。
工作流配置
编辑工作流,开启并发运行策略。开启后,当多个工作流任务先后产生时无需排队等待即可并发执行,缩短整体执行时间。
工作流任务并发数依赖系统资源的上限,系统管理员可根据实际情况设置,参考:任务并发数[2]。
Demo 示例
下面分别演示 Java、Golang、NodeJS 技术栈中,构建缓存具体该如何配置。
Java
以 Maven 构建工具为例,其默认配置文件位于 ${M2_HOME}/conf/settings.xml 文件中,可在安装软件包时指定 localRepository 来设置缓存目录,并在构建配置中指定。
以 Zadig 内置的 maven 3.3.9 为例说明,安装时指定 localRepository 为 $WORKSPACE/.m2/repository。
构建缓存配置如下:
Golang
Golang 缓存路径通过 $GOCACHE 环境变量控制,可在构建脚本中显式修改。在应用构建缓存配置的自定义目录中,可以填写上述配置的 $GOCACHE 路径。
NodeJS
在构建脚本中使用 npm install <*> -g --prefix <指定目录>,再在高级配置中将目录缓存即可。
优化指南
- 系统按照下载依赖软件包 -> 拉取代码 -> 执行构建脚本 -> 推送构建镜像到镜像仓库的顺序来执行构建,每一个环节对于网络的需求因构建配置而异,可根据具体配置确定集群所在的节点是否存在网络问题。
- 对于执行构建脚本耗时长的情况,可以在脚本中每一个步骤执行前后增加时间戳输出,统计每一步的耗时,找到耗时长的步骤后有的放矢的解决。
- 更多排查思路可阅读:诊断手册 [3]。
参考链接:
Zadig,让工程师更专注创造。
参与调研,赢《致匠心 - 基于 Zadig 落地云原生 DevOps 行业案例 & 故事集》: