文:姚冬(华为云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. yarn和npm的对比,以及项目中使用方式

    相比npm 的优点 1.npm安装是串行,而yarn是并行,速度大大提升 2.已经下载过的包会被缓存,无需重复下载,更关键的是,支持离线安装 3.精准的版本控制,加上验证每个包的完整性,保证每次安装的 ...

  2. nginx 反向代理之 proxy_buffering

    proxy_buffering主要是实现被代理服务器的数据和客户端的请求异步. 为了方便理解,我们定义三个角色,A为客户端,B为代理服务器,C为被代理服务器. 当proxy_buffering开启,A ...

  3. navicat提示无法连接解决办法

    1.错误如下图: 2.这个是由于mysql中user表中未设置允许该ip访问导致,解决办法: 1)查下user表:select user,host from user; 这张表就是mysql.user ...

  4. exit命令

    exit命令用于退出当前shell,在shell脚本中可以终止当前脚本执行. 常用参数格式:exit n退出.设置退出码为n.(Cause the shell to exit with a statu ...

  5. GlusterFS常用设置命令

    可信存储池(Trusted Storage Pool)创建存储池例如要创建一个包含3个服务器的存储池,则需要从第一个服务器server1中把另外两个服务器加入存储池中:# gluster peer p ...

  6. [BUAA软工]Alpha阶段项目展示

    [冰多多]Alpha项目展示 冰多多项目: 语音coding 助手, alpha阶段目标: 语音辅助输入 一. 团队成员的简介和个人博客地址 成员 角色 个人博客地址 卓培锦 PM, 后端开发 htt ...

  7. springboot框架在容器加载完成之后执行某个方法

    问题描述: 想在websocket实现的Handler中执行一些初始化操作,但是初始化操作使用到了@Autowired自动注入的变量,而且是保护类型.第一个想法是放到Handler构造函数中执行,但是 ...

  8. lastlogon

    function Get-ADUserLastLogon($userName) { $dcs = Get-ADDomainController -Filter {Name -like "*& ...

  9. 支付宝小程序开发——H5跳转到小程序(获取小程序页面的链接)

    前言: 这个问题支付宝小程序官方文档并没有专门说明,钉钉群的官方技术支持给了个开发者社区的帖子,详见:如何跳转小程序. 如果配置的页面没有参数还好,不会出问题,如果有参数,很可能配出来的链接无法正常获 ...

  10. IfcRoot

    IfcRoot is the most abstract and root class for all entity definitions that roots in the kernel or i ...