为什么传统开发模式存在问题?在信息化企业的这条路上,我们已经走得很远了,从少数单机到集群的规模壮大;软件生态也不断丰富完善,从底层系统到上层的业务分析、ERP、数据库等自研定制亦或是第三方应用。正式因为有了这些IT基础,云计算也开始生根发芽。
越来越多的社会业务依赖着IT技术,IT技术工作者们也越来越期望自己的产品可以更快地响应社会不断变化的需求。首个软件公司的诞生已经过去了七十年,技术日新月异,业务发展迅速的公司也逐渐发现传统开发模式已经不再适用了。市场机遇不断扩大,企业业务需求相应增加;而业务需求落地的速度超过研发所能承受的工作量。另外,由于发布产品越来越多,对应的测试工作也相应地越来越多,如何满足海量的开发测试需求,如何实现产品的快速迭代、快速发布,正在成为企业越来越强烈的诉求。
不少企业尝试通过扩充研发人员的方式加快产品落地速度,但是人员增多并不意味着开发时间的缩短;但是IT技术的研发实现能力却不能跟上步伐,如何加快产品落地速度为企业争取先机成为重大课题。那么,为什么传统开发模式存在能力瓶颈呢?
1. 开发工具不统一、安装耗时:传统开发模式下,以Java为例,一般人都是用Eclipse或者MyEclipse这样的IDE工具,这类工具通过自带的各种插件,能够完成开发工具与执行环境的结合,但是如何保证你的插件一定能起作用,如果遇到问题怎么解决,这样的问题往往导致一个开发人员一整天都在搭建开发环境。
2. 没有统一的开发、测试平台:无论是开发环境(Dev),还是集成环境(Staging),亦或是生产环境(Production),都需要能够快速部署环境。传统开发模式很容易出现的问题是需要花费大量时间统一各个环境的差异点。差异点包括基础环境差异和开发程序环境差异,基础环境差异指的是安装测试程序之前整个环境情况不明确,可能出现操作系统版本不一致、开发依赖库版本不一致(例如JDK版本),也可能会出现一个环境运行不了程序,但是又找不出原因这类情况。而对于开发程序环境差异,传统开发模式多使用脚本方式执行安装、部署过程,但是脚本的维护本身就是一个问题。
3. 项目管理流程无法快速执行:无论传统开发模式,还是迭代开发模式,亦或是基于云端的开发模式,都需要严格执行项目质量管理流程,即需要对代码进行审核、单元测试、集成测试、系统测试,然后才能进行产品发布、上线,这一整套流程,在传统开发模式下,首先需要提交代码到SVN这样的代码资源库软件,然后由Leader进行代码审核,再开始个人开发环境上的单元测试,即便单元测试、集成测试通过,也未必意味着部署到测试环境一定没有问题,一整条线上有太多的不可控因素,任何一点都可以拖慢开发团队的迭代速度。而代码审核、分析,多依靠人工进行,无法进行真正的智能分析。
4. 无法并行、协同开发:传统开发模式下,我们需要将代码提交到SVN,如果出现了代码冲突,还需要手动逐行校对,如果开发人员遍布全球,存在时差,那开发进度就会延期,这种方式下确实很难做到并行、协同开发。
2为什么DevOps备受关注?回顾开发模式的发展历史,大致分为瀑布开发、敏捷开发和DevOps三个阶段。
DevOps就是想方设法避免从开发到交付过程中可能发生的冲突,同时让大家用更聪明更有效的方式去工作。它是一种框架,包含了很多优秀想法和原则,它鼓励开发部门和运维部门通力合作,提高产品实现的速度。在DevOps环境中,开发人员和系统管理员会构建一些关系、流程和工具,从而更好的与客户互动,最终提供更好的服务。
真正想要实现DevOps,需要开发平台提供能力,促进软件开发向前发展和提升,而不仅仅是拥有思维。效率的本质是聚焦创造性工作,即解放双手、唤醒大脑。InfoQ曾经撰文对DevOps工具链进行了分类总结,对DevOps不是很熟悉的读者可以移步DevOps科普文《DevOps的前世今生》:
3华为走过的路最早期的软件开发堪称 “个人英雄主义时期”,但是随着团队的扩大,需要通过团队能力来承载团队研发,于是华为引入CMM聚焦于大团队如何通过更加完整的流程进行软件交付,彼时交付周期为三到六个月。
此后,与行业整体历程相似,华为也走过了从最初IPD-CMM到敏捷模式开发尝试,再到DevOps研发能力及工具链建设,相应的研发、测试工具一直在跟随演进。
华为在全球有16个研发中心、近8万研发人员,对于这样一个量级的软件开发团体,想成功DevOps改革并非易事。在决定落地DevOps平台之时,就希望实现代码和作业上云,让开发只做开发。2014年,华为已经开始研发一些DevOps风格的工具,现如今已经实现了DevCloud软件开发运平台,在云上实现了DevOps的工具链,供开发者使用。参照下面的DevOps能力环来分析DevCloud:
华为希望的是将整个能力环的工作都放入到云端,开发者在完成代码的编写之后,不再关心后续环节的任何问题。换而言之,文中最早提到的开发模式的四大问题则直接由该云平台处理,不再耗费人力逐一手动处理琐碎的代码之外工作,从而提高产品的落地效率。
华为对此DevOps云端平台的功能划分如下:
华为称一切开发活动都在云端,即DevCloud负责软件开发全生命周期的云服务。进行DevOps改革之后,千万行代码级产品的版本迭代周期从8周缩短到3周。
从华为提供的整体统计数字来看,以前华为每个月有超过一亿行的代码,编译时间超过25分钟;后来通过软件研发云将所有的编译资源进行了集中处理,将编译时间从25分钟降到了7.5分钟,版本的编译速度从94分钟升级到31分钟,研发环境的准备时间也由月级降低到了小时级,甚至分钟级。
4通过三个应用场景看技术落地应用场景一:代码检查 技术层 业务层代码检查围绕检查任务实例开展,检查任务由“代码+检查规则+检查报表”构成,即:检查引擎从代码仓库(CodeHub)克隆代码,从规则库中获取检查规则,执行生成检查报表,保存到检查任务实例对象。
表现层华为将20+年的软件开发经验荟萃出一套完整的代码检查机制,可在线进行多种语言的代码静态检查、代码安全检查、质量评分、代码缺陷改进趋势分析,辅助管控代码质量。
提供华为典型检查规则集,支持web检查、安全检查、架构检查、编码问题检查等场景。支持Java、JavaScript、CSS、HTML、C++等语言检查,持续增加语言支持广度。
精确定位缺陷,针对每个代码缺陷,提供详细的缺陷影响说明、正确示例、错误示例、修改建议。
如果系统的检查不满足需求,SE可通过定制规则集来实现挑选规则集;
针对大量代码缺陷,用户可根据问题级别、问题分类、语言、文件目录等进行过滤,分级处理。
应用场景二:自动化流水线 技术层并行智能任务调度:实现智能任务调度算法,用户根据任务特点自行编排并行/串行任务,系统感知执行器状态和健康度,动态分配执行器的任务,故障节点任务实现自动转移和熔断,结合资源弹性伸缩策略,实现调度器和执行器高可用和水平扩展。
资源弹性伸缩:使用华为企业云弹性伸缩服务,感知到业务集群资源使用情况,资源利用率超过阀值时,动态扩容;反之,自动缩容。流水线根据不同业务类型,配置不同的弹性伸缩策略和资源弹性伸缩组,从而实现短时间内迅速提升流水线总体吞吐量。
编译构建并行技术:通过使用精准增量编译技术,结合并行智能任务调度,可实现按技术栈、目录等编译策略增量并行编译,加速编译构建的速度,大幅降低编译构建等待时间。
表现层对于一切可以解放双手的任务都由工具自动化实现。
一键式完成代码下载/代码检查/编译构建/系统部署/产品发布整个交付流程。
任务并行执行,按需动态分配资源,显著提升资源利用效率及执行效率。
可实现单模块或者单独子系统的个人级交付,也可实现多模块、多子系统的版本级交付可随时查看流水线执行进度/结果/报告/日志。
应用场景三:部署环境标准化、部署过程自动化 技术层部署编排技术
提供一定的服务编排能力,在 playbooks 中可以编排有序的执行过程,甚至于做到在多组机器间,来回有序的执行特别指定的步骤。并且可以同步或异步的发起任务。
用流水线同时集成编译构建、代码检查、部署,从代码提交开始触发操作,完成整个DevOps的自动化流程。流水线支持编排部署任务之间的依赖和顺序,通过串行任务和并行任务以及子流水线来组合、调度各个任务,从而实现高效部署。
大规模部署技术
Ansible本身就支持多并发部署,缺省的并发任务数是5. 但是DevCloud的部署采用python API实现,我们封装了python的任务以多线程方式运行;同时采用了gunicorn框架提供多进程复用技术,以最大限度的利用Ansibe引擎的并行部署能力;对于超过200以上并发的大规模部署,我们会采用横向扩展即增加AnsibleRest的节点数来支持更多的并发部署; 此外,我们还提供部署任务排队机制来保障峰值任务时系统仍然能够正常运行。
表现层一键式自动化部署,部署机器无需安装代理,过程可视化,支持主流编程语言和技术框架,支持并行部署和流水线无缝集成
支持Web应用程序和微服务的部署,支持Tomcat、Java、Python、NodeJS、Go、PHP、Ruby语言。
通过流水线定制交付流程,支持并行和串行任务,系统自动执行所有任务,并可查看所有任务的执行状态、日志及报告。
提供高级编辑功能,满足用户更改部署参数和自定义执行参数以在部署任务执行时动态输入执行参数。
5关于DevCloud的更多细节正所谓英雄所见略同,业界也有很多DevOps方案和实践经验,比如微软公司Visual Studio + Team Foundation Server方案、AWS和Google基于云的DevOps模块化组件、其他公司自研搭建的DevOps链。
华为推出的DevCloud的侧重点是一站式的解决方案,旨在帮助企业在软件开发的过程中提升效率和质量。DevCloud的中文名称为“华为软件开发云”,即面向的目标群体是团队规模在10-50人的中小团队,如中小企业的软件开发者、众包开发团队、个人开发者、高校软件/计算机类的大学生。
华为告诉InfoQ使用华为软件开发云的研发周期是1天到两周交付的弹性版本周期。其中:重大变更、新服务或大特性上线、多服务间联调的需求会长达双周交付;而服务内新特性、体验优化等开发,独立升级则会于1-3天交付。
使用DevCloud的用户可以基于软件开发云进行应用的开发、测试,而把软件自动化部署到华为企业云,也可以把软件包下载到本地后部署到别家的公有云、混合云。
原创:木环、麦麦