【运维】DevOps流水线CI 成倍提速方案

2023-11-21 20:40

本文主要是介绍【运维】DevOps流水线CI 成倍提速方案,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这里写自定义目录标题


点击可直接阅读原文: DevOps流水线CI成倍提速方案

背景介绍在我们的同学在之前发布的《猪八戒网CICD最佳实践之路 : 》一文中,介绍了猪八戒网的主流研发语言从 PHP 到 Java 的更替以及架构到 dubbo 为核心的 SOA 微服务框架 Nodejs 提供前端web能力的演进。随着业务的增加和架构的演进,项目工程数量的快速增⻓,交付开始变得频繁。 相比 PHP, Nodejs 和 Java 对 CI 有更高的要求,DevOps 流水线的引入感受到改变迫在眉睫。文章详细的介绍了猪八戒网 DevOps 流水线的架构,介绍了流水线从无到“通路”再到“通⻋”的变化。而业务的增加对“通⻋”后的体验提出了“乘坐时间要短”、“乘坐环境要舒适平稳”、“个性化的乘坐体验”等新的要求,本文重点讨论“通⻋”后的“提速”。

上个世纪52年代,新中国第一条铁路,全⻓共505公里的成渝铁路全线通⻋,全程需要13个小时左右。90年代,部分绿皮⻋换成了红皮⻋,乘坐时间大幅缩短,最快也要10小时。那个时候主要成渝之间主要的通勤方式还是比铁路快几个小时的高速大巴,除了大巴,当时还有⻜机。成渝高铁通⻋后,高铁已经是了成渝之间首选交通工具,渝大巴也逐渐淡出了人们的视线。

“提速”对用户体验的提升最为有感知,也是让用户最容易认可的。对于互联网行业来说,速度慢会导致用户会抱怨和流失,相关统计数据显示,每增加0.1秒的加载延迟,将会导致客户活跃度下降1%。DevOps 流水线 “通⻋”后的“提速”策略便是化解频繁交付需求和承载能力之间矛盾的良药。

了解现状
请添加图片描述

上图为流水线的 CI/CD 过程
请添加图片描述
请添加图片描述我们使用最多语言是 Java,第二的是 Nodejs 占比超过20%。

分析数据
有了以上的数据,我们就可以根据不同的语言在 DevOps 流水线的各位环节的耗时数据来分析可能存在的问题。
请添加图片描述
按我们的主流开发语言项目的发布耗时来看,其中耗时最⻓的是 Nodejs,占比达到了70%我们按照2/8原则来看,我们只需要花少量的精力来优化成体速度的提升,侧重点是关注 Nodejs 的项目的发布速度。
请添加图片描述
通过在流水线中各位环节打标时间戳,采集了大量的日志数据后,我们分析发现,Nodejs项目在 CI/CD 过程中耗时最⻓的在安装依赖和编译构建中。安装依赖的时间大量消耗在了 npm install 上面了,即便是我们有自己的私有npm 仓库但还是消耗了大量的时间。
请添加图片描述
很多 Nodejs 项目项目发布的时候超过600s,部分项目甚至偶尔会超过1000s,这部分项目也是我们优化治理的“大客户”。头部的大客户的数量下降了,速度快起来了,就可以很好的反应策略的效果是否符合预期。

制定策略
请添加图片描述
底层软件硬件调整
CI 过程中主要的压力还是集中在 IO 方向,增加 CI 节点提高整个 CI 池子的容量,把之前节点使用的硬盘更换为SSD 可以增加 IO 吞吐量。同时,把用于 CI 的n ode 节点在 K8S 集群中隔离开来,让 CI 服务独享这些资源避免与其他资源发生抢占。

CI 工作台优化优化 CI 工作台的代码,减少每次 CI 任务抓取 git 仓库里托管项目的代码量,提高整体的代码抓取的效率,减少网络 IO 和磁盘 IO 量。

强制启用内部软件源要求各业务线的项目启用在内部搭建的软件源,尽量不要使用外部软件源,减少等待外部网络的下载时间。Nodejs 使用 verdaccio 来搭建内部源并且设置国内的 nodejs 源作为上游,拉取到的包就会缓存到本地服务器,大大减少了不必要的网络开销。java 和 php 分别使用了 nexus 和 packagist。

实验论证

考虑到底层软件硬件的升级调整对IO性能提升很容易理解,就不在这里赘述,这里着重介绍一下引入yarn和把yarn.lock提交到代码仓库后带来的速度大幅提升。

安装 yarn
请添加图片描述用 yarn 替换 npm 进行编译构建修改项目的构建文件,需要更改的片段如下
请添加图片描述
yarn 通过 yarn.lock 文件来分析和构建 nodejs 的依赖环境,分析依赖生成 yarn.lock 需要花费大量的时间,如果仓库里面自带了满足依赖的 yarn.lock 文件,在 CI 的环节就会减少分析这一步。

以下矩阵可以反应出 yarn.lock 对于安装依赖包的速度影响
请添加图片描述
目前我们在流水线也默认启用了 node_modules 复用机制,npm 也同样会受益,但即便是有 npm 的node_modules 复用机制,大量测试后 isntall 的速度 yarn 更有优势,可以考虑考虑使用 yarn install 来提速。
提交 yarn.lock 文件

前面也提到 yarn.lock 对于 nodejs CI 提速有很重要的作用,同时也可以保障协同开发的工程中的依赖一致性。yarn.lock 也应该提交到代码仓库中。同时,yarn 的官方也强烈建议大家提交。如果 git的 .gitignore 有限制,需要在放开 yarn.lock 允许提交。
本地代码测试的时候 运行 yarn install 生成 yarn.lock 文件
请添加图片描述
添加依赖包以及维护 yarn.lock 文件
请添加图片描述
注意这些操作都可以自动增量更新 package.json 和 yarn.lock 中的依赖关系。为了不破坏 yarn.lock 的正确性,此文件不要手动去修改。需要使用上游更新后的包,要使用 yarn upgrade 来引用最新的上游依赖。

如果 git merge 操作导致 yarn.lock 发生变化,应该在本地重新生成新的 yarn.lock 文件后提交到 git,否则可能出现依赖异常导致安装失败。

验证效果
请添加图片描述
从数据上来看,这套组合拳打下去,速度有了明显的提升。业务消耗在CI和CD的时间有了减少,也提高了整体的研发效率。如果结合业务线的项目按更细的颗粒度进一步拆分,优化不必要的依赖,优化k8s的滚动更新的策略,整体的发布时间会进一步压缩,效率也会进一步提升。

这里主要介绍了 DevOps 流水线中 CI 的这一个环节,整体的提速需要联动其他的环节的协同优化,如果大家也有兴趣进一步了解,就在后面评论点赞给我们反馈吧。
请添加图片描述
微信扫码关注“八戒技术团队”

获取更多技术知识噢~

还有不定期的活动举办

这篇关于【运维】DevOps流水线CI 成倍提速方案的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/404972

相关文章

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

高效+灵活,万博智云全球发布AWS无代理跨云容灾方案!

摘要 近日,万博智云推出了基于AWS的无代理跨云容灾解决方案,并与拉丁美洲,中东,亚洲的合作伙伴面向全球开展了联合发布。这一方案以AWS应用环境为基础,将HyperBDR平台的高效、灵活和成本效益优势与无代理功能相结合,为全球企业带来实现了更便捷、经济的数据保护。 一、全球联合发布 9月2日,万博智云CEO Michael Wong在线上平台发布AWS无代理跨云容灾解决方案的阐述视频,介绍了

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明: 1. 使用VLC for Android VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念

JavaFX应用更新检测功能(在线自动更新方案)

JavaFX开发的桌面应用属于C端,一般来说需要版本检测和自动更新功能,这里记录一下一种版本检测和自动更新的方法。 1. 整体方案 JavaFX.应用版本检测、自动更新主要涉及一下步骤: 读取本地应用版本拉取远程版本并比较两个版本如果需要升级,那么拉取更新历史弹出升级控制窗口用户选择升级时,拉取升级包解压,重启应用用户选择忽略时,本地版本标志为忽略版本用户选择取消时,隐藏升级控制窗口 2.

如何选择SDR无线图传方案

在开源软件定义无线电(SDR)领域,有几个项目提供了无线图传的解决方案。以下是一些开源SDR无线图传方案: 1. **OpenHD**:这是一个远程高清数字图像传输的开源解决方案,它使用SDR技术来实现高清视频的无线传输。OpenHD项目提供了一个完整的工具链,包括发射器和接收器的硬件设计以及相应的软件。 2. **USRP(Universal Software Radio Periphera

如何使用Ansible实现CI/CD流水线的自动化

如何使用Ansible实现CI/CD流水线的自动化 持续集成(CI)和持续交付(CD)是现代软件开发过程中的核心实践,它们帮助团队更快地交付高质量的软件。Ansible,作为一个强大的自动化工具,可以在CI/CD流水线中发挥关键作用。本文将详细介绍如何使用Ansible实现CI/CD流水线的自动化,包括设计流水线的结构、配置管理、自动化测试、部署、以及集成Ansible与CI/CD工具(如Jen

MyBatis 切换不同的类型数据库方案

下属案例例当前结合SpringBoot 配置进行讲解。 背景: 实现一个工程里面在部署阶段支持切换不同类型数据库支持。 方案一 数据源配置 关键代码(是什么数据库,该怎么配就怎么配) spring:datasource:name: test# 使用druid数据源type: com.alibaba.druid.pool.DruidDataSource# @需要修改 数据库连接及驱动u

Prometheus与Grafana在DevOps中的应用与最佳实践

Prometheus 与 Grafana 在 DevOps 中的应用与最佳实践 随着 DevOps 文化和实践的普及,监控和可视化工具已成为 DevOps 工具链中不可或缺的部分。Prometheus 和 Grafana 是其中最受欢迎的开源监控解决方案之一,它们的结合能够为系统和应用程序提供全面的监控、告警和可视化展示。本篇文章将详细探讨 Prometheus 和 Grafana 在 DevO

一种改进的red5集群方案的应用、基于Red5服务器集群负载均衡调度算法研究

转自: 一种改进的red5集群方案的应用: http://wenku.baidu.com/link?url=jYQ1wNwHVBqJ-5XCYq0PRligp6Y5q6BYXyISUsF56My8DP8dc9CZ4pZvpPz1abxJn8fojMrL0IyfmMHStpvkotqC1RWlRMGnzVL1X4IPOa_  基于Red5服务器集群负载均衡调度算法研究 http://ww