DevOps学习 | 如何应对IT服务交付中的问题?

目录

前言

DevOps是什么?

DevOps发展历程

DevOps与微服务、容器的关系

书本推荐


前言

作为一个热门的概念,DevOps这个名词在程序员社区里频频出现,备受技术大佬们的追捧。甚至网络上有了“南无DevOps”的戏言(南无在梵语的意思是“皈依”),也侧面反映了DevOps的风靡。

然而,一旦有人问起什么是DevOps,大部分人就会扯起类似“之乎者也”等玄之又玄的东西,一部分人说它是工具,一部分人说它是平台,一部分人说它是方法,一部分人甚至说它是哲学。所以今天,我就想和小伙伴们好好聊聊这个DevOps。

本文会分为:DevOps是什么?;DevOps发展历程;DevOps与微服务、与容器的关系;华为云CodeArts。

DevOps是什么?

从字面来理解,DevOps一词由单词Development(开发)和Operation(运维)组合而成。因此,很多人认为,DevOps不就是把开发和运维两个团队合并了嘛。

但是,DevOps的实际意义其实远超字面的理解。它相当于是一组过程、方法与系统的统称;通过一系列手段来促进开发(应用程序/软件工程)部门 与 技术运营和质量保障(QA)部门之间的密切沟通、高效协作与整合;通过自动化地软件交付架构变更流程,让规划、开发、构建、测试、发布、部署、维护都能更快、更频繁、更可靠,保障开发结果的稳定可靠。

DevOps可以给团队带来什么呢?技术层面上,DevOps可以促进研发与运维团队的协作;业务层面上,DevOps提供的一致容器镜像,持续集成,持续交付,持续部署,持续测试可以更快地交付客户价值。

DevOps发展历程

最开始,程序还很简单的时候,工作量不大,程序员1个人就可以完成所有开发阶段的工作,也就不需要什么额精细化分工了。

接着,随着软件规模越来越庞大、复杂,程序员也开始了细分:研发、测试、运维。研发人员开发完代码交付给QA团队进行测试,测试完毕之后交给运维团队去部署。这一套“等上一个阶段所有工作完成之后再交付给下一个阶段”的流程也被称之为“瀑布模型(waterfall)”。下图是比较详细的流程分类【需求-设计-开发-测试-部署-维护】:

然后,团队发现瀑布模型并不适用于真实的开发环境。为什么呢?因为客户的需求很可能一开始并不明确后面要改动,或则要加上一些新的需求,或则产品中途出现了新的问题,这些都是需要改进的。再加上用户期望团队交付的时间变得越来越少,这时候,笨重工序化流程的瀑布式模型就不适用了。于是,敏捷开发(Agile Development)这个概念就在2000左右开始被关注(而华为则是在2000年左右引入了IPD开发模式,下一段进行讲解),它是一种可以应对需求快速变化的软件开发能力。其实简单来说,就是把大项目变成小项目,把大时间点变成小时间点。简单点来说就是从原先的“设计-开发-测试-部署”模式变为了“设计-开发-测试-开发-测试-开发…-开发-测试-部署”的模式:

敏捷开发这种模式可以大幅提高开发的工作效率,让版本的更新变得更快更频繁(可以更快交付给用户,更快得到用户的反馈从而更快的进行响应),风险也变得更小(可以更快发现问题,修复更容易,版本变化小风险也小)。 

敏捷开发模式既然好处这么多,为何我们还需要推DevOps呢?那是因为敏捷开发模式仅作用于开发阶段。而运维那边依然没有什么改动。但是在我们说DevOps之前,我们先把坑填了。上一段提到的“华为则是在2000年左右引入了IPD开发模式”又是什么呢?Integrated Product Development 集成产品开发,一个基于市场和客户需求驱动的集成产品开发流程管理体系。简单来说就是,将企业的思维从“做出来什么再去卖什么”变成“我们把能卖出去的东西做出来”。这个模式运用成功的企业有IBM、华为。

最后,就是到了我们的DevOps。前面讲到敏捷模式将开发环节的问题解决了,但是开发和运维之间的矛盾则变深了。因为开发和运维天然就有着完全不同的逻辑,开发接了客户的需求肯定要加新功能/新特性,就要做出改变,更不要说在敏捷模式下这改变更多更频繁了;而运维的核心需求则是稳定,不要出问题。DevOps的目标就是让开发人员和运维人员可以好好沟通好好工作,不要掐起来。

在DevOps的模式里,运维和开发是紧密关联的。在项目开发期间,运维人员就会介入到开发过程中来了解技术路线和架构系统,提前制定相对应的运维方案。而在运维的初期,开发人员也会接入到系统部署中来,提供相关的优化建议。理想的情况下,双方的沟通可以增进彼此的理(gan)解(qing)。此时的流程图变为了:

DevOps与微服务、容器的关系

DevOps在微服务/云原生时代,为何会这么炙手可热呢?什么是微服务:把整体的服务拆分成一个个小的服务;每个小型的服务可以独立运行在自己的进程中,服务之间互相协调。

容器化则是在硬件资源、操作系统上,将各个应用程序和类划分为不同的“运行环境”(也就是容器),占用资源变得更少,部署速度变得更快。

微服务和容器化,可以说为DevOps提供了很好的前提条件:业务整体变小变多了,开发环境和部署环境互相之间的影响也变小了。这简直就是为DevOps的理念“加快一个需求从规划到上线部署的过程”量身打造嘛。

 

书本推荐

按需交付服务从来都不容易。成功的交付是以一种符合客户预期的一致性、可靠性、安全性、隐私性和成本效益的方式交付客户所需的服务。无论服务提供商提供的是 IT 服务,还是更传统的快递或电力公用事业服务,这都同样适用。

与传统服务相比,IT 服务提供商因具有快速可部署的工具和云能力,在组织规模或物理位置方面受到的限制要少得多。现在小型 IT 服务提供商也能立即扩展规模,应对全球几乎任何已识别的市场需求。然而,由于在交付服务和管理服务方面存在认知差距,IT服务提供商很难做到可预测和可靠地交付符合客户期望的服务。

随着 IT 服务体系变得越来越复杂,确定服务组件和交付生态系统之间的动态关系是否符合客户预期便越发困难,更别提确保这些动态关系完全符合预期了。交付团队没有采取措施提高对这些动态关系的认识和理解,而是将重点放在了其他因素上,如提高交付速度、使用最新的云技术和架构方法,或采用当前最流行的流程或方法。这样做反而造成了上述动态关系和客户预期的进一步脱节。

随着脱节日益严重,交付团队声称所能提供的服务与实际交付的服务之间的差距越来越大,团队也不再能做出有效决策。为了弥合差距,交付团队又会进一步增加流程,使用更多的工具,然而这对于有效弥合差距并没有太大帮助,反而会形成一个恶性循环,使得交付团队提供的服务离满足客户期望的目标越来越远。这时交付团队就需要学会洞察。

学会洞察是为了提高交付团队的态势感知能力,这能让团队中的每个人仿佛获得了一种从未知晓的新感官或超能力。 《精益DevOps》 的首要目标就是帮助交付团队弥合认知差距,交付能让客户实现预期目标的服务。

本书在内容逻辑上分为三部分。

  • 第1、2章为第一部分,介绍了 如何应对IT服务交付中的问题。 该部分描述了IT服务从业者过于关注消除交付摩擦和降低交付风险的问题,这反而使得他们的态势感知能力,以及学习和改进的能力下滑。了解这个问题对于任何IT服务交付组织都很重要,尤其对于那些希望实现DevOps承诺的组织。

  • 第3~7章为第二部分, 详细讲解了服务交付中每个关键要素及其所起的作用 ,该部分探讨了这些要素的重要性、要素被误用的场景,以及误用对服务交付和团队的后果。我个人认为这是本书中最重要的部分。

  • 第8~14章为第三部分,该部分是 提高服务交付效果的实用指南 。这部分内容包括如何判断团队的成熟度,确保关键要素到位以实现连贯有效的交付;还提供了一些建议,关于如何组织和管理工作流程、构建与部署仪表化和自动化解决方案,以及采用法律法规要求的治理方式。

▲ 扫码抢购

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LLM@本地大语言模型@Gemma的安装与使用@dockerDesktop的安装和启动

文章目录 准备refsollama安装过程2b模型的效果小结👺 ollama的进一步使用帮助文档查看ollama安装了哪些模型使用皮肤来使聊天更易用 使用Chatbot UI皮肤安装docker👺启动docker载入和退出dockerchatbot 网页版皮肤 使用命令行聊天小结👺 准备…

《精益DevOps》:填补IT服务交付的认知差距,实现高效可靠的客户期望满足

写在前面 在当今的商业环境中,IT服务交付已经成为企业成功的关键因素之一。然而,实现高效、可靠、安全且符合客户期望的IT服务交付却是一项艰巨的任务。这要求服务提供商不仅具备先进的技术能力,还需要拥有出色的组织协作、流程管理和态势感…

docker 常用命令大全(基础、镜像、容器、数据卷)

文章目录 1.docker基础命令2.docker镜像命令2.1 镜像名称2.2 镜像命令2.3 案例1--拉取、查看镜像2.4 案例2--保存、导入镜像 3.docker容器命令3.1 容器命令3.2 案例--创建并运行一个容器3.3 案例--进入容器,修改文件3.4 小结 4.数据卷4.1 什么是数据卷4.2 数据卷操作…

打造禹州中医药大模型,以AI驱动业务创新(内附孙思邈GPT内测版)

大禹智库 第78 期(总第409 期) 2024年 3 月 4 日 在中医药传承与发展的关键时期,结合许昌市的地域特色和产业优势,大禹智库提出“打造禹州中医药大模型,以AI驱动业务创新”的战略构想。本报告围绕构建禹州中医药现代化…

【促销定价】背后的算法技术3-数据挖掘分析

【促销定价】背后的算法技术3-数据挖掘分析 01 整体分析1)整体概览2)类别型特征概览3)数值型特征概览 02 聚合分析1)天维度2)品维度3)价格维度4)数量维度 03 相关分析1)1级品类2&…

C++学习笔记:set和map

set和map set什么是setset的使用 关联式容器键值对 map什么是mapmap的使用map的插入方式常用功能map[] 的灵活使用 set 什么是set set是STL中一个底层为二叉搜索树来实现的容器 若要使用set需要包含头文件 #include<set>set中的元素具有唯一性(因此可以用set去重)若用…

Docker之数据卷自定义镜像

文章目录 前言一、数据卷二、自定义镜像 前言 Docker提供了一个持久化存储数据的机制&#xff0c;与容器生命周期分离&#xff0c;从而带来一系列好处&#xff1a; 总的来说Docker 数据卷提供了一种灵活、持久、可共享的存储机制&#xff0c;使得容器化应用在数据管理方面更加…

Newtonsoft.Json

目录 引言 1、简单使用 1.1、官方案例 1.2、JsonConvert 2、特性 2.1、默认模式[JsonObject(MemberSerialization.OptIn/OptOut)] 2.2、序列化为集合JsonArrayAttribute/JsonDictionaryAttribute 2.3、序列化该元素JsonProperty 2.4、忽略元素JsonIgnoreAttribute 2.5、…

超全Chat GPT论文修改指令

文献综述指令润色修改指令论文选题指令论文大指令研究理论指令论文致谢指令参考文献指令论文润色整体逻辑论文整体优化提问指令 1&#xff0e;文献综述指令 请你帮我写一份关于&#xff08;研究主题&#xff09;的文献综述。我的论文选题方向是 XXXX &#xff0c;我已经找到了…

WordPress上传图片错误:不是合法的JSON响应

最近在进行WordPress迁移至新服务器的过程中&#xff0c;遭遇到一个棘手的问题&#xff0c;即在编辑文章并上传图片时&#xff0c;不断遭遇“此响应不是合法的JSON响应”的错误。经过多次验证和搜索&#xff0c;最终确定问题的根本原因并不在于禁用 Gutenberg 编辑器或安装经典…

uniapp从入门到精通(全网保姆式教程)~ 别再说你不会开发小程序了

目录 一、介绍 二、环境搭建&#xff08;hello world&#xff09; 2.1 下载HBuilderX 2.2 下载微信开发者工具 2.3 创建uniapp项目 2.4 在浏览器运行 2.5 在微信开发者工具运行 2.6 在手机上运行 三、项目基本目录结构 四、开发规范概述 五、全局配置文件&#xff0…

如何在Node.js中使用定时器

在Node.js中使用定时器是一项常见且重要的任务&#xff0c;特别是在需要执行定时任务或者轮询操作的情况下。Node.js提供了多种方式来实现定时器功能&#xff0c;包括setTimeout、setInterval和setImmediate等方法。本篇博客将介绍如何在Node.js中使用这些定时器&#xff0c;并…

Kubernetes的Sevice管理

服务原理: 所有服务都是根据这个服务衍生或者变化出来,根服务---- 服务感知后端靠标签 slelector 标签选择器 kubectl label pods web1 appweb kubectl cluter-info dump | grep -i service-cluster-ip-range 服务ip取值范围 Service 管理: 创建服务: --- kind: Serv…

python复盘(1)

1、变量名的命名规则 #3、变量名的命名规则&#xff1a;可以用中文作为变量名&#xff1b;其他和go语言一样 # 变量名可以用数字、字母、下划线组成&#xff0c;但是数字不能作为开头 # 变量名不能使用空格&#xff0c;不能使用函数名或关键字 # 变量名最好能表示出他的作用2、…

大模型(LLM)的量化技术Quantization原理学习

在自然语言处理领域&#xff0c;大型语言模型&#xff08;LLM&#xff09;在自然语言处理领域的应用越来越广泛。然而&#xff0c;随着模型规模的增大&#xff0c;计算和存储资源的需求也急剧增加。为了降低计算和存储开销&#xff0c;同时保持模型的性能&#xff0c;LLM大模型…

OpenGL 实现色温、色调、亮度、对比度、饱和度、高光

1.简介 色温&#xff1a;简单理解是色彩的温度&#xff0c;越低越冷如蓝色&#xff0c;约高越暖如红色。 亮度&#xff1a;增加就是给图片所有色彩加白色&#xff0c;减少加黑色。注意是只加黑白两种颜色&#xff0c;不然容易跟纯度弄混。 对比度&#xff1a;增加就是让白的…

2023人机交互期末复习

考试题型及分值分布 1、选择题&#xff08;10题、20分&#xff09; 2、填空题&#xff08;10题、20分&#xff09; 3、判断题&#xff08;可选、5题、10分&#xff09; 4、解答题&#xff08;5~6题、30分&#xff09; 5、分析计算题&#xff08;1~2题、20分&#xff09; 注意&…

如何做代币分析:以 LEO 币为例

作者&#xff1a; lesleyfootprint.network 编译&#xff1a;cicifootprint.network 数据源&#xff1a;LEO 代币仪表板 &#xff08;仅包括以太坊数据&#xff09; 在加密货币和数字资产领域&#xff0c;代币分析起着至关重要的作用。代币分析指的是深入研究与代币相关的数…

uniapp实战:父子组件传参之子组件数量动态变化

需求说明 现有的设置单元列表,每个带有虚线加号的可以看做是一组设置单元,点击加号可以添加一组设置单元.点击设置单元右上角可以删除对应的设置单元. 实现思路说明 利用数组元素添加或是删除的方式实现页面数量动态变化.由于每个设置单元内容都相同所以单独封装了一个子组件.…

LeetCode206题:反转链表(python3)

采用递归 class Solution:def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:cur headpre Nonewhile cur:temp cur.next # 保存下一轮循环的节点cur.next pre # 将当前节点 cur 的指针指向上一个节点 prepre curcur tempreturn pre