什么是DevOps
@TOC
推荐超级课程:
1. DevOps来源
我们先看传统的瀑布式开发,其涉及严格的顺序和文档,对角色、工具和流程的严格定义以及开发。另一方面,即使开发团队开始实践敏捷开发以加速软件产品迭代并敏捷地响应不断变化的条件(如需求),IT 运营团队并不总是准备好跟上这种新速度。
敏捷软件开发的开端是2001年17位开发者发布的名为《敏捷软件开发宣言 》的短句。《宣言》提出了四项基本原则:
- 与个人对话,而不是过程和工具。
- 比综合文档更有效的软件。
- 与客户合作而不是合同谈判。
- 应对变化而不是遵循计划。
DevOps这个概念是在2009年由一个实施Agile的PM: Patrick Debois 在举办的名叫 DevOpsDay 的会议上提出, 而2014年之后,DevOps的理念和这个词汇才慢慢的被越来越多的学者和企业项目经理人提及以及推广。
DevOps 将软件开发的敏捷原则扩展到软件部署。敏捷软件开发宣言的转变旨在改进软件的开发方式,而 DevOps 将敏捷开发扩展到发布,并在整个软件开发生命周期中应用类似的原则。换句话说,范围的差异就是敏捷和 DevOps 之间的差异。
然而迄今为止,也很难有一个统一的具体的定义来描述DevOps这个词的具体含义。
因为随着技术的发展,DevOps的内涵也在不断的进化和丰富。它不仅仅涉及到丰富的技术种类和领域,还涵盖了很多项目开发和管理的理论方法等,而且这些技术和理论也在不断的发展和进化。从另一个角度看,其实这也正显示出了DevOps这个理念的强大生命力。
2. DevOps理念
DevOps其实更确切的讲是一种企业项目文化或者项目指导理念。
DevOps 的以下三个基本原则首先由 DevOps 支持者 Gene Kim编写 。
- 系统思维: 更全面的 IT 方法。从开发人员到测试人员、基础设施经理、代码和软件用户,我们关注整个系统的性能,而不是单个孤岛的性能,例如运营和开发部门。
- 反馈循环增强: Kim 表示 “大多数流程改进活动的目的是缩短和增强反馈循环,以便持续进行必要的修改。”
- 持续试验和学习: 敏捷软件开发宣言强调响应能力和协作,而 DevOps 则侧重于持续改进:发现更好的新方法。Kim说,有必要创造一种“鼓励不断尝试、冒险和从失败中学习,并理解重复和实践是成熟必不可少的文化”。
开发运营是一种开发人员和运维人员协同合作,灵活快速地开发软件的软件开发方式。DevOps 通过将人员、方法和工具联系起来,消除了开发和运营团队之间的孤岛,使用合适的工具来完成适合这个项目的自动化流水线的生成、运行,同时,整合项目中不同部门间的机能以及资源,到达扁平化的项目管理,这种方法可以加速应用程序和服务的开发。此外,通过加速对 IT 基础设施管理的响应,可以在响应当前快速变化的市场的同时引入和更新 IT 产品。
一千个人心中有一万个哈姆雷特。
本专栏也是根据笔者多年从事DevOps相关工作中总结实际案例,来具体阐述DevOps相关的理论方法和应用实践。
笔者阐述的某些观点可能会与他人不同,但仅代表本人观点而非对其他观点否定,供大家参考研习。也欢迎大家踊跃留言讨论。
3. DevOps要解决的问题
DevOps这个词本身呢,是英文词development和operations两个单词组合而来的。
这里的development主要是指软件的开发测试等相关工作,operations呢是指软件开发后部署运行更新等相关的维护工作。
很长时间以来,从事软件开发的人员和运维的人员工作是相互独立透明的。软件开发者开发完成软件后,交付给测试人员进行测试,然后,由运维人员进行环境构筑同时部署开发成果物进行运行,同时会给客户使用或者阶段性测试。
而测试期间,或者运维期间,或者客户使用期间,如果出现问题。。。问题。。。问题。。。来了。
关于问题归属,基于传统开发运维模式下,由于开发和运维相互独立透明,大家谁都不愿意主动去做背锅侠,甚至不愿去承担责任,并最终导致双方的对立。由此,导致问题修复率,修复质量,以及修复速度大大降低,同时,导致客户满意度下降,甚至其他部门(Sales等)不得不介入来避免恶化与客户的关系,以及客户的流失。从而导致,项目成本升高的同时,最终Delivery的服务还不尽人意。
在问题归属确认后,各相关部门如何进行快速高效的协作,是另一个大问题。开发的bug修正后,需要额外环境或者变更环境来进行测试,但开发侧不清楚运维,运维也不了解开发(包括双方的技术领域,沟通语言等等甚至是人际关系),这时候,往往会导致双方沟通偏差,信息不对等。比如,开发说我电脑上运行的好好的,怎们到你们环境就不行了呢?肯定你环境有问题!运维说我环境没变过,就是你代码没修正对!如此导致开发测试的进度又慢又拖延,同时问题还不清不楚。
关于资源问题,以前的开发管理模式当中,如果某个开发人员离职了,或者某个运维人员离职了,太危险了!可能就算留有文档,但也有可能文档中细节并不完善,导致出现问题后,都不知道去问谁。这是人力资源Risk。其次,是环境资源(包括开发环境和运维环境),以前文档一大堆,但每次新人加入都不得不重新按照文档KT一遍,同时,新人还不得不解决这些旧文档中的一个一个深坑,甚至老社员都不知道为什么文档和现在环境对不上。。。。。好尴尬呀~~
等等这些传统开发运维管理模式下的弊病都是DevOps要解决的问题,这也是DevOps的价值领域。
4. DevOps的实施
建立DevOps文化
组织文化是 IT 和组织绩效的有力预测指标。信息流、协作、分担责任、从失败中学习和不断创新等文化实践是 DevOps 的核心。
DevOps 即服务方法允许开发人员和运营团队在不影响速度的情况下更好地控制他们的应用程序和基础设施。它还将拥有问题的责任转移给了开发团队,使他们在大步前进时更加小心。
在进行组织的DevOps实施状态报告中,我们发现,与组织文化相关性最强的前七项关键措施是:
认可对DevOps实施所需要资源进行投资
团队领导的经验和效率
持续交付
不同学科(开发、运营和信息安全)实现协作双赢
组织绩效
项目流程痛点发掘
精益管理实践
以上是针对很多企业(网罗了不同企业规模,企业结构及项目中)进行调研后,发现DevOps实施的关键措施以及DevOps实施后相互影响的关键因素。由此,我们可以更好的指导后继项目中DevOps文化的建立与实施。
DevOps的最佳实践
尽管 DevOps 不是一套固定步骤的实践方法理论,但以下内容会有助于新手进入 DevOps 领域,同时,结合笔者多年的经验,为大家提供一些DevOps实施的最佳实践参考:
DevOps 是按照人员、流程和工具的顺序进行的。从工具开始将是错误的做法。
John Willis 为我们提供了 CAMS 公式:文化、自动化、测量、共享。同样,文化对于成功的 DevOps 至关重要。一切都需要自动化和测量。 对于测量,建立 KPI。 其中主要KPI有:
部署频率:目标是频繁地进行小型部署。
安装失败的频率:旨在减少。
每季度发布的功能数量:不一定是每季度一次,但似乎许多企业领导者经常按季度考虑。
平均检测时间 (MTTD):从异常发生到注意到的时间。
平均恢复时间 (MTTR):异常发生与其解决之间的时间。
平均提前期 (MLT):代码被请求并实施所需的时间。
正常运行时间:通过测量计划内维护停机时间和计划外停机时间来跟踪可用性。
缺陷忽略率:将带入生产环境的缺陷数量与 QA 团队捕获的缺陷数量进行比较。
应用程序性能:比较更改前后的应用程序性能。
同理心对于了解需求、打破孤岛并将各种团队聚集在一起很重要。互相尊重,互相支持,目标一致的团结的团队。
从小事做起,然后在整个组织中大规模应用。
投资提供实时可见性的工具。工具集成是必不可少的。不能很好地协同工作的多种工具会妨碍协作。
提高部署速度。为了实现这一点,投资于自动化并实践敏捷技术。
参与社区活动和组织在线渠道进行分享和学习。
改进每一步的反馈,无论是构建、部署、恢复还是通知。
以上这些实践,也是笔者这么多年一直使用的实践方法。后续文章当中,我也会带领大家以此为基础进行真正DevOps的企业实践。