DevOps流水线CI成倍提速方案

我们的同学在之前发布的《猪八戒 CI/CD最佳实践之路》一文中,介绍了猪八戒 的主流研发语言从PHP到Java的更替以及架构到Dubbo为核心的SOA微服务框架Nodejs提供前端Web能力的演进。随着业务的增加和架构的演进,项目工程数量的快速增交付开始变得频繁。相比PHP,Nodejs和Java对CI有更高的要求,DevOps 流水线的引入已然迫在眉睫。

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

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

了解现状

我们使用最多语言是Java,第二是Nodejs,占比超过20%。

分析数据

按我们的主流开发语言项目的发布耗时来看,其中耗时最是Nodejs,占比达到了70%,按照2/8原则来看, 我们只需要花少量的精力来优化成体速度的提升,侧重点是关注Nodejs的项目的发布速度。

很多Nodejs项目发布的时间超过600s,部分项目甚至偶尔会超过1000s,这部分项目也是我们优化治理的“大客户”。头部大客户的数量下降了,速度起来了,就可以很好的反应策略的效果是否符合预期。

制定策略

底层软件硬件调整

CI过程中主要的压力还是集中在IO方向,增加CI节点提高整个CI池子的容量,把之前节点使用的硬盘更换为SSD可以增加IO吞吐量。同时把用于CI的Node节点在Kubernetes集群中隔离开来,让CI服务独享这些资源避免与其他资源发生抢占。

CI工作台优化

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

强制启用内部软件源

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

实验论证

用yarn替换npm进行编译构建

修改项目的构建文件,需要更改的片段如下:

目前我们在流水线也默认启用了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文件:

注意这些操作都可以自动增量更新package.json和yarn.lock中的依赖关系。为了不破坏yarn.lock的正确性,此文件不要手动去修改。需要使用上游更新后的包,要使用yarn upgrade来引用最新的上游依赖。

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

实验效果

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

这里主要介绍了DevOps流水线中CI的这一个环节,整体的提速需要联动其他环节的协同优化,如果大家也有兴趣进一步了解,就在后面评论点赞给我们反馈吧。

希望以上内容能对有需要的人有所帮助。

Kubernetes线下实战与CKA培训

文章知识点与官方知识档案匹配,可进一步学习相关知识Java技能树首页概览91957 人正在系统学习中

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年11月24日
下一篇 2021年11月25日

相关推荐