DevOps是如何实现效率的提升?

2019-10-21 09:33:45 浏览数 (1)

随着企业业务对软件系统日益依赖,IT管理与研发模式也随之对“敏态”模式产生了需求,也就是今天时常提起的DevOps。提升效率,是DevOps实践的核心内容之一。就让我们来一起从软件生命周期的业务流与作业流,探讨DevOps实践效率提升的方向与方法吧。

DevOps之“流”分析

软件工程将软件的生命周期定义为问题定义、需求分析、软件设计、程序编码、软件测试、运行维护等过程,无论是对于传统模式、敏捷模式还是DevOps模式,软件生命周期过程基本一致,如下图所示。

软件生命周期软件生命周期

软件生命周期各个过程也组成了软件工程的“业务流”,而在不同团队采用相应地开发模式中,具体执行的开发及相关的活动,我们则成为“作业流”。

DevOps实践中,最主要改进的内容,就是对于这些 “作业流”的活动进行“关停并转”,从而实现整体与局部上对于效率的提升。

这些作业,也就是需要开展的活动,可以分为以下几类:

人与人的互动

这类活动交互的双方均为自然人,如业务需求收集,活动的特点是具备高度的不规则与不规律性。

人与机的互动

这类活动交互的一方为自然人,一方为依托于计算机的程序,如编码活动、人工审核/审批等,活动的特点是人的活动必须依循计算机相关主题的规则,部分活动可以抽取为规范化的过程。

机与机的互动

这类活动的特点是交互的双方都是依托于计算机的程序,如编译构建、自动化测试,活动的过程高度规范化。

不同的作业类型,在效率提升的优化中,需要采用的方法各有不同。

DevOps效率提升之协作

协作的本质是在不同的主体之间进行快速、有效的信息共享,从而进一步协调各主体进行步调一致、有序的工作执行,实现整体上的一致性与顺畅性,协作是DevOps实践中效率提升的重要方向和内容之一。

DevOps实践中的协作更多需要是从软件生命周期整体系统化考虑与设计,协作设计上面主要包括以下两个方面。

1. 信息共享

传统的模式中,相关业务信息仅共享于各阶段内部,而在DevOps实践中,则更强调信息的跨阶段共享,面向产品的全生命周期,共享信息包括:

业务类信息

即业务目标、业务背景、业务需求、业务限制等信息。

执行类信息

即软件开发、编译、测试、部署等执行的相关信息,如开始时间、结束时间、执行时长、执行操作记录等。

反馈类信息

即各步骤、阶段执行的信息反馈,如需求拆分反馈、任务执行反馈、代码扫描结果、测试结果、发布验证结果等。

DevOps时间的信息共享,需为以上信息提供统一的信息管理与分析平台。对于代码编写之前的阶段提供如敏捷协同的工作协同管理模块,以记录需求、任务分配、需求完成进展等信息,对于代码编写之后的阶段,则提供相对完整的执行记录信息以及必要的通知信息,以构建及时的反馈。

2. 协作调度

协作调度是DevOps协作实践中另外一项关键内容。通过工具平台的驱动,实现对于“机与机的活动”全自动协作调度,对于“人与机的活动”简化协作调度,对于“人与人的活动”事件驱动协作调度,进而实现优化协作调度的效率,提升协作效果。

全自动协作调度

全自动的协作调度主要是通过DevOps平台的流水线引擎实现,通过流水线编排的实现指定作业流自动执行,执行过程中自动完成不同阶段的信息交互,过程无需人工参与。

简化的协作调度

简化的协作调度也是通过DevOps平台的流水线引擎实现,在流水线作业流中编排需要人工干预的节点,但仅需要人工给出通过/终止等简单的指令型信息即可。

基于事件的协作调度

基于事件驱动的协作调度,主要是用于“人与人的活动”,也可以用于“人与机的活动”,其通过通知、待办等事件方式,实现精准的信息共享与推送,驱动协作的下游方快速接受和推进事务工作。

DevOps实践中的协作调度的效果可以通过研发效能来进行初步的评估与衡量,通过衡量,我们可以较为清晰的获知哪个阶段的协调调度是关键阻碍点或可以进一步优化。

DevOps效率提升之自动化

自动化是DevOps的核心理念,也是效率提升的最重要手段。通过DevOps工具平台,实现软件过程自动化以及软件过程的支撑工作自动化。

1. 软件过程自动化

软件过程自动化是指在软件的开发、测试、部署等过程中,引入自动化的手段,从而实现快速的软件质量检查,以及软件应用发布。

开发过程自动化

开发过程的自动化主要针对源代码扫描、编译构建、制品归档、报告归档等环节实现自动化。

源代码扫描包括采用商用/开源工具,从代码的规范、缺陷、复杂度、重复率等方面进行扫描和质量检测。

编译构建包括针对服务器端、移动端等不同编译构建类型的支持,如Maven、Gradle、Node.js等编译构建方式支持。

制品/报告归档包括对于二进制包、文档、镜像的归档和存储支持。

通过流水线引擎,实现以上内容的自由、可视化编排,以及按需执行。

测试过程自动化

测试过程的自动化主要针对软件测试中的单元测试、接口测试、稳定功能的UI测试、测试数据自动生成和清理等过程。

包括测试任务的组织、测试脚本的执行、执行结果的自动统计等。

部署过程自动化

部署自动化是指针对软件的部署发布过程,包括数据库更新、应用部署、灰度/滚动发布、回滚等过程。

2. 过程支撑自动化

软件过程支撑主要是指面向软件工程过程的支撑,实现自动化包括:

编译构建环境自动化

编译构建环境包括基于DevOps平台的自管理编译构建环境,按需生成编译构建环境,编译构建完成后自动销毁,以及特定编译构建环境的快速接入等。

测试环境自动化

测试环境自动化是指自动化测试执行所需的能力环境,如接口/UI测试脚本所需的执行环境,可以根据测试任务的需要,实现测试环境的弹性伸缩自管理。

环境部署自动化

环境部署自动化是指对于开发、测试、生产等所需要的基础环境,可以根据流水线自动完成环境的使用前的生成、使用后的回收等,实现资源即代码,无需人工参与。

在DevOps实践中,通过大量的过程及支撑自动化,可以极大的减少开发、测试、运维等工作的人工参与时间,降低人工成本,并能实现人工无法完成的工作,例如快速对10000台服务器上的应用进行更新。但前期的建设需要涉及的技术点较多,成本也较为巨大,如何建设落地自动化,除了考虑效率之外,还需着重考虑DevOps平台的自主可控与可持续发展等方面,

DevOps效率提升之持续优化

持续优化,是DevOps效率提升的第三个主要方面,也是践行DevOps理念的重要实践。持续优化需要解决优化什么、如何优化等问题。这些问题的解决,需要应用DevOps精益分析的理念实践。

精益分析,本质就是对数据的统计、分析与挖掘。

1. 数据获取

精益分析所涉及的数据应从需求提出到用户访问形成一个端到端闭环。数据的获取需要从业务系统本身以及支撑业务系统的DevOps平台两个方向获取。早期可以以DevOps平台相关数据的获取为主要来源,后续可持续集成非DevOps平台以及来自业务系统埋点获取的数据。在整个过程中,需要做到数据的及时性、准确性与完整性。

2. 数据分析

数据分析需要有明确的目标和针对性,如针对业务需求提出到上线的平均周期、开发返工趋势等,通过数据分析,可以快速找到当前影响效率的关键点,从而实现针对性的改善。

3. 数据呈现

数据呈现即为数据应用,数据呈现可以采用两种方式进行。

协同管理

将数据获取/分析的结果,在DevOps的协同管理平台实时的反馈和呈现,从而推动PO/开发团队/干系人等根据反馈信息快速推进效率优化,通过量变引发质变,通过团队内自我优化的方式实现效率的提升。

度量分析

针对于与效率相关的重点指标,通过可视化大屏等方式,进行专项的度量分析,并在管理与项目团队共享指标信息以及指标的变化趋势,通过全局监督的方式推进效率的提升。

结论

文化上的协同打破了流程与部门的屏障,共享了信息,协作了调度;过程中的自动化消除了重复性的工作,降低人为风险;业务系统与DevOps平台的数据支持精准提供优化的方向。DevOps之所以能为企业提升效率在于DevOps的实践实现软件生命周期的业务流与作业流的一致与顺畅。

作者:黄全中

———— / END / ————

往届文章

想要建立对DevOps的基础概念,可以参考:

【干货】DevOps的演进与落地价值

想了解蓝鲸实践DevOps的理解,可以参考:

从蓝鲸视角谈DevOps

上期文章

Oracle数据迁移后归档文件暴增怎么办?

0 人点赞