简介:从精益思想出发,我们可以看到DevOps的必然发展方向,那就是向业务侧延伸。业务是产品开发和运维的源头,完整的价值流必须从源头开始。这不是预测,而是正在发生的事实。
编者按:本文源自阿里云云效团队出品的《阿里巴巴DevOps实践指南》,前往:https://developer.aliyun.com/...,下载完整版电子书,了解阿里十年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到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要解决的根本问题。
阿里巴巴合伙人和业界多位大佬力荐、何勉、陈鑫等17位阿里资深技术专家联袂出品、阿里十年DevOps经验沉淀总结、阿里巴巴DevOps落地实践一本通。
前往:https://developer.aliyun.com/...,下载完整版电子书。
欢迎大家使用云效,云原生时代新DevOps平台,通过云原生新技术和研发新模式,大幅提升研发效率。现云效公共云基础版不限人数0元使用。