目录

DevOps的诞生

瀑布式开发模式

敏捷开发模式

DevOps发展历程

DevOps定义

DevOps能带来什么价值

总结


DevOps的诞生

瀑布式开发模式

在正式谈DevOps之前,我们可以先聊一聊早期的软件开发模式——瀑布式开发。瀑布式开发,又称“瀑布(Waterfall)模型”,是软件开发中最早出现的模型之一。整个软件开发流程严格遵循需求、设计、开发、测试、部署、维护几个阶段。在这个流程中,需要等上 一个阶段工作完成后,才会进行下个阶段的工作。例如:开发工程师会把需求的代码全部开发好,才给到测试人员进行验证,最后交给运维工程师部署上线。在这种模式下,项目开发的进程由是从一个阶段“流动”到下一个阶段,如同瀑布流水一般,因此被称为瀑布模型(Waterfall Model)。如下图所示:

图片

瀑布式开发模式流行于20世纪70年代,是由软件开发大师温斯顿·罗伊斯(Winston Royce)最初提出的软件开发模型,作为最早出现的软件开发模型,它在软件工程中占有重要的地位

瀑布模型基于工程学的理念将整个过程分成不同的阶段,提供了软件开发的基本框架,便于人员间的分工协作。同时,也可以对不同阶段的质量和成本进行严格把控。强调文档,前一个阶段的输出就是下一个阶段的输入,文档是各阶段衔接的唯一信息。但在这种模式下也存在着一些缺陷,产品迭代的频率经常是以月为单位来进行,更甚者可达半年到一年时间,这导致的风险就是需求无法得到快速验证。

随着软件行业和互联网的快速发展,软件开发在企业中的地位变得愈加重要,软件不再仅仅是为业务提供支持,而是成为业务本身不可或缺的组成部分。与此同时,针对市场的快速变化和响应成为了新的目标。

在这种场景下,有可能团队花费数月开发的东西早已经不符合市场的需要,这不仅仅是对人力资源的浪费,也会严重影响企业的发展进程。渐渐地,大家开始发现这种笨重的模式难以适应业务的需要,我们得有一种新的模式来满足需求。

于是,敏捷开发(Agile)开始登上舞台。

敏捷开发模式

基于这种问题,敏捷的思潮开始兴起。2001年,Kent Beck,Martin Fowler 等17位著名的软件专家联合发起一场聚会,共同讨论当前的问题并尝试找出解决方案。这次聚会的成果就是著名的《敏捷宣言》[1]。

敏捷宣言的内容如下图所示:

图片

敏捷宣言遵循的十二条原则[2]如下:

1、我们最重要的目标,是通过持续不断地及早交付有价值的软件使客户满意。

2、欣然面对需求变化,即使在开发后期也一样。为了客户的竞争优势,敏捷过程掌控变化。

3、经常地交付可工作的软件,相隔几星期或一两个月,倾向于采取较短的周期。

4、业务人员和开发人员必须相互合作,项目中的每一天都不例外。

5、激发个体的斗志,以他们为核心搭建项目。提供所需的环境和支援,辅以信任,从而达成目标。

6、不论团队内外,传递信息效果最好效率也最高的方式是面对面的交谈。

7、可工作的软件是进度的首要度量标准。

8、敏捷过程倡导可持续开发。责任人、开发人员和用户要能够共同维持其步调稳定延续。

9、坚持不懈地追求技术卓越和良好设计,敏捷能力由此增强。

10、以简洁为本,它是极力减少不必要工作量的艺术。

11、最好的架构、需求和设计出自自组织团队。

12、团队定期地反思如何能提高成效,并依次调整自身的举止表现。

敏捷开发开始逐步走到了历史舞台的中央,敏捷意味着效率的提升,相比于传统的瀑布开发,敏捷开发实行的是一种更加快捷的做法。敏捷的核心理念是:将一个大的目标不断拆解,把它变成一个个可交付的小目标,然后通过不断迭代,以小步快跑的方式持续开发。敏捷之所以更快,根本原因在于持续迭代和验证节省了大量不必要的浪费和返工。具体如下图所示:

图片

(图片来自网络)

可以说,满足敏捷宣言和十二条原则的实践都属于敏捷开发的实践,著名的实践有Scrum[3]、极限编程[4]和看板方法[5]等。这些方法的优秀实践影响深远,极限编程就是要把编程的实践推向极限,激励着每一位开发者前行。

敏捷开发可以更快地发现问题,从而进行更快的响应。可以说,敏捷开发方法是传统瀑布式开发方法的合理补充,是应对未来市场或需求多变场景的良好实践。尽管敏捷开发(Agile Development)提升了开发的效率,但它的范围仅限于开发和测试阶段,并没有覆盖到部署、运维,因此运维部门并没有在这其中得到受益,运维与开发还是会出现互相指责的情况。为化解这个矛盾,就出现了DevOps。

DevOps

DevOps应该算是目前各大技术社区最火的概念之一了。我们先用一张图直观地展示下DevOps下软件开发模式相比瀑布式开发和敏捷开发的异同。如下图所示:

图片

从上图中可以直观地看到,DevOps与敏捷开发最大的不同点就在于,对软件进行多次、频繁的部署来避免软件部署难的问题。DevOps的提出,最开始也确实是为了打破开发和运维之间的对立和隔阂。

DevOps完善了敏捷开发存在的短板,实现了真正的软件交付全流程闭环。在 DevOps 的模式下,开发和运维都不再是“孤立”的团队,两者会在软件的整个生命周期内相互协作,并在工作中得到紧密地配合。而由此带来的效益,则是更加高效的服务交付和质量。DevOps流程如下图所示:

图片

(图片来自网络)

DevOps发展历程

那么,DevOps究竟是如何发展到今天的火热程度的呢?我们来扒一扒DevOps这些年走过的发展历程。

2009年召开的第二届Velocity会议上,会议上最大的亮点是一个题为 10+ Deploys Per Day: Dev and Ops Cooperation at Flickr 的演讲[6],这个演讲的内容可以被视为DevOps萌芽的标志,在这个演讲中提出了以业务敏捷为中心,构建适应快速发布软件的工具和文化的论点。

同年10月,Patrick Debois 在比利时召开了第一届DevOpsDays大会,大会获取了巨大的成功,会议结束后大家在Twitter上持续讨论,去掉了Days,只保留了DevOps,于是DevOps这个称谓正式诞生了。

2010年,《持续交付:发布可靠软件的系统方法》的作者 Jez Humble 参加了第二届DevOpsDays会议[7]并做了关于“持续交付”的演讲,也可以解决开发和运维的问题。关于什么是DevOps,一直众说纷纭,The Agile Admin上,也发布了一篇名为“What is DevOps”的文章[8],得到了大家的广泛认可。文中给出了详细的DevOps的定义,并构建了DevOps的一系列价值观、原则、方法、实践,以及对应的工具。该文也梳理了DevOps的历史并对DevOps的一些误解进行了澄清。

之后,DevOps的影响持续扩大,当前早已不再只是开发和运维的范畴。一些主要的发展历程摘要如下:

1、2013年,《The Phoenix Project》书籍出版,是世界上最畅销的DevOps相关的书籍;

2、2014年,Dora 开始持续发布《加速:DevOps现状报告》(2020年因疫情等原因未发布)[9],这份报告是DevOps的最珍贵学习资源之一,也对DevOps普及起到了关键的推动作用;

3、2016年,《DevOps Handbook》出版,详细阐述了著名的DevOps实践三步法;

4、2017年,国内举办了首届DevOpsDays大会,DevOps 正式在国内驶入了发展的快车道;

5、2018年,中国DevOps社区正式成立,积极推动DevOps在国内的发展;

6、2019年,中国信息通信研究院牵头《中国DevOps现状调查》,致力于推进国内DevOps发展。

在发展过程中,DevOps 也成为一种文化,一种运动,一种实践,凡是有益于软件交付的思想和方法,好像都可以被DevOps吸收,DevOps不再只是敏捷开发的延伸,而是以C(文化)、A(自动化)、L(精益)、M(度量)、S(共享)为原则,旨在提高软件交付效能、团队效能,改善组织效能的重要方法和实践。

中国信通院也起草了《研发运营一体化(DevOps)成熟度模型》[10],标准中对DevOps的总体架构描述如下图所示:

图片

标准中,把DevOps过程分为敏捷开发、持续交付、技术运营三大模块,覆盖软件交付的方方面面,这也很好地证明了当前DevOps覆盖范围相当全面和广泛。

DevOps定义

首先我们看一下维基百科对DevOps的定义

DevOps(Development和Operations的混成词)是一种重视“软件开发人员(Dev)”和“IT运维技术人员(Ops)”之间沟通合作的文化、运动或惯例。通过自动化“软件交付”和“架构变更”的流程,来使得构建、测试、发布软件能够更加地快捷、频繁和可靠[1]。

可能这个定义有些让人云里雾里,没关系,我们再看一下一些国内外知名企业对DevOps的定义,可能就会有更多的体会。

微软对DevOps的定义如下:

DevOps 是开发 (Dev) 和运营 (Ops) 的复合词,它将人、流程和技术结合起来,不断地为客户提供价值[2]。

Atlassian对DevOps的描述如下:

DevOps 是一套实践、工具和文化理念,可以实现软件开发团队和 IT 团队之间的流程自动化和集成。它强调团队赋能、跨团队沟通和协作以及技术自动化[3]。

Gitlab对DevOps的定义如下:

DevOps is a combination of software development (dev) and operations (ops). It is defined as a software engineering methodology which aims to integrate the work of development teams and operations teams by facilitating a culture of collaboration and shared responsibility[4].

直译下:

DevOps是软件开发 (Dev) 和运维 (Ops) 的组合。它被定义为一种软件工程方法,旨在通过促进协作和分担责任的文化来整合开发团队和运维团队的工作。

华为对DevOps的描述如下:

DevOps,即Development and Operations,是一组过程、方法与系统的统称,用于促进软件开发、运维和质量保障部门之间的沟通、协作与整合。DevOps的出现是由于软件行业日益清晰地认识到:为了按时交付软件产品和服务,开发和运维工作必须紧密合作。DevOps可看作开发、运维和质量保障(QA)三者的交集[5]。

除了以上网站中对DevOps给出明确的定义外,国内外一些专家也给出了自己的定义。

Oleg Skrynnik在《DevOps精要:业务视角》[6]一书中对DevOps给出以下的定义:

DevOps是对敏捷软件开发与精益生产思想的演进,应用于IT端到端的价值链中,使得业务基于现代信息技术,并通过文化、组织与技术变革来获得更大的成功。

石雪峰老师在极客时间《DevOps实战笔记》专栏[7]中,也给出了自己的DevOps定义:

DevOps 是通过平台(Platform)、流程(Process)和人(People)的有机整合,以 C(协作)A(自动化)L(精益)M(度量)S(共享)文化为指引,旨在建立一种可以快速交付价值并且具有持续改进能力的现代化 IT 组织。

一些更多关于DevOps的定义或描述,我们无法在此处穷尽,但是读到这里,我相信大家对DevOps的定义可能已经有了自己的初步认识和理解。这些定义或描述中提到最多的关键字包括:软件开发、运维、文化、协作、技术、价值,DevOps的核心也正在于此。

需要指出的是,在近两年的Dora《加速DevOps现状报告》[8]中,文化都被赋予了极其重要的地位,拥有生机型文化的团队组织效能高出 30%。与文化息息相关的是员工的幸福感,DevOps倡导通过构建高度信任的、无问责的文化,通过减少重复工作、职业倦怠等来提升员工的幸福感。Dora 的 Core Model对于我们理解DevOps是什么有着重大帮助,Core Model也是Dora数十年研究的重要成果,如下图所示:

图片

从以上分析中,我们可以知道:DevOps的核心之一是文化,文化需要流程和工具支撑,需要重视员工的满意度,实施DevOps的目的是提升软件交付效能、提升团队效能、提升组织效能。为此,结合自己的实践经历,我给出自己对DevOps的理解如下:

DevOps是一套本身也在持续改进中的方法论,它致力于提升软件交付效能,改善软件从业人员的工作和生存环境,帮助提升组织效能。DevOps运用先进的技术、工程和文化手段,实现平台、流程、人的有机结合,注重持续改进,通过持续提升软件交付效能和员工幸福感,不断为客户创造价值,也帮助公司提升团队效能和组织效能。

DevOps能带来什么价值

我们身处在一个充满变动、不确定、复杂、模糊的 VUCA(Volatility、Uncertainty、Complexity、Ambiguity)时代,需要更加快速地应对各种各样的变化,在商业竞争中,先发优势特别明显,适应市场需求,快速投放产品能更大概率地获得客户和消费者的青睐。

这里面其实隐含了三层含义:

1、适应市场需求,这可能需要我们快速试错才能找到真正的需求价值点;

2、快速交付,有一个产品或功能想法产生后,DevOps能够帮助产品快速落地;

3、保证质量,当前各类产品呈现饱和趋势,互联网产品之间更是展开了存量竞争,C端产品都在争夺用户的时间,导致的问题就是用户对产品的要求越来越高,除了产品功能实用以外,体验、质量问题也不容忽视,软件产品一个长时间的宕机可能会给用户造成巨大损失,也可能使公司流失大量的用户,因此质量问题绝不能忽视。

DevOps正是要保障产品又快又好地交付,既能快速响应市场变化,又能交付高质量产品。主要表现为:

1、快:产品交付快。首先,DevOps基于精益产品的理念,提倡快速交付对用户有价值的产品,投放市场验证,这需要我们基于不断迭代、演进的思想去做产品规划。其次,DevOps吸收了敏捷开发的优秀理念,并立足端到端的价值流打通软件交付全流程,消除开发与运维之间的隔阂,运用持续集成、持续交付等先进工程思想提高交付效率。最后,DevOps提倡协作,不仅是开发与运维之间消除隔阂,DevOps提倡软件交付的各个角色之间都建立良好的协作关系,共筑分享、协作的生机型文化。

2、好:产品有价值、质量好。DevOps倡导以客户为中心打造产品,产品有价值,对客户、对用户有益,这样才能更被市场认可,才是真正有价值的产品。团队全员需要贯彻以客户为中心,不仅仅是说说而已。其次,DevOps的质量好也不是说能够完全地消除故障,而是通过内建质量等手段保障不出现重大产品缺陷或故障,内建质量要求团队全部成员对质量负责、质量问题尽量早发现早解决。除了事先控制质量事故,DevOps也提倡通过一切纳入版本控制、快速回滚等手段,做到故障快速回复。DevOps的核心指标——变更失败率、故障恢复时长等,正是DevOps质量相关的关键度量指标。

DevOps除了能帮助企业又快又好地交付产品,提升团队的软件交付效能,也能更好地激发团队创造力和工作热情。DevOps不仅注重流程、工具的建设,更重视文化建设,DevOps倡导生机型文化,致力于打造高度协作、风险共担、无问责、持续改进的学习型组织。在这种文化机制下,能激发员工更好的业绩表现,不仅是物质激励,能激发员工创造力的往往更多是精神激励。正如华为任正非先生所说的那样:“如何留住优秀人才?我认为,物质激励不是最主要的,第一点应该是他能找到自己热爱的岗位,当他热爱时,就会踏实工作。”[9] 

DevOps本身也包含提升员工幸福感的理念,认为组织或团队应该采用有益于员工的策略,包含减少职业倦怠感,促成满意的工作经历和提高人们创造有价值产出的能力(即生产力)[10]。软件生产的灵活性和复杂性之高,很大程度上只能依赖人的能力,实施并践行DevOps文化,对于提升团队效能和组织效能大有裨益。

总结

瀑布式开发构建了软件工程发展的基础,敏捷开发则指导我们更快更好地开发软件,也极大地促进业务人员与开发人员之间问题的解决,DevOps则覆盖了软件交付的最后一公里——软件部署和运维。国内外众多软件开发和运维专家,为DevOps发展作出了卓越的贡献,也推动着DevOps不断前行,本文中也介绍了DevOps的起源和发展历程。

DevOps是集大成者,覆盖了软件交付的全流程链路,囊括了敏捷开发、持续交付、技术运营等领域,注重软件产品端到端的价值交付。不仅如此,DevOps还倡导一种协作、共享的文化,关注并注重人的感受,倡导建设生机型文化。也正是因为DevOps覆盖广,业界对DevOps的比喻往往用“盲人摸象”来形容,直至今天,也没有一个确切的所有人都认可接受的DevOps定义。

今天我们主要聊了DevOps的定义和能带来的价值。当前DevOps在持续发展中,尚未建立业界统一认可的定义,笔者基于当前知名的DevOps定义,结合自己的理解,尝试给出了自己对DevOps的定义:

DevOps是一套本身也在持续改进中的方法论,它致力于提升软件交付效能,改善软件从业人员的工作和生存环境,帮助提升组织效能。DevOps运用先进的技术、工程和文化手段,实现平台、流程、人的有机结合,注重持续改进,通过持续提升软件交付效能和员工幸福感,不断为客户创造价值,也帮助公司提升团队效能和组织效能。

实施DevOps对企业来说已经不是一个选择题,大部分企业都在拥抱DevOps或者践行DevOps相关实践。DevOps能保障产品又快又好地交付,既能快速响应市场变化,又能交付高质量产品。DevOps除了能帮助企业又快又好地交付产品,提升团队的软件交付效能,也能更好地激发团队创造力和工作热情。实施DevOps大有裨益。

本篇我们主要介绍了DevOps的诞生和发展历程,在敏捷开发、精益等思想盛行之后,运维侧进行软件部署的压力更大了,这就迫切需要一种新的软件交付模式解决开发与运维之间的隔阂和对立,DevOps因此应运而生。

Logo

一起探索未来云端世界的核心,云原生技术专区带您领略创新、高效和可扩展的云计算解决方案,引领您在数字化时代的成功之路。

更多推荐