【软件工程】持续集成:如何建立百万行级代码的版本构建系统(三)系统优化
来源:互联网 发布:约瑟夫问题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,有同路人可以一起探讨。
- 【软件工程】持续集成:如何建立百万行级代码的版本构建系统(三)系统优化
- 【软件工程】持续集成:如何建立百万行级代码的版本构建系统
- 【软件工程】持续集成:如何建立百万行级代码的版本构建系统(二)架构拓展
- 【软件工程】持续集成:如何建立百万行级代码的版本构建系统(四)项目管理
- 【软件工程】持续集成:如何建立百万行级代码的版本构建系统(五)开发计划
- 个推如何管理亿级代码的质量?持续集成SonarQube 代码质量管理系统
- 构建Android自动编译持续集成系统
- 持续集成篇_03_svn版本管理系统的使用(centos+subversion+apache+jsvnadmin+tortoisesvn)
- 持续集成篇之SVN版本管理系统的安装(CentOS+Subversion+Apache+Jsvnadmin)
- 基于容器服务的持续集成与云端交付(三)- 从零搭建持续交付系统
- 构建百万级高性能Web网站-5 CentOS 6.5 系统优化-内核参数调整
- 分布式架构学习之持续集成:009--SVN版本管理系统的安装和使用(CentOS+Subversion+Apache+Jsvnadmin)
- 百万用户规模的系统如何扩展
- 构建自己的 LINUX 系统(三)
- 新一代软件工程的标配:持续集成
- 基于windows 10的git(版本控制系统)、(Bug管理系统)Bugzilla、持续集成环境(基于Jenkins和Github)的安装与学习
- 基于Grunt的版本构建系统入门教程
- 如何建立自己的代码版本控制
- Linux服务器安装VNC总结
- angular 实现全选、反选、个别选择的实现
- Exynos4412 IIC总线驱动开发(一)—— IIC 基础概念及驱动架构分析
- JavaWeb配置数据源连接数据库详解(概念详解+多种情况源代码范例+易出错类型)
- 人工智能作业homework3——模拟退火解决TSP
- 【软件工程】持续集成:如何建立百万行级代码的版本构建系统(三)系统优化
- Lock
- 阿里云服务器web应用安全-XSS攻击
- leetcode_c++:Majority Element II (229)
- Exynos4412 ADC 设备驱动开发
- C++learning
- java基础知识:java项目的命名规范
- Java集合框架的层次结构和使用规则梳理
- volatile关键字解析