到底什么是 DevOps?当然,有许多定义,但有时您需要超越定义,看看人们如何真正使用一个词。业内人士谈论 DevOps 时的真正含义是什么?它只是一种让开发人员参与运营、让他们全面参与运营团队和基础设施管理的方式吗?
如果您以这种方式看待 DevOps,就会有很多公司,而且您不会真的错了。从功能上讲,运营和基础架构的需求是 DevOps 的主要驱动力。 DevOps 将开发带入运营帐篷并将开发实践应用于基础架构,但它不会将运营移出帐篷。
但 DevOps 不仅仅是一个功能框架。如果仅此而已,那么它的支持者和批评者都会将其视为针对缓慢且低效的开发/发布周期的技术和临时修复程序包,而不是其他。虽然技术补救措施是 DevOps 的一部分,并且提高开发/发布周期的速度和效率是其主要目标之一,但严格基于这些因素的定义似乎并不充分。只需看一眼关于 DevOps 的在线讨论就足以让即使是不经意的观察者相信这个主题还有更多内容。
事实上,目前与 DevOps 相关的特定工具和实践在很大程度上是偶然的,而不是它固有的。一些脚本语言可能优于其他语言,但在紧要关头,它们中的大多数(也可能是任何一种)就足够了。虚拟化和容器化很重要,但从长远来看,用于包装应用程序并将其与环境隔离的方法可能并不那么重要。您唯一真正可以指望的是,今天的工具很可能在几年后就过时了。
那么,如果 DevOps 不是一组明确定义的工具或实践,那么什么是 DevOps?除了现代软件管理产品和流行语的抢手包之外,它还有什么吗?
是的;最重要的是,DevOps 是一种策略。更准确地说,它是一个战略框架,用于将开发和运营转变为新的、尚未完全定义的事物。这种转变的基础是不仅对开发和运营,而且对它们的基础环境进行根本性的重新定义。我们正在开发什么,我们在运营什么,以及针对哪些用户群?如果今天我们正在生产针对大众市场用户群的服务流,我们能否负担得起以更适合软件由在公司网络上运行的明确定义的程序包组成的时代以及瀑布流的时代来定义我们正在做的事情开发是一种适当的方法吗?
在许多方面,引起 DevOps 的基本问题仅仅是软件开发有历史这一事实。与任何其他人类机构或努力一样,它的历史已成为一种牢笼,将其困在过去的定义、类别和实践中。我们认为理所当然的事情——从低级代码命令的名称和格式到嵌入开发和操作的制度环境——都是那段历史的产物,而不是生产、部署和维护实践的基础软件。
如果一群可以访问当前硬件和基本编程工具但完全不了解软件历史或过去或当前开发和操作实践的聪明人要设计一套用于创建、部署和维护的工具和实践基于网络的服务,他们会想出什么?他们会用与现在存在的东西有任何关系的术语和类别来定义他们在做什么或生产什么吗?
开发运营战略
DevOps 可以被视为一个战略框架,无需实际求助于 Ren 和 Stimpy 的历史橡皮擦按钮即可找到这些问题的答案。它首先将手头的基本任务重新定义为“向公众提供一系列基于 Web 的服务”,而不是更传统的“为一组最终用户开发基于计算机/网络的应用程序,同时由一组功能要求定义的应用程序和最终用户。”从理论上讲,DevOps 中的所有其他内容都可以源自该重新定义。在实践中,DevOps 是一种策略,用于发现和实施从“基于 Web 的服务流”方法中自然产生的实践。
作为一种战略,它的重点必然是人,而不是工具或方法,因为真正执行战略的是人;锤子是一个很好的工具,但是握锤子的手决定了何时何地使用它。 DevOps 人员战略的核心必须是组建一个团队,其中的成员根据需要完成的工作承担不同的角色。理想情况下,编写基础架构代码的开发人员不应感到自己正在跨越某种边界或暂时在“另一个筒仓”工作,而应该感觉自己是作为一个集成团队的一部分工作。 IT 人员应将部署视为包括开发和测试在内的持续流程的一部分。
作为一种策略,DevOps 对工具和方法的使用必然会集中在两个目标上:支持持续发布和相关流程,并使团队成员能够以高效、轻松的方式完成工作尽可能。
战略不是最终产品,也不是成熟、稳定的过程。它们本质上是通往下一个半稳定平台的临时解决方案(因为在软件行业中,没有真正的稳定)。 DevOps 也不例外。它是一种开发管理持续交付的成熟和普遍认可的流程的战略,但它不是那个流程,因为我们还没有到达持续交付无处不在、稳定(和乏味)的高原) 就像曾经的瀑布一样。 DevOps 是旅程,而不是目的地。
关于作者
迈克尔·丘奇曼 (Michael Churchman) 在游戏行业风起云涌的早期担任编剧、编辑和制作人,致力于开创性的激光光盘游戏 Dragon's Lair 的原型。他在 90 年代的大部分时间里都在高压捆绑软件行业度过,在这个行业中,近乎连续的发布周期和自动化部署已经成为事实上的标准;在那段时间里,他开发了一个半自动化系统来管理超过 15 种语言的本地化。在过去的十年中,他一直从事软件开发过程的分析和相关的工程管理问题。