简介: 从精益思想出发,我们可以看到DevOps的必然发展方向,那就是向业务侧延伸。业务是产品开发和运维的源头,完整的价值流必须从源头开始。这不是预测,而是正在发生的事实。

编者按:本文源自阿里云云效团队出品的《阿里巴巴DevOps实践指南》,扫描上方二维码或前往:https://developer.aliyun.com/topic/devops,下载完整版电子书,了解阿里十年DevOps实践经验。

本文作者:何勉,阿里云云效资深技术专家

谈到DevOps,就必须从敏捷和精益开发说起。DevOps在它们基础上发展而来,借鉴了其中的方法、理念,并发展和完善了它们的实践体系。

敏捷软件开发的兴起

敏捷软件开发的实践最早出现在上世纪90年代。当时,一批轻量的软件工程方法和框架相继诞生,它们共同的特点是,相对传统软件工程,都遵循演进和迭代的模型,过程更加轻量灵活。其中Scrum和极限编程(ExtremeProgramming)在实践上最为成功,影响最大。它们都是迭代和增量的软件开发框架,区别是Scrum只包含管理实践,而极限编程则同时涵盖工程和管理实践。

上世纪90年代,PC软件流行和第四代编程语言的出现,面向对象和设计模式运动的兴起,让小型项目的开发蓬勃发展。同时,互联网应用和开源社区兴起,有别于传统的开发模式不断涌现,优秀个人在程序开发中的作用得到凸显。

这些因素都让非传统开发方法有了实验的土壤。其结果是,一方面质量问题层出不穷,这部分促使了源自全面质量管理体系的CMM/CMMI在这一时间的繁荣和推广;另一方面也产生了许多不同于传统方法的有效实践,让业界看到了新的可能。敏捷运动这时已经呼之欲出,它既是对传统的反叛,也是对野蛮生长的规范。

2001年2月,17位轻量级软件工程方法的代表人物,齐聚美国犹他州的雪鸟滑雪胜地,其中也包括Scrum和极限编程的几位发明人。在两天的会议之后,发布了后来产生巨大影响的敏捷宣言(参见 http://agilemanifesto.org/),敏捷宣言陈述了他们共同认可的关于软件的开发方法的理念,同样重要的是他们找到了敏捷这个词来总领这些理念。

敏捷概念在2001年出现,可以说适逢其时。当时,一方面传统方法变得越来越臃肿笨重,却没有解决软件危机;另一方面,人类正在进入互联网时代,软件业对响应变化和创新的要求迅速升级,这是更根本的原因,毕竟需求才是行业发展的最好助推剂。

敏捷宣言发布后,敏捷成为了一场运动,被迅速地推广和应用。但是,早期的敏捷专注的还是研发交付阶段,站在业务的角度,它的目标是帮助产品和研发团队提升敏捷响应能力,也就是:“更早地交付价值,更灵活地应对变化”。然而,在企业数字化转型的背景之下,IT不仅要保证产品的开发和交付,系统部署和运行同样重要。DevOps继承了敏捷开发的理念,又补上了运维的部分,但DevOps绝不是开发和运维的简单叠加,这个我们后面还会说到。

精益产品开发的出现

精益思想最早源自生产制造领域,根源于丰田在产品制造中管理和工程实践。1988年《斯隆管理评论》的一篇论文《精益生产系统的胜利》比较了西方的生产方式和丰田生产方式在效率和质量上巨大差距,挑战了规模生产带来效益的神话。从此,精益开始进入西方的视野,逐渐成为现代管理学的重要组成部分。

《精益思想》一书将精益定义为:有效组织人类活动的一个新的思维方法,目标是消除浪费,以更多地交付有用的价值。书中进一步总结了精益的5个原则,同时也是精益的5个实施步骤:

  1. 定义价值:站在用户的视角定义什么是价值,并把它描述为具体产品或服务;
  2. 识别价值流:识别和映射创造价值的流程步骤,消除不增加用户价值的步骤和活动;
  3. 让价值持续流动:让用户价值在流程步骤中流动起来,使它们持续、顺畅地流向最终用户;
  4. 用户价值拉动:由用户价值拉动流动,避免不带来用户价值的浪费;
  5. 精益求精:不断重复1到4步。追求完美的价值和价值流动,消除过程中所有浪费。

在这个抽象层次上,精益思想超越了其诞生的制造业,深刻影响了各个行业,如精益政务、精益医院、精益领导力、精益服务业、精益供应链、精益教育等,这其中也包含产品开发。事实上,主流的敏捷开发方法都直接受到了精益思想的影响,遵循精益的基本原则。

与此同时,精益产品开发作为独立的实践体系也快速发展,它聚焦两个方面的目标——价值交付过程和价值本身。

第一,关注价值交付过程。其中比较有代表性的是“精益看板方法”,它由David Anderson在2006年左右基于自己的实践发展而来,并在2010年出版的《看板方法》一书中加以系统总结。“看板方法”是精益思想在软件开发中具体应用。它从可视化需求交付端到端的价值流开始,通过系统的实践提升需求的流动效率,并确保流动的过程质量,从而实现端到端的系统改进。

“看板方法”为代表的这一类精益实践的本质改变是:从关注资源的使用效率,转变为关注价值的流动效率。这也带动使用者从过去的局部优化转向端到端的全局优化。

第二,关注价值本身。其中比较有代表性的是“精益创业”。精益创业的实践最初由Steve Blank基于自己和其他硅谷的创业实践发展而来,Eric Ries在《精益创业》一书中对精益创业的理念和实践,做了系统的总结,并让精益创业的理念迅速普及。

精益创业认为创业是一个巨大不确定的过程,其最大的浪费是交付没用的(不能解决用户问题,或带来业务成功)的东西。为此它把价值的探索和发现融入产品交付过程,提出了著名的“开发-测量-学习”循环。循环从关于市场和产品的待检验概念开始。接下来,循环的第一步是开发用以验证这一概念的最小可行产品(MVP,Minimal Viable Product);第二步:基于最小可行产品收集市场、用户的反馈,并获得测量数据;第三步:用数据验证假设,证实或证伪它们,并加以调整,产生经实证的认知。然后,进入下一循环,持续探索商业模式和产品功能设计。

精益创业的影响远超初创公司,事实上“精益创业”一书中把“创业”定义为在不确定的环境下,开创新的业务和产品。而“不确定性”似乎已成为今天IT领域身处环境的共性,也因此,MVP、“开发-测量-学习”循环等理念已成为IT创新领域公认的实践,并且围绕精益创业发展出一套完整的创新实践体系,如精益数据分析、精益客户开发、精益交付设计等。

探索和发现有效的价值,并让价值顺畅流动。围绕这两个目标,并遵循精益思想,精益产品开发已经发展成为系统的实践。精益思想对DevOps的影响也非常根本,DevOps三原则就完全遵循了精益思想。

DevOps的诞生

最初,敏捷和精益社区都还只是关注开发侧的实践和行为,运维并没有成为他们关注的重点。但是,光有系统开发是不够的,开发完的系统必须即时顺利部署,并连续稳定运行才能够实现价值。而传统上,这部分是由运维负责的。

从价值的角度,开发加运维才构成相对完整的IT价值链。当然更完整的还应该包含业务,这是后话了,这还不是早期DevOps社区关注的重点。DevOps诞生之初,解决的问题还是开发和运维之间的问题,这是影响IT价值链的最突出问题。

在传统的IT组织下,开发团队(Dev)和运维团队(Ops)之间诉求不同——开发团队(尤其是敏捷团队)追求变化,运维团队追求稳定。双方往往存在利益的冲突,比如,精益和敏捷的团队把持续交付作为目标,而运维团队则为了线上的稳定而强调变更控制。部门墙由此建立起来,这当然不利于IT价值的最大化。

2009年,在美国举行的第二届Velocity大会上,来自Flickr公司的John Allspaw和Pauk Hammond发表了一个演讲《10+ Deploys Per Day: Dev and Ops Cooperation at Flickr》。在这个演讲中,Allspaw和Hammond以角色扮演的方式,生动地表现了开发与运维之间的各种冲突。演讲中出现很多金句,如“It's not my code, it's your machines!”,这深刻反映了Dev和Ops关系的现状。接着,他们又展示了如何通过消除开发团队(Dev)和运维团队(Ops)的壁垒,双方通力合作,借助工具和文化的改变让软件的发布和运维变得持续和高效。

这次演讲是DevOps发展历程中的标志性事件。它提出了正确的问题——为了更快交付和实现价值,必须弥合开发和运维之间的鸿沟,并给出了解决方案——为了弥合开发和运维之间的鸿沟,需要在文化、工具和实践方面的系列变革。

同一年,比利时独立IT咨询师Patrick Debois看到这个演讲,受到启发,组织了第一届DevOpsDays,DevOps正式登上舞台,DevOps的理念开始流行,其相关的工具和实践也快速发展。期间以容器化和自动编排调度为代表的云原生技术的出现也极大加速了这一进程。今天,DevOps已成为企业数字化的核心能力之一,是对IT交付和运行的基本要求。

其后,在《凤凰项目》和《DevOps实践指南》两本书中,Gene Kim等人总结了DevOps实施的三步工作法,它们分别是:

流动原则:聚焦IT系统的整体价值流,全局优化,保证价值从左(上游)到右(下游)的快速流动。

反馈原则:创建从左到右的反馈循环,并缩短反馈周期和放大反馈效果。这样,就可以更快的响应和理解内外部客户,并即时获取改进所需要的知识。

持续的实验和学习原则:创建承担风险、持续实验并从错误中学习的文化,在不断的尝试中精进能力,并提高系统的韧性。

Kim等人认为,这三步工作法是其他一切DevOps流程、实践的价值和哲学根基,所有DevOps模式都可以从这三个原则派生而来。

稍作探究,就能够觉察,DevOps三步工作法是精益原则的翻版。更确切的讲,是精益原则在IT开发和运行上下文中的具体实例。事实上,DevOps的基础部分,体现了精益原则的影响和应用。

总结

回顾敏捷、精益和DevOps的发展,我们可以得出如下两个结论。

第一,DevOps 是敏捷开发实践的自然发展。敏捷开发的目标是“更早地交付价值,更灵活地应对变化”。敏捷运动始于开发侧,但运维侧如果不做改变,就一定会成为瓶颈,最终敏捷的目标还是无法达成。为了让敏捷实践发挥真正的价值,开发运维的联动就势在必行了。

第二,DevOps是精益思想应用在IT领域的必然结果。精益产品开发的目标是:“顺畅的交付有效价值”,精益思想则要求端到端的系统优化和持续的改进。而开发和运维是系统的两个重要组成部分,缺一不可。DevOps三原则,正是精益思想在IT开发运维领域的具体实例。

最后,从精益思想出发,我们可以看到DevOps的必然发展方向,那就是向业务侧延伸。业务是产品开发和运维的源头,完整的价值流必须从源头开始。这不是预测,而是正在发生的事实,大部分DevOps的实施都已经将业务侧包含在内,成为BizDevOps,只不过DevOps的称谓已经深入人心,我们也将延续DevOps的说法,但缺省情况下,它包含了业务在内。

DevOps发展的同时,数字化转型也成为了企业界的共识,大部分企业数字化框架都把DevOps作为最核心的能力之一,DevOps的影响范围也不断扩大,成为力求提升数字化能力的企业必然选择。下一节我们将在数字化转型这一背景下,分析DevOps要解决的根本问题。

原文链接

本文为阿里云原创内容,未经允许不得转载。

为什么DevOps的必然趋势是BizDevOps相关推荐

  1. 阿里巴巴DevOps实践指南 | 为什么DevOps的必然趋势是BizDevOps?

    简介:从精益思想出发,我们可以看到DevOps的必然发展方向,那就是向业务侧延伸.业务是产品开发和运维的源头,完整的价值流必须从源头开始.这不是预测,而是正在发生的事实 编者按:本文源自阿里云云效团队 ...

  2. 为什么说DevOps的必然趋势是BizDevOps?

    简介:从精益思想出发,我们可以看到DevOps的必然发展方向,那就是向业务侧延伸.业务是产品开发和运维的源头,完整的价值流必须从源头开始.这不是预测,而是正在发生的事实 编者按:本文源自阿里云云效团队 ...

  3. DevOps发展的9个趋势

    DevOps包含了太多方面的技术和实践,很难通过一个统一的工具链来描述其发展.即便如此,我们仍然可以从ThoughtWorks技术雷达的条目变动中看出一些趋势.今年,我有幸作为主编参与了最新一期技术雷 ...

  4. 2022 年及以后值得关注的 18 大 DevOps 趋势

    本文分析了 2022 年及以后的未来 DevOps 趋势,这将为初创公司.小型企业和企业实现数字化转型. 1. GitOps:实现 DevOps 最佳实践的框架 GitOps 是添加到 DevOps ...

  5. 深度解读中国DevOps现状调查报告(2022)

    在刚刚结束的7月末,由中国信息通信研究院.中国通信标准化协会联合主办的2022 首届XOps产业生态峰会上,现场发布了<中国DevOps现状调查报告(2022)> 该报告作为国内DevOp ...

  6. AI+DevOps正当时

    随着业务复杂化和人员的增加,开发人员和运维人员逐渐演化成两个独立的部门,他们工作地点分离,工具链不同,业务目标也有差异,这使得他们之间出现一条鸿沟.而发布软件就是将一个软件想从鸿沟的这边送去那边,这之 ...

  7. 云原生 DevOps,模型化应用交付能力的重要性

    撰稿:溪洋 审核校对:天元.海珠 编辑&排版:雯燕 云原生正在成为企业业务创新和解决规模化挑战的加速器. 云原生带来的变革绝不限于基础设施和应用架构等技术层面,更是对于研发理念.交付流程和 I ...

  8. 云原生 DevOps,模型化应用交付能力很重要

    简介:DevOps 文化及其支撑其落地实践的自动化工具与平台能力在云原生架构渐为普及的背后,发挥了关键的价值. 撰稿:溪洋 审核校对:天元.海珠 编辑&排版:雯燕 云原生正在成为企业业务创新和 ...

  9. 大规模开发团队如何实现DevOps转型? 来自微软全球开发平台工程团队的实践经验

    微软全球开发平台工程团队从敏捷到DevOps的转型 2013年11月13日,我们宣布了Visual Studio2013,以及微软研发云Visual Studio Online (VSO)的正式商用. ...

最新文章

  1. 段错误linux 内存不够,c - 为什么我的程序在linux-gcc而不是mingw-gcc上出现段错误? - 堆栈内存溢出...
  2. 可能是基于 Hooks 和 Typescript 最好的状态管理工具
  3. GCDAynscSocket简单使用-客户端
  4. module ‘urllib‘ has no attribute ‘unquote‘(url解码)
  5. 测试beta测试_重新想象不断变化的自动化世界中的Beta测试
  6. vue-cli配置移动端自适应
  7. 深度学习笔记(一):logistic分类
  8. 接雨水c语言算法精解,详解一道高频面试题:接雨水
  9. JavaWeb网上购物系统项目源码+论文
  10. 通用的业务编码规则设计实现
  11. ktv点歌系统服务器怎样连接,ktv设备与显示屏怎么连接
  12. C#习题之标准体重测试
  13. Cannot resolve method ‘create‘ in ‘String‘
  14. win10计算机打印机共享怎么设置方法,Win10系统怎么设置打印机共享?Win10系统打印机共享设置教程...
  15. SQL 万能本地文件分析工具
  16. 解决中端投资痛点,“轻中端”能否抢占投资价值高地?
  17. Unity3D鼠标、WASD空格键盘控制摄像机及esc键退出C#脚本
  18. 团队管理5--技术管理如何兼顾技术
  19. 2023第九届中国国际养老服务业博览会5月5日在北京召开
  20. Blender和Rizom UV的桥接插件:B2RUVL

热门文章

  1. JAVA入门级教学之(数据转换规则)
  2. android fragment framelayout,framelayout中fragment的切换
  3. java语言特点解释类_Java语言特点
  4. mysql binary安装_mysql的二进制安装方式
  5. 山东省计算机考试无法报名,山东省2017年9月全国计算机等级考试报名事项公告...
  6. str计算机中代表什么,STR到底是待机还是休眠
  7. snmp 获得硬件信息_信息系统项目管理师(三)
  8. 双线性插值算法c 语言实现,双线性插值 - CristianoC的个人空间 - OSCHINA - 中文开源技术交流社区...
  9. python3设置编码_python3 中文乱码与默认编码格式设定方法
  10. 无符号有符号乘法_刘帅嵌入式系统-乘法指令