关于DevOps理解和总结

news2025/1/17 4:57:26

DevOps是研发领域最近几年最热的一个概念。参加过一些讲座,也看过不少的书籍,经常听到以下说法:

  • DevOps是没有明确定义的,一千个研发心中就有一千个Devops;
  • DevOps是一种文化,每个团队的DevOps实践都不一样;
  • DevOps就是消除Dev与Ops之间的壁垒,让两者通力合作;
  • DevOps就是业内敏捷、精益等各种优秀实践的混合体;
  • DevOps就是工具和自动化

相信很多人听完和我感觉一样,感觉自己就像是盲人摸象,管中窥豹,在似懂非懂的边缘徘徊,无法系统地了解到DevOps的全貌,对DevOps的理念和实践清晰了很多。


1. DevOps是什么?

我个人给梳理和总结出DevOps定义:

DevOps是对敏捷软件开发和精益生产思想的一种演进,应用于IT端到端的价值流中,使得业务基于现代信息技术,并通过文化、组织和技术变革来获得更大成功。

  1. DevOps不是一个完全新的概念。它是由于敏捷软件开发方法的演进,加上以代码形式管理基础设施成为可能,逐渐产生出IT管理的新方法,最后激发出现了DevOps。它的理论基础是敏捷软件开发+丰田精益生产。
  2. DevOps的本质在于基于这样一个事实,即IT部门与业务部门所考虑的不仅是软件开发,而是整个价值链。价值链始于产品同学产生的新想法,经过开发、测试和部署,最后到运维。
  3. 一般来说,信息技术能为组织带来更多收益(通过创造新机会或者消除现有约束)、降低风险并优化资源。
  4. DevOps并不是简单的流程自动化。DevOps领先者的经验表明,文化(人)、组织(流程)、技术(自动化)这几个因素都至关重要。

在这里插入图片描述

2. 为什么要实施DevOps?

DevOps不是某个作者或大师想象出来的管理框架或产品,而是诞生于对实际问题的解决。目前不同组织应用DevOps所试图解决的问题,主要有3类。

2.1. 缩短市场响应时间

传统IT部门遵循“为成本而优化(optimize for cost)”的模式,而DevOps组织遵循“为速度而优化(optimize for speed)”的模式(这句话说到互联网人的心坎里了)。具体包括:

  • 减少批量大小
  • 减少交接次数
  • 持续识别和消除损失
  • 自动化所有例行的运维工作
  • 团队内部专业人员可替换
  • 自给自足的团队(包含了产品、开发、测试、运维、安全人员等,上线产品不需要依赖外部团队)

2.2. 减少技术债务

技术债务在团队成员选择一个非最优的方式解决问题以缩短开发时间时产生。这是一个自然的过程,问题是累计的非最优方案导致了IT产出的逐步退化,并且因此降低了产品质量。DevOps讲求持续重构程序代码,重视在操作中取得经验,以及与构造新功能同等重要的、计划一些用来消除之前所造成的瓶颈的工作;DevOps强烈推荐 “应用尽可能频繁地直面问题” 的实践,以防出现这样一种情况:每个人都知道问题就在那儿,却没有人着手去处理。

2.3. 消除系统脆弱性

在组织中最重要的和业务收益相关的系统往往是最脆弱的。由于业务中断的高风险,对停机的零容忍,以及持续发生的变更和改进与这些系统关联紧密,所以降低这些系统的脆弱性非常困难。

DevOps以最激进的方式反对脆弱性:完全排除。

  • 在DevOps中,代码和系统作为一个整体,在某个时刻是全功能的, 如果接下来的变更破坏了性能,就要马上回滚并且让系统持续正确地工作
  • DevOps的实践,有意引入混乱和不稳定性到生产环境,目标IT系统必须以独立和快速的方式做出反应,探测到故障并恢复它们的正常运作,理想情况下最终用户是无感知的,当然数据也不会丢失。

3. DevOps的理论基础

DevOps不是凭空产生的,而是有其坚实的理论基础。主要包括, 精益和敏捷 两大部分。

3.1. 精益生产

丰田式生产管理(Toyota Management),或称丰田生产体系(Toyota Production System,TPS)由日本丰田汽车公司的副社长大野耐一创建,是丰田公司的一种独具特色的现代化生产方式。精益生产( Lean Production)管理是美国麻省理工学院给丰田式生产管理的名称。

精益生产的理论框架包含 一个目标 两大支柱 一大基础

3.1.1. 一个目标

“一个目标”是低成本、高效率、高质量地进行生产,最大限度地使顾客满意。

3.1.2. 两大支柱

“两大支柱”是准时化与人员自主化。

准时化(JIT-Just in time)生产。即以市场为龙头在合适的时间、生产合适的数量和高质量的产品,JIT需要以拉动生产为基础,以平准化(Leveling System)为条件。所谓拉动生产是以看板管理为手段,采用“取料制”即后道工序根据“市场”需要进行生产,对本工序在制品短缺的量从前道工序取相同的在制品量,从而形成全过程的拉动控制系统,绝不多生产一件产品。平准化是指工件的被拉动到生产系统之前要进行人为的按照加工时间、数量、品种进行合理的搭配和排序,使拉动到生产系统中的工件流具有加工工时上的平稳性,保证均衡生产,同时在品种和数量上实现混流加式运动,起到对市场多品种、小批量需要的快速反应和满足功能。

人员自主化是人员与机械设备的有机配合行为。生产线上产生质量、数量、品种上的问题机械设备自动停机,并有指示显示,而任何人发现故障问题都有权立即停止生产线,主动排除故障,解决问题。该系统在丰田被称为安灯系统,也是蓝盾质量红线服务的设计思想来源,具体可见《质量红线,研发流程中的安灯系统!》

3.1.3. 一大基础

“一大基础”是指改善(Improvement)。改善是丰田式生产管理的基础。据说丰田的主管如果两周之内团队没有任何改善将会直接被辞退。 这里的改善是指这样的含义:

  1. 从局部到整体永远存在着改进与提高的余地。在工作、操作方法、质量、生产结构和管理方式上要不断地改进与提高。
  2. 消除一切浪费。丰田式生产管理哲理认为不能提高附加价值的一切工作(包括生产过剩、库存、等待、搬运、加工中的某些活动,多余的动作,不良品的返工等)都是浪费。这些浪费必须经过全员努力不断消除。每一种浪费对应到IT领域都是可以找到对应关系的,例如库存,可以对应我们平时部分未完成的工作,这些工作不能给最终客户带来价值,但是资源已经被消耗了。具体如下图所示。
  3. 连续改善 (Continuous Improvement)是当今国际上流行的管理思想。它是指以消除浪费和改进提高的思想为依托,对生产与管理中的问题,采用由易到难的原则,不断地改善、巩固,改善、提高的方法,经过不懈的努力,以求长期的积累,获得显著效果。

在这里插入图片描述

3.2. 敏捷

敏捷是大家比较熟悉的,它的很多核心思想和实践已经融入到了我们日常的工作中。不过敏捷并不是用户故事卡片、站立会议或开发软件的方法,而是一套价值观和原则。

我们不妨一起来回顾一下敏捷宣言:

  • 个体和交互 优先于 流程和工具
  • 可工作的软件 优先于 面面俱到的文档
  • 客户协作 优先于 合同谈判
  • 响应变化 优先于 遵循计划

也就是说,尽管右项有其价值,我们更重视左项的价值。

DevOps很大程度上基于敏捷,并把“敏捷开发”的想法延展到了整体的敏捷IT交付、整个组织、整个流程以及整个价值链。

在这里插入图片描述

4. 核心原则是价值流

价值流源自精益,这个概念本身已经使用了很多年。 我们从创造价值以相应客户请求的角度来考虑组织中的工作,将完成客户请求所需要实施的相关行动,按照顺序排列起来,这就是价值流。 而致力于可视化价值流的工作被称为“价值流映射”。
在这里插入图片描述

如上图所示,就是一个软件开发过程的价值流图样例。 其中有几个关键指标:

  • 前置时间 Lead Time (LT)。即每个环节从开始到交付所花费的时间。
  • 处理时间 Process Time (PT)。即每个环节真正处理事情的时间。LT-PT就是等待时间,应该越短越好。PT/LT也是一个实际操作中经常用到的值,用于衡量队列和等待损耗时间的情况。
  • 完整性与准确性占比 Percent Complete and Accurate (%C/A )。可以理解为返工情况,约接近于100%说明返工越少。

在进行价值流映射之后,我们可以很好识别出浪费,以便于进行下一步的改进,无论是工具还是文化上的。在改进之后,也可以通过前后价值流的对比,来评估出改进的收益。可以看到价值流图就像是施工图,也像是指南针,这也是DevOps咨询师进入一个团队后首先做价值流分析的原因。

5. 关键实践

日常标准化实践。

  • 发布是日常活动(想发就发,发得响亮)
  • 发布是业务决定的(产品想要三更发,何必留版到午时)
  • 一切都是自动化的(代码检查、测试、发布、监控都要自动化)
  • 事件要立即解决(出现基础故障先立即回滚,因为上一个版本肯定是稳定可用的)
  • 缺陷是立即被修复的(让缺陷在最短路径内闭环,通过自动化的手段发现系统问题并立即修复)
  • 流程是持续更新的(通过价值流识别出流程短板并立刻消除,让有问题的流程尽可能重复执行)
  • 工作可视化(通过看板可视化构建拉动系统,改善任务透明度,改善对剩余工作以及当前状态的了解,改善优先级排序,降低交接次数)
  • 限制在制品(一次只做一件事,促进前置时间估算,减少切换工作丢失的生产率)
  • 减少批次大小(小步快跑,而不是憋大招。一是可以改善工作的节奏,使其变得更稳定并且在各方面都更可预测;二是缩短前置时间,加快产出的交付;三是小的批次减少进行中的任务总数;四是小的批次降低了缺陷的数量,这样即使返工浪费也少。)
  • 留意运维需求(DevOps中,最主要的关注点从可靠性转移到可恢复性,或反脆弱性,即系统应该能检测到并更正故障,恢复到正常的运维状态,过程中没有明显的性能损失,同时也不会影响到用户)

6. 我的感悟

6.1. 让缺陷在最短路径内闭环

在DevOps的关键实践中,要求“尽早检测并修正缺陷”。因为随着交付流水线阶段向后移动,识别和消除缺陷的成本也随之增加。缺陷一旦流入生产环境,将会造成重大的损失,那么DevOps快速交付的好处也失去意义了。在Capers Jones的《Applied Software Measurement》一书中,就通过曲线图对在不同研发阶段的缺陷修复成本进行了较为细致的说明。
在这里插入图片描述
CodeCC 一直以来主张的“让缺陷在最短路径内闭环”,与上述思想是非常一致的。 因为在CodeCC推出之前,很多团队都没有使用代码检查工具,不少缺陷流入系统测试等后续阶段才被发现,导致返工和扯皮。

我们从创造价值以相应客户请求的角度来考虑组织中的工作,将完成客户请求所需要实施的相关行动,按照顺序排列起来,这就是价值流。

CodeCC本身的产品进化也经历了三个阶段,也是朝着 更短路径内闭环 尽早检测并修正缺陷 的思路去走的。

  • 第一阶段是推出CodeCC独立服务,主打每日定时构建的代码检查;
  • 第二阶段是与流水线(如蓝盾流水线)融合,能够支持代码提交、代码合入、版本转测、发布上线等环节之前的代码检查。
  • 第三阶段是研发质量保证的进一步“左移”,推出了IDE插件PreCI。从上述图中可以看到编码阶段产生了85%的缺陷,如果能在代码提交到代码库之前,在IDE中进行充分的代码检查、单元测试、自测等质量保证活动,将对产品质量有很大的提升。

如果工具检查出了缺陷,但是部分开发同学就是不处理,那该怎么办呢?那么质量红线就可以派上大用场了。它可以为关键节点(即控制点)设置质量标准,控制交付流水线的行为,使得每一阶段的入口/出口质量都必须符合质量标准的一种服务。不满足质量标准的产出不得发布到线上。

6.2. 尽可能频繁地直面问题

有一本著名畅销书叫做《反脆弱》。在DevOps中,也有一个质朴实用的反脆弱思想,让我很受启发,那就是“尽可能频繁地直面问题”。

曾经有一位朋友,打篮球右腿受伤了,做了膝关节半月板手术。在休养了一个月之后,逐步可以抛开拐杖了,但是右腿肌肉已经肉眼可见地缩小了,而且他心里也有阴影,对右腿有些丧失信心。于是他从轻轻用力,到慢慢走路,再到正常走路,再到小跳,再到大跳,再到上篮和跳投,随着他不断去使用它,感受它的状态,修正它的姿势,最终朋友重拾自信,重回球场。

其实DevOps中的反脆弱也是同理,一个流程经常出问题,那就把它再做一遍,再做一遍,出了问题就立即优化其中的问题,不断重复做。为什么一开始大家都讲持续集成(CI)呢,因为瀑布流开发模式下把代码合并到一起,发布到测试/生产环境,巨坑无比,要花费很长的时间。既然集成到环境已经成为了一个坑,那么我就每天都集成,提交了代码就集成,失败了我就立刻修复报错,太慢了我就优化流程和工具。持续集成千百遍,蓦然回首,一天发几个版本也不成问题了。

DevOps反脆弱对于工具化和自动化的要求还是很高的,类似于蓝盾DevOps这样的平台必不可少。因为重复做一件事,工具是最擅长的。而且要持续监控是不是有问题,并且立即回滚,没有一套自动化的体系,人工是很难去做的了。

6.3. DevOps不只是打破研发和运维的壁垒

很多网上的文章和视频把DevOps简单地解释成合并Dev和Ops,打破开发与运维的壁垒。我觉得这个观点是比较片面的。 DevOps是一整套面向研发效能的思想和原则,它的应用绝不止研发和运维这2个角色。

以安全为例,在各类公司大家都是非常重视软件安全的。在Exin课程中老师就举了个例子:有时会出现开发同学写的软件未通过安全团队审计,最终被打回重做。那么怎么解决这个问题呢?大家可以一起脑暴下。

我们公司安全做得还是很不错的。因此结合实际工作经验,我个人思考如下: 从组织(流程)的角度,要实现“尽早检测并修正缺陷”的实践,应该尽早进行安全宣导和审计。安全同学更早地参与到研发流程中去,例如立项、技术选项、代码检视等,进行安全准则宣导,及早地发现并暴露风险。 从文化(人)的角度,要实现“自给自足的团队”,需要研发同学更懂安全,能够了解安全准则,选用更加安全的技术。安全同学更懂研发,能够为安全漏洞提供好的修复建议。 从技术(自动化)的角度,可以把安全审计工具化、自动化,融入到整个研发流程中去。比如开发同学写了一个高危函数或使用了某个高危组件,还没提交代码,PreCI就已经检查出来了。而这个安全漏洞未被修复的话,他是无法合入代码到主干的,更无法转测或发布了。这块公司安平与CodeCC联合推出的啄木鸟安全检查系列规则集,就是这个思路。

因此可以看到,DevOps的思想是一整套体系,可以应用到研发的各个领域中。安全是其中一个例子,对于产品经理、测试同学的工作,也是有指导意义的。DevOps的核心是价值流,讲究的是从用户提出需求开始,到最后交付给用户价值。在价值流中任何环节存在浪费,都应该被优化。因此我们大部分互联网人的工作,其实都在DevOps里了。

7. 疑问和思考

暂无

8. 参考文档

暂无

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

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

相关文章

spring基本使用

文章目录 1. ioc(Inversion of Control) | DI(Dependency Injection)(1) maven坐标导包(2) 编写配置文件bean.xml(3) 配置bean(4) 配置文件注入属性 2. DI(dependency injection) 依赖注入(setter)其他属性(1) 对象属性注入(2) 数组属性输入(3) 集合属性注入(4) map集合注入(5)…

JAVASE8中基本数据类型

本篇文章基于有过一部分的C语言基础的,还望大家理解 在进入到学习之前我们必须要清楚的是在JAVASE中数据类型与C语言中的数据类型基本上是相同的,接下来我们先来对8中数据类型进行简要介绍,他们分别是: 如果大家之前了解过C语言那么对于基本数…

【FP7208-RGBWY五路调光方案】 单节锂电池LED升压恒流驱动调光芯片FP7208,PWM内部转模拟调光,无频闪顾虑低亮无抖动

文章目录 方案背景 二、RGBWY五路调光调色芯片FP7208 1.芯片参数 2.单颗芯片五路调光应用原理 调光调色信号注意事项: 3.五路调光应用电路图DEMO实物图 4.RGBWY调光调色详解 总结 方案背景 近年来随着技术的不断进步,越来越多的产品需要适应小型化和便携…

系统试运行报告(上线运行报告Word原件2024)

一、试运行目的 软件项目试运行的主要目的是在实际应用环境中对软件系统进行全面检验,确保其满足设计要求和用户需求,同时发现和解决潜在的问题,为正式投入使用做好准备。通过试运行,我们可以: 验证软件系统的稳定性…

ONES 功能上新|ONES Wiki 新功能一览

支持在 ONES Wiki 页面中使用分栏进行横向排版,丰富排版方式,帮助用户以更丰富的版式展示内容。 应用场景: 页面的布局对内容的阅读有很大的影响。当页面中有图文混排的需求时,可以通过分栏来组织页面结构,以更清晰、更…

LabVIEW学习记录 - 实时显示时间

LabVIEW操作 - 实时显示时间 在程序框图,选择函数->定时->格式化日期/时间字符串 该函数的使用手册说明: 鼠标选择“格式化日期/时间字符串”->创建->输入控件->输入格式 查看时间代码格式: 编程->定时->获取时间日…

cad中快速计算多个矩形面积的方法

1、输入命令reg,选中矩形创建面域 2、输入命令uni,选中刚刚创建的面域,组合成一个面域 3、输入命令:LI ,选中面域,即可查看面积和周长 需注意的一点,开始创建的矩形或者多段线要在一个面内,就是…

word常用的文件格式有哪些?word格式文件删除了怎么恢复

在数字文档处理的世界中,Microsoft Word以其丰富的格式选项和强大的编辑功能赢得了广大用户的青睐。但与此同时,误删或丢失Word格式文件的情况也时有发生。本文将深入探讨Word常用的文件格式有哪些,同时分享如何恢复误删的Word文件&#xff0…

浏览器的工作原理

参考:渲染页面:浏览器的工作原理 - Web 性能 | MDN (mozilla.org) Web 性能 | MDN (mozilla.org) Web性能影响因素 首先有两个,一个是网络延迟,一个是大部分情况下浏览器都是单线程执行的 保障页面快速加载的最大威胁是网络延迟…

MyBatisPlus详解(二)条件构造器Wrapper、自定义SQL、Service接口

文章目录 前言2 核心功能2.1 条件构造器2.1.1 Wrapper2.1.2 QueryWrapper2.1.3 UpdateWrapper2.1.4 LambdaQueryWrapper 2.2 自定义SQL2.2.1 基本用法2.2.2 多表关联 2.3 Service接口2.3.1 IService2.3.1.1 save2.3.1.2 remove2.3.1.3 update2.3.1.4 get2.3.1.5 list2.3.1.6 co…

主成分分析PCA原理以及特征

一、PCA原理 原始数据 x ∈ R N x\in R^N x∈RN,经过PCA投影后的数据 y A x , y ∈ R P yAx,y\in R^P yAx,y∈RP 其中, A ∈ R P N A\in R^{P\times N} A∈RPN 二、PCA特征 1、降低数据的维度 2、提取数据的特征…

imx6ull----IIC--AP3216C

概念 IIC总共有两条线,一条是 SCL(串行时钟线),另外一条是 SDA(串行数据线),这两条数据线需要接上拉电阻,总线空闲的时候 SCL 和 SDA 处于高电平。 I2C 总线标准模式下速度可以达到 100Kb/S,快速模式下可以达到 400Kb…

嵌入式Linux driver开发实操(十七):Linux Media Infrastructure userspace API

视频和无线电流媒体设备使用的Linux内核到用户空间API,包括摄像机、模拟和数字电视接收卡、AM/FM接收卡、软件定义无线电(SDR)、流捕获和输出设备、编解码器设备和遥控器。典型的媒体设备硬件如下: 媒体基础设施API就是用于控制此类设备的,分五个部分。 第一部分V4L2 API…

Postman 工具发送请求的技巧与实践

在开发和测试 API 时,发送 JSON 格式的请求是一个常见需求。 在 Postman 中构建和发送 JSON 请求 创建一个新的请求 首先,在 Postman 启动界面上找到并点击 “New” 按钮,选择 “HTTP Request” 来开始新建一个请求。这一步骤允许你定义请…

解决office2016专业增强版 “你的许可证并非正版,你可能是盗版软件的受害者“

问题描述:安装完office后,用kms已经激活成功,但是一直在上面显示“你的许可证不是正版,并且你可能是盗版软件的受害者,使用正版Office,避免干扰并保护你的文件安全。” 尝试过网上的各种方法都没用,后面发现是用的HEU …

低代码开发之腾讯云微搭工具

低代码开发之腾讯云微搭工具 微搭简介诞生缘由开发模式如何创建组件模块介绍实例讲解url传参级联联动使用事件其他方法调用数据源方法 callDataSource触发流程 callProcess 引入外部css/js代码编辑器的使用Handler 方法使用介绍Style 用法示例LifeCycle 生命周期介绍 数据模型方…

2024年航空航天与工业技术国际学术会议(IACAIT 2024)

2024年航空航天与工业技术国际学术会议(IACAIT 2024) 2024 International Conference on Aerospace and Industrial Technology 一、【会议简介】 2024年航空航天与工业技术国际学术会议,将汇集全球顶尖专家,探讨前沿技术。 这次会议主题为“航空航天与…

idea - 配置模板消息

这是要用到的模板代码 " $DATE$ 自定义表示参数,后续会定义参数的值" " $END$ 表示应用该模板后,光标的位置"/**** author lyj* date $DATE$*/Testpublic void test$END$(){}这是配置完之后,输入test然后回车&#xff0c…

如何使用 Dolphin Anty 设置代理

文章目录 Dolphin Anty是什么? 为什么要使用代理? 使用 Dolphin Anty 浏览器设置 Smartdaili 代理 与动态住宅代理集成 与数据中心代理集成 Dolphin Anty 中的配置 Smartdaili 代理与 Dolphin Anty 反检测浏览器 Dolphin Anty 和 Smartdaili 代理服务可帮助你增强数字身份保护…

LearnOpenGL(五)之变换

一、缩放(Scaling) 把缩放变量表示为 (S1,S2,S3), 将任意向量 (x,y,z) 定义一个缩放矩阵,缩放公式: 二、位移 和缩放矩阵一样,在44矩阵上有几个特别的位置用来执行特定的操作,对于位移来说它们…