DevOps VS 敏捷的区别是什么?

news2024/12/24 8:14:48

 原文链接:DevOps VS 敏捷_软件开发生产线 CodeArts_理论实践_DevOps概览

当我们面对敏捷和DevOps的时候,总会不可避免的思考下面这些问题:

  • 敏捷是什么?DevOps是什么?两者有什么区别?
  • 持续集成不是XP里面的么,怎么DevOps也有持续集成?
  • 我们团队之前在做敏捷转型,现在又开始DevOps转型,这两者有什么区别?

其实这些问题并没必要太过纠结,因为敏捷和DevOps两者都在不断演进,两者也的确越来越像。

这个话题注定讨论不清,也注定会有不同的意见。本文也仅从方法论和实践的角度,为开发者简单论述敏捷与DevOps。希望每位读者都会从本文中得到自己的理解与启发 ,帮助大家在敏捷与DevOps这两条路上走的更远。

先说本文的观点:

▪ 敏捷与DevOps初衷、目的是为了解决问题,而不是为了树碑立牌,更不是为了占领地盘。

▪ 两者并非泾渭分明,也没有一条线能够划出来,说哪边是敏捷,哪边是DevOps。

▪ 讨论敏捷与DevOps,目的是为了了解两者之间的内在联系,而不是为了划清界限。

▪ 经常被讨论的,是狭义的敏捷与DevOps概念,而广义的敏捷与DevOps,已经趋同。

▪ 两者都是试图去解决相同,或相近的问题,只是还没有能一招解决所有问题的办法出现。

接下来, 让我们从狭义的角度看二者的区别。

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

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

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

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

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

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

DevOps是个筐,什么都可以往里装,敏捷又何尝不是呢?

通常人们对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大师曾基于多年DevOps现状报告,汇聚出来了一个DevOps能力成长模型。在DevOps能力模型中,DevOps的最终的目的是组织效能,软件交付和运维效能是敏捷与DevOps共同的目标。

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

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

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

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

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

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

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

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

本文参考资料

  • 《DevOps explained》 Jérôme Kehrli
  • 《Accelerate》

本文更新于2022年,如有错误欢迎指正

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1472569.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JS基本知识

JS作用域的内存模型 每个函数都有各自的作用域、作用域链、变量对象、执行环境。 一、函数初始化:3作用域链。 函数被调用:1作用域、2变量对象、4执行环境。执行结束后,1作用域、3作用域链、4执行环境被销毁、2变量对象(如果函…

【前后端的那些事】文件上传组件封装

文章目录 效果前端代码后端代码组件封装 效果 前端代码 /views/file/file.vue <template><el-row><el-uploadv-model:file-list"fileList"class"upload-demo"multiple:auto-upload"false":on-preview"handlePreview"…

Java SpringBoot 整合 MyBatis 小案例

Java SpringBoot 整合 MyBatis 小案例 基础配置&#xff08;注意版本号&#xff0c;容易报错&#xff09; pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http…

面试经典150题 -- 二叉树搜索树 (总结)

总的链接 : https://leetcode.cn/studyplan/top-interview-150/ 二叉搜索树相关概念 : 二叉搜索树是一个有序树。 若它的左子树不空&#xff0c;则左子树上所有结点的值均小于它的根结点的值&#xff1b;若它的右子树不空&#xff0c;则右子树上所有结点的值均大于它的根结…

SWIFT:自我认知微调

文档:https://github.com/modelscope/swift/blob/main/docs/source/LLM/%E8%87%AA%E6%88%91%E8%AE%A4%E7%9F%A5%E5%BE%AE%E8%B0%83%E6%9C%80%E4%BD%B3%E5%AE%9E%E8%B7%B5.md ​​​​​​代码: Swift是如何把自我认知数据集融合到训练集中呢? 1:相关的3个参数

阿里云ECS u1实例性能怎么样?199元一年

阿里云服务器ECS u1实例&#xff0c;2核4G&#xff0c;5M固定带宽&#xff0c;80G ESSD Entry盘优惠价格199元一年&#xff0c;性能很不错&#xff0c;CPU采用Intel Xeon Platinum可扩展处理器&#xff0c;购买限制条件为企业客户专享&#xff0c;实名认证信息是企业用户即可&a…

设计模式(二)单例模式的七种写法

相关文章设计模式系列 面试的时候&#xff0c;问到许多年轻的Android开发他所会的设计模式是什么&#xff0c;基本上都会提到单例模式&#xff0c;但是对单例模式也是一知半解&#xff0c;在Android开发中我们经常会运用单例模式&#xff0c;所以我们还是要更了解单例模式才对…

SQL注入漏洞解析--less-46

我们先看一下46关 他说让我们先输入一个数字作为sort,那我们就先输入数字看一下 当我们分别输入1&#xff0c;2&#xff0c;3可以看到按照字母顺序进行了排序&#xff0c;所以它便是一个使用了order by语句进行排序的查询的一种查询输出方式 当输入时出现报错提示&#xff0c;说…

YOLOv9图像标注和格式转换

一、软件安装 labelimg安装&#xff08;anaconda&#xff09; 方法一、 pip install labelImg 方法二、 pip install PyQt5 -i https://pypi.tuna.tsinghua.edu.cn/simple/ pip install pyqt5-tools -i https://pypi.tuna.tsinghua.edu.cn/simple/ pip install lxml -i ht…

【迪文屏幕】上电后默认显示背景图片是0

以往的开发&#xff0c;背景图片都是从0开始命名的&#xff0c;这次鬼使神差的没有使用0&#xff0c;而是从1开始命名&#xff0c;上电后不显示&#xff0c;咨询了技术支持&#xff0c;屏幕上电后默认显示0图片&#xff0c;增加了0图片之后&#xff0c;显示正常。 当然有一种情…

浅谈 TCP 三次握手

文章目录 三次握手 三次握手 首先我们需要明确&#xff0c;三次握手的目的是什么&#xff1f; 是为了通信双方之间建立连接&#xff0c;然后传输数据。 那么建立连接的条件是什么呢&#xff1f; 需要确保通信的双方都确认彼此的接收和发送能力正常&#xff0c;满足这个条件&a…

PDF文件转换为图片

现在确实有很多线上的工具可以把pdf文件转为图片&#xff0c;比如smallpdf等等&#xff0c;都很好用。但我们有时会碰到一些敏感数据&#xff0c;或者要批量去转&#xff0c;那么需要自己写脚本来实现&#xff0c;以下脚本可以提供这个功能~ def pdf2img(pdf_dir, result_path…

通过二叉树例题深入理解递归问题

目录 引入&#xff1a; 例1&#xff1a;二叉树的前序遍历&#xff1a; 例2&#xff1a; N叉树的前序遍历&#xff1a; 例3&#xff1a;二叉树的最大深度&#xff1a; 例4&#xff1a;二叉树的最小深度 例5&#xff1a;N叉树的最大深度&#xff1a; 例6&#xff1a;左叶子…

Python实用技巧:处理JSON文件写入换行问题

Python实用技巧&#xff1a;处理JSON文件写入换行问题 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程 &#x1f448; 希望得到您的订阅…

springboot启动自动配置

1.自定义项命名启动类规范&#xff1a; 功能在前名字在后比如 aliyun-oss-spring-boot-starter starter表示启动 springboot版本需要2.7.5 2.创建springboot工程把该删除的文件删除 3.启动类 pom文件导入自定义配置类依赖 比如 <!--第2步--><!-- 启动类 pom…

CSP-202209-3-防疫大数据

CSP-202209-3-防疫大数据 解题思路 一、数据结构定义 对于大模拟的题&#xff0c;合适的数据结构选择十分重要&#xff0c;正确的数据结构选择能够有效的提升解题效率 // 漫游消息结构体 struct RoamingData {int date, user, region; };vector<RoamingData> roamin…

阿里云服务器2024年最新价格表,高性价比配置任你选

随着云计算技术的不断发展&#xff0c;越来越多的企业和个人开始选择云服务器来搭建自己的业务平台。作为国内领先的云服务提供商&#xff0c;阿里云一直致力于为广大用户提供稳定、高效、安全的云计算服务。2024年&#xff0c;阿里云再次升级其服务器产品线&#xff0c;推出了…

FMM 笔记:st-matching(colab上执行)【官方案例解读】

在colab上运行&#xff0c;所以如何在colab上安装fmm&#xff0c;可见FMM 笔记&#xff1a;在colab上执行FMM-CSDN博客 st-matching见论文笔记&#xff1a;Map-Matching for low-sampling-rate GPS trajectories&#xff08;ST-matching&#xff09;-CSDN博客 0 导入库 from…

MySQL 数据优化技巧:提升百万级数据聚合统计速度

MySQL 数据优化技巧&#xff1a;提升百万级数据聚合统计速度 MySQL 数据优化技巧&#xff1a;提升百万级数据聚合统计速度摘要引言索引优化1. 使用合适的索引类型2. 聚簇索引的应用 查询优化3. 减少数据检索范围4. 避免全表扫描 数据库设计优化5. 合理划分数据表6. 使用分区表 …

nginx设置缓存时间

一、设置缓存时间 当网页数据返回给客户端后&#xff0c;可针对静态网页设置缓存时间&#xff0c;在配置文件内的http段内server段添加location&#xff0c;更改字段expires 1d来实现&#xff1a;避免重复请求&#xff0c;加快访问速度 第一步&#xff1a;修改主配置文件 #修…