【软件工程】持续集成:如何建立百万行级代码的版本构建系统(三)系统优化

来源:互联网 发布:约瑟夫问题c语言 编辑:程序博客网 时间:2024/05/22 11:53

工作经历:

本人华为工作6年,做过开发、维护、一线支撑等大量技术工作。

因为加班吃不消进入中软,目前为高级项目经理,主导CI(持续集成)方向,中软应该是职业生涯的中间一站,欢迎各位多交流。

本文主要涉及几个方面的重点优化:1、构建系统稳定性优化;2、系统耗时优化;3、服务器搭建及软件更新优化。

1、构建系统稳定性优化

构建系统需要反馈的是代码合入后对编译的影响,解决构建识别往往作为开发项目组优先级最高的任务。而构建系统本身由于有大量的拷贝、编译、数字签名等工作,又涉及到版本控制系统、网页显示系统、基础网络系统等,构建失败不能简单判断是合入代码问题。

在代码正常的情况下,构建失败一定要控制在5%以下。这个任务难度非常大,例如,网络带宽不稳定,在某段时间更新代码耗时较长,超出了任务执行时间,执行超时报错。此时表现为,同期在系统中有5个任务在跑,而存在10个任务等待,而且任务越堆越多!最后,所有任务因为获取不到资源失败!如果作为商用系统,这种失败是不可原谅的!

【监控方案】间隔5分钟,在主控M发送检测任务,所有A更新测试文件,测试文件大小约10M,超出告警时间的在系统监控模块注册告警。根据网络稳定情况,告警可调为1次即告警到连续3次告警。告警时间为下载10M文件正常速度的最大时间,例如3s(从发送命令到更新结束),实测值。

【优化方案】1)降低更新代码的频率,没有代码上传到代码库的情况下,直接使用上次编译结果。2)同代码库的单一接口,只使用一台服务器更新代码,任务启动后在内网拷贝代码而不是全部访问代码库。

2、系统耗时优化

编译一个版本4个小时肯定无法接受,因为,我只提交了一行代码而已。。。

【精确编译方案】分析分支同主干版本的差异,FTP上保存主干编译所有模块的中间件,只编译新增加的部分,最后同主干的其它部分链接生成版本。

【资源占用率监控方案】每台服务器记录任务执行情况,汇总到M,分析每天占用率。在占用率达到瓶颈时,增加对应服务器资源。

【最小拷贝方案】M上记录对应代码节点在A服务器上的存在情况,在分配资源时,优选已经更新过对应代码的空闲服务器执行任务,避免无谓拷贝。

【任务拆分方案】即使是本来就是一个整体的代码模块,在统计的执行时间超出平均时间2倍时,考虑拆分成2~3个任务,分别编译各个子模块后合并,持续优化直到达到系统标称值。

通过上述方案,百万行代码编译系统,一定可以做到1小时内完成。

3、服务器搭建优化

无论是初始搭建系统,还是动态增加资源,标准的服务器上面要配置一大堆编译环境,手工安装软件浪费大量人力,并且还会出现服务器间的环境不一致导致部分任务失败。

【服务器镜像方案】配置M、C、A的标准版本,作为服务器配置模板,新增服务器直接拷贝配置即可。

【新增软件方案】在镜像服务器上放置标准的M、C、A配置文件夹,所有的更新都在此文件夹中放置对应的软件更新。所有服务器定期扫描更新,可以考虑每天空闲时段例如凌晨2点,暂停新任务,更新环境后重新开始接受新任务。

优化是一项持久性的工作,系统维护人员的主要投入方向,同样的100套服务器,经过半年到一年,好的维护团队能不断挖掘潜能达到效果最优,恶劣的团队。。。好吧,系统经常瘫痪,不断的加班投入问题定位、不断增加资源直到系统再也跑不动废弃为止。

今天讲到这,下期来聊聊构建系统创建的人员配置和任务分配,这是项目管理最关心的了:)

接下来还要涉及到构建系统成本计算、商用价格分析等,敬请关注!

本人QQ 280775561,微信JohnLee790608,有同路人可以一起探讨。

0 0
原创粉丝点击