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

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

========================================================================

一、背景和现状

A企业针对Java web开发提供自动化项目管理包括持续构建、部署、测试、发布等动作,业务基数大,效率问题已经成为系统瓶颈,需要大力投入。

当前,我们使用maven来管理项目,构建动作包括Java编译和war打包。

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

Maven管理下的全流程(红色部分编译和打包重点关注)

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

Java编译*.class文件

当前应用中,应用200mwar包构建要2分钟。

 

二、目标

将构建效率提升到59秒内。

 

三、方法论

从软件构建的动作上讲,分为以下步骤:

1、拷贝,从远端仓库或者本地仓库下载代码到本地。(传输、系统IO、存储)

2、编译,调用javacmvn compile)将java文件编译成字节流class文件。(系统IO

3、打包,调用jarmvn package)打包将项目打包。(系统IO

上述动作中,可以优化的目标有:

传输:代码仓库和服务器主机的距离、带宽、协议。

系统IO:文件打开、读写、关闭等标准动作。

存储:本地存储的大小,远程存储读写效率,和传输关联较大。

还可以增加的优化目标有:

系统运行:减少操作系统本身与构建无关的模块。

代码效率:用低级语言替代甚至重写Java本身的功能。(效率提升显著)

 

四、具体优化方向

目前对A公司的系统了解还不够,针对上述优化的方向,假定优化方向如下:

1、系统规划仓库和构建服务器,减少拷贝次数。

代码从远程拷贝需要网络传输,而在业务量较大情况下大量业务的网络延迟可能是系统最大的瓶颈,单纯减少服务器本地代码运行时间往往达不到目的。

优化代码仓库要采用如下方法:

1.1 共享频率最高的包保存在本地,假设本地仓库有100G空间用来存放共享包,定期以一定的策略(业务使用频率统计)来优化本地仓库。

1.2 构建服务器和远程包仓库就近原则,根据业务量来设计仓库、构建服务器物理位置。

1.3 为最高优先级服务设计专用服务器。

2、优化网络带宽,适配业务流量。

根据业务量合理配置带宽,持续监控。带宽应该配置在最高业务量的120%以上防止高峰期大量业务失败。

3、c重写maven部分功能。

C代码在效率上优于Java(字节码翻译、无引用对象、垃圾回收等机制占用大量机器时间),优化空间大,在本地代码运行效率上至少10倍提升。

1.1 解析java类,可以用工具生成UML

1.2 设置功能节点,将maven的每个动作输入输出及环境依赖制定测试用例,获得测量数据标记性能短板

1.3 制定性能提升策略,用c替代java的部分方法

1.4 替换功能达到里程碑点时,发布新的系统,先作为影子系统运行一个阶段(1~3个月),持续监控新系统功能匹配度和性能,当系统稳定后切换到新系统,可以两个系统反复迭代验证。

4、优化操作系统,减少不必要的系统开销。

使用Linux系统,去掉不必要的图形界面,运行速度比Windows将有较大提升。另外,可以在系统层面定制:

1.1 编译定制Linux内核,去掉不必要的模块。

1.2 使用docker服务,细分微服务功能并持续保持docker服务器冗余。

1.3 使用更大的本地存储,固态硬盘加速系统IO速度。

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

====================================================================

前期链接:

【软件工程】持续集成:如何建立百万行级代码的版本构建系统(五)开发计划

点击打开链接