Java/Golang/NodeJS 构建效率慢?别慌!缓存、并发策略统统配上

396 阅读3分钟

Zadig 提供了面向容器运行时环境、大规模微服务的云原生持续交付方案,被企业和社区广泛采用。在实际使用中,批量服务接入 ok 了,多套环境拉起完美了,最后却在构建上遭遇滑铁卢:一个工作流任务耗时很长才结束,多个工作流任务一直在排队等待...

这 Zadig 到底该怎么用,才能让构建效率最大化?别慌,最佳实践姿势和常见排障思路来了。下面我们给出能提升构建效率的系统配置实践,就 Java/Golang/NodeJS 技术栈给出 demo 示例,并在文末提供一些关于构建效率常见的优化思路。

集群配置

集群缓存配置

系统管理员访问 系统设置 -> 集群管理 ,编辑集群配置,缓存资源使用集群 PVC 存储。系统还支持对不同的项目/工作流/服务组件实现独享缓存,可参考 缓存配置 | Zadig 文档 [1]。

经测试,相比对象存储缓存,使用集群 PVC 缓存平均可提升构建效率 40%+。

图片

Dind 配置

在集群管理里修改 Dind 资源配置,按需调整 Dind 副本数和资源规格,并使用集群存储资源作为镜像缓存。

  1. 设置 Dind 多副本后,同一个服务的构建任务会被尽可能调度到同一个 Dind 实例,不同服务的构建任务会被尽可能打散调度到不同的 Dind 实例,避免因单个 Dind 实例承载过多的构建任务而增加失败概率。

  2. 使用集群存储资源可避免因 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**。**

mkdir -p $HOME/maventar -C $HOME/maven -xzf ${FILEPATH} --strip-components=1# customize .m2 direxport M2_HOME=$HOME/mavenmkdir -p $WORKSPACE/.m2/repositorycat >$HOME/maven/conf/settings.xml <<EOF<?xml version="1.0" encoding="UTF-8"?><settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">  <localRepository>$WORKSPACE/.m2/repository</localRepository>  <pluginGroups/>  <servers/>  <mirrors>    <mirror>      <id>repo1</id>      <mirrorOf>central</mirrorOf>      <name>repo1</name>      <url>http://repo1.maven.org/maven2</url>    </mirror>  </mirrors>   <profiles/></settings>EOF

构建缓存配置如下:

图片

Golang

Golang 缓存路径通过 $GOCACHE 环境变量控制,可在构建脚本中显式修改。在应用构建缓存配置的自定义目录中,可以填写上述配置的 $GOCACHE 路径。

图片

NodeJS

在构建脚本中使用 npm install <*> -g --prefix <指定目录>****,再在高级配置中将目录缓存即可。

图片

优化指南


  1. 系统按照下载依赖软件包 -> 拉取代码 -> 执行构建脚本 -> 推送构建镜像到镜像仓库的顺序来执行构建,每一个环节对于网络的需求因构建配置而异,可根据具体配置确定集群所在的节点是否存在网络问题。

  2. 对于执行构建脚本耗时长的情况,可以在脚本中每一个步骤执行前后增加时间戳输出,统计每一步的耗时,找到耗时长的步骤后有的放矢的解决。

  3. 更多排查思路可阅读:诊断手册 [3]。

参考链接:

[1] docs.koderover.com/zadig/v1.13…

[2] docs.koderover.com/zadig/v1.13…

[3] docs.koderover.com/zadig/v1.13…

Zadig,让工程师更专注创造。