DevOps是研发领域最近几年最热的一个概念。参加过一些讲座,也看过不少的书籍,经常听到以下说法:
- DevOps是没有明确定义的,一千个研发心中就有一千个Devops;
- DevOps是一种文化,每个团队的DevOps实践都不一样;
- DevOps就是消除Dev与Ops之间的壁垒,让两者通力合作;
- DevOps就是业内敏捷、精益等各种优秀实践的混合体;
- DevOps就是工具和自动化
相信很多人听完和我感觉一样,感觉自己就像是盲人摸象,管中窥豹,在似懂非懂的边缘徘徊,无法系统地了解到DevOps的全貌,对DevOps的理念和实践清晰了很多。
1. DevOps是什么?
我个人给梳理和总结出DevOps定义:
DevOps是对敏捷软件开发和精益生产思想的一种演进,应用于IT端到端的价值流中,使得业务基于现代信息技术,并通过文化、组织和技术变革来获得更大成功。
- DevOps不是一个完全新的概念。它是由于敏捷软件开发方法的演进,加上以代码形式管理基础设施成为可能,逐渐产生出IT管理的新方法,最后激发出现了DevOps。它的理论基础是敏捷软件开发+丰田精益生产。
- DevOps的本质在于基于这样一个事实,即IT部门与业务部门所考虑的不仅是软件开发,而是整个价值链。价值链始于产品同学产生的新想法,经过开发、测试和部署,最后到运维。
- 一般来说,信息技术能为组织带来更多收益(通过创造新机会或者消除现有约束)、降低风险并优化资源。
- DevOps并不是简单的流程自动化。DevOps领先者的经验表明,文化(人)、组织(流程)、技术(自动化)这几个因素都至关重要。
2. 为什么要实施DevOps?
DevOps不是某个作者或大师想象出来的管理框架或产品,而是诞生于对实际问题的解决。目前不同组织应用DevOps所试图解决的问题,主要有3类。
2.1. 缩短市场响应时间
传统IT部门遵循“为成本而优化(optimize for cost)”的模式,而DevOps组织遵循“为速度而优化(optimize for speed)”的模式(这句话说到互联网人的心坎里了)。具体包括:
- 减少批量大小
- 减少交接次数
- 持续识别和消除损失
- 自动化所有例行的运维工作
- 团队内部专业人员可替换
- 自给自足的团队(包含了产品、开发、测试、运维、安全人员等,上线产品不需要依赖外部团队)
2.2. 减少技术债务
技术债务在团队成员选择一个非最优的方式解决问题以缩短开发时间时产生。这是一个自然的过程,问题是累计的非最优方案导致了IT产出的逐步退化,并且因此降低了产品质量。DevOps讲求持续重构程序代码,重视在操作中取得经验,以及与构造新功能同等重要的、计划一些用来消除之前所造成的瓶颈的工作;DevOps强烈推荐 “应用尽可能频繁地直面问题” 的实践,以防出现这样一种情况:每个人都知道问题就在那儿,却没有人着手去处理。