DevOps到底是什么意思?看完这篇不要再问我了

2023-10-31

提到DevOps这个词,我相信很多人一定不会陌生。

作为一个热门的概念,DevOps近年来频频出现在各大技术社区和媒体的文章中,备受行业大咖的追捧,也吸引了很多吃瓜群众的围观。

那么,DevOps是什么呢?

有人说它是一种方法,也有人说它是一种工具,还有人说它是一种思想。更有甚者,说它是一种哲学。

越说越玄乎,感觉都要封神啦!DevOps这玩意真的有那么夸张吗?它到底是干嘛用的?为什么行业里都会对它趋之如骛呢?

今天这篇文章,小枣君就和大家好好聊一聊这个DevOps。

     DevOps的起源    

这个故事有点长,从头开始讲起吧。

上个世纪40年代,世界上第一台计算机诞生。从诞生之日起,它就离不开程序(Program)的驱动。而负责编写程序的人,就被称为“程序员”(Programmer)。

程序员是计算机的驾驭者,也是极其稀缺的人才。那个时候,只有高学历、名校出身的人,才有资格成为程序员,操控计算机。

随着人类科技的不断发展,PC和Internet陆续问世,我们进入了全民拥抱信息化的时代。越来越多的企业开始将计算机作为办公用的工具,用以提升生产力。而普通个人用户也开始将计算机作为娱乐工具,用以改善生活品质。

于是,计算机的程序,开始变成了一门生意。程序,逐步演进为“软件(software)”,变成了最赚钱的产品之一。

在软件产业里,程序员有了更专业的称谓,叫做“软件开发工程师(Software Development Engineer)”,也就是我们常说的“码农”。

我们知道,一个软件从零开始到最终交付,大概包括以下几个阶段:规划、编码、构建、测试、发布、部署和维护。

最初,程序比较简单,工作量不大,程序员一个人可以完成所有阶段的工作。

随着软件产业的日益发展壮大,软件的规模也在逐渐变得庞大。软件的复杂度不断攀升。一个人已经hold不住了,就开始出现了精细化分工。

码农的队伍扩大,工种增加。除了软件开发工程师之外,又有了软件测试工程师软件运维工程师

分工之后,传统的软件开发流程是这样的:

软件开发人员花费数周和数月编写代码,然后将代码交给QA(质量保障)团队进行测试,然后将最终的发布版交给运维团队去布署。所有的这三个阶段,即开发,测试,布署。

早期所采用的软件交付模型,称之为“瀑布(Waterfall)模型”

瀑布模型,简而言之,就是等一个阶段所有工作完成之后,再进入下一个阶段。

这种模型适合条件比较理想化(用户需求非常明确、开发时间非常充足)的项目。大家按部就班,轮流执行自己的职责即可。

但是,项目不可能是单向运作的。客户也是有需求的。产品也是会有问题的,需要改进的。

随着时间推移,用户对系统的需求不断增加,与此同时,用户给的时间周期却越来越少。在这个情况下,大家发现,笨重迟缓的瀑布式开发已经不合时宜了。

于是,软件开发团队引入了一个新的概念,那就是大名鼎鼎的——“敏捷开发(Agile Development)”

敏捷开发在2000年左右开始被世人所关注,是一种能应对快速变化需求的软件开发能力。其实简单来说,就是把大项目变成小项目,把大时间点变成小时间点,然后这样:

有两个词经常会伴随着DevOps出现,那就是CI和CD。CI是Continuous Integration(持续集成),而CD对应多个英文,Continuous Delivery(持续交付)或Continuous Deployment(持续部署)。

美其名曰:“持续(Continuous)”,其实就是“加速——反复——加速——反复……”,这样子。

画个图大家可能更明白一点:

敏捷开发大幅提高了开发团队的工作效率,让版本的更新速度变得更快。

很多人可能会觉得,“更新版本的速度快了,风险不是更大了吗?”

其实,事实并非如此。

敏捷开发可以帮助更快地发现问题,产品被更快地交付到用户手中,团队可以更快地得到用户的反馈,从而进行更快地响应。而且,DevOps小步快跑的形式带来的版本变化是比较小的,风险会更小(如下图所示)。即使出现问题,修复起来也会相对容易一些。

虽然敏捷开发大幅提升了软件开发的效率和版本更新的速度,但是它的效果仅限于开发环节。研发们发现,运维那边,依旧是铁板一块,成为了新的瓶颈。

运维工程师,和开发工程师有着完全不同的思维逻辑。运维团队的座右铭,很简单,就是“稳定压倒一切”。运维的核心诉求,就是不出问题。

什么情况下最容易出问题?发生改变的时候最容易出问题。所以说,运维非常排斥“改变”。

于是乎,矛盾就在两者之间集中爆发了。

这个时候,我们的DevOps,隆重登场了。

     DevOps到底是什么    

DevOps这个词,其实就是Development和Operations两个词的组合。它的英文发音是 /de'vɒps/,类似于“迪沃普斯”。

DevOps的维基百科定义是这样的:

DevOps是一组过程、方法与系统的统称,用于促进开发技术运营质量保障(QA)部门之间的沟通、协作与整合。

这个定位稍微有点抽象,但是并不难理解。反正它不是某一个特定软件、工具或平台的名字。

从目标来看,DevOps就是让开发人员和运维人员更好地沟通合作,通过自动化流程来使得软件整体过程更加快捷和可靠。

破墙工具

很多人可能觉得,所谓DevOps,不就是Dev+Ops嘛,把两个团队合并,或者将运维划归开发,不就完事了嘛,简单粗暴。

注意,这个观点是不对的。这也是DevOps这些年一直难以落地的主要原因。

想要将DevOps真正落地,首先第一点,是思维转变,也就是“洗脑”。不仅是运维的要洗,开发的也要洗。员工要洗,领导更要洗。

DevOps并不仅仅是组织架构变革,更是企业文化和思想观念的变革。如果不能改变观念,即使将员工放在一起,也不会产生火花。

除了洗脑之外,就是根据DevOps思想重新梳理全流程的规范和标准

在DevOps的流程下,运维人员会在项目开发期间就介入到开发过程中,了解开发人员使用的系统架构和技术路线,从而制定适当的运维方案。而开发人员也会在运维的初期参与到系统部署中,并提供系统部署的优化建议。

DevOps的实施,促进开发和运维人员的沟通,增进彼此的理(gan)解(qing)。

在思维和流程改变的同时,想要充分落地DevOps,当然离不开软件和平台的支持。

目前支持DevOps的软件实在是太多了。限于篇幅,就不一一介绍了。话说回来,现在DevOps之所以被吹得天花乱坠,也有这些软件和平台的功劳,可以趁机卖钱啊。

DevOps生态圈中令人眼花缭乱的工具

上述这些关键要素里面,技术(工具和平台)是最容易实现的,流程次之,思维转变反而最困难。

换言之,DevOps考验的不仅是一家企业的技术,更是管理水平和企业文化。

对比前面所说的瀑布式开发和敏捷开发,我们可以明显看出,DevOps贯穿了软件全生命周期,而不仅限于开发阶段。

下面这张图,更明显地说明了DevOps所处的位置,还有它的价值:

     DevOps的发展现状    

DevOps这个词来源于2009年在比利时根特市举办的首届DevOpsDays大会,为了在Twitter上更方便的传播,由DevOpsDays缩写为DevOps。

目前,DevOps处于高速增长的阶段。尤其是在大企业中,DevOps受到了广泛的欢迎。

根据2018年的调查发现,74%的受访者已经接受了DevOps,而前一年这一比例为66%。

越大的企业,越喜欢DevOps。包括Adobe、Amazon、Apple、Airbnb、Ebay、Etsy、Facebook、LinkedIn、Netflix、NASA、Starbucks、Walmart、Sony等公司,都在采用DevOps。

如今,DevOps几乎已经成为了软件工程的代名词

DevOps迅猛发展,相关专业人才的薪资待遇也跟着水涨船高。

根据调研,DevOps工程师在美国的平均年薪为130000美金,在中国平均年薪也在40万-50万区间,能力强者年薪百万也是比比皆是。

数据来自招聘网站

薪资的猛涨,又带动了IT工程师们学习和认证的热潮。

DevOps的认证目前最受欢迎的就是EXIN DevOps Master和EXIN DevOps Professional。这些认证的培训费用不低,但是仍然吸引了很多人踊跃报名。

EXIN DevOps认证体系

     DevOps与虚拟化、容器、微服务    

这几年云计算技术突飞猛进,大家应该对虚拟化、容器、微服务这些概念并不陌生。当我们提到这些概念的时候,也会偶尔提及DevOps。

它们之间有什么联系呢?

其实很简单。

大家可以设想一下,如果要对一项工作进行精细化分工,我们是对一个大铁疙瘩进行加工方便?还是拆成一块一块进行加工更加方便?

显然是拆分之后会更加方便。

所谓“微服务”,就是将原来黑盒化的一个整体产品进行拆分(解耦),从一个提供多种服务的整体,拆成各自提供不同服务的多个个体。如下图所示:

单体式架构(Monolithic)→ 微服务架构(Microservices)

微服务架构下,不同的工程师可以对各自负责的模块进行处理,例如开发、测试、部署、迭代。

而虚拟化,其实就是一种敏捷的云计算服务。它从硬件上,将一个系统“划分”为多个系统,系统之间相互隔离,为微服务提供便利。

容器就更彻底了,不是划分为不同的操作系统,而是在操作系统上划分为不同的“运行环境”(Container),占用资源更少,部署速度更快。

明白了吧?虚拟化和容器,其实为DevOps提供了很好的前提条件。开发环境和部署环境都可以更好地隔离了,减小了相互之间的影响。

这也是DevOps为什么09年时不火,现在越来越火的一个主要原因之一。

      最后的话     

天下武功,无坚不摧,唯快不破。

时代发展到现在,客户的需求瞬息万变,市场的风向也难以预测。作为企业,想要生存下去,只有让自己变得更快。作为员工,必须让自己眼光更加长远,内心更加包容。

近期必读:

复杂(Complex)问题与繁杂(Complicated)问题,你怎么选

KPI驱动的DevOps转型可行吗?

你需要的不是一颗银弹,而是一个银盘——敏捷与DevOps有用吗?

小说体敏捷/DevOps转型教科书

和实战经验分享

购书指南


纸质书、电子书在京东当当亚马逊、微信读书等渠道已全面上架,搜索关键字“猎豹 敏捷”即可找到。

有声书已登录喜马拉雅、微信读书,适合路上听书的你。

关注公众号看其他原创作品

觉得好看,点个“在看”或转发给朋友们,欢迎你留言

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

DevOps到底是什么意思?看完这篇不要再问我了 的相关文章

  • vue项目怎么修改项目名称

    1 在package json文件中 修改name成你想要的新名字 2 删掉node modules文件夹 3 修改根目录下面的index html文件中的title 改完以后 vue文件中的title就改过来了 4 重新下载依赖 npm
  • 业务架构视图该怎么画?

    业务架构全景视图是快速理解业务运作形态的重要工具 该视图不应以IT视角绘制 业务元素及其结构应是绘制重点 商业模式画布中业对务元素进行了标准化 将其业务活动展开可得到一份精炼的业务全景视图 两者可互为补充 由于篇幅限制和认知曲线 应该控制全
  • 2020年 IEEE VIS 科学可视化与体渲染论文整理与分析

    因为最近工作的关系 需要研究一下IEEE VIS中2017年以后的与我之前主要方向 体渲染 医学可视化 有关的论文 我把这些年全部的论文进行了筛选和梳理 总共筛选出57篇论文 打算写一个文章来记录这些内容 这个栏目是2020年的5篇论文的介
  • 把Collection转化为XML

    IList
  • zlib库源码编译

    文章目录 zlib库源码编译 简介 源码编译 Windows vs2017 64位版本编译 zlib库源码编译 简介 该篇博客主要用于记录zlib库的源码编译方法 根据自己在源码编译过程中踩得坑进行记录 既便于后续自己学习 也希望能够帮助他
  • SDK 开发中见到的问题

    问题1 Could not build module MySDK 原因是 在pubulic的头文件中导入的头文件都需要导入到pubulic中 m文件中头文件不需要导入 问题2 Missing submodule subHeader 原因是
  • PyDev Eclipse使用技巧说明

    PyDev Package Explorer 创建项目 在开展工作之前 需要创建一个新的项目 在 Eclipse 菜单栏中 选择 File gt New gt Project gt Pydev gt Pydev Project 单击 Nex
  • 求函数【线段树】【2020牛客寒假算法基础集训营2】

    首先 这个区间很容易让人想到是区间操作 那么就是来推公式吧 我们从中不难发现 从两个值到四个值 可以是相当于 其中 两个 括号中的值是不是有点相似 我们是不是可以将它放在线段树上来进行维护了 include
  • CVPR 2022

    作者 cocoon 编辑 3D视觉开发者社区 前言 FAIR又出新作了 一篇 2020年代的卷积网络 的横空出世 让国内外CV圈的眼光都聚焦于此 不少大牛都纷纷下场参与讨论 研究团队以Transformer的一些设计原则以及训练技巧为标 尽
  • 引用与指针有什么区别?

    引用与指针有什么区别 指针和引用都是地址的概念 指针指向一块内存 它的内容是所指内存的地址 引用是某块内存的别名 程序为指针变量分配内存区域 而不为引用分配内存区域 指针使用时要在前加 引用可以直接使用 引用在定义时就被初始化 之后无法改变
  • Java 异常

    目录 1 自己不处理 交给调用者处理 1 1 throws 声明一个异常 1 2 throw 抛出一个异常 2 自己处理异常 2 1 try catch 2 2 try catch的常见问题 3 Throwable 的成员方法 4 自定义异
  • [2021.9.13][OpenGL ES 3.0编程指南]1 OpenGL ES 3.0简介

    1 1 OpenGL ES 3 0 OpenGL ES 3 0实现了具有可编程着色功能的图形管线 由两个规范组成 OpenGL ES 3 0 API规范和OpenGL ES着色语言3 0规范 图1 1展示了OpenGL ES 3 0 图形管
  • java网络编程01——网络基本概念

    阅读 java网络编程 等诸多资料个人所思所想读书笔记 1 网络 因特网 两种方式回答问题 其一是描述因特网的基本构成即构成因特网的基本硬件和软件组件 其二根据分布式应用提供服务的联网基础设施描述因特网 因特网是世界范围的计算机网络 即是一
  • 服务器光信号闪红灯是什么意思,路由器光信号闪红灯是什么意思

    现在不少宽带在安装之后还需要配备一个路由器用来接收光纤信号 在路由器上会有几个指示灯 如果你的路由器信号灯一直闪红灯知道是什么意思吗 一起来了解一下吧 闪红灯的意思 宽带 费 现在宽带基本都是后付费模式 因为 费的时间太 运营商直接关掉了宽
  • 矩阵通高效监管企业新媒体矩阵,账号集中管理与运营数据分析

    越来越多的企业在全网布局旗下账号 希望通过社媒传播矩阵 以内容连接产品与用户 达成增加销售线索或扩大品牌声量的目的 构建矩阵的优势在于 内容能多元发展 聚集不同平台流量 多种营销渠道自主掌控 分散单一平台传播风险 各平台账号间也能协同互补
  • JavaScript中Math.max()和Math.min()方法

    JavaScript中Math max 和Math min 方法 Math是JavaScript中的对象 不是构造函数 可以用来执行数学任务 1 Math max max 返回给定的一组数据中的最大值 但是不接收数组作为参数 参考用法
  • vue3.0 兼容ie浏览器

    vue3 0 兼容ie浏览器 安装babel polyfill npm install save babel polyfill 在main js里面引入 一定要在最上面 第一行 import babel polyfill 安装完成后会有ba
  • HTML页面结构

  • Unity实现点击显示不同UI

    在开发过程中经常遇到切换显示不同UI的需求 实现方案有2套 1 创建两个场景A B 在A中点击某个button后触发切换事件后加载B场景现在新的场景信息 优点 是逻辑简单 在不同的场景中创建对应的UI即可 缺点是当两个场景中有重复显示的模型
  • 高德地图JSAPIvue项目的使用

    最近在项目中使用高德地图JSAPI 遇到一些问题整理一下做个总和记录 希望能帮到看到文章的大家 1 关于引用 npm i amap amap jsapi loader save 然后创建好地图容器后引入地图 注意避坑的点 1 使用loca可

随机推荐

  • vue指令实现埋点

    1 自定义指令 import Vue from vue 自定义埋点指令 Vue directive track 钩子函数 只调用一次 指令第一次绑定到元素时调用 在这里可以进行一次性的初始化设置 el 指令所绑定的元素 可以用来直接操作 D
  • Linux 读文件 - readahead预读算法

    顺序读场景 intmain charc 4096 intin 1 in open news txt O RDONLY intindex 0 while read in c 4096 4096 printf index d len ld n
  • linux 内核 - ioctl 函数详解

    linux 内核 ioctl 函数详解 1 概念 ioctl 是设备驱动程序中设备控制接口函数 一个字符设备驱动通常会实现设备打开 关闭 读 写等功能 在一些需要细分的情境下 如果需要扩展新的功能 通常以增设 ioctl 命令的方式实现 在
  • leetcode 907. 子数组的最小值之和

    给定一个整数数组 arr 找到 min b 的总和 其中 b 的范围为 arr 的每个 连续 子数组 由于答案可能很大 因此 返回答案模 10 9 7 leetcode题目链接 示例 1 输入 arr 3 1 2 4 输出 17 解释 子数
  • 根据数据库名生成数据库结构说明

    根据数据库名生成数据库结构说明 package com cjm common import java io File import java io FileOutputStream import java sql Connection im
  • 文件上传优化

    文件上传优化 文件的名称需要优化 服务端 保存的文件名称如果固定 那么最终会导致服务器硬盘 只会保留一个文件 对上传的文件名称优化 System currentTimeMillis new Random nextInt 1000000 jp
  • CMake - 报错:Missing variable is: CMAKE_FIND_LIBRARY_PREFIXES

    问题描述 今天学习ZeroMQ 写了一个HelloWorld的测试程序 cmake的时候 报错Missing variable is CMAKE FIND LIBRARY PREFIXES 具体CMakeLists txt内容为 cmake
  • 【第29篇】MAE:屏蔽自编码器是可扩展的视觉学习器

    文章目录 摘要 1 简介 2 相关工作 3 方法 4 ImageNet 实验 4 1 主要属性 4 2 与之前结果的比较 4 3 局部微调 5 迁移学习实验 6 讨论与结论 摘要 论文链接 https arxiv org abs 2111
  • js将后台返回的数据转化为树形结构(扁平数组转树状结构)

    前言 做项目使常遇到需要将后台返回的数据 转换为树状结构给用户展现 例如 这也是前端面试常考的算法题 一起来检测一下吧 步骤 准备一个空的树对象 遍历列表中的每个元素 对于每个元素 根据该元素的父级ID找到其对应的父节点 如果找到了父节点
  • 如何开始使用 Python 3 编程:入门

    Python 是世界上发展最快的编程语言 这种流行的编程语言已帮助无数设计师 科学家和工程师努力解决当今消费者和企业面临的重大问题 使用 Python 更智能地工作 什么是 Python 编程 Python 编程是编写代码以执行任务或解决问
  • 小象课堂在线授课教育系统

    此项目包含后端全部代码 前端包括后台和web界面的源码 数据库用的mysql 可当作课设或者毕设 还可写入自己的简历中 web界面展示 前端后台界面展示 用户管理 课程管理 内容配置 订单管理 系统管理 系统监控
  • 概述-数据服务是什么?

    数据服务是什么 我以前认为 数据服务 就是通过数据接口提供数据的方式的统称 就是你调用一个接口 我传给你一些数据 数据处理逻辑接口内已经封装了 用这些数据你可以处理某些问题 而直接查询数据的不是数据服务 后来看了 大数据之路 阿里巴巴大数据
  • FreeRTOS记录(七、FreeRTOS信号量、事件标志组、邮箱和消息队列、任务通知的关系)

    我们在前面单独介绍过FreeRTOS的任务通知和消息队列 但是在FreeRTOS中任务间的通讯还有信号量 邮箱 事件组标志等可以使用 这篇文章就这些成员与消息队列和任务通知的关系进行说明分析 增加邮箱部分 任务通知发送消息 Demo 202
  • mysql数据库表升级方案_一个基于mysql数据库的项目的升级解决方案小结(节选)

    1引言 数据库使用MYSQL4 0版本 随用用户数的逐步增多 因为数据库版本过低而引起的抱怨也越来越多 不足也越来越明显 首先 对产品化部署产生了制约 由于MYSQL4 0数据库的配置文件my ini是存放在Windows的系统目录下的 同
  • window域名 映射 如何将域名映射到本地IP

    域名 映射 如何将域名映射到本地IP 万网域名映射 本地电脑映射 若果是自己注册的域名 直接解析到本地 IP 127 0 0 1 就可以使用此域名来访问自己的计算机 若果是想随便制定一个域名映射到本机下面讲解 C Windows Syste
  • CTF - Base64换表

    Base64换表 CTF汇总 原题 复制保存为16进制即可得文件 IDA显示 题目解读 提示 base64程序逆向 题目特点 Base64算法特征 Base64表格 位移 等号补位 结论 Base64变体 换表 Base64变体 题外话 解
  • 字符串变换最小字符串

    题目 给定一个字符串s 最多只能进行一次变换 返回变换后能得到的最小字符串 按照字典序进行比较 变换规则 交换字符串中任意两个不同位置的字符 解题思路 1 对字符串按照字典序进行排序 找到字典序最小的字符串 2 找到这个字符串中字典序最小的
  • 区块链重要基础知识3——签名算法考量以及实现并实验

    签名以及身份的管理 1 签名 1 1 特性 仅自己可以自己特定的签名 但是别人一看就知道就可以进行验证 与特定文件关联 不能拿着我这个签名去与其他文件关联 1 2 签名算法过程 1 2 1 总的流程
  • CANOpen DS402伺服电机控制项目总结

    公司的电机控制要统一到CANOpen上面来 协议栈用的CanFestival 配合RTThread进行控制 要控制伺服电机 最先搞明白的就是控制字6040和状态字6041 一共使用过三个厂家的伺服电机 控制字都是一样的 但是状态字各家有自己
  • DevOps到底是什么意思?看完这篇不要再问我了

    提到DevOps这个词 我相信很多人一定不会陌生 作为一个热门的概念 DevOps近年来频频出现在各大技术社区和媒体的文章中 备受行业大咖的追捧 也吸引了很多吃瓜群众的围观 那么 DevOps是什么呢 有人说它是一种方法 也有人说它是一种工