DevOps 的核心三原则

如果讲起当今IT领域最炙手可热的软件研发技术,DevOps 算是不得不提的热门话题之一。

互联网经济的兴起,使得软件研发的需求、开发、测试、部署和运维等价值链上的人员不得不以更加紧密的方式协作起来,加速价值的流动、交付和反馈。DevOps 能够提高公司业绩,实现开发、QA、IT运维、信息安全等各职能环节的目标,有助于提高开发人员的生产率,打破企业和组织中存在的根本的、长期的冲突,打破恶性循环,加速业务价值流动,提高反馈效率,构建学习型和安全文化,促进持续学习和改进。

本文从认识 DevOps 开始,介绍DevOps产生的基础理论、简要定义及基本原则。

DevOps 介绍

就像学习任何一个新概念、新技术一样,一开始我们都会问一个同样的问题,这东西到底是什么? 

坦率地讲,此时此刻,如果你对 DevOps 的了解不是很多,那么很难用一句话来概括 DevOps 到底是什么。所幸的是,我们可以用迭代的方式,来逐步加深对DevOps的理解,一步一步理清DevOps 到底是什么。

目前,作为 DevOps 小白的作者,对DevOps的理解是,DevOps 是以价值流的交付为核心,将软件研发流程中各个环节和角色的人员有机地结合在一起,快速构建、反馈及持续学习和实验的一套方法、工具和实践

这个理解或许有些偏狭,但对于作者目前这种小白级别的初学者,应该还算比较合适的。

DevOps 简史

DevOps 基于精益理论、约束理论、丰田生产系统、柔性工程、学习型组织、安全文化、人员优化因素等知识体系,并参考了高信任管理文化、服务型领导、组织变动管理等方法论。把所有这些最可信的原则综合应用与IT价值流中,就产生了DevOps。

DevOps 及其所产生的技术、架构及文化实践,体现了哲学与管理学原则的融合。DevOps 是精益原则、约束理论和丰田套路运动的衍生物,也被人认为是源自2001年的敏捷运动的延续。Devops 基于以下主要理论体系:

  • 精益运动: 价值流映射、看板、全面生产、缩短前置时间、小批量交付等。
  • 敏捷宣言:频繁交付可工作软件、自组织团队、高信任环境等。
  • 敏捷基础设施及Velocity大会:Patrick Debois 提倡将敏捷原则应用于IT基础实施领域。
  • 持续交付:基于持续构建、持续测试、持续继承、持续交付,延伸基础设施领域,持续反馈及学习。
  • 丰田套路:精益的核心——丰田套路(Kata),即持续改善日常工作,循序渐进,持续进行优化和改进。

2009年,在比利时的根特市,Patrick Debios 发起了第一次DevOps Days 运动,“DevOps”一次应运而生。

经过数年的不断推动和发展,DevOps Days 运动早已进入中国,并在各个城市广泛开展活动和交流,宣扬 DevOps 精神,促进软件及IT领域的快速发展和优化。

DevOps 的基础

Devops 基于精益,而精益重的一个基本概念是价值流。应用价值流的概念,在DevOps中将技术价值流定义为:把业务构想转化为向客户交付价值的、由技术驱动的服务所需要的流程

流程的输入是既定的业务目标、概念、创意和假设。之后由研发团队运用敏捷或迭代的开发流程,将这些想法转化为用户故事及某种功能性说明,编写代码予以实现,签入版本控制库,持续构建、集成、测试、部署、发布。最后的输出是部署到生产环境按预期正常地运行,并为客户提供服务,产生价值。

DevOps 聚焦于部署前置时间,为了实现快速流动并缩短前置时间,必须缩短工作在队列中的等待时间。所以,DevOps 持续地运用模块化、高内聚、低耦合的优化架构设计,帮助小型团队实现自治,不断向版本控制系统中提交小批量的代码变更,并对代码做自动化的测试和探索测试,然后再将之部署到生产环境,从而实现快速、持续地获得工作反馈。

Devops 的目标就是,通过上述方法,要将部署前置时间缩短到分钟级别。

DevOps的三步工作法

来自《凤凰项目》一书的三步工作法,成为衍生 DevOps 行为及模式的重要基础原则。

DevOps 3 ways

第一步,实现开发到运维的工作快速地从左到右流动。所以需要将工作可视化、减小批次规模、缩短等待间隔、内建质量并持续地优化全局目标。相关技术实践包括:看板、持续构建、持续集成、持续测试和部署,按需进行环境搭建,限制在制品数量,构建能够安全地实施变更的系统和组织。

第二步,在从右往左的每个阶段中,应用持续、快速的工作反馈机制。通过放大反馈环防止问题复发,缩短问题检测周期,实现快速修复。及时发现并控制问题,直到拥有有效的决策,可以持续地缩短反馈周期和放大反馈环。

第三步,建立具有创意和高可信任的企业文化,支持动态的、严格的、科学的实验。

DevOps 核心三原则

基于以上思想,DevOps 总结出了实现的核心三原则:

  • 流动原则:加快从开发、运维到交付给客户的流程
  • 反馈原则:快速反馈价值流状况,建设更加安全可靠的工作交付体系
  • 持续学习与实验原则:打造一种高信任的文化和科学的工作方式,并将对组织的改进和创新作为日常工作的一部分。

下面,我们就来逐条分析一下这三条核心原则。

原则一:流动原则

流动原则,就是要建立从开发到运维之间的快速、平滑的、能向客户交付价值的工作流、价值流。通过持续加强工作内容的可视化,减小每批次大小,缩短批次等待间隔,内建质量以防止缺陷向下游传递,从而增强流动性。

流动原则的目标是,在缩短代码从变更到生产环境上线所需的前置时间的同时,提高服务的质量和可靠性。其主要运用的是精益原则中的价值流技术。

使工作可见

通过看板等方法,使价值流以可视化的方式呈现给所有人,将工作尽可能地可视化,从而识别工作在哪里流动、排队或停滞,并有效管理工作,加速其从左到右的流动。

通过将每个工作中心的所有工作都放进队列中,并且可视化地展示出来,利益干系人更容易地从全局出发,确定各项工作的优先级。

限制在制品(WIP)数量

多任务并行通常会极大地降低工作效率,增加在制品数量,增加浪费的可能性。

可视化的看板任务管理方式下,可以限制多任务的出现。对看板的每一列或每个工作中心都设置一个在制品数量的限制,并明确地标注在每一列上,从而使任何可视化的工作的并行数量都能以显式的方式呈现出来。

通过限制在制品数量,能更容易地发现工作中的阻碍。

减小批次大小

建立平滑而快速的工作流的另一个关键点是,通过小批量的模式完成工作。为了缩短前置时间和提高交付物质量,应当持续地追求小批量模式。最小的批量是单件流。

小批量生产的在制品数量更少,前置时间更短,错误检测更快,返工量也可达到最少。

在技术价值流中,单件流可通过持续部署的方式实现。

减少交接次数

工作产品的交接,通常意味着大量的沟通——请求、委派、通知、协调、等待、优先级排序、调度、冲突消除、测试、验证等。从而会极大地增加前置时间。

为此,要么努力减少交接次数,要么用自动化的方式执行大部分任务,那么重新调整组织结构,让团队可以不依赖其他人而独立为客户提供价值。DevOps 强调要通过减少队列中的等待时间以及非增值工作的时间来增加流动性。

持续识别和改善约束点

为了缩短前置时间、提高吞入量,需要不断地识别系统中的约束点,提高工作产能。为此,可使用如下的五个步骤来持续地识别约束点:

  • 识别系统的约束点
  • 决定如何利用这个系统的约束点
  • 基于上述决定,考虑全局工作
  • 改善系统的约束点
  • 如果约束点已经突破,回到第一步,但要杜绝惯性导致的系统约束。

通常,需要依次优化如下几个常见的约束点:

  • 环境搭建
  • 代码部署
  • 测试的准备和执行
  • 紧密耦合的架构
  • 开发部门的经理或产品经理

消除价值流重的困境和浪费

精益制造定义了7中典型浪费的类型。而现代精益理念的目标是想通过持续学习来破除日常工作中的困境,从而更好地实现组织目标。DevOps 里面的浪费和困境是指软件开发过程中导致交付延迟的主要因素。主要包括以下几种类型:

  • 半成品
  • 额外工序
  • 额外功能
  • 任务切换
  • 等待
  • 移动
  • 缺陷
  • 非标准或手工操作
  • 填坑侠

所以,DevOps的目标就是,将这些浪费和困境都可视化,并系统地进行改进,减轻或消除这些负担,从而实现快速价值流动。

原则二:反馈原则

流动原则使工作能够在价值流中从左往右快速流动,而反馈原则则使在从右往左的每个阶段中能够快速、持续地获得工作反馈,从而建立安全、可靠的工作系统。

通过在整个价值流和组织中奖励快速、频繁、高质量的信息流,包括反馈和前馈回路,可以让系统更安全,及早发现问题,消除问题,并创造出组织级的学习氛围。

在复杂系统中安全地工作

复杂系统的一个特点是,无法将系统视为一个整体去理解各个部分是如何组合在一个的。复杂系统通常都是紧耦合且密切关联的。

通过如下方式,可以让复杂系统更安全地工作:

  • 管理复杂的工作,从中识别出设计和操作的问题
  • 群策群力地解决问题,从而快速地构建新知识
  • 在整个组织中,将区域性的新知识应用到全局范围
  • 领导者要持续地培养有以上才能的人

及时发现问题

不断地对设计和假设进行验证,更早、更快、以尽可能低的成本,从尽可能多的纬度增加系统的信息流,并尽可能清晰地确认问题的前因后果。

反馈回路是学习型组织和系统思维的主要组成部分。反馈和前馈回路能让系统内各部分之间的关系增强或抵消。

DevOps的目标是,在技术价值流的各个阶段(产品管理、开发、QA、信息安全和运维),在所有工作执行的过程中,建立快速的反馈和前馈回路。包括:创建自动化构建、集成和测试过程,尽早检测出可能导致缺陷的代码变更。

建立全方位的监控系统,监控服务组件在生产环境中的运行状态,以便快速探测到服务中的意外情况。

群策群力,战胜问题获取新知

一旦出现问题,需要群策群力,发动所有相关人员解决问题。

群策群力的目的是遏制住问题,防止蔓延,然后定位和处理问题,避免复发。丰田“安灯绳”就是这个原则的典型实例。

群策群力修复问题的原因是:

  • 防止把问题带入下游的处理环节
  • 防止工作中心启动新的工作
  • 如果问题还没有解决,工作中心在下一次操作中可能会遇到同样的问题,需要更高的返工成本。

所以,全民总动员是“实时地问题识别、定位和处理”循环的一部分。

在源头保障质量

在日常工作中,需要价值流中的每个人在他们的控制领域里发现并解决问题,因此把质量控制、安全责任和决策制定都置于开展工作的场景里,而不依赖于外围高层的审批,从而让所有人都负起质量责任,加强全民质量意识,提高系统质量,加速学习。

这也是“质量内建”的精益原则的体现。

为下游工作中心而优化

精益定义了两种客户:外部客户和内部客户。根据精益原则,我们最重要的客户是我们的下游工作中心。

在技术价值流中,通过为运维而设计来为下游工作中心做优化。

原则三:持续学习与实验原则

持续学习与实验原则要建立持续学习与实验的问题,持续提升个人技能,进而转化为团队和组织的财富。

在高绩效组织中,要求并积极地促进学习,工作系统是动态的,员工在日常工作中通过实验来作出新的改进。

技术价值流的核心是建立高度信任的文化,强调每个人都是持续学习者,必须在日常工作中承担风险,通过科学的方式改进流程和开发产品,从成功和失败中积累经验教训,从而识别有价值的想法,摒弃无用的想法。所有局部经验都会快速转化为全局性改进,帮助整个组织尝试和实践新技术。通过为日常改进预留时间,从而进一步促进和保障学习。

建立学习型组织和安全文化

在技术价值流中,通过努力打造安全的工作环境,能够建立起生机文化的基础。在意外和故障发生时,关注如何重新设计系统,防止事故复发,而不是去追究人的问题;进行不指责的回顾,对事故的原因和过程作出客观解释,并就优化系统的最佳措施达成一致,不但能够防止问题复发,还有助于实现更快的故障定位和恢复。

消除指责能够有效地实现学习型组织,使组织自我诊断和自我优化,并能熟练地定位和解决问题。

将日常工作的改进制度化

比日常工作更重要的,是对日常工作进行持续改进。

通过明确的预留时间来改善日常工作,包括预留时间来偿还技术债、修复缺陷、重构和优化代码和环境,可以在每个开发周期的中间预留一段时间,或者安排改善闪电战时段,让工程师通过自组团队的方式来解决他们感兴趣的问题。

由此,在日常工作中,所有人都始终能够在可控的范围内发现和解决问题。进而,及早定位和识别潜在的问题,降低解决问题的成本,消除系统性风险。

对技术价值流而言,让工作系统更加安全也有助于发现和解决潜在风险。

把局部发现转化为全局优化

一旦在局部取得了成果,就应当将之分享给组织里的其他人,让更多的人从中获益。这样可以把隐性知识转化为显性知识,帮助其他人吸取这些专业知识并在实践中应用。

在技术价值流中,应该通过类似机制建立全局知识库,把更多个人智慧转化为服务于更多人的集体智慧。

在日常工作中注入弹性模式

高绩效组织通过改善日常运营,持续地引入张力来提高生产效率,同时在系统中注入更大的弹性,实现或达到更佳的结果。

通过在日常工作中不断地实验,能够持续地提高产能,而不需要增加任何额外的新设备或人员。这种通过加压来增强弹性的做法成为抗脆弱性(antifragility)。

在技术价值流中,通过缩短部署的前置时间、提高测试覆盖率、缩短测试执行时间,甚至在必要时解耦架构,都属于在系统中引入张力的做法,都能够提高开发人员的生产效率及可靠性。

另外,还可以通过演习的方式来预演大规模故障。

领导层强化学习文化

更卓越的领导力是为团队创造条件,让团队能在日常工作中感受到卓越。

领导者必须强调解决问题的能力和学习的价值。

科学实验的框架:清晰地描述要解决的问题,对解决方案所做的假设,验证假设的方式,对结果的解释,以及如何利用经验进行下一个迭代。

领导者帮助一线工作者在日常工作中发现并解决问题,是丰田生产方式的核心,也是学习型组织、改善套路和高可靠性组织的核心。

在技术价值流中,这种实验和迭代改进的方式,能够指导我们改进内部流程,不断地进行试验,保证构建的产品能为内部和外部客户带来价值。

总结

本文学习了DevOps的概念、发展史,阐述了DevOps的三大核心原则:流动原则、反馈原则和持续改进与实验原则。

参考文献

【1】  DevOps 实践指南,[美] Gene Kim、Jez Humble、Patrick Debois、John Willis著,刘征、王磊、马博文、曾朝京译,人民邮电出版社 2018年4月出版。