DevOps 日渐成为研发人员耳熟能详的一个组合词,但什么是 DevOps,为什么 DevOps 对于互联网企业如此重要,真正将其思考透彻的人却不多,带着这些困惑,本文将带你一探 DevOps 的起源、原则和实践,让你搞清楚到底何为 DevOps。
DevOps 的起源可以追溯到 2008 年,在一次敏捷大会的敏捷基础设施话题组被提及,从起源我们可以了解到 DevOps 的发展跟敏捷软件开发是密不可分的。
DevOps 经过这些年的发展,其定义也在不断变化,先来看三段 DevOps 的 wiki 定义。
DevOps 2017 - 2020 年英文 wiki 定义(直译)
DevOps是一种软件工程文化和实践(Practices),旨在整合软件开发和软件运维。DevOps运动的主要特点是强烈倡导对构建软件的所有环节(从集成、测试、发布到部署和基础架构管理)进行全面的自动化和监控 DevOps 的目标是缩短开发周期,提高部署频率和更可靠地发布,与业务目标保持一致。
DevOps 2021 年英文 wiki 定义(直译)
DevOps 是一系列整合软件开发和软件运维活动的实践(Practices)。目标是缩短软件开发生命周期并使用持续交付提供高质量的软件。
另:
DevOps 与敏捷软件开发是互补关系,DevOps 的许多方面来自于敏捷方法论。
DevOps 中文 wiki 定义
DevOps(Development和Operations的组合词)是一种重视“软件开发人员(Dev)”和“IT运维技术人员(Ops)”之间沟通合作的文化、运动或惯例。透过自动化“软件交付”和“架构变更”的流程,来使得构建、测试、发布软件能够更加地快捷、频繁和可靠。
提取这三段的共同点,可以看到不论定义如何变化,DevOps 所要实现的目标都是一致的——缩短软件开发生命周期并使用 持续交付 提供高质量的软件。由于持续交付活动中包含了构建、测试和发布等活动,我更倾向于用这个定义,可以更好地缩减定义长度。
另外可以看到英文直接翻译过来的定义中都包含「实践」 一词,而中文 wiki 经过一定的翻译或本地化后变成了「文化、运动或惯例」,其还更强调开发运维之间 沟通合作 这一点,因此将最新的英文 wiki 定义与中文 wiki 定义相结合,可以帮助我们更好地理解 DevOps,那么它的最终定义是什么就交由读者朋友自己去领会吧。
为什么 DevOps 会如此热门,时常被人所提及,这与其发展背景是分不开的,主要原因可以概括为以下几点:
敏态需求的增加,即探索性工作的增加;
软件开发活动在企业经营活动中占比的不断增加;
企业存在对消除浪费的需求。
以上主要从企业的角度说明了 DevOps 的发展,这是较为深层次的原因,表层的推动因素包括:容器化技术的发展、微服务架构的发展等等,这些技术上的创新为 DevOps 提供了良好的发展条件,以解决企业面临的这些问题。
了解了什么是 DevOps 及其发展原因后,又该如何具体的进行 DevOps 实践,我们采用黄金圈法则来思考这一问题。
DevOps 原则是总体指导思想,实践是具体的执行方法,DevOps 是一个动态的过程,在进行相关实践的时候可以看看其应用了哪些原则,当违背原则的时候需要思考实践的合理性。
DevOps 包含以下三大原则:
坚持少做
持续分解问题
工作可视化
控制任务数量
减少交接次数
持续识别和改善约束点
消除价值流中的困境和浪费(导致交付延迟的主要因素)
在复杂系统中安全地工作
及时发现问题
在源头保障质量
为内部客户优化工作
在日常工作中注入弹性模式
领导层强化学习文化
基于 DevOps 的相关原则,有与其对应的实践,包括:流动的技术实践、反馈的技术实践和持续学习与实验的技术实践。在应用这些实践之前还需认真设计组织结构,使其有利于实践的开展。
利用康威定律设计团队结构。
过度职能导向(成本优化)的危害。
组建以市场为导向的团队。
使职能导向有效。
将测试、运维和信息安全融入日常工作。
使团队成员成为通才。
要使职能导向有效,需要由传统的集中式运维向提供运维服务的方向转变。
运维工程师融入开发团队。
为每个项目团队分派运维联络人(派遣的运维工程师)。
该部分包含以下内容:
自动化环境(开发、测试、正式)搭建。
所有内容做版本控制。
扩展完成的定义。
持续构建、测试和集成。
构建快速可靠的自动化测试套件。
让部署流水线始终保持绿色状态。
持续集成代码。
基于主干开发。
自动化部署步骤:构建、测试、部署;相关流程包括:
应用自动化的自助式部署
将部署和发布解耦
基于环境的发布模式
基于应用的发布模式
持续交付的实践
持续部署的实践
安全地演进企业架构
这部分包含以下内容:
什么是遥测(Telemetry)?
遥测的三大维度
可观察性
集中式监控系统(可使用:Prometheus、SkyWalking)
重大应用事件清单:
建立自助访问的可视化遥测信息系统(信息辐射器)
发现和填补遥测的盲区(建立充分而完整的遥测)
解决告警疲劳
使用统计分析方法,而非静态阈值设置告警
使用预防故障的告警,而不只是故障发生后的告警
异常检测技术
价值流中的所有人(开发人员、开发经理、架构师、运维团队等)共同承担运维事故的下游责任。
让开发人员跟踪工作对运维人员的影响。
让开发团队自行管理生产服务。
在功能中集成A/B测试
在发布中集成A/B测试
在功能规划中集成A/B测试
防止「过度控制变更」
建立同行评审,缩短审批流程
代码评审
利用结对编程改进代码变更
评估合并请求的有效性
这部分包含以下内容:
公正文化和学习文化
降低事故容忍度,寻找更弱的故障信号
重新定义失败
创建故障演练日
[ChatOps] 使用聊天机器人、积累组织知识
将标准、流程和规范转化为便于执行的形式
运用自动化测试记录和传播知识
项目开发中包含非功能性的运维需求
把可重用的运维用户故事纳入开发
技术选型需要考虑运维因素
偿还技术债务制度化
让所有人教学相长
内部顾问和教练
DevOps 的实践包含许多内容,提炼了以下重点方便查阅:
流动原则的实践
反馈原则的实践
持续学习与实验原则的实践
DevOps 的发展与技术的发展相辅相成,也为技术人员提供了更多的学习道路和发展方向,借用一句 DevOps 领袖的话来作为本文的结束语。
对于所有热爱创新、热爱变革的专业技术人士来说,我们的前方是美好而充满活力的未来。