【运维】什么是 DevOps?
文章目录
- 什么是 DevOps?
- 如何实现 DevOps
- DevOps工作原理: DevOps生命周期
- DevOps 文化
- DevOps 工具:构建 DevOps 工具链
- DevOps 和云原生开发
- 什么是 DevSecOps?
- DevOps 和站点可靠性工程 (SRE)
什么是 DevOps?
DevOps 通过结合并自动执行软件开发和 IT 运营团队的工作,以更快速度交付更高质量的软件。
根据定义,DevOps 概述了软件开发 流程和组织文化转变,通过自动执行并 集成传统上各自为政的 开发和 IT 运营团队的工作,以更快速度交付更高质量的软件。
实际上,最好的 DevOps 流程和文化超出了开发和运营的范围,在软件开发生命周期中融入了所有应用程序利益相关者的建议 - 包括平台和基础架构工程、安全、合规、管制、风险管理、业务部门、最终用户和客户。
DevOps 代表了过去 20 年软件交付周期发展的最新成果,从每几个月甚至几年的巨型应用代码发布,发展为迭代式的小型功能,或者每天或每天多次频繁发布的功能更新。
最终,DevOps 可满足软件用户对于频繁的创新型新功能以及不间断的性能和可用性的不断增长的需求。
如何实现 DevOps
直到 2000 年之前,大多数软件都是使用瀑布式方法开发和更新的,这是大规模开发项目的线性方法。 软件开发 团队可能需要花费数月时间,开发会影响大部分或所有应用的体量巨大的新代码。 由于这些变更非常广泛,因此他们还需要花费数月时间将这些新代码集成到代码库中。
其次,质量保证 (QA)、安全和运营团队仍需要花费数月时间来测试代码。 因此,前后软件发行版之间的间隔时间以及发行版之间的几个重大补丁或错误修订之间的时间间隔达到数月甚至数年。 通常,这种“大爆炸”式的功能交付方法的特点包括:具有复杂而充满风险的部署计划;难以安排与上游和下游系统的联动;以及 IT“祈祷”在发行版“正式投入”生产环境之前的几个月中,业务需求不会发生巨大变化。
为了加快开发速度和提高质量,开发团队开始采用敏捷软件开发方法,这些方法是迭代式而非线性的,重点是对应用代码库进行更小但更频繁的更新。 其中的主要方法是 持续集成 和 持续交付,即 CI/CD。 采用 CI/CD 方法时,小型新代码块每一两个星期合并到代码库中,然后自动集成、测试和准备,以部署到生产环境。 敏捷将“大爆炸”的方法演变成一系列“更小的代码块”,这样还有助于隔离风险。
这些敏捷开发实践越能有效地加速软件开发和交付,它们暴露的孤岛式 IT 运营就越多 - 系统置备、配置、验收测试、管理、监控,而这将成为软件交付生命周期的下一个瓶颈。
DevOps 源自于敏捷方法。 它增加了新流程和工具,将 CI/CD 的持续迭代和自动化扩展到软件交付生命周期的其余部分。 它在流程中的每一步都实现了开发和运营之间的密切协作。
DevOps工作原理: DevOps生命周期
DevOps 生命周期(以线性方式描述时,也称为持续交付管道)是一系列迭代式、自动化的开发流程(也称工作流程),在更大的自动化和迭代式的开发生命周期内执行,旨在优化高质量软件的快速交付。 工作流程的名称和数量因人而异,但通常可归结为以下六类:
- 计划(或构思)。 在这个工作流程中,团队会根据划分了优先级的最终用户反馈和案例研究,以及来自所有内部利益相关方的输入,确定下一发行版中新功能和特性的范围。 规划阶段的目标是通过生成在交付后可实现预期成果和价值的功能的待办工作列表,最大程度地提高产品的业务价值。
- 开发。 这是编程步骤,开发人员根据待办工作列表中的用户情景和工作项,测试、编码和构建新功能和增强功能。 常用的实践组合包括测试驱动的开发 (TDD)、配对编程和同级代码评审等。 开发人员通常使用本地工作站来执行代码编写和测试的“内部循环”,然后再将代码发送到持续交付管道。
- 集成(或构建,或持续集成和持续交付 (CI/CD))。 如上所述,在这个工作流程中,新代码集成到现有代码库中,然后测试并打包到可执行文件中以进行部署。 常见的自动化活动包括将代码变更合并到"主"副本中,从源代码存储库中检出代码,自动执行编译、单元测试然后打包为可执行文件。 最佳实践是将 CI 阶段的输出存储在二进制存储库中,用于下一阶段。
- 部署(通常称为持续部署)。 运行时构建输出(从集成)将部署到一个运行时环境,这通常是执行运行时测试以确保质量、合规和安全的开发环境。 如果发现错误或缺陷,开发人员有机会在任何最终用户看到问题之前拦截并修补任何问题。 通常存在开发、测试和生产环境,每个环境都需要逐步"严格"的质量关口。 部署到生产环境的最佳实践通常是首先部署到最终用户的子集,然后在产品趋于稳定后最终向所有用户部署。
- 运营。 如果将功能交付到生产环境被描述为“Day 1”, 那么这些功能在生产环境中运行时,即标志着“Day 2”操作开始。 监控功能的性能、行为和可用性可确保功能为最终用户增添价值。 运营确保功能平稳运行,以及不会发生服务中断 - 方法是确保网络、存储、平台、计算和安全态势一切正常! 如果出错,运营可确保发现事件,提醒适当的人员,确定问题,并应用修复措施。
- 学习(有时称为持续反馈)。 收集来自最终用户和客户对特性、功能、性能和业务价值的反馈,根据这些反馈,规划下一个发行版中的增强和功能。 这还包括来自运营活动的任何学习和待办工作项,旨在帮助开发人员主动避免将来再次发生过去的任何事件。 这就是规划阶段的“总结”,我们“不断改进!”
这些工作流程之间还有另外三个重要的持续工作流程:
持续测试: 典型的 DevOps 生命周期包含集成和部署之间发生的一个单独的“测试”阶段。 而 DevOps 更进一步,可以在各个工作流程中执行测试的某些要素,例如在规划中执行行为驱动的开发;在开发中执行单元测试与合同测试;在集成中执行静态代码扫描、CVE 扫描和 linting;在部署中执行烟雾测试、渗透测试、配置测试;在运营中执行混沌测试、合规性测试;在学习中执行 A/B 测试。 测试是一种强大的风险和漏洞发现方法,为 IT 提供接受、缓解或补救风险的机会。
安全: 瀑布方法和敏捷实施是在交付或部署后“附加”安全工作流,而 DevOps 力求从一开始(规划)就融入安全措施,因为此时安全问题最容易解决,且解决成本最低,然后在开发周期的其余阶段持续实施安全措施。 这种安全性方法称为左移(请参阅图 1 以便更轻松地理解这个概念)。 一些组织的左移工作不甚理想,这也导致了 DevSecOps 的兴起(见下文)。
合规性: 监管 合规性(治理和风险)也在开发生命周期的早期和整个过程中得到最有效的满足。 受监管行业通常必须强制性满足特定级别的可观察性、可跟踪性以及可访问性,以表明自己如何在运行时运营环境中交付和管理功能。 这需要在持续交付管道和运行时环境中规划、制定、测试和执行策略。 合规性措施的可审计性对于向第三方审计机构证明合规性而言极其重要。
DevOps 文化
人们普遍接受的一种看法是,如果没有对 DevOps 文化的承诺,DevOps 方法就不可能成功,这可以概括为软件开发的另一种组织和技术方法。
在组织级别, DevOps 要求所有软件交付利益相关者持续沟通、协作和共担责任,包括软件开发和 IT 运营团队、安全、合规、管制、风险和业务部门团队,从而实现快速持续创新,并从一开始就确保软件质量。
在大多数情况下,达到这一目的的最佳方法是打破孤岛,重新组建跨职能的自主式 DevOps 团队,他们能够从头到尾(从规划到反馈)处理代码项目,而不必移交项目或等待其他团队的批准。 在敏捷开发背景下,共担责任和协作是形成共同的产品关注点并能够产生重大成果的共同的基石。
在技术级别, DevOps 需要致力于实施自动化,使项目在工作流内部和工作流之间顺利推进,同时重视反馈 和 措施 ,使团队能够持续加速周期,提升软件质量和性能。
DevOps 工具:构建 DevOps 工具链
DevOps 和 DevOps 文化需要各种工具以支持异步协作,无缝集成 DevOps 工作流程,以及尽可能自动执行整个 DevOps 生命周期。 DevOps 工具的类别包括:
- 项目管理工具 - 使团队能够建立构成编码项目的用户情景(需求)的待办工作列表,将其分解为较小的任务,并跟踪任务直至完成。 许多工具支持敏捷项目管理实践,如开发人员引入 DevOps 的 Scrum、精益和 Kanban。 热门开源选项包括 GitHub Issues 和 Jira。
- 协作式源代码存储库 - 版本控制的编码环境,允许多个开发人员处理同一代码库。 代码存储库与 CI/CD、测试和安全工具集成,以便在代码落实到存储库后,可以自动移至下一步。 开源代码存储库包括 GiHub 和 GitLab。
- CI/CD 管道 - 自动执行代码检出、构建、测试和部署的工具。 Jenkins 是这个类别中最受欢迎的开源工具;许多以前的开源备选工具,如 CircleCI,现在仅提供商用版本。 作为持续部署 (CD) 工具,Spinnaker 在应用和基础架构之间充当代码层。 ArgoCD 是 Kubernetes 原生 CI/CD 的另一热门开源选择。
- 测试自动化框架 - 这包括用于自动执行单元、合同、功能、性能、可用性、渗透和安全测试的软件工具、库和最佳实践。 这些最优秀的工具支持多种语言;有些使用人工智能 (AI) 自动重新配置测试以响应代码变更。 测试工具和框架的扩展范围很广! 热门开源测试自动化框架包括 Selenium、Appium、Katalon、Robot Framework 和 Serenity(以前名为 Thucydides)。
- 配置管理(基础架构即代码)工具 - 支持 DevOps 工程师通过执行脚本,配置和置备完全版本和完整记录的基础架构。 开源选项包括 Ansible (Red Hat)、Chef、Pupet 和 Terraform。 Kubernetes 为容器化应用执行相同的功能(请参阅下面的“DevOps 和云原生开发”)。
- 监控工具 - 这些工具帮助 DevOps 团队发现并解决系统问题; 他们还实时收集和分析数据,以揭示代码变更如何影响应用性能。 开源监控工具包括 Datadog、Nagios、Prometheus 和 Splunk。
- 持续反馈工具 - 通过热图(记录用户在屏幕上的操作)、调查或自助式问题凭单收集用户反馈的工具。
DevOps 和云原生开发
云原生方法用于构建利用基础云计算技术的应用。 云原生的目标是在公有云、私有云和多云环境中实现一致和最优的应用开发、部署、管理和性能。
目前,云原生应用通常
- 使用微服务构建 - 松散耦合并且可独立部署的组件,具有各自独立的技术栈,并通过 REST API、事件流或消息代理相互通信。
- 部署在容器中 - 可执行代码单元,包含运行应用程序所需的全部编码、运行时和操作系统依赖项。 (对于大多数组织,“容器”等同于 Docker 容器, 但也存在其他容器类型。)
- 使用 Kubernetes 大规模运行;Kubernetes 是开源容器编排平台,用于调度和自动执行容器化应用的部署、管理和扩展。
在许多方面,云原生开发和 DevOps 是相辅相成的。
例如,开发 和更新微服务(即,将小代码单元迭代交付到小代码库)非常适合 DevOps 快速发布和管理周期。 如果没有 DevOps 部署和运营,就难以应对微服务架构的复杂性。 IBM 最近对开发人员和 IT 主管进行的一项调查发现,78% 的现有微服务用户希望增加他们投入到体系架构的时间、金钱和精力,而 56% 的非用户很可能在未来两年内采用微服务。
通过打包和永久固定所有操作系统依赖关系,容器支持快速的 CI/CD 和部署周期,因为所有集成、测试和部署都发生在同一环境中。 Ansible、Puppet 和 Chef 为非容器化应用执行持续配置任务,而 Kubernetes 编排为容器化应用执行相同的任务。
大多数领先的云服务提供商(包括 AWS、Google、Microsoft Azure 和 IBM Cloud)都提供某种形式的托管 DevOps 管道解决方案。
什么是 DevSecOps?
DevSecOps 是一种 DevOps,它在整个 DevOps 生命周期持续集成和自动化安全功能 - 从头到尾、从规划到反馈再回到规划。
另一种看待 DevSecOps 的方式就是 DevOps 从一开始就集成安全性。 但是,在采用 DevOps 的早期,存在两个主要的挑战,即使随着时间推移也无法克服:一个是将安全专业知识集成到跨职能团队(文化问题);另一个是将安全自动化实施到 DevOps 生命周期中(技术问题)。 安全性被视为“说不”的实践,在许多 DevOps 实践中成为成本不菲的瓶颈。
DevSecOps 是一种特殊的工作,从一开始就集成和自动实现安全性。 在 DevSecOps 中,安全是和开发和运营并列的“头等”公民和利益相关方 ,它将安全集成到开发流程,将安全作为一个产品重点。
DevOps 和站点可靠性工程 (SRE)
站点可靠性工程 (SRE) 利用软件工程技术自动执行 IT 运营任务,例如,生产系统管理、变更管理、事件响应,甚至应急响应。如果没有 SRE,这些任务则需要系统管理员手动智行。 SRE 旨在将传统的系统管理员转变为工程师。
SRE 的最终目标类似于 DevOps 的目标,但更具体一些:SRE 旨在平衡组织对快速应用开发的需求和达到与客户和最终用户的服务级别协议 (SLA) 中规定的性能和可用性级别。
站点可靠性工程师实现这一平衡的方法是确定应用程序引起的操作风险的可接受水平(称为“错误预算”)和自动执行操作以达到该水平。
在跨职能 DevOps 团队中,SRE 可以充当开发和运营之间的桥梁,为团队提供所需的指标和自动化,尽快通过 DevOps 管道推送代码变更和新功能,而不会违反组织 SLA 的条款。
相关文章:
【运维】什么是 DevOps?
文章目录什么是 DevOps?如何实现 DevOpsDevOps工作原理: DevOps生命周期DevOps 文化DevOps 工具:构建 DevOps 工具链DevOps 和云原生开发什么是 DevSecOps?DevOps 和站点可靠性工程 (SRE)什么是 DevOps? DevOps 通过结…...
【C++入门】引用、内联函数、auto关键字、基于范围的for循环(C++11)、指针空值nullptr(C++11)
文章目录引用引用概念引用特性引用使用场景常引用内联函数宏的优缺点?C有哪些技术替代宏?auto关键字auto不能推导的场景基于范围的for循环(C11)指针空值nullptr(C11)引用 引用概念 引用不是新定义一个变量,而是给已存在变量取了一个别名&…...
《FPGA学习》->多个按键控制LED灯
🍎与其担心未来,不如现在好好努力。在这条路上,只有奋斗才能给你安全感。你若努力,全世界都会为你让路。本次项目任务,利用开发板上的4个按键KEY1,KEY2,KEY3,KEY4和2个LED灯LED1&…...
vb.net计算之.net core基础(4)-项目与程序结构(2)
目录 Namespace 语句Visual Basic 中的命名空间完全限定名命名空间可以定义什么全局关键字命名规范条件编译拆分和合并语句拆分成多行在同一行上放置多个语句为代码行添加标签注释串联成员访问运算符点运算符 `.`感叹号 `!`运算符Me 关键字MyMyBaseMyClassNamespace 语句 <…...
基于RK3588的嵌入式linux系统开发(五)——uboot优化修改(按任意按键停止autoboot)
我们通常情况下,芯片进入uboot后,会根据设置的bootdelay时间进行倒数计数。这时候在终端按任意键,即可退出autoboot,进入uboot的命令行模式。 官方提供的uboot源码中,为了防止调试串口干扰导致不能进入系统,…...
Lumerical---在FDTD和MODE工程中的PML边界条件
Lumerical---在FDTD和MODE工程中的PML边界条件 引言PML边界条件实现原理PML 类型PML 配置文件PML 配置文件选项Standard(标准)Stabilized(稳定性)Steep AngleCustom(陡角)对于不同的边界使用不同的配置FDE,varFDTD和FDTD SolverPML 参数阅读这篇前,推荐阅读边界条件综述…...
论文投稿指南——中文核心期刊推荐(社会学)
【前言】 🚀 想发论文怎么办?手把手教你论文如何投稿!那么,首先要搞懂投稿目标——论文期刊 🎄 在期刊论文的分布中,存在一种普遍现象:即对于某一特定的学科或专业来说,少数期刊所含…...
KVM-4、KVM 高级功能详解
1. 半虚拟化驱动 1.1 virtio 概述 KVM 是必须使用硬件虚拟化辅助技术(如 Intel VT-x 、AMD-V)的 Hypervisor,在CPU 运行效率方面有硬件支持,其效率是比较高的;在有 Intel EPT 特性支持的平台上,内存虚拟化的效率也较高。 QEMU/KVM 提供了全虚拟化环境,可以让客户机不经…...
【Linux】进程状态
文章目录1. 阻塞1. 举例2. 为什么要阻塞?3.操作系统层面上如何理解进程等待某种资源就绪呢?资源进程4. 总结2.挂起3.Linux进程状态1. R状态进程只要是R状态,就一定是在CPU运行吗?证明当前进程运行状态生成程序查看进程2. S休眠状态…...
2023河南省第二届职业技能大赛郑州市选拔赛“网络安全”项目比赛样题任务书
2023河南省第二届职业技能大赛郑州市选拔赛“网络安全” 项目比赛样题任务书 一、竞赛时间 共计360分钟。 竞赛任务书内容 2023河南省第二届职业技能大赛郑州市选拔赛“网络安全” 项目比赛样题任务书 A模块基础设施设置/安全加固(200分) A-1&…...
pygame8 扫雷游戏
一、游戏规则: 1、点击方格,如果是地雷,游戏失败,找到所有地雷游戏胜利 2、如果方块上出现数字,则表示在其周围的八个方块中共有多少颗地雷 二、游戏主逻辑: 主要逻辑即调用run_game, 然后循环检测事件…...
c/c++开发,无可避免的模板编程实践(篇四)
一、容器与模板 前文就说到,标准库基于模板编程,定义了许多容器类以及一系列泛型算法,使程序员可以更简洁、抽象和有效地编写程序。C标准库中有大量的标准容器,这些容器通常包含一组数据或对象的集合,几乎可以和任何类…...
c++11 标准模板(STL)(std::unordered_set)(二)
定义于头文件 <unordered_set> template< class Key, class Hash std::hash<Key>, class KeyEqual std::equal_to<Key>, class Allocator std::allocator<Key> > class unordered_set;(1)(C11 起)namespace pmr { templ…...
GEE学习笔记 七十二:【GEE之Python版教程六】命令行简介
这篇开始就要讲解GEE相关的内容,首先聊一下命令行的内容,这个在官方文档中有详细的介绍,这里我简单说一下常用的几个命令,剩余的大家在使用过程中如果又需要可以随时查看相关官方文档的介绍。官方文档地址:https://dev…...
DDD单根 聚合根 实体 值对象
前言2004年Eric Evans 发表Domain-Driven Design –Tackling Complexity in the Heart of Software (领域驱动设计),简称Evans DDD。快二十年的时间,领域驱动设计在不断地发展,后微服务时代强调的东西,在国…...
SpringMvc介绍。
目录 1、SpringMvc概述 1、基本介绍 2、工作流程 3、bean加载控制 二、请求 1、请求映射路径 2、请求方式 3、请求参数 4、请求参数(传递json数据) 5、日期类型参数传递 三、响应 四、REST风格 1、REST简介 2、RESTful入门案例 3、RESTfu…...
华为OD机试 - 最小传递延迟(JS)
最小传递延迟 题目 通讯网络中有N个网络节点 用1 ~ N进行标识 网络通过一个有向无环图进行表示 其中图的边的值,表示节点之间的消息传递延迟 现给定相连节点之间的延时列表times[i]={u,v,w} 其中u表示源节点,v表示目的节点,w表示u和v之间的消息传递延时 请计算给定源节点到…...
学生信息管理系统(通讯录)----------通俗易懂、附源码、C语言实现
绪论: 本篇文章使结构体章节后的习题,如果你对C语言有问题,或者结构体有什么问题不妨看看我之前所写的文章(章回体),对于文件管理和内存分配问题我将在后面补上,对于这个学生信息管理系统我用了多种方法和…...
Python抽奖系统
#免费源码见文末公众号# 抽奖系统① def choujiang1():def write():with open(d:\\抽奖系统\\抽奖1.1.pickle,rb) as file:lst1pickle.load(file)namevar1.get()if name not in lst1 and name!录入成功! and name!录入失败! and name!:lst1.append(name)…...
真实景观渲染技巧【Three.js】
受到一些很棒的 three.js 演示、与 covid 相关的旅行禁令以及可能在 pinterest 上花太多时间看美丽的旅行照片的启发——我开始看看我是否可以使用 three.js 和r3f在浏览器中渲染一个令人信服的风景场景。 推荐:将 NSDT场景编辑器 加入你的3D开发工具链。 在过去一个…...
(十)学生端搭建
本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...
SCAU期末笔记 - 数据分析与数据挖掘题库解析
这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...
什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...
《通信之道——从微积分到 5G》读书总结
第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...
ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...
Java 二维码
Java 二维码 **技术:**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...
【笔记】WSL 中 Rust 安装与测试完整记录
#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统:Ubuntu 24.04 LTS (WSL2)架构:x86_64 (GNU/Linux)Rust 版本:rustc 1.87.0 (2025-05-09)Cargo 版本:cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...
NPOI操作EXCEL文件 ——CAD C# 二次开发
缺点:dll.版本容易加载错误。CAD加载插件时,没有加载所有类库。插件运行过程中用到某个类库,会从CAD的安装目录找,找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库,就用插件程序加载进…...
关于easyexcel动态下拉选问题处理
前些日子突然碰到一个问题,说是客户的导入文件模版想支持部分导入内容的下拉选,于是我就找了easyexcel官网寻找解决方案,并没有找到合适的方案,没办法只能自己动手并分享出来,针对Java生成Excel下拉菜单时因选项过多导…...
