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