构建”是软件工程师日常开发中的高频操作,也是生成可靠交付物的关键步骤。当前 Zadig 工作人员在设计层面对微服务架构有良好的支持,支持并行的构建、部署、测试多个服务。在 V1.10.0 版本中我们重新分析了 Zadig 原子构建链路上还有哪些提升空间,重点优化了单个任务构建过程,将构建效率再次提升 40%。

(Zadig 工作流并发机制)

接下来我们将逐步分析 Zadig 构建全链路流程,找出影响构建的瓶颈并做改善,同时思考后续的优化方向。

构建一般过程分析

云原生交付过程,构建通常包含 2 个阶段:

  • 将源代码构建为 Artifact
  • 将 Artifact 构建为镜像

源代码构建为 Artifact 过程,通常会有这样的过程:准备构建环境 (如准备构建工具) -> 拉取代码 -> 执行构建

准备构建环境的耗时相对固定,常和基础设施环境的配置关联紧密。

拉取代码强依赖于网络环境的性能,生产环境中建议使用内网环境的代码仓库,保障拉取代码的效率。

执行构建过程中,会涉及到拉取依赖库、生成构建中间产物等,这些通常可以基于对应编程语言的构建工具形成缓存,下次构建时可以基于缓存减少重复操作,极大提升构建效率,这也常是提升构建效率的重要优化环节,也是业界常见的 CI 工具,如 Codefresh、TravisCI、CircleCI 等推荐的构建配置项。

Artifact 构建为镜像的过程,会涉及到基础镜像、镜像 layers 的缓存共享,通过共享缓存减少重复数据拉取或镜像 layer 构建,可以提升镜像生成的效率。

在 Zadig 中,当前镜像构建是使用常驻的 Dind 服务,已经进行了镜像维度的缓存,而从源代码到 Artifact 的构建是通过 K8s Job 进行,每次构建时均是全新的环境。

故从源代码构建为镜像的端到端的角度来看,重点需要解决 源代码构建为 Artifact 的效率

Zadig Artifact 构建过程

Zadig 当前的构建步骤如下:

1. 任务排队

2. 创建运行实例 (K8s Job)

3. 运行

a.(optional) 拉取缓存 -- 仅在用户开启对象存储缓存时才会发生

b.准备编译环境

c.拉取代码

d.执行构建脚本

e.(optional) 上传缓存 -- 仅在用户开启对象存储缓存时才会发生

4. 运行结束 (成功/失败)

由于本次主要关注单任务构建效率,故仅关注 3) 环节的效率。

没有测量就没有优化,此次效率提升会通过构造实验环境场景进行实测,找出影响构建效率的瓶颈,然后针对瓶颈进行优化。

测试环境&方法

下述测试将会基于如下环境进行:

  • 测试项目:https://github.com/sqsh
  • Commit:6bb2cf9ddbca980b664d3edbb6ff775d75369278
  • 测试环境 (Zadig)
  • 构建系统:Ubuntu-20.04
  • Zadig 版本:v1.10.0
  • Java:1.12.01
  • Maven: 3.3.9(使用阿里云的 maven 源)

测试环境构建脚本:

构建现状

Zadig 在 v1.9.0 及其以下版本中,支持使用对象存储作为构建缓存介质。执行上述测试过程,测试结果如下:

结论:

  • 使用构建缓存时会极大提升构建效率,提升 4 倍
  • Zadig 中构建耗时占比低,处理缓存占比极高

通过分析可知,Zadig 优化构建效率的重点在 缩短处理缓存 的耗时,有如下几种方案可以考虑:

1.构建服务变更形态,从 Job 改为常驻服务

a.使用 rootfs 管理构建缓存

b.挂接远程储存管理构建缓存

2.构建服务采用当前的 Job 形态,挂接远程存储管理构建缓存

由于构建任务属于 run-to-complete 类型,且非 7x24 持续运行,故考虑构建服务采用 Job 形态,同时采用远程存储 (PVC) 的方案来管理构建缓存,消除 拉取/解压压缩/上传 缓存的过程。

构建效率优化

在刚推出的 Zadig v1.10.0 版本中,可将构建的缓存持久化到 PV 上,同时基于 PVC,可在多个项目中共享同一份缓存。

测试方法同上,测试结果如下:

结论:使用构建缓存时会极大提升构建效率

  • Zadig 对象缓存场景提升 4 倍,Zadig PVC 缓存场景提升 6 倍
  • Zadig PVC 场景比 Zadig 对象缓存场景提升 43.03%

如何配置缓存

以下步骤主要介绍管理员如何进行缓存资源配置,以及工程师如何开启构建缓存

1、配置集群缓存资源

在 集群管理 中,可以进行集群缓存资源的配置:

点开 高级配置,可以查看到 缓存资源配置 详情,点击 帮助,可以查看到具体的使用说明。

若不希望使用持久化存储作为缓存介质,可以继续使用 Zadig 的 对象存储 能力作为缓存介质。若想使用 PVC 能力,可以选择 集群存储 作为存储介质。

集群存储 可以根据 StorageClass 动态生成 PVC,也可以使用集群中已有的 PVC:

2、构建开启缓存

配置构建服务时,显式开启缓存,并配置缓存目录:

后续优化

从上述测试效果可以看出,Artifact 的构建由于 Job+PVC 的模式,缓存数据仍需通过网络获取,这部分构建效率仍存在优化空间。后续 Zadig 会从产品层面考虑支持 常驻构建服务+构建环境睡眠+PVC 的模式,进一步提升构建缓存获取的效率,同时减少不必要的常驻服务运行时长。

在 Artifact 构建效率 提升后,Artifact 到镜像构建效率 的影响度将会在整个构建过程中提升,我们也会继续评估考虑是否使用性能和安全性更好的 BuildKit、Kaniko 等替换 Dind ,来进一步提升镜像的构建效率。

通过细致梳理从源码到镜像的端到端构建过程,分析影响效率的主要因素,按照影响程度依次解决,运行在 Zadig 上的项目的构建效率将会持续提高,不断提升开发工程师的开发效率和幸福度。

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

如果感觉小编写得不错,请素质三连:点赞+转发+关注。我会努力写出更好的作品分享给大家。更多JAVA进阶学习资料小编已打包好

Zadig 构建效率提升 40% 背后的实践思路相关推荐

  1. Next.js 7发布,构建速度提升40%

    Next.js团队发布了其开源React框架的7版本.该版本的Next.js主要是改善整体的开发体验,包括启动速度提升57%.开发时的构建速度提升40%.改进错误报告和WebAssembly支持. \ ...

  2. 交付效率提升40%,珍爱网基于微服务的DevOps落地指南

    2015-2016年,珍爱线下门店已新增覆盖城市9个,与此同时,CRM系统大小故障却发生了数十起... ... 珍爱网是以"网络征选+人工红娘"模式提供婚配服务的婚恋相亲平台.CR ...

  3. 爱奇艺体验Serverless极致扩缩容,资源利用率提升40%

    简介:Serverless 应用引擎 SAE 是面向应用的 Serverless PaaS平台,提供了效率更高.成本更优的一站式应用托管方案.零门槛+零改造+零容器基础,即享Serverless+K8 ...

  4. 爱奇艺体育:体验Serverless极致扩缩容,资源利用率提升40%

    简介: Serverless 应用引擎 SAE 是面向应用的 Serverless PaaS平台,提供了效率更高.成本更优的一站式应用托管方案.零门槛+零改造+零容器基础,即享Serverless+K ...

  5. Webpack优化——将你的构建效率提速翻倍

    前言 今日早读文章由字节跳动@jerryOnlyZRJ授权分享. 正文从这开始-- 背景 随着构建体系不断完善.构建体验不断优化,webpack 已经逐渐成为了前端构建体系的一大霸主,对于工作中的真正 ...

  6. 效率提升一倍,成本下降 80%,阿里云落地全球最大规模云原生实践

    2020 天猫 双11 狂欢季成交额最终定格在 4982 亿,同比增长 26%.11 日 0 点 26 秒,阿里云扛住了 58.3 万笔/秒的订单创建峰值,但下单体验依然丝般顺滑,背后的云原生技术功不 ...

  7. 人力节省 50%,研发效能提升 40%,阿里 Serverless 架构落地实践

    作者 | 万佳 嘉宾 | 杨皓然(不瞋) 导读:云的下一波浪潮是什么?杨皓然称"是 Serverless".作为一名阿里老兵,他早在 2010 年即加入阿里云,曾深度参与阿里云飞天 ...

  8. 15倍提升 40倍存储优化,TDengine在领益智造的实践

    作者:张红朋 小T导读:广东领益智造股份有限公司是全球领先的智能制造平台企业,致力于以技术先进.质量可靠为核心竞争力,为客户提供"一站式"精密智造解决方案,实现精密.美观.高品质. ...

  9. 开发运维效率提升 80%,计算成本下降 50%,分众传媒的 Serverless 实践

    作者:吴松 本文总结于分众传媒研发总监吴松在阿里云云原生实战峰会上的分享,从三个方面讲述了对 Serverless 技术的探索. 分众传媒的业务现状 分众传媒的业务场景很简单,就是广告主买量,然后进行 ...

最新文章

  1. 把数据库中有关枚举项值的数字字符串转换成文字字符串
  2. 一文详解鱼眼相机的车位线感知
  3. 天数换算月份_Js 计算指定月份的天数
  4. python3 发送邮件
  5. android中跨进程通讯的4种方式
  6. javascript底层练习
  7. 凭证 金蝶_金蝶软件账务处理流程之——凭证录入
  8. 微信小程序开发:禁止输入表情的控制,验证方法,光标控制
  9. 杭电acm1000c语言答案,c语言,杭电acm1328这题怎么做啊,求提示!!!
  10. 克服移动应用开发的挑战
  11. Windows下利用Python自动切换IP/DNS
  12. android手机传感器,安卓手机传感器
  13. 1920*1080 网页使用scale在其他分辨率或宽度下等比例缩放
  14. 一台计算机上的文件 用户名和密码错误,SMB连接电脑提示用户名密码错误怎么办 看完就明白...
  15. 【Office】三件套之Word套路
  16. 嵌入式硬件(四)常用模拟集成电路
  17. 百度人脸识别sdk图片转码的问题
  18. 新智元【Yoshua Bengio 亲自解答】机器学习 81 个问题及答案(最全收录)
  19. 树莓派 + Home Assistant + HomeKit 从零开始打造个人智能家居系统 篇三:进阶配置 Home Assistant
  20. IO流案例以及特殊操作流/对象对象序列化流/Properties集合

热门文章

  1. WebDAV之葫芦儿·派盘+人升
  2. 跟大家聊聊VR全景个人感受
  3. 雷达感应智能化技术,让家居生活更智能,雷达传感器技术应用
  4. 企业基因决定企业命运
  5. Unity 性能优化:资源篇
  6. 用Origin找两曲线的交点
  7. php 超过一行用省略号,php 超长用省略号代替
  8. 建立区域经济大脑,驱动产业创新发展
  9. 网上调研:主流网络技术和设备的性能与市场
  10. PYNQ官方镜像配置