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

news2024/11/15 9:27:14

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.coloradmin.cn/o/1482018.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Educoder数据挖掘实训】异常值检测-箱线图

【Educoder数据挖掘实训】异常值检测-箱线图 开挖! 关于箱线图,核心理念就是找出上四分位数和下四分位数,定义二者的差为 I Q R IQR IQR。上下四分位数分别向上下扩展 1.5 I Q R 1.5IQR 1.5IQR定义为上界和下界,在此之外的数据被…

前端【技术类】资源学习网站整理(那些年的小网站)

学习网站整理 值得分享的视频博主:学习网站链接 百度首页的资源收藏里的截图(排列顺序没有任何意义,随性而已~),可根据我标注的关键词百度搜索到这些网站呀,本篇末尾会一一列出来,供大家学习呀 …

【图说】电脑发展史

免责声明:文中有一些图片来源自网络,如有版权请通知我删除,谢谢! “结绳记事”是计算的开端 如果说“结绳记事”仅是计数,那么“算筹”就是真正的计算工具 算盘也是我们老祖宗的杰出发明,最擅长“加减乘除”,包括但不限于乘方、开方、对数等。还能进行开发智力的“珠心算…

css实现背景渐变叠加

线性渐变效果图: .box{width: 100vw;height: 100vh;background:linear-gradient(to bottom,transparent,#fff 30%),linear-gradient(to right,pink,skyblue);}径像渐变效果图: .box{width: 100vw;height: 100vh;background:linear-gradient(to bottom,transparent,#…

SpringBoot+aop实现主从数据库的读写分离

读写分离的作用是为了缓解写库,也就是主库的压力,但一定要基于数据一致性的原则,就是保证主从库之间的数据一定要一致。如果一个方法涉及到写的逻辑,那么该方法里所有的数据库操作都要走主库。 一、环境部署 数据库:…

【AI+应用】aliyun的EMO图生视频模型引起的思考如何做AI数字人

昨天2 月 29 日消息,2 月 28 日,阿里巴巴集团智能计算研究院日前上线了一款新的 AI 图片 - 音频 - 视频模型技术 EMO,官方称其为 " 一种富有表现力的音频驱动的肖像视频生成框架 "。据悉,用户只需要提供一张照片和一段任…

WSL2更换国内源

1 备份初始源配置 sudo cp /etc/apt/sources.list /etc/apt/sources.list_bak 2 删除并替换/etc/apt/sources.list内容 sudo vim /etc/apt/sources.list 这里更改为阿里云源 Ubuntu 18.04下源参考 阿里云源: ​ deb ubuntu安装包下载_开源镜像站-阿里云 bionic main…

matplotlib——折线图(python)

前言 在学习数据分析前,一定要有python基础,不一定要非常熟练的掌握这门语言,但一定要对python有个大概的了解(就像我一样,大一学过python,但是现在忘的差不多了,但是没关系,有个大…

01、MongoDB -- 下载、安装、配置文件等配置 及 副本集配置

目录 MongoDB -- 下载、安装、配置 及 副本集配置启动命令启动 mongodb 的服务器(单机和副本集)启动单机模式的 mongodb 服务器启动副本集的 3 个副本节点(mongodb 服务器) 启动 mongodb 的客户端 MongoDB 下载MongoDB 安装1、解压…

Java 封装阿里云 oss 上传图片时抽取配置到 application 使用 @Value 获取值

Java 封装阿里云 oss 上传图片时抽取配置到 application 使用 Value 获取值 application .yml 配置 alioss: # 阿里云配置endpoint: "https://oss-cn-beijing.aliyuncs.com" # Endpoint以华东1(杭州)为例,其它Region请按实际…

ES系列之Logstash实战入门

概述 作为ELK技术栈一员,Logstash用于将数据采集到ES,通过简单配置就能把各种外部数据采集到索引中进行保存,可提高数据采集的效率。 原理 数据源提供的数据进入Logstash的管道后需要经过3个阶段: input:负责抽取数…

AI新工具(20240301) Ideogram; Image to Music Generator等

1: Ideogram 全新的多模态生图AI工具,以其优秀的文字渲染能力和生图能力受到业界瞩目 Ideogram是一个创新的AI工具,它通过在生成的图片中自然地整合文字,解决了生图AI领域长期存在的一个难题。这个工具特别擅长将文本以极其自然和协调的方式…

gRPC知识归档

文章目录 gRPC知识归档gRPC原理什么是gRPCgRPC的特性gRPC支持语言gRPC使用场景gRPC设计的动机和原则 数据封装和数据传输问题网络传输中的内容封装和数据体积问题JSONProtobuf(微服务之间的服务器调用,一般采用二进制序列化,比如protobuf&…

ChatGPT与GEE+ENVI+python高光谱,多光谱等成像遥感数据处理技术

原文链接:ChatGPT与GEEENVIpython高光谱,多光谱等成像遥感技术 第一遥感科学与AI基础 一:遥感科学的基本原理和历史 从摄影侦察到卫星图像 遥感的基本原理 遥感的典型应用 最新进展和未来趋势 二:ChatGPT 什么是ChatGPT&a…

数字口岸再升级:广西二期项目助力口岸通关提速运营增效!

在数字口岸相关政策的引领下,广西与RCEP其他成员国进出口规模有力攀升,大力推动了广西向海经济,临港产业集群不断壮大,大宗商品贸易快速增长。据海关统计,2023年,广西进出口总值6936.5亿元人民币&#xff0…

k8s中容器的调度与创建:CRI,cgroup

container调度与创建 选自:K8s、CRI与container - packy的文章 - 知乎 https://zhuanlan.zhihu.com/p/102897620 Cgroup创建: cgexec -g cpu,memory:$UUID \ > unshare -uinpUrf --mount-proc \ > sh -c "/bin/hostname $UUID &…

关于vue中关于eslint报错的问题

1 代码保存的时候会自动将单引号报错为双引号 导致eslint报错的问题, 解决思路: 在项目根目录下新建一个.prettierrc.json文件 { “tabWidth”: 2,“useTabs”: false,“singleQuote”: true,“semi”: false} 2 关于报错代码的时候 出现尾随逗号报错…

MySQL 多表查询 连接查询 外连接

介绍 MySQL 多表查询 连接查询 内连接 外连接分为两种,左外和右外连接, 左外:相当于查询表1(左表)的所有数据 包含 表1和表2交集部分的数据,完全包含左表的数据 右外:相当于查询表2(右表)的所有数据 包含 表1和表2交集部分的数据…

《PySide6/PyQt6快速开发与实战》P111被省略了的案例

编程环境:Fedora, QtCreator 见代码: # This Python file uses the following encoding: utf-8 import sys from PySide6.QtWidgets import QApplication, QMainWindow, QLabel, QVBoxLayout, QWidget from PySide6.QtGui import QPalette #, QColo…

Scratch 第十三课-飞机大战游戏

第十三课-飞机大战游戏 学习目标 这节课我们做一款大家都爱玩的飞机大战游戏,学习重点: 如何导入外部角色如何让飞机发射子弹鼠标控制角色移动 程序设计 程序分析 : 飞机大战游戏相信很多小朋友都玩过,我方飞机在下方&#xf…