Skip to content

DevOps简述

DevOps 出现的背景

在上世纪八九十年代,将软件开发运维的结合起来的提议开始萌芽。大概在 2007 年左右,软件开发的人们发现,编写创建软件与部署支持软件的行业的相对独立,正在软件开发中造成致命的功能障碍。于是,在 2009 年,首次 DevOps Days 召开。

DevOps 即由 DevelopmentOperations 结合而成,代表了软件开发人员运维技术人员之间紧密沟通合作。DevOps​ 通过自动化“软件交付”和“架构变更”的流程,来使得构建、测试、发布软件能够更加地快捷、频繁和可靠。

可以把 DevOps 看作开发(即软件工程相关)、技术运营Operations)和质量保障QA, Quality Assurance)三者的交集,如下图所示。

Devops.svg


Author Devops.png: Rajiv.Pant
Derivative work: Wylve - This file is from: Devops.pngCC BY 3.0Link

The Three Ways —— DevOps 化的三个关键实践

The First Way: Flow/Systems Thinking

以整个系统的宏观视角充分理解工作流(开发-运维-客户)、实现流量最大化,并不断为了整体目标的实现而优化工作流。

部分的关键实践和方法:

  • 持续构建、集成以及交付
  • 按需创建环境
  • 限制半成品(WIP
  • 构建支持顺利变更的监视系统和安全系统(如看板可帮助任务可视化)

The Second Way: Amplify Feedback Loops

价值流的快速持续反馈,并在反馈中快速发现并修复问题,避免问题再次发生。从源头上保证质量。

部分的关键实践和方法:

  • 适时停止生产线
  • 持续改进
  • 构建自动化测试套件,确保代码高可部署

The Third Way: Culture of Continual Experimentation and Learning

在不断尝试、重复和练习之中,创建并培育出良好的企业文化。”企业文化“

部分关键实践和方法:

  • 营造勇于创新、敢于冒险以及高度信任的企业文化
  • 确保至少 20% 的资源投入在非功能需求上
  • 不断鼓励和强化改进

精益生产、 DevOps 和敏捷方法

传统行业的精益生产理论和 DevOps 有着异曲同工之处。精益理论包括降低批量规模、减少半成品(WIP)、缩短并且增强反馈回路。

DevOps 并不等同于敏捷方法,敏捷方法只是 DevOps 的一种类似的开发思想,但是 DevOps 的范围比敏捷方法更加广阔。

例如,如何用敏捷的方式来做运维?利用代码来做实际的运维,即 "Infrastructure is code."。这就借鉴了敏捷中的原则。

敏捷方法更注重开发阶段的效率,而 DevOps 则看重软件整个生命周期上的连续性。敏捷方法中的实践包括 CI 持续集成,而 DevOps 则注重 CD,即整体的持续部署和交付。

其实,有些敏捷宣言的内容甚至与 DevOps 的理念相悖。例如,敏捷宣言认为个体和互动高于流程和工具;但对于功能的部署上线而言,流程和工具显然是更重要的。再如,敏捷宣言认为工作的系统高于详尽的文档,但如果一个功能要上线,那文档是不可或缺的,这时就可以利用 DevOps 中文档自动化的思想来辅助文档的生成。

DevOps 的原则

  • 我们最重要的目标是通过持续不断地及早交付有价值的功能使客户满意。
  • 软件功能只有在完善的系统交付给客户后才能实现,对于用户来说,非功能性需求与功能性需求一样重要。
  • 基础设施是代码,应该同样进行开发和管理。
  • 积极面对需求交化,即使在开发后期也一样。
  • 经常地交付可工作的功能,相隔几星期或一两个月,倾向于采取较短的周期。
  • 业务人员、开发人员和运维人员必须相互合作,项目中的每一天都不例外。
  • 激发个体的斗志,以他们为核心措建项目。提供所需的环境和支援,辅以信任,从而达成目标
  • 不论团队内外,传递信息效果最好效率也最高的方式是面对面的交谈。
  • 可工作的软件并进行完整交付是进度的首要度量标准。
  • 敏捷过程倡导可持续开发。责任人,开发人员、运维人员和用户要能共同维持其步调稳定延续。
  • 坚持不懈地追求技术卓越和良好设计,敏捷能力由此增强。
  • 以简洁为本,它是极力减少不必要工作量的艺术。

一些关键术语

  • 持续集成(Continuous Integration, CI):是一种开发实践,要求开发者一天多次将代码集成到共享仓库中。持续集成的核心是自动化构建测试
  • 持续交付(Continuous Delivery, CD):一系列过程和实践,可以显著移除项目进程中的浪费,在客户与公司之间构建一种高速高效的交付和高反馈的循环。
  • 持续部署(Continuous Deployment, CD):可以迅速地部署到实际环境和应用变更。
  • 软件即服务(SaaS):软件按照订阅的方式直接分发,由中心提供支持。如今大部分软件的形式
  • 基础设施即服务(IaaS):如云虚拟化主机等。其中系统与应用由自己管理。
  • 平台即服务(PaaS):制造商提供一个开发环境供应用开发者开发,应用及数据由自己管理。如微信小程序平台等。
  • 部署频率:组织部署新代码的频率。部署频率越高,价值流动越快,DevOps 能力越强。
  • Lead time for changes:从代码提交到代码成功运行在产品中的时间。
  • 平均恢复时间 MTTR:当服务出现紧急事件时,恢复的平均时间。
  • 变更失效率:变更导致已有服务宕机占所有变更的比率。
  • 流水线编排:流水线指从概念成型到生产完成,工程师将整体的生成工作分割成连续的几个小步,最后逐渐形成一种常规动作。流水线编排则需要众多自动化任务来搭建起连续的交付流水线。除此之外,还需要记录各个任务的状态和输出,并将整个流水线可视化。
  • 微服务:一种将软件应用设计成一套独立的可部署的服务的方法。这种设计方法有共同的特征,例如自动化部署、endpoint intelligence 以及代码和数据的去中心化控制。
  • 金丝雀测试 A/B Testing:当新的特性或多个变化待发布时,先将它们投放至不同用户集中,然后量化其指标来做出决定。灰度测试

DevOps 生态

《图》

利用 DevOps 现代软件工程的方法、工具、实践来指导软件系统开发和服务运维,并逐渐进行标准化建设。