Skip to main content

关于DevOps,你是否也有这些误区?

本文由本人整理,发表在CSDN平台并署名【小雨青年】。

发布地址 : https://mp.weixin.qq.com/s?__biz=Mzg2ODEzOTA0OA==&mid=2247485967&idx=1&sn=dee1d186ff5c5b2529e0d4cc3f799a1b&chksm=ceb1a348f9c62a5e8187a0c7f343d418f8d6be4c82af486deec36724b7036074107d3e9a072c&token=1285259263&lang=zh_CN#rd

整理 | 小雨青年 校对 | 山河已无恙

出品 | CSDN云原生

声明:本文出自CNCF网站,最初由 Elyastisya 团队在Elyastisys博客上发表。CSDN将文章翻译成中文,分享给大家。

DevOps是一种文化,它为软件开发带来了许多急需的敏捷性。但它也被误解了:DevOps真的意味着开发人员除了开发之外,还应该在复杂的系统管理工作中表现出色吗?

本文将讨论开发人员和平台运维方之间技能的差异,以及DevOps的真正含义:开发人员完全拥有开发、发布和生命周期管理的所有权,并执行应用程序的操作——而不是底层平台。

图片 左边是不切实际的预期,右边是DevOps和平台运维的划分。

一、DevOps的兴起与误解

DevOps 是软件开发领域的一场文化运动,在这场运动中,开发人员承担其应用程序的运维责任。这不仅包括像以前那样的代码开发,还包括操作性的任务,例如发布新版本、管理其代码的生命周期(升级、数据库迁移等),以及通过监控和日志来观察其行为随时间的变化。

这极大地提高了生产力和敏捷性。开发人员对应用程序的生命周期拥有完全的所有权,这意味着他们关闭了代码在现实中行为方式的反馈循环。性能问题直接由负责修复它们的人员识别解决。应用程序洞察力直接提供给开发人员和设计人员,以优化应用程序用户体验等等。

但DevOps经常被误解,因为它鼓励开发人员做的要远远多于从前。

二、推动DevOps运动的技术

DevOps引发了组织文化变革。DevOps之所以能够以我们所看到的形式进入这个阶段,是因为有支持这种工作方式的技术。将基础设施作为代码工具工作的能力是由技术促成的,无论是虚拟机设置中的管理程序、Kubernetes设置中的容器,还是功能即服务设置中的语言运行时。如果没有这些技术,就无法采用我们所知道的 DevOps。

但仍然需要有人来管理底层技术。

在本文中,我们称他们为开发运维人员。

开发运维人员与开发者有何不同?

三、开发人员与开发运维人员技能组合

开发人员的工作是进行开发,因此他们最明显的产出是代码。但这不仅仅是代码,因为开发人员主要关注的是在一个高度抽象的问题域中处理问题,对问题域进行建模,并将这些模型和抽象转换为代码。

相比之下,平台运维商则专注于计算机系统的内部运作,确保它们高效、安全、正确地运行,并且随时可用。

软件开发和平台运维任务所需的技能差别很大。

在DevOps中,开发人员还应负责管理其应用程序的生命周期并在运行时观察它们。这不仅意味着开发人员的责任转移,还意味着他们需要学习一套工具和支持技术:对可观察性堆栈,例如日志和监控系统;对部署编排,例如用于使用云、Kubernetes或功能即服务平台的API和工具。

而开发人员通常会接受这些工具和新的工作方式。因为随着责任的增加,敏捷性会随之提高,在工作中也会更加高效。这些好处是立竿见影的,并且整个组织都能感受到。

但关键是,必须有人让这些新工具和平台组件发挥作用。这不仅仅是安装一次,还要维护它们、升级它们、排除故障并保护它们。

最重要的是,期望开发人员同时管理底层系统是不合理的。

但这些底层基础设施就是开发运维人员所做的!

开发运维人员拥有足够深入的理解技术工作方式以进行故障排除所需的技能,例如为什么网络失败、操作系统耗尽文件描述符或为什么 I/O 性能突然下降。

正确地对问题领域的“人类现实”进行建模并将该模型转换为代码已经足够困难了,还要在足够深的层次上理解操作系统,从而自信地排除“计算机现实”的故障,无疑是难上加难。

有些问题当然可以通过粗暴的操作方法来解决,例如更换运行时(VM、容器平台、函数运行时)。但是那些根深蒂固的由错误引起的会导致错误反复出现的问题,必须真正得到解决。

即使是牛生病了也需要兽医帮助,开发运维人员就是类似兽医的那些老手。

这就是鼓励开发人员多劳多得的方式:他们被告知既要进行开发又要进行所有操作。实际上,这不是合理的应用程序操作,而是底层平台的不合理管理。

一个人擅长前端和后端的JavaScript,并不意味着他们在系统底层方面也很出色。

这并不意味着他们能有效地完成这些任务。他们的时间可能更适合花在做他们擅长的事情上,而不是疯狂地在谷歌上搜索系统底层问题的答案。花费在这方面的任何时间都意味着他们没有开发新的功能,而是效率低下地对平台进行故障排除。

四、安全风险角度

让没有经过适当培训的人负责平台安全也是一种严重的安全风险。安全领域以光速发展,而开发人员永远没有足够的时间来处理所有问题。

您积压的无数安全任务就是证明。这些通常与应用程序的安全性有关。如果连这些都没有解决,谁来处理与平台相关的问题?

那么在实践中,真正的DevOps是什么样的呢?

五、真正的DevOps

图片 让我们再看一下这张图,并重点关注它的右侧。

开发人员可以通过承担开发和应用程序运维的职责来实践DevOps的工作方式。这使开发人员可以快速迭代,以敏捷的方式监控、分析、计划和执行代码更改,从而能够集中精力开发应用程序为组织创造价值。

在技术层面上,DevOps使平台运维方在后台工作,并让平台和系统保持良好的运转,这为开发人员以DevOps方式履行新职责奠定了基础。

DevOps 从未打算让开发人员同时进行应用程序和平台操作。

DevOps的初衷是让开发人员有更多时间为最终用户创造价值,同时提高工作效率,而无需在开发和平台运维之间进行思维转换