DevOps的各个阶段的各个阶段
在过去的几年里,我们不断的在文章、演讲、谈话中了解到DevOps这个词。DevOps声称能够在提升整体系统稳定性的同
时,建立更快的反馈回路,并降低产品迭代成本。DevOps的目标令人印象深刻,但作为新生概念,它无法证明能够达到这种
预期目标,所以相关的活动很容易会被忽视或是撤销。随着DevOps的发展,有不少公司因DevOps获益,同时还出现大量采
用DevOps的组织。现在,正是你调研并实践DevOps的好时机。
对外行来说,容易认为采用DevOps只是一个简单的变化,更像打开了灯泡的开关一样。从这种角度来看,实施这样一个变化
会是令人畏惧、可能是无法实现的任务。就像传统工程学一样,试图建立复杂事物而不经分解时,通常结果就是失败。还
好,DevOps可以分解成一系列的阶段。而各阶段内改变的内容和时限完全可以由你所在组织自行掌控。
为便于理解,这里用时间轴风格的图表来说明:横轴最左边表示传统运维方式,最右侧表示DevOps方式。这样,就没人会提
出“贵公司已经实施DevOps了吗?”的问题,而是更为精确的,如“能谈一下DevOps在贵公司的深入程度吗?”
需要说明一下,本文中的观点和案例基于特定的组织结构,并非普遍适用。这些假设是基于我个人的经验——我曾在多家公司
中与运维和开发团队一同工作(运维团队要负责开发环境的维护),也曾做过几个项目。如果这些假设如果和你的组织现状不
同,那么观点可能就不适用了。当然,好处是这些观点都可以实际应用在类似的团队中,它们结合了我们在多个工作环境中实
际实施的经验。
DevOps的范围
为了更好的理解我们在实施DevOps过程中所跨越的阶段,很有必要详细谈一下时间轴最左边和最右边所表示的内容。
最左边表示传统运维的文化和实践。
传统运维的一种极端情况可以被描述为“黑盒运维”。在这种文化中,运维与开发是分开的,相互间一般不合作,就算合作,也
是极为不情愿的。其特点就是开发和运维有着相反的目标。开发团队的任务是为产品增加新功能、不断升级产品,并以此制定
绩效。运维团队的目标,则是稳定第一。如果没有进行足够的沟通交流,两个团队就会产生矛盾,当开发人员兴致勃勃的快速
开发新功能的时候,运维人员可没什么心情去部署新功能。对稳定系统实施任何类型的变更,都会导致系统产生隐患,因此运
维人员会尽可能避免变更。
举个例子:应用开发人员提交了的代码中有一个bug,在特定的边界条件下会导致无限循环,而QA或测试人员均没有发现这
个问题。如果运维人员部署了这个变更,会导致一些服务器CPU飙升至100%,造成服务不稳定。如果运维人员不去实施变
更,那么就不会发生问题,至少是没有新问题。这就是最左边传统运维的理念。
最右边表示全面实现DevOps的情况,在这里开发和运维是一个角色。这时,开发就是运维,运维就是开发,团队在的共同目
标是既要增加新特性,又要确保一定程度的可靠性。
当了解了时间轴两边所表示内容时——特别强调下,两边都是极端——从一个极端跨越到另一个极端,看起来是很不可思议
的。但发生这种不可思议的情况是因为你认为这种转变是一气呵成的。如果把这个时间轴划分为不同个可管理的子阶段,那么
实施DevOps就会更容易,利益也更加明确,结果也是可以预期的。
DevOps中的文化与技术改变
DevOps需要在组织内部进行文化和技术的改变。从团队文化角度来说,运维和开发的传统思维需要改变,这样才能更开诚布
公的进行沟通,实现目标的统一。从技术角度来讲,开发人员需要了解运维团队的工作方式,并加深对系统架构的认识。运维
人员需要明白开发流程,并深入了解代码内容。
当把DevOps分解成各个阶段后,我发现通过文化和技术交替的改变来引入DevOps的观念要更加容易一些。后续的工作都会
以这种理念进行。这么做的理由是:改变是困难的,变革是几乎不可能的。通过交替的改变,每一个变化将更容易被接受。所
以不用进行变革,而是通过一系列文化和技术上交替的变化来进行,最终实现DevOps。通过这种方式,团队不会感到环境一
下子变得无法适应了。变化的发生更加自然,组织也更容易接受这些变化。
指标监控无处不在
向DevOps方向迈出的第一步,就是在组织内对架构和应用层面启用指标监控。或者,我更喜欢称之为:监控无处不在。这里
有很多演说讨论这个话题,但归根结底就是一个关键性的问题:我的代码到底做了什么?
对于这个问题,开发人员更乐意通过给你看代码的方式来回答。不幸的是,代码仅能反映出代码应该做什么,而不能说明它实
际做了什么。代码如同一本烹饪食谱:它记载着制作美味所需的步骤,但是并不能控制最终出产的是不是美味佳肴。生活中,
我们都曾按照食谱尝试过烹饪,但是结果却不尽人意。同样的,代码描述了实现期望目标的过程,但是代码对系统的实际影响
是不可从代码自身预测的。下例中,开发人员将缓存的过期时间从3600秒修改到了1800秒。当然,这些变化显而易见,但是
整个系统会受到什么影响就不得而知了。