文:姚冬(华为云DevCloud首席技术布道师,资深DevOps与精益/敏捷专家,金融解决方案技术Leader,中国DevOpsDays社区核心组织者)

前言

敏捷是什么?DevOps是什么?两者有什么区别?

持续集成不是XP里面的么,怎么DevOps也有持续集成?

我们之前在做敏捷转型,现在又开始DevOps转型,到底啥情况?

总觉得与其去纠缠一个定义,不如踏踏实实做点儿事情。

没必要太纠结,因为两者都在演进,两者也越来越像,否则不会有这些疑问。

原本没想写这个话题,客户问起也只是简单说明。

只是最近不断有人问起,也看到有一些误导性的言论,所以也许还是有必要说说自己的观点。

这个话题注定讨论不清,也注定会有不同的意见;

所有文字仅代表我一家之言,没必要扣什么帽子;

我本人是先做敏捷后做DevOps的,这是我的知识背景;

欢迎讨论,如果初衷是好的话,道理越辩越明;

恕不奉陪,如果是以混淆视听为目的论战。

观点

先说我的观点:

  • 敏捷与DevOps初衷,目的是为了解决问题,不是为了树碑立牌,更不是为了占领地盘。
  • 两者并非泾渭分明,也没有一条线能够划出来,说哪边是敏捷,哪边是DevOps。
  • 讨论敏捷与DevOps,目的是为了了解两者之间的内在联系,而不是为了划清界限。
  • 常常在讨论的,是狭义的敏捷与DevOps概念,而广义的敏捷与DevOps,已经趋同。
  • 两者都是试图去解决相同,或相近的问题,只是革命尚未成功,同志还需一起努力。
  • 傻傻不分清楚,是不想分太清,没必要分清楚,难得糊涂。

狭义的敏捷和DevOps

狭义的敏捷与DevOps,也许是你想听到的两者区别。

强调一下,这里说的,注意是狭义而不是狭隘;有狭义就有广义,如果你坚持固守狭义的概念,会不会有点儿狭隘了呢?

传统的敏捷是为了解决第一个gap,即业务与开发之间的鸿沟。通过敏捷宣言中强调的个体和互动、可工作的软件、客户合作、响应变化,以及12条原则中的尽早的以及连续的高价值交付、自组织团队、小批量交付、团队节奏、可改善可持续的流程、保持沟通等,以及包括Scrum、Kanban、XP在内的众多管理和工程实践,来实现开发与业务之间的频繁沟通,快速响应变化。

而DevOps的出现,是为了解决图中的第二个gap,即开发与运维之间的鸿沟。前端的敏捷的确是快了,却发现因为Dev与Ops之间的隔阂,无法真正的将价值持续的交付给客户。

开发侧很快,运维侧太稳,这个就是我们常说的开发与运维之间固有的、根因的冲突,即下图中的混乱之墙。开发(尤其是“敏捷”后),求的是快速响应变化;运维,求的是稳定、安全和可靠的服务;更重要的,两者的KPI度量指标,绩效考核激励机制不同,决定了如果为达成各自的局部目标,势必存在无法调和的根因冲突。

DevOps的出现,就是为了打破开发与运维之间的部门墙,从这点上来说,我支持DevOps是敏捷在运维侧的延伸这一说法。只是,敏捷与DevOps,都已经不再是原来的那个敏捷和DevOps了;世界变化太快,问题域发生了变化,解决方案域自然也要随之变化。

广义的敏捷和DevOps

敏捷的好处是,有一个敏捷宣言,宣告其诞生;敏捷的缺点,也许也是因为有敏捷宣言;敏捷宣言并不应该被拿来约束和限制敏捷的范围;敏捷宣言也说拥抱变化,宣言诞生于2001年,时至今日,应该也当然会与时俱进,只是后来再没有这样的一个标志性的事件来做声明。

DevOps的不好之处,是没有一个明确的定义;DevOps的好处,却也正是因为没有一个明确的定义做限制,所以拿来主义,一切好的东西,都可以为我所用。

DevOps是个筐,什么都可以往里装,敏捷又何尝不是呢?(这里全是褒义)

我是2012年在IBM接触到DevOps的概念的,IBM对DevOps有D2O和E2E的概念,D2O,Dev to Ops,即经典、狭义的DevOps概念,解决的是Dev到Ops的鸿沟;E2E,End to End,即端到端、广义的DevOps,是以精益和敏捷为核心的,解决从业务到开发到运维,进而到客户的完整闭环。

还有DevOps的6C概念,即Continuous Planning, Continuous Integration, Continuous Testing, Continuous Deploy, Continuous Release, Continuous Feedback,事实上,也是端到端广义的DevOps。

维基百科上的总结,DevOps的出现,有四个关键驱动力

  • 互联网冲击要求业务的敏捷
  • 虚拟化和云计算基础设施日益普遍
  • 数据中心自动化技术
  • 敏捷开发的普及

业务敏捷,开发敏捷,运维侧自动化,以及云计算等技术的普及,几乎打穿了从业务到开发到运维(当然里面还有测试),所以虽然字面上是Dev到Ops,事实上,开玩笑的说,已经是BizDevTestOpsSec了,即从狭义的D2O,前后延伸到E2E,端到端广义的DevOps了。

能力成长模型

DevOps能力成长模型,是Nicole Forsgren博士,Jez Humble以及Gene Kim三位大师,基于多年DevOps现状报告的基础上,汇聚出来的能力模型。(上图是刘征老师基于Accelerate一书,以及多年DevOps现状报告的基础上,二次创新,汇总出来的模型)

从能力模型上来看,所有的连线汇聚点,也就是最终的目的,是组织效能。软件交付和运维效能,是敏捷与DevOps共同的目标。

其中持续交付是狭义DevOps的核心理念,横跨了架构、开发、测试、运维等角色;持续交付的核心开发实践,也涵盖了架构管理,版本管理,分支策略,测试自动化,部署发布,运维监控,信息安全,团队授权,数据库管理等多个维度,其中不乏传统我们常说的敏捷相关实践,尤其是下图中XP极限编程的很多实践,半数以上在DevOps里都能找到。

能力成长模型,除了持续交付,还包括精益领导力、精益产品开发、精益管理、组织文化与学习氛围。DevOps已远远不是CI/CD那么简单,CALMS原则,也横跨了文化、管理、精益与技术。

敏捷宣言的十二条原则,SAFe的九大原则,以及DevOps的CALMS原则,也是彼此相互融合。SAFe有借鉴DevOps的理念和方法,DevOps又采纳敏捷的思想和实践,大家又都以精益为思想核心。到底谁包含谁,谁比谁大,彼此的界限在哪里呢?

小结

方法也好,实践也好,其价值应该由客户价值来体现。对客户而言,需要解决的问题,是端到端的,是全局而不是局部优化;

所以,是什么,不重要;能解决什么,要解决什么问题,很重要。

DevOps的核心,是精益与敏捷的思想和原则,所以你说到底是敏捷包含了DevOps呢,还是DevOps包含了敏捷呢?我觉得没必要纠缠,两者原本已经无法区分,也无需区分。

敏捷也好,DevOps也罢,能抓住耗子就是好猫。具体应该叫什么,你为什么要那么纠结?

DevOps是集大成者,是各种好的原则和实践的融合;敏捷又何尝不是如此,2001年的17位雪鸟大师,各自在践行着不同的敏捷框架和实践,敏捷宣言和原则,原本就是一次融合;2003年Mary Poppendieck和Tom Poppendieck的精益软件开发方法,即便是已经有敏捷宣言的前提下,不也一样纳入敏捷开发的范畴么;敏捷也是在不断前行,DevOps与敏捷殊途同归,是同一问题的不同分支,最终汇集到同一个目标。

一个好的方法论,应该是与时俱进,兼容并蓄的;应该是开放的,演进的而不是固化的。

方法论如此,学习和实践方法论的人,更应该如此,以一颗开放的心态,接纳一切合理的存在。

参考资料:

  • ”http://www.slideshare.net/JrmeKehrli/devops-explained-72091158“
  • “DevOps能力成长模型”
  • IBM DevOps资料
  • 维基百科

关于作者

姚冬 资深DevOps与精益/敏捷专家,软件工程专家;中国DevOpsDays社区核心组织者之一;Exin DevOps Professional认证讲师;凤凰沙盘认证讲师;SAFe SPC规模化敏捷咨询师;认证Scrum Master, SAFe Agilist;曾任IBM DevOps产品线大中华区技术总监,金融行业Technical Leader;现任华为云软件开发云首席技术布道师。

华为云DevCloud作为一站式云端DevOps平台,集成华为近30年研发实践和前沿理念,面向开发者提供研发工具服务,让软件开发简单高效。现支持5人以下额度范围内,可以免费使用,并且可以预约免费的产品演示和技术交流,详情查看华为云官网

【华为敏捷/DevOps实践】7. 敏捷,DevOps,傻傻不分清楚【华为云技术分享】的更多相关文章

  1. 《DevOps实践:驭DevOps之力强化技术栈并优化IT运行》

    DevOps实践:驭DevOps之力强化技术栈并优化IT运行 主旨 这本书并非坐而论道,而是介绍了DevOps全流程中的许多实践,以及相应工具的运用.虽然随着时代的推移,工具将来可能会过时,但是这些实 ...

  2. 融云技术分享:融云安卓端IM产品的网络链路保活技术实践

    本文来自融云技术团队原创分享,原文发布于“ 融云全球互联网通信云”公众号,原题<IM 即时通讯之链路保活>,即时通讯网收录时有部分改动. 1.引言 众所周知,IM 即时通讯是一项对即时性要 ...

  3. DevOps on DevCloud|如何采用流水线践行CI/CD理念【华为云技术分享】

    [摘要] 持续集成/持续交付(CI/CD,Continuous Integration/Continuous Deployment)在DevOps CMALS理念中具有支柱性地位,因而CI/CD流水线 ...

  4. 不服跑个分:ARM鲲鹏云服务器实战评测——华为云鲲鹏KC1实例 vs. 阿里云G5实例【华为云技术分享】

    原文链接:https://m.ithome.com/html/444828.htm 今年一月份,华为正式发布了鲲鹏920数据中心高性能处理器,该处理器兼容ARM架构,采用7纳米制造,最高支持64核,主 ...

  5. 【华为云技术分享】MongoDB经典故障系列五:sharding集群执行sh.stopBalancer()命令被卡住怎么办?

    [摘要] MongoDB sharding集群执行sh.stopBalancer()命令时被卡住怎么办?别慌,华为云数据库来给您支招,收下这份方案指南,让您分分钟远离被自建MongoDB数据库支配的恐 ...

  6. 【华为云技术分享】跟唐老师学习云网络 : Kubernetes网络实现

    当今K8s独霸天下之时,咱们站在更高的角度,好好的看看K8s网络是以什么理念构筑的.以及一个容器集群的好保姆,是如何分别照顾 南北流量和东西流量的. 一.简单介绍下Kubernetes 略..容器集群 ...

  7. Spring Boot 最流行的 16 条实践解读!【华为云技术分享】

    置顶:华为云618大促火热进行中,全场1折起,免费抽主机,消费满额送P30 Pro,点此抢购. Spring Boot是最流行的用于开发微服务的Java框架.在本文中,将与大家分享自2016年以来笔者 ...

  8. [动图演示]Redis 持久化 RDB/AOF 详解与实践【华为云技术分享】

    Redis 是一个开源( BSD 许可)的,内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件.它支持的数据类型很丰富,如字符串.链表.集 合.以及散列等,并且还支持多种排序功能. 什么叫持 ...

  9. 华为云实战开发】5.如何快速创建免费Git代码仓库【华为云技术分享】

    1 文章目的 本文主要帮助已经掌握或者想要掌握Git的开发者,如何更好的应用Git,以及更好的将Git与DevCloud结合应用. 2 概述 2.1 版本控制系统介绍 从狭义上来说,版本控制系统是软件 ...

随机推荐

  1. 【POJ3278】Catch That Cow

    本题传送门 本题知识点:宽度优先搜索 题意很简单,我们把FJ与奶牛看作是在一条数轴上的点,奶牛固定在K点,FJ的移动有三种,分别是向前一格,向后一格以及跳到当前格的两倍去.问FJ花费最少的时间到达奶牛 ...

  2. 第10组 Alpha冲刺(2/4)

    队名:凹凸曼 组长博客 作业博客 组员实践情况 童景霖 过去两天完成了哪些任务 文字/口头描述 继续学习Android studio和Java 完善项目APP原型 展示GitHub当日代码/文档签入记 ...

  3. 转载:关于思科交换机、路由器如何关闭telnet 开启ssh服务

    等保测评要求: 必须关闭telnet服务,开启ssh服务 即用ssh方式登录网络设备,而不允许用telnet. 输入密码.en 再次输入密码.sh run 这些常规动作就不再赘述. 1.关闭telne ...

  4. 表格样式、表格css、

    .mytab{ border-collapse: collapse;}.mytab tr,.mytab td,.mytab th{ text-align: center; border: 1px so ...

  5. Net core学习系列(七)——Net Core中间件

    一.什么是中间件(Middleware)? 中间件是组装到应用程序管道中以处理请求和响应的软件. 每个组件: 选择是否将请求传递给管道中的下一个组件. 可以在调用管道中的下一个组件之前和之后执行工作. ...

  6. What is the difference between UNION and UNION ALL?

    What is the difference between UNION and UNION ALL? UNION removes duplicate records (where all colum ...

  7. qt5 qmake开发

    mkdir hello helloworld.cpp #include <QPushButton> #include <QApplication> int main(int a ...

  8. Tomcat 9 管理界面配置

    Tomcat9 在conf/tomcat_user.xml配置后,还是出现如下错误 然后修改tomcat9/webapps/manager/META-INF的context.xml文件

  9. 安装和使用nltk

    安装 参考:https://www.cnblogs.com/zrmw/p/10869325.html 分词:注意先分句再分词,这些对象均来自nltk.tokenize库 word_tokenize 导 ...

  10. java多线程(三)线程的安全问题

    1.1. 什么是线程安全 如果有多个线程同时运行同一个实现了Runnable接口的类,程序每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的:反之,则是线程不 ...