DevOps 温故知新

【引】伴随着微服务架构以及云技术的广泛使用,DevOps相应地引起了人们的关注,尤其在互联网企业展开了大量的探索和实践。去年赋闲在家的时候, 有幸精读了三本书,分别是《持续架构实践——敏捷和DevOps时代下的软件架构》,《精益DevOps——快速安全的IT交付宝典》和《基础设施即代码——模型驱动的DevOps》, 于是,温故知新,老码农对DevOps 又有了不同的体会。

DevOps的出现是“左移运动”的具体体现,是为了按时交付软件产品和服务,可看作开发、运维和质量保障三者的交集,旨在通过改善这三个部门之间的协作,提高组织提供应用程序和服务的速度,从而更好地为客户服务并在市场中保持竞争力。遗憾的是, 在经典DevOps 环中的“Test”并没有凸显QA团队的作用。

952616c2ac4932731c04a7ea11923313.png

DevOps的实施涉及到多个方面,包括自动化工具的使用、持续集成/持续部署(CI/CD)的实践、监控和日志分析系统的建立等。通过这些实践,DevOps可以确保软件在开发、测试、部署和运维等各个环节中都能够保持高效、可靠和一致。

DevOps 的技术组成

DevOps 涉及了技术、组织、文化等多个领域,就相关技术技能而言, 大约包括以下几个层次:

a69b174e83513c23e4fd6d9c2f0406c9.jpeg

基础的技术技能包括版本控制、Linux 操作系统的操作、编程技能、数据库和网络操作等,其中与Ops相关的编程主要是Shell 和Python。CI/CD 是DevOps 的关键环节,常见的工具包括Jenkins、Github Action,GitLab CI 等。容器化技术保证了CI/CD 的环境一致性,同时为服务和网络的编排提供了工具。就具体的部署环境而言, IaC 是实现面向混合云快速部署的关键。监控和日志与传统运维领域的技术类似,区别可能是颗粒度不同。

DevOps 中CI/CD 流水线

CI/CD 是DevOps 的关键技术点,工作流及其流水线是工程效率提升的主要体现。

b29f95e9eabe8db18a3ddd00b40be7e3.png

CI/CD有助于从初始代码提交到部署的软件开发过程。通过自动化流水线,它消除了传统上将代码运送到生产环境所需的大量手动人工干预。

持续集成(CI)包括自动化构建、执行测试以及将单个开发人员的代码合并到共享存储库中。持续集成的主要目标是有效地将源代码集成到共享存储库中。一旦将更改提交给版本控制系统,就会执行自动构建和测试用例,以确保代码的功能和有效性。这些过程验证源代码如何编译以及测试用例在执行期间如何执行。

其中代码入库可以做成一个单独的流水线:

b1a17353a8159a75257aaff16f7ba0ae.png

构建和测试作为另一条流水线:

7ebba45aee1b5855af4a94e2a0d04c86.png

持续部署(CD)是 CI/CD 流水线中 CI 之后的下一步,是自动部署将自动测试阶段传递到生产环境的每个代码更改的实践。其典型的流水线如下:

dac97ad681f5683dcb8b5c7601497df9.png

持续部署的重点是在生产环境中快速部署代码变更。它的根源可以追溯到敏捷宣言,强调“早期和持续交付的有价值的软件”来满足客户。真正的持续部署是具有挑战性的,而且没有像 CI 那样被广泛采用,但是一个更常见的实践方式是持续交付(Continuous delivery)。持续交付和持续部署的主要区别在于,持续交付可能侧重于“ready for production”,不是自动完成上线,而是完成上线准备。

从DevOps 到MLOps

如果对DevOps中的Dev 进行领域划分和扩展,就会形成XOps。随着人工智能的广泛使用, 机器学习成为了Dev 中的一个重要领域,从而形成了DevOps 的一个变体——MLOps。

MLOps的核心思想是将DevOps的流程和工具应用于机器学习领域,以实现机器学习应用的持续集成、持续交付和持续部署。MLOps的目标是通过使机器学习的开发、测试和部署更加自动化来增强软件开发的效率和质量。 

MLOps可以更好地管理机器学习模型的生命周期,包括数据准备、传输和转换、模型训练和优化、模型评估和选择、模型部署和监控等。同时,MLOps也可以帮助团队管理开发和生产环境之间的差异,保证模型在生产环境中的稳定性和可靠性。简单而言,MLOps增加了领域特殊性的环节——持续训练(Continuous Training,CT)。

deff0014e336dc8a280fd6632a7fa048.jpeg

MLOps的引入,使得机器学习模型的开发和部署流程更加高效,从而加快了AI应用的创新速度并降低了错误率,还有助于加强数据安全性和合规性,并提高机器学习应用的可靠性和可维护性。

至于LLMOps, 后续会有专门的文章重点总结。

面向基础设施的DevOps

DevOps 不仅仅适用于软件交付,而是面向整个IT交付领域。那么,如何将DevOps应用于基础设施呢?如何高效、智能地管理和配置基础设施呢?

这就需要IaC,IaC 是面向基础设施的DevOps 的关键技术。面对基础设施尤其是网络环境的多样化和差异性,对网络进行建模是实现IaC的前提。

通过模型驱动的方式,IaC是一种将基础设施管理过程自动化的方法,通过使用编程语言来描述和管理基础设施资源,实现对基础设施的快速部署、配置和管理。

ff9d13d9ea8b57a9b3eea7921d69ed9f.jpeg

与传统的手动管理方式相比,IaC具有更高的灵活性、可扩展性和可维护性,能够帮助企业降低运营成本、提高运维效率。

从DevOps 到 DevSecOps

DevSecOps是DevOps实践的自然演变,其重点是将安全性集成到软件开发和部署过程中。术语“DevSecOps”代表了开发(Dev)、安全(Sec)和运营(Ops)实践的融合,强调了安全在整个软件开发生命周期中的重要性。在QCon 2022的关于工程师成长专题中,我曾分享过《工程师成长的金字塔思维》,其中涉及了DevSecOps 的敏捷安全金字塔。

9b8effb55cd5df06edc72f93b7a77ad5.jpeg

DevSecOps的核心理念是“业务应用生命周期的每个环节都需要为安全负责,安全是整个IT团队(包括开发、测试、运维及安全团队)所有成员的责任,并且需要贯穿到从研发至运营的全过程”。相较于传统的研发运营安全,它更注重在开发阶段就考虑并融入安全因素,而不是仅仅在测试及运营阶段进行安全威胁的检测、识别、修复和防御。

db6a3add89ae7038f59f8cad2e6ec6c8.png

DevSecOps是DevOps概念的延续,可以最大限度在软件上线前减少产品的漏洞,并完全地被最终用户使用。由于每个流程和相关工作流程都通过严格的安全检查实现自动化,因此可以更准确地满足安全要求。

DevOps 的方法论

我们很容易理解DevOps为IT服务交付带来的诸多益处,但对如何让DevOps 真正融入我们的软件工程中往往缺乏真正有意义的指导方法。也就是说,DevOps的落地确实是个难题,它不仅需要技术层面的支持,还需要组织文化、流程管理、团队协作等多方面的配合。

“他山之石,可以攻玉”,我们可以参考借鉴其他领域的反法论来实现DevOps,例如精益管理。精益管理是由丰田精益生产方式创生出的具有全新思维方式和行为方式的管理,在制造业取得了巨大的成功。精益思想是适于任何组织消除浪费、创造价值的最强有⼒⼯具。基于精益思想的DevOps能有效地减少交付摩擦和管理服务交付风险,应用OODA循环,可以通过管理不可预测性来提升组织的执行力,

395c805449737cc572838a7be2767615.jpeg

DevOps 本身就是把精益思想应用到技术价值流中的结果,而技术价值流是把业务构想转化为向客户交付价值的、由技术驱动的服务所需要的流程。精益思想是DevOps乃至敏捷开发的魂魄,也是指引DevOps及敏捷开发落地的灯塔。

【关联阅读】

  • 《精益DevOps》译者序

  • DevOps 全栈必备双刃剑

  • 《基础设施即代码(IaC)》译者序

  • 架构软件工程的未来

  • 远程软件工程师的10个最佳实践

  • 全栈的技术栈设想

  • 面向全栈的技术管理

  • 全栈必备:系统架构设计的10个思维实验

  • API协议设计的10种技术

  • 机器学习模型性能的10个指标

  • 浅析多模态机器学习

  • 大模型应用的10种架构模式

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

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

相关文章

vue 运行项目node-scss报错

vue项目node版本与自己电脑node版本不一样运行node导致报错 node-sass模块对node版本有兼容性,版本不适配,就容易报错 解决方案: 在项目目录下打开cmd: 输入命令: npm rebuild node-sass 然后再更新一下:…

重生奇迹mu剑士职业

1、剑士转职条件: 首先等级需要达到150级,在冰风谷寻找NPC圣导士《赛维娜》开启第一次转职任务,转职步骤分为两步,每完成一个步骤同时奖励10点属性点。 2、第一阶段: 与NPC圣导师赛维娜对话接取任务 2.领取任务后击…

SpringBoot报空指针错:java.lang.NullPointerException

虽然报空指针错误的原因可能有很多种,但是我还是写上我的报错原因,以此与各位共勉~ 在这里提前说一句,AI虽然强大,但是还是要谨慎使用啊(血的教训)~ 这里先截图我错误的地方: 前端能成功传进来值,后台控制…

网络安全快速入门(九)MySQL进阶操作

上一章我们了解了对表及库的基本增删查改操作,本章我们针对增删查改内容进行与一些拓展, 9.1字段修饰及数据类型 我们之前在创建表时用到的格式为: create table 表名 ( 字段名1 字段数据类型(数据类型长度), 字段名2 …

SpringAMQP 发布订阅-DirectExchange

DirectExchange: 路由模式模型 代码实现 直接通过注解方式绑定交换机和队列,这里边加了key也就是BingdingKey绑定key,可以看作交换机的路由规则,交换机收到消息后读取消息中指定的Routingkey发送到存有相应BingdingKey的队列中。 RabbitLis…

界面组件DevExpress Reporting中文教程 - 标记(可访问)PDF导出增强

DevExpress Reporting是.NET Framework下功能完善的报表平台,它附带了易于使用的Visual Studio报表设计器和丰富的报表控件集,包括数据透视表、图表,因此您可以构建无与伦比、信息清晰的报表。 可访问性支持在DevExpress这里仍然是一个高优先…

XR806开发板MQTT电源智能控制器

非常感谢这次极术社区,借助对Xr806开发板的试用,接触到了鸿蒙harmonyos,使用一定过程历时较长,也是一点点摸索,得到了很好学习机会。 社区里很多文章,感谢各位大佬的文章指点,本次试用主要是参考了两位大佬…

数据结构(二) 线性表

2024年5月13日一稿 线性表的定义与基本操作 数据类型相同(各个元素占用空间相同) 是有限序列 基操

武汉星起航:亚马逊店铺经营秘籍,揭秘提升点击率的关键策略

在竞争激烈的亚马逊电商平台上,提升点击率成为了每个卖家都渴望实现的目标。点击率不仅直接关系到商品的曝光度和销售量,更是衡量店铺经营效果的重要指标。那么,如何才能在众多商品中脱颖而出,吸引潜在买家的目光呢?武…

浏览器不兼容 replaceAll 方法问题解决

问题 在一些较旧版本的浏览器中可能会出现 replaceAll 方法不兼容,提示replaceAll 方法 undefined 的问题。浏览器版本兼容情况如下图所示: 解决 可以通过 replace 正则表达式 的方法来代替 replaceAll 方法: let str "我是一段文本…

【激活函数--下】非线性函数与ReLU函数

文章目录 一、非线性函数在神经网络中的重要性二、ReLU函数介绍及其实现2.1 ReLU函数概述2.2 ReLU函数的Python实现及可视化 一、非线性函数在神经网络中的重要性 在神经网络中,激活函数的选择对于网络的性能和能力至关重要。阶跃函数和Sigmoid函数除了是激活函数的…

想跨境出海?云手机提供了一种可能性

全球化时代,越来越多的中国电商开始将目光投向了海外市场。这并不是偶然,而是他们在长期的市场运营中,看到了出海的必要性和潜在的机会。 中国的电商市场无疑是全球最大也最发达的之一。然而,随着市场的不断发展和竞争的日益加剧…

300订单,成交大于一切

最近一直在忙于做老客户的需求,新客户挖掘方面有点大大的落后了,新客户的成交率接近0。 今天来了一个新客户,部署一套系统,我的正常报价都是300/次,至于为什么定这个价格后面再说,经过沟通客户没有服务器&…

【数据库】数据库指令

一。数据库打开 1.命令行 2.进入mysql mysql -uroot -p密码 3.退出 exit; 二。针对数据库的操作 1.创建数据库(有分号) create database student; 2.使用数据库 use student 3.删除数据库(有分号) drop database…

KNIME 报告扩展

文档对应的 KNIME AP 版本为 5.2 介绍 本指南介绍了 KNIME 报告扩展,并展示了如何创建简单和高级报告。 本指南更新于 2024/05/13,最新版请访问指北君网站 https://havef.fun/knime-cn/knime-doc/ KNIME 报告扩展允许您根据工作流程的结果创建静态报告。…

机器人系统ros2内部接口介绍

内部 ROS 接口是公共 C API ,供创建客户端库或添加新的底层中间件的开发人员使用,但不适合典型 ROS 用户使用。 ROS客户端库提供大多数 ROS 用户熟悉的面向用户的API,并且可能采用多种编程语言。 内部API架构概述 内部接口主要有两个&#x…

岩土工程监测仪器之一:振弦采集仪的工作原理解析

岩土工程监测仪器之一:振弦采集仪的工作原理解析 河北稳控科技振弦采集仪是岩土工程监测中常用的一种仪器,用于测量地面、结构物或其他物体的振动情况。它通过感应振弦的振动来获取相关的数据,进而分析和评估土壤、地基或结构物的稳定性和安…

hdfs块数据丢失(启动安全模式)

进入安全模式 hdfs dfsadmin -safemode退出安全模式 hdfs dfsadmin -safemode forceExit

数据可视化(九):Pandas北京租房数据分析——房源特征绘图、箱线图、动态可视化等高级操作

Tips:"分享是快乐的源泉💧,在我的博客里,不仅有知识的海洋🌊,还有满满的正能量加持💪,快来和我一起分享这份快乐吧😊! 喜欢我的博客的话,记得…

5.13号模拟前端面试10问

1.介绍箭头函数和普通函数的区别 箭头函数和普通函数在JavaScript中有一些重要的区别。以下是关于这些区别的详细解释: 语法结构上的差异: 箭头函数使用更简洁的语法,它不需要使用function关键字,而是使用一个箭头(…