DevOps简介
DevOps简介
- 1、DevOps的起源
- 2、什么是DevOps
- 3、DevOps的发展现状
- 4、DevOps与虚拟化、容器
1、DevOps的起源
上个世纪40年代,世界上第一台计算机诞生。计算机离不开程序(Program)驱动,而负责编写程序的人,被称为程序员(Programmer)。程序员在那时属于稀缺人才
随着科技的不断发展,PC和Internet陆续问世,我们进入了全民拥抱信息化的时代。越来越多的企业开始将计算机作为办公工具,以提高生产力。而个人用户也开始将计算机作为娱乐工具,用以改善生活品质
于是,计算机程序,开始变成了一门生意。程序逐步演进为软件(Software),变成产品
在软件行业里,程序员有了更专业的称谓,叫做软件开发工程师(Software Development Engineer),也就是我们常说的“码农”
我们知道,一个软件从零开始到最终交付,大概包括以下几个阶段:规划、编码、构建、测试、发布、部署和维护

最初,程序比较简单,工作量不大,程序员一个人可以完成所有阶段的工作。随着软件产业的日益发展壮大,软件的规模也在逐渐变得庞大。软件的复杂度不断攀升。一个人已经Hold不住了,就开始出现了精细化分工
码农的队伍开始扩大,工种增加。除了软件开发工程师之外,又有了软件测试工程师,软件运维工程师

分工之后,传统的软件开发流程是这样的:
软件开发人员花费数周或数月编写代码,然后将代码交给QA(质量保障)团队进行测试,然后再将最终的发布版交给运维团队去布署。即三个阶段:开发、测试、布署
早期所采用的软件交付模型,称之为“瀑布(Waterfall)模型”
瀑布模型,简而言之,就是等一个阶段所有工作完成之后,再进入下一个阶段。这种模型适合条件比较理想化(用户需求明确、开发时间充足)的项目。大家按部就班,轮流执行自己的职责即可
但是,项目不可能是单向运作的。客户也是有需求变动的。产品也是会有问题的、需要改进的

随着时间推移,用户对系统的需求不断增加,与此同时,用户给的时间周期却越来越少。在这种情况下,大家发现,笨重迟缓的瀑布式开发已经不合时宜了
于是,软件开发团队引入了一个新的概念,那就是大名鼎鼎的“敏捷开发(Agile Development)”
敏捷开发是一种能应对快速变化需求的软件开发能力。简单来说,就是把大项目变成小项目,把大时间点变成小时间点
有两个词经常会伴随着敏捷开发出现,那就是CI和CD。CI是Continuous Integration(持续集成),而CD对应多个英文:Continuous Delivery(持续交付)或Continuous Deployment(持续部署)
CI/CD介绍见文章:传送门
美其名曰:“持续(Continuous)”,其实就是“加速——反复——加速——反复……”

敏捷开发大幅提高了开发团队的工作效率,让版本的更新速度变得更快
很多人可能会觉得:更新版本的速度快了,风险不是更大了吗?其实,事实并非如此
敏捷开发可以帮助更快地发现问题,产品被更快地交付到用户手中,团队可以更快地得到用户的反馈,从而进行更快地响应。而且,DevOps小步快跑的形式带来的版本变化是比较小的,风险会更小。即使出现问题,修复起来也会相对容易一些

虽然敏捷开发大幅提升了软件开发的效率和版本迭代速度,但是它的效果仅限于开发环节。研发们发现,运维那边,依旧是铁板一块,成为了新的瓶颈
运维工程师,和开发工程师有着完全不同的思维逻辑。运维团队的座右铭,很简单,就是“稳定压倒一切”。运维的核心诉求,就是不出问题
什么情况下最容易出问题?发生改变的时候最容易出问题。所以说,运维非常排斥“改变”。于是乎,矛盾就在两者之间集中爆发了
这个时候,DevOps就隆重登场了
2、什么是DevOps
DevOps,其实就是Development和Operations两个词的组合。维基百科词条定义是这样的:DevOps是一组过程、方法与系统的统称,用于促进开发、技术运营和质量保障(QA)部门之间的沟通、协作与整合

这个定义稍微有点抽象,但是并不难理解。反正它不是一个特定软件、工具或平台的名字
从目标来看,DevOps就是让开发人员和运维人员更好地沟通合作,通过自动化流程来使得软件整体过程更加快捷和可靠

很多人可能觉得,所谓DevOps,不就是Dev+Ops嘛,把两个团队合并,将运维划归开发,不就完事了嘛?
注意,这个观点是不对的。这也是DevOps这些年一直难以落地的主要原因
想要将DevOps真正落地,首先第一点,是思维转变,也就是“洗脑”。DevOps并不仅仅是组织架构变革,更是企业文化和思想观念的变革。如果不能改变观念,即使将员工放在一起,也不会产生火花
除了“洗脑”之外,就是根据DevOps思想重新梳理全流程的规范和标准
在DevOps的流程下,运维人员会在项目开发期间就介入到开发过程中,了解开发人员使用的系统架构和技术路线,从而制定适当的运维方案。而开发人员也会在运维的初期参与到系统部署中,并提供系统部署的优化建议
DevOps的实施,促进了开发和运维人员的沟通,增进了彼此的理(感)解(情)
在思维和流程改变的同时,想要充分落地DevOps,当然离不开软件和平台的支持
技术(工具和平台)是最容易实现的,流程次之,思维转变反而是最困难的。换言之,DevOps考验的不仅是一家企业的技术,更是管理水平和企业文化
对比前面所说的瀑布式开发和敏捷开发,我们可以明显看出,DevOps贯穿了软件全生命周期,而不仅限于开发阶段

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

3、DevOps的发展现状
DevOps这个词来源于2009年在比利时根特市举办的首届DevOpsDays大会,为了在Twitter上更方便的传播,由DevOpsDays缩写为DevOps
目前,DevOps处于高速增长的阶段。尤其是在大企业中,DevOps受到了广泛的欢迎。如今,DevOps几乎已经成为了软件工程的代名词
4、DevOps与虚拟化、容器
近几年,云计算技术突飞猛进,大家应该对虚拟化、容器、微服务这些概念并不陌生。当我们提到这些概念的时候,也会偶尔提及DevOps
它们之间有什么关系呢?
其实很简单。设想一下,如果要对一项工作进行精细化分工,我们是对一个大铁块进行加工方便?还是拆成小块进行加工更加方便?结果是显而易见的
所谓“微服务”,就是将原来黑盒化的一个整体产品进行拆分(解耦),从一个提供多种服务的整体,拆成各自提供不同服务的多个个体
微服务架构下,不同的工程师可以对各自负责的模块进行全流程处理,例如开发、测试、部署、迭代
而虚拟化,其实就是一种敏捷的云计算服务。它从硬件上,将一个系统“划分”为多个系统,系统之间相互隔离,为微服务提供便利
容器就更彻底了,不是划分为不同的操作系统,而是在操作系统上划分为不同的“运行环境”(Container),占用资源更少,部署速度更快
虚拟化和容器为DevOps提供了很好的前提条件。开发环境和部署环境都可以更好地隔离,减小了相互之间的影响
参考文章:https://zhuanlan.zhihu.com/p/91371659
相关文章:
DevOps简介
DevOps简介 1、DevOps的起源2、什么是DevOps3、DevOps的发展现状4、DevOps与虚拟化、容器 1、DevOps的起源 上个世纪40年代,世界上第一台计算机诞生。计算机离不开程序(Program)驱动,而负责编写程序的人,被称为程序员&…...
体验前所未有的显示器管理体验:BetterDisplay Pro Mac
在现代的数字化时代,显示器是我们日常生活和工作中不可或缺的一部分。从笔记本电脑到台式机,从平板电脑到手机,几乎所有的电子设备都配备了显示器。然而,对于专业人士和从事设计行业的人来说,仅仅依靠系统自带的显示器…...
python用pyinstaller打包exe,去掉黑窗口
使用Python编写程序将Python脚本打包成可执行文件(EXE),但是会有一个命令框产生,很烦,所以,去掉这个框 1,安装pyinstaller pip install pyinstaller2,打包产生cmd命令框 pyinstaller --onefi…...
如何关闭Windows Defender(亲测可行!!非常简单)
一、背景 Windows Defender(简称WD)真的太讨厌了,经常给你报你下载的文件是病毒,且不说真的是不是病毒,它都不询问直接删。 另外聚资料显示WD还会不合时宜地执行扫描导致系统变慢(不会在合适的、空闲的时…...
【objectarx.net】创建多重引线
创建多重引线...
【objectarx.net】创建组,列出所有组,查找实体所在的组
创建组,列出所有组...
Llama2通过llama.cpp模型量化 WindowsLinux本地部署
Llama2通过llama.cpp模型量化 Windows&Linux本地部署 什么是LLaMA 1 and 2 LLaMA,它是一组基础语言模型,参数范围从7B到65B。在数万亿的tokens上训练的模型,并表明可以专门使用公开可用的数据集来训练最先进的模型,而无需求…...
Coding面试题之手写线程池
原理图 JDK线程池原理 实现代码 1.线程类(PoolThread) 这个类用于执行任务队列中的任务。 public class PoolThread extends Thread {private final Queue<Runnable> taskQueue;private boolean isStopped false;private long lastTaskTime …...
【objectarx.net】删除零长度曲线和获取零长度曲线的数量
删除零长度曲线和获取零长度曲线的数量...
Win11专业版安装Docker Desktop,并支持映射主机的gpu
一、Windows环境下安装 Docker 必须满足: 1. 64位Windows 11 Pro(专业版和企业版都可以) 2. Microsoft Hyper-V,Hyper-V是微软的虚拟机,在win11上是自带的,我们只需要启动就可以了 二、下载Docker Desktop安装包 方式一:进入官网下载 https://docs.docker.com/desktop…...
Mac代码文本编辑器Sublime Text 4
Sublime Text 4 for Mac拥有快速响应的功能,可以快速加载文件和执行命令,并提供多种语言支持,包括C 、Java、Python、HTML、CSS等。此外,该编辑器还支持LaTeX、Markdown、JSON、XML等技术领域。 Sublime Text 4 for Mac的插件丰富…...
MATLAB中plot函数用法
目录 语法 说明 向量和矩阵数据 表数据 其他选项 示例 创建线图 绘制多个线条 根据矩阵创建线图 指定线型 指定线型、颜色和标记 在特定的数据点显示标记 指定线宽、标记大小和标记颜色 添加标题和轴标签 绘制持续时间并指定刻度格式 基于表绘制坐标 在一个轴…...
win10 安装vscode
1 Download Visual Studio Code - Mac, Linux, Windows 2 this user installer is not meant to be run as an administrator . if ou would like to install vs code for all users i this sys download the system installer instead form are u want to con 提示的意思是&a…...
MATLAB中Arrow 属性说明
目录 颜色和样式 位置 Arrow 属性是箭头的外观和行为。 Arrow 属性控制 Arrow 对象的外观和行为。通过更改属性值,可以修改箭头的特定方面。使用圆点表示法查询和设置属性。 ar annotation("arrow"); c ar.Color; ar.Color "red"; 颜色和…...
MYSQL 慢查询和慢查询日志
在数据库管理中,慢查询是指执行时间较长的 SQL 查询语句。这类查询可能导致系统性能下降,影响用户体验。为了帮助识别和解决这些性能问题,数据库管理系统通常提供了慢查询日志,用于记录执行时间超过一定阈值的查询。本文将深入探讨…...
Longhorn跨AZ实现存储高可用
Longhorn跨AZ实现存储高可用 longhorn基础组件功能及其作用这里就不做介绍了 方案一 Longhorn跨AZ的高可用的就是一个PVC的replicas 均匀打散的不同的AZ区域之间,这样当某个AZ挂掉后,engine会立即使用另外一个数据副本,并重建这个副本&…...
maven 私有仓库配置
1.整体库信息 2.配置阿里云库 (可以配置多个库,再引用代理库) 3.建立自己的 发布,快照库 4.建立自由的公共库- 引用所有需要的库 5.maven setting 中配置 用户名密码 <server><id>mv-releases</id><usernam…...
TypeScript: 判断两个数组的内容是否相等
一、直接遍历 // 1.直接遍历 const arr1: any[] ["apple", "banana", NaN]; const arr2: any[] ["apple", NaN, "banana"];function fn1(arr1: any[], arr2: any[]) {// Array.some(): 有一项不满足,返回falseif (arr1.…...
STM32MPU6050角度的读取(STM32驱动MPU6050)
注:文末附STM32驱动MPU6050代码工程链接,需要的读者请自取。 一、MPU6050介绍 MPU6050是一款集成了三轴陀螺仪和三轴加速度计的传感器芯片,由英国飞利浦半导体(现为恩智浦半导体)公司生产。它通过电子接口(…...
海康Visionmaster-环境配置:CSharp 二次开发环境配 置方法
C#二次开发环境的配置方法 以 WinForm 为例,进行 VM 二次开发的环境配置分为三步: 第一步,使用 VS 新建一个框架为.NET Framework 4.6.1 的工程,平台首选 32 位取消勾选,重新生成解决方案,保证工程 Debug 下…...
C++初阶-list的底层
目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...
TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...
Python实现prophet 理论及参数优化
文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候,写过一篇简单实现,后期随着对该模型的深入研究,本次记录涉及到prophet 的公式以及参数调优,从公式可以更直观…...
关于 WASM:1. WASM 基础原理
一、WASM 简介 1.1 WebAssembly 是什么? WebAssembly(WASM) 是一种能在现代浏览器中高效运行的二进制指令格式,它不是传统的编程语言,而是一种 低级字节码格式,可由高级语言(如 C、C、Rust&am…...
【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具
第2章 虚拟机性能监控,故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令:jps [options] [hostid] 功能:本地虚拟机进程显示进程ID(与ps相同),可同时显示主类&#x…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
【Oracle】分区表
个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...
MySQL:分区的基本使用
目录 一、什么是分区二、有什么作用三、分类四、创建分区五、删除分区 一、什么是分区 MySQL 分区(Partitioning)是一种将单张表的数据逻辑上拆分成多个物理部分的技术。这些物理部分(分区)可以独立存储、管理和优化,…...
