云原生架构技术揭秘:DevOps 技术打破开发运维壁垒,实现持续交付的变革之道

DevOps 是一套将软件开发(Development,Dev)和系统运维(Operations,Ops)相结合的实践,旨在缩短应用系统开发生命周期,提供高质量的持续交付。

—— 维基百科 DevOps

0、讲在前面

生产环境的任何操作和变更都有可能产生不可预知的风险,从软件开发出现至今,绝大部分企业对于应用系统都会执行严格的生产环境管控,甚至很多公司都有生产红线,比如我的前司阿里巴巴,就是这样一个对生产绝对敬畏的公司,这样的 DevOps 文化是我所遵循和尊敬的。

上周我部门的同学在一次交流中反馈说:思远负责的后端组感觉对生产出点问题都特别谨慎小心,甚至有点害怕。思远是一路跟随我从阿里到创业公司的兄弟,听到这样的反馈,吾心甚慰,这不是害怕,这也不是谨慎,这是对生产环境的敬畏之心,思远做的很棒,同时我也希望每一个程序员都可以像我的思远一样。

从我的从业经历看,生产系统的运维管理,经历了从 PE、AppOps、DevOps、AIOps、NoOps 的这样几个不同的发展阶段,其实这也是生产环境运维管理的发展阶段。而 DevOps 就是 Dev + Ops,是一组用于促进开发人员和运维人员协作的过程、方法和系统的统称。

1、DevOps 概述

随着云计算的普及和企业数字化转型的加速,云原生架构逐渐成为软件开发和运维的新标准。在这样的背景下,DevOps 作为一种文化和实践,重要性日益凸显。对于研发工程师、架构师来讲,理解并掌握云原生架构领域中的 DevOps 技术,不仅是提升个人技能的需要,也是适应行业发展的必然要求。

DevOps (Development and Operations)一词最早是由 James Turnbull 在 2009 年提出,当时是为了解决开发和运维之间的协作问题。随着云计算、容器技术、自动化工具的发展,DevOps 逐渐成为软件开发和运维的标配。它强调开发、测试、运维等环节和角色之间的紧密协作,目标是为了提高软件交付的效率和质量。简言之就是保证高质量的前提下缩短系统变更从提交到部署到生产环境的时间。

DevOps 作为一组过程、方法与系统的统称,是云原生概念的重要组成部分,是为了促进开发、技术运营和质量保障部门之间的沟通、协作与整合。DevOps 是非常重视软件开发人员(Dev)和运维技术人员(Ops)之间的沟通合作的文化、习惯和方式。其基本思想是打破开发(Dev) 和运维(Ops)之间的壁垒,实现开发、测试、运维等环节和角色的紧密协作以及自动化程度,目的是为了提高软件交付的效率和质量。

DevOps 强调的是高效组织团队之间如何通过自动化的工具协作和沟通来完成软件的生命周期管理,从而更快、更频繁地交付更稳定的软件系统。上图一张来自网络的图片,图中是与 DevOps 相关的技术和工具汇总。

一个 DevOps 开发环境需要满足以下要求:

  1. 环境一致性:在本地开发出来的功能,无论在什么环境下进行部署,都应该得到一致的结果
  2. 代码自动检查:每次代码提交后,系统都应该自动对代码进行检查,以便及早发现潜在的问题,并运行自动化测试
  3. 持续集成:每次代码提交后,系统可以自动进行代码的编译和打包,无需运维人员手动进行
  4. 持续部署:代码集成完毕后,系统可以自动降运行环境中的旧版本应用更新成新版本应用,并且整个过程中不会让系统不可用
  5. 持续反馈:在代码自动检查、持续集成、持续部署的过程中,一旦出现问题,要能及时将问题反馈给开发人员和运维人员,开发运维人员收到反馈后对问题及时进行修复
  6. 快速回滚:当发现本次部署的版本出现问题时,系统应该能够快速回滚到上一个可用版本
  7. 弹性伸缩:当某个服务的负载过大,系统应用可以对这个服务快速进行扩容,保证用户的访问。当负载正常后,可以将扩容的资源释放
  8. 可视化运维:有可视化的界面或者工具,实时监控应用、集群、硬件的各项状态指标

满足以上八点要求的 DevOps 环境究竟应该是什么样的呢?应该包括哪些部分呢?

  1. 代码仓库 GitLab,也可以使用阿里云 CodeUp
  2. 容器技术 Docker
  3. 持续集成工具 Jenkins,也可以使用阿里云云效流水线
  4. 代码质量检测平台 SonarQube,也可以使用阿里云自带服务
  5. 镜像仓库 Harbor,也可以使用阿里云仓库制品服务
  6. 容器集群管理系统 Kubernetes

云原生为 DevOps 效率的提高提供了更多的遍历,众多云原生技术的发展都是为了优化和完善 DevOps 实践而产生的,满足了云时代的系统复杂性和时效性要求,为 DevOps 实现质的提升提供了条件。

  1. 容器技术和 Kubernetes 服务编排技术的结合,解决了应用部署自动化、标准化、配置化的问题,使建设跨平台的应用成为可能,Kubernetes 成为事实上的云上应用运行平台的标准,极大地简化了多云部署
  2. 微服务技术降低了服务耦合,让开发和部署更加便捷,有效缩短开发周期,提高部署灵活性
  3. Service Mesh 技术使中间件的升级和应用系统的升级解耦,提升运维和管控的灵活性
  4. Serverless 技术让运维对开发透明,对应用所需的资源自动进行扩缩容
  5. FaaS 技术进一步简化开发和运维的过程,从开发到测试上线都可以在一个集成开发环境中完成

云原生技术促进了 DevOps 技术的演进,而 DevOps 又对容器技术的安全和效率提出了更高的要求,推动容器技术实现更多的创新和变革。

2、DevOps 原则

在现代软件开发和运维领域,DevOps 已经成为一种被广泛采纳的工作方法论,它已经不仅仅是一种技术和工具的集合,更是一种文化和理念的体现。DevOps 包括 CAMS 四个核心原则,分别是:文化(Culture)、自动化(Automation)、度量(Measurement)、共享(Sharing)。

文化

说到 DevOps,一般关注的都是技术和工具,但是实际上,DevOps 要解决的核心问题是人与业务、人与人的问题,即如何提高研发效率,加强跨团队的写作。如果每个人都能够更好地理解对方的目标和所关注的对象,那么彼此的协作质量必将明显提高。

DevOps 的文化原则强调的就是团队之间的协作、信任和共同责任,在传统的开发和运维模式种,开发和运维往往是两个独立的部门,彼此之间缺乏有效的沟通和合作。而在 DevOps 文化种,团队成员被鼓励跨部门合作,打破传统的组织壁垒,形成一个共同的目标和价值观。团队成员应该相互尊重、信任,并且愿意分享知识和经验,共同努力实现团队的使命和愿景。

自动化

对于持续集成,DevOps 的目标就是小步快跑、快速迭代、频繁发布。小点的系统这个相对比较容易,但是大型系统动则每次发布涉及到几十甚至几百人,要让这个流程顺畅,并不是一件容易的事情,这时就需要规范化和流程化,让可以自动化的实现自动化。

自动化是 DevOps 的核心特征之一。通过自动化减少软件交付流程中的重复性任务和人为错误,可以提高效率、降低成本,并确保交付的一致性和可靠性。自动化的范围包括构建、测试、部署、监控等方面。例如,使用持续集成和持续交付(CI/CD)工具自动构建和部署软件;利用配置管理工具自动配置和管理基础设施;采用自动化测试工具进行自动化测试和质量保证。

度量

度量可用于对各个活动和流程进行分析,找到工作种存在的瓶颈和漏洞,并在发生危机情况时及时报警等,从而根据分析结果调整整个协作团队的工作和系统,提升效率,形成一个完整的闭环。

度量是衡量和监控软件交付过程的关键。它包括度量团队的绩效、监控应用程序的健康状况、收集用户反馈等。通过度量,团队可以及时发现问题并采取相应的措施,持续改进软件交付流程。度量也是实现持续改进的基础,通过收集和分析数据,团队可以识别瓶颈和优化点,不断提高软件交付的效率和质量。

共享

要想实现真正的协作,团队还需要在知识层面达成一致。共享知识可以使得团队共同进步。共享是 DevOps 文化中的重要组成部分,团队应该共享知识、经验和工具,促进团队之间的合作和学习。共享还包括开源社区的参与,通过贡献和分享开源项目,推动行业的发展和创新,通过共享,团队可以避免重复工作,加速问题解决的速度,提高团队的生产力和创造力。从我这些年的经验来看,我觉得应该包括以下三个方面:

  • 可见度:每个人都可以了解团队其他人的工作,了解某一项工作是否对其他工作产生影响,相互反馈可以使得问题尽早暴露并得到解决。
  • 透明性:每个人都需要明白工作的共同目标,缺乏透明性将会导致工作安排失调。
  • 知识共享:知识共享主要为了解决两个问题,一是避免某个人成为单点,避免因为该员工的休假或离职导致工作无法正常完成,二是提高团队的集体能力,团队的集体能力要高于团队中个人的能力。

DevOps 的 CAMS 原则是构建高效、协作、持续交付的文化的关键,通过培养良好的团队文化、实现自动化、度量团队绩效、促进知识共享,团队可以实现持续改进,提高软件交付的效率和质量,从而为企业的业务发展和创新提供支持。

3、DevOps 技术和工具

在实际的 DevOps 实践种,是涉及到很多技术和工具的,它们共同构建一个自动化、协作和高效的软件开发生态。

版本控制系统

在软件开发种,版本控制系统是不可或缺的工具,它能够帮助团队协作、管理代码版本、追踪变更记录等。常用的版本控制系统 Git 和 SVN,但是 Git 因为分布式特性和强大的功能已经成为主流,各家云服务提供商也提供了 Git 的云上托管产品能力。

持续集成和持续交付工具

持续集成和持续交付是 DevOps 中的重要实践,能够通过自动化流程,确保代码质量、快速部署和交付,常用的工具包括 Jenkins、GitLab CI/CD 等,我更倾向于阿里云的流水线产品,它们都提供了自动化构建、测试和部署的功能,可以帮助团队快速迭代和交付软件。

自动化部署和配置管理工具

这是实现持续交付的关键,能够帮助团队快速、可靠地部署和配置软件环境,常见的工具包括 Ansible(基于 SSH 的配置管理和自动化部署的工具,用于快速配置和管理服务器)、Puppet(基于模型驱动的配置管理工具,用于自动化服务器配置和软件部署)、Chef(基于 Ruby 的配置管理工具,用于自动化服务器配置和软件部署)等,此外就是各家云服务提供商的对应的产品,通过编排和管理服务器配置,实现了基础设施即代码的理念,提高了部署效率和可靠性。

容器化和容器编排平台

容器化和容器编排是现代软件开发的趋势,能够实现应用程序的快速部署、弹性扩展和管理。Docker 和 Kubernetes 是目前最流行的容器化和容器编排平台,它们提供了统一的容器运行环境和自动化管理功能,极大地简化了应用程序的部署和管理。

监控和日志管理工具

监控和日志管理对于保障系统稳定运行和故障排查至关重要。Prometheus 和 ELK Stack 是常用的监控和日志管理工具,它们能够实时收集、存储和分析系统指标和日志数据,帮助团队快速发现和解决问题。

云计算平台

云计算平台提供了弹性、可扩展的基础设施和服务,能够帮助团队快速构建和部署应用程序。AWS、Azure 等云计算平台提供了丰富的计算、存储、数据库等服务,能够满足不同规模和需求的项目需求。此外国内的项目我还是比较偏向于阿里云。

编程语言和框架

在开发过程中,选择合适的编程语言和框架也是至关重要的。Python、Java、Go 等常用编程语言以及 Spring Boot、Express.js、Flask 等开发框架能够帮助团队快速开发、部署和维护应用程序。

项目协作

项目协作工具在团队协作和沟通中扮演着重要角色,能够帮助团队成员协同工作、分享信息和跟踪任务进度。常见的项目协作工具包括 Jira、Confluence 等,依旧推荐阿里云的云效项目管理服务。

DevOps 相关技术和工具的应用能够帮助团队实现快速交付、高质量和可靠性的软件产品,提升团队的工作效率和竞争力。在实际项目中,团队可以根据需求和场景选择合适的技术和工具,并不断优化和改进工作流程,以实现持续创新和价值交付。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

鸿蒙Harmony应用开发—ArkTS声明式开发(通用属性:显隐控制)

控制组件是否可见。 说明: 从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 visibility visibility(value: Visibility) 控制组件的显隐。 卡片能力: 从API version 9开始,该接口支持在…

BP 神经网络原理

BP (Back Propagation) 神经网络是1986年由 Rumelhart 和 McClelland 为首的科学家提出的概念,是一种按照误差逆向传播算法训练的多层前馈神经网络,是应用最广泛的神经网络。 1 BP 神经网络的结构和传播规则 BP神经网络由 输入层、隐含层(也…

Revit-二开之立面视图创建FilledRegion-(3)

在上一篇博客中介绍了FilledRegion的创建方法,这种方法通常只在平面视图中适用,在三维视图中也是无法创建的(目前研究的是这样的,如果有其他方法,请赐教)。 本片文章介绍一个下在立面视图中创建FilledRegion的方法,主要操作是在立面视图中拾取一个点,然后以该点为原点,…

javaweb day9 day10

昨天序号标错了 vue的组件库Elent 快速入门 写法 常见组件 复制粘贴 打包部署

PYTHON 自动化办公:压缩图片(PIL)

1、介绍 在办公还是学习过程中,难免会遇到上传照片的问题。然而照片的大小限制一直都是个问题,例如照片限制在200Kb之内,虽然有很多图像压缩技术可以实现,但从图像处理的专业来说,可以利用代码实现 这里使用的库函数是…

【Redis知识点总结】(一)——各种数据结构及其应用场景

Redis知识点总结(一)——基础数据类型及其应用场景 基础数据类型基础数据类介绍底层数据结构SDS(简单动态字符串)list(双向链表)ziplist(压缩列表)quicklist(快速表&…

Unity3D学习之Lua热更新解决方案(二)XLua

文章目录 1 XLua概述2 xLua导入和AB包相关准备3 C#调用Lua3.1 Lua解析器3.2 文件加载重定向3.3 Lua解析器管理器3.3.1 重定向AB包内的Lua3.3.2 获得_G大表 3.4 全局变量的获取3.5 全局函数的获取3.5.1 无参无返回3.5.2 有参有返回3.5.3 多返回值3.5.4 变长参数 3.6 List和Dicti…

策略模式 详解 设计模式

策略模式 策略模式是一种行为型设计模式,它定义了一系列算法,将每个算法封装到具有共同接口的独立类中,并且使它们可以相互替换。 策略模式可以让算法的变化独立于使用算法的客户端。 主要解决: 在有多种算法相似的情况下&#…

Linux系统管理:虚拟机 Kali Linux 安装

目录 一、理论 1.Kali Linux 二、实验 1.虚拟机Kali Linux安装准备阶段 2.安装Kali Linux 2. Kali Linux 更换国内源 3. Kali Linux 设置固定IP 4. Kali Linux 开启SSH远程连接 5. MobaXterm远程连接 Kali Linux 三、问题 1.apt 命令 取代哪些 apt-get命令 一、理论…

Linux文本处理三剑客:awk

在Linux操作系统中,grep、sed、awk被称为文本操作“三剑客”,上两期中,我们将详细介绍grep、sed的基本使用方法,希望能够帮助到有需要的朋友,现在,我们继续学习awk。 虽然awk是一个Linux中常见的命令&…

C 嵌入式系统设计模式 17:静态优先级模式

本书的原著为:《Design Patterns for Embedded Systems in C ——An Embedded Software Engineering Toolkit 》,讲解的是嵌入式系统设计模式,是一本不可多得的好书。 本系列描述我对书中内容的理解。本文章描述嵌入式并发和资源管理模式之三…

Slicer学习笔记(六十五) 3DSlicer的医学图像数据增强扩展模块

1. 医学图像数据增强扩展模块 基于3D Slicer5.1.0 编写了一个测试医学图像的数据增强测试扩展模块。 扩展模块名:DataAugementation 项目地址:DataAugmentation 下载该项目后,可以将该扩展模块添加到3D Slicer的扩展中。 关于如何给3DSlicer…

【STA】多场景时序检查学习记录

单周期路径 建立时间时序检查 在时钟的有效沿到达触发器之前,数据应在一定时间内保持稳定,这段时间即触发器的建立 时间。满足建立时间要求将确保数据可靠地被捕获到触发器中。 建立时间检查是从发起触发器中时钟的第一个有效沿到捕获触发器中时钟后面…

萌新学习RSA第一天

文章来自NSSCTF工坊Xenny的课程 1.非对称加密 2.介绍RSA来源(三位数学家名字开头) 3.RSA数学基础 4.算法实现 from Crypto.Util.number import * #这个是关于RSA很多函数的库 p getPrime(512) #111RSA第一步:生成随机的51…

Sora学习(一):Sora技术路径整体认知

前文:最近跟着DataWhale组队学习这一期“Sora原理与技术实战”,本篇博客主要是基于DataWhale成员、厦门大学平潭研究院杨知铮研究员分享的Sora技术原理详解课件内容以及参考网上一些博客资料整理而来(详见文末参考文献)&#xff0…

鸿蒙Harmony应用开发—ArkTS声明式开发(通用属性:禁用控制)

组件是否可交互,可交互状态下响应点击事件、触摸事件、拖拽事件、按键事件、焦点事件和鼠标事件。 说明: 从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 enabled enabled(value: boolean) 设置组…

持续集成(CICD)- Git版本管理工具,Gitee线上仓库

文章目录 一、学习目标:二、什么是Git工具三 、Git环境搭建(windows系统)四、Gitee设置(私钥和公钥绑定)五、Git结合Gittee进行基本设置(重要)六、在Gitee上新建仓库私有仓库(非空仓库)七、Git拉取线上仓库代码,提交代码(重要)八、Git解决版本冲突问题(重要)场景一…

第二讲:用geth和以太坊交互

一:安装geth brew install ethereum geth github网址: https://github.com/ethereum/go-ethereum 二: 用geth连接以太坊 以太坊有主网络(Ethereum Mainnet),有测试网络(Sepolia、Goerli 等等…

leetcode 热题 100_盛最多水的容器

题解一: 双指针遍历:容量计算公式为min(左高度,右高度)*底部距离,我们可以令底部距离逐步递减(左右两边的指针向中部移动)。此时对于min(左高度,右高度),假设较高的线向中部移动&…

如何修炼成“神医”——《OceanBase诊断系列》之一

本系列是基于OcenaBase 开发工程师在工作中的一些诊断经验,也欢迎大家分享相关经验。 1. 关于神医的故事 扁鹊,中国古代第一个被正史记载的医生,他的成才之路非常传奇。年轻时,扁鹊是一家客栈的主管。有一位名叫长桑君的客人来到…