我是一个“DevOps工程师”,于是总会遇到有人问我:“什么是DevOps?”
这个问题看似特别基础,基础到很多人懒得回答。但其实冷静一秒,问自己一句“什么是DevOps?”可能每个DevOps工程师都知道“什么是DevOps”,但是他们给出的答案不尽相同。
所以我会怎么回答这个呢?下面我们展开来聊聊。
好吧,这会我是名正言顺的“xxxDevOps工程师”了,我总该知道“什么是DevOps”吧!
我们先来看一下几家典型的公司是如何定义他们眼中的DevOps的,包括:
DevOpsisasetofpractices,tools,andaculturalphilosophythatautomateandintegratetheprocessesbetweensoftwaredevelopmentandITteams.Itemphasizesteamempowerment,cross-teamcommunicationandcollaboration,andtechnologyautomation.
我尝试翻译一下:DevOps是一系列实践、工具和一个融合开发及IT团队的文化理念。DevOps强调赋能团队、跨团队沟通与协作以及技术自动化。
可以看到Atlassian给的等式是:
DevOps=工具+实践+文化
Atlassian还提到一个DevOps团队包含了开发和IT运维,大家一起协作,共同参与产品的整个生命周期,一起为提升软件质量和加速软件开发过程而努力。DevOps模式下开发和运维不再是独立的“筒仓”,而是几乎被整合成一个团队,这个团队的工程师技术栈会覆盖开发、测试、运维等。同时DevOps团队会利用一系列的DevOps工具链来实现诸如持续集成、持续发布、流程自动化、高效协作等等目的。
Atlassion给的“无穷环”长这样:
用“无穷环”表示DevOps生命周期,是因为DevOps的根本理念是“持续”,也就是“没有终点”。Atlassion将整个DevOps生命周期分成6个阶段,分别是:
另外从这个环里我们还能看到Atlassian想强调沟通与协作是贯穿DevOps生命周期全过程的。
DevOpsistheunionofpeople,process,andproductstoenablecontinuousdeliveryofvaluetoourendusers.
DevOps是人、过程和产品的结合,使能持续地向终端用户交付价值。
微软还提到:
Typically,thegoalforDevelopmentistodelivermorefeaturesfaster,andthegoalofOperationsistoachievebettersystemstability.DevOpsalignsthesedisciplinesbyusingaframeworkofbestpracticesproventoincreasespeedtomarketwhileimprovingsystemstability.
多数情况下,开发的目标是快速发布更多的新特性,而运维的目标是保证更高的系统可用性。DevOps通过切实可行的最佳实践体系来拉齐这两个目标,在提升系统稳定性的同时加速产品交付到市场的速度。
这里微软可以看到微软给的第一个等式:
DevOps=人+过程+产品
然后微软从“人+过程+产品”进一步提炼了DevOps的4大基柱:文化、精益产品、架构和技术。
也就是:人+过程+产品->文化、精益产品、架构+技术
微软给的“无穷环”长这样:
图里描绘的DevOps生命周期还是分成6个阶段,分别是:
外加贯穿整个DevOps生命周期全过程的“协作(Collaboration)”。
在图外,微软还定义了对其而言DevOps的8大能力:
每次看到这里我总觉得微软的图该更新一版。
另外微软有一句特别有深度总结:
WhatisnewContinuousEverything.Theprocessisajourneyandrequiresagrowthmindsettocontinuallyevolveandimprove.
“ContinuousEverything”,铿锵有力!微软强调DevOps过程是一段没有终点的旅途,要求我们抱着成长的观念模式,持续地改进,永不满足。
DevOpsisthecombinationofculturalphilosophies,practices,andtoolsthatincreasesanorganization’sabilitytodeliverapplicationsandservicesathighvelocity.
DevOps是文化理念、实践和工具等的组合,能够提升一个组织快速交付应用和服务的能力。
这里AWS给了一个等式:
DevOps=文化+实践+工具
这里提到了:
还可以看到这个“交付管道”和“反馈环”连接的是“企业”和“客户”,可见AWS希望强调“DevOps的目的是更快地向客户交付”。
我曾一度片面以为DevOps要解决的问题就只是工具问题,也就是如何选择或者开发好用的DevOps工具or平台,从而提升企业内部整个研发生命周期的运行效率。不记得是哪一天,我突然有一个强烈的想法:工具只是工具而已,文化建设才是成败的关键!
文化决定了我们如何去做事,工具决定了,决定了啥?可能啥也决定不了。因为我认为工具也是被文化所决定的。
简单说,文化就是一个组织的社交遗产,也就是一个组织对于其成员的各种行为的响应模式。
比如当我们说一个企业有“加班文化”时,其实是在说在这个企业内,员工加班会得到奖赏,而不加班会受到惩罚。或者我们说一个企业是“狼性文化”、“奋斗者文化”……不同的文化背后对应的也就是这个企业对于员工不同行为的不同响应模式。
一个企业的文化决定了在这个企业内:
所以文化决定了一个企业会去招聘哪些人,会开除哪些人,会提拔哪些人。
看到这里可能你已经在思考自己呆过的企业对员工有哪些要求,在鼓励什么,在惩罚什么……没错,此刻在你脑海中闪现的一幕幕就是企业文化。
这幅图大家肯定都不陌生:
什么是DevOps文化?
其实从这幅图中我们就能看到文化的影子。我们都知道DevOps强调打通开发团队与运维团队的壁垒,要求两个团队拉齐认知与责任,不再各自为战,而是一起为更快地交付更高质量的产品而努力。没错,这就是最基础的DevOps文化。
那么如何拉齐认知与责任呢?
首先可以确认的是,我们在组织架构上直接融合Dev和Ops团队,这并不是一个DevOps团队。人是不是坐在一起,改变的只是沟通的效率。这里我想强调两点:
Dev与Ops互相学习彼此领域技能,每个人都懂开发又懂运维,抱着“成长的观念”,持续学习,不满足于当前已掌握的技术栈。
但是我们也需要意识到不能要求每个工程师都精通开发与运维,这是不可能的。这里说的Dev掌握Ops能力,更多的是Dev能够借助完善的工具链从而掌握“应用运维”的能力,能够在自己完成开发之后,有能力和权限将应用部署上线,同时线上应用出问题后,能够直接对其负责,定位、修复、更新升级等。而一些基础设施的运维能力需要独立出来考虑,比如机房里的局域网配置、虚拟机挂NAS盘等传统运维能力。
DevOps成功落地的关键是什么?
我们前面说到的“其乐融融”的场景,我们希望Dev和Ops能够互相学习,共担责任,一起为更快更好地交付产品而努力。但是,工程师们为什么要这样做?他们的动力在哪里?
一个技术团队的领导首先自己需要懂技术,有丰富的经验,这是基础要求。但是除此之外,更重要的是团队领导能够激励整个团队,去发挥整个团队的主观能动性,让所有团队成员都能够有动力持续学习,快速学习,同时也能够敢于失败,快速失败且不惧怕失败,把失败当做一个学习的机会,进而不断成长,让整个团队的战斗力能够越来越强。
所以领导怎样激励工程师呢?
福利?比如一些大厂提供的免费零食或者定期的下午茶?免费的咖啡或者午餐?
没错,作为一个工程师,这一切的福利都会让其开心,但是其实无法激励其更加认真努力地工作。工程师的薪资水平普遍不低,所有这些零食也好,咖啡也好,大概率不会到其月薪的零头。同理,工程师找工作时,看重的也绝不会是一个企业是否提供免费午餐和下午茶。
那么工程师看重的是什么?
在选择一家企业的时候,可能工程师第一个考虑的是薪资,剩下的可能是成长的空间、工作内容是否感兴趣等等等等。但是进入一家公司以后,真正开始工作的时候,工程师看重的是什么?我认为可能是:
我们逐个来解释一下。
1.精通
反例是什么呢?比如你是一个Java工程师,但是你的领导擅长PHP,并且觉得PHP是世界上最好的语言,于是要求整个团队转向使用PHP,这时候你会放弃自己研究多年的Java技术栈,努力学习PHP并决心干出一番成绩吗?
2.自驱
3.目标
显而易见,团队每个成员都需要知道自己为什么做?目的是什么?目标是什么?而不是领导心里藏着一个目标,然后简单地指挥团队成员完成一件件具体的零散的工作项。如果团队成员只知道今天需要完成事务A,明天需要完成事务B,而不知道为什么要做,最终要做成什么样,那么大家只会满足于机械地完成任务,而不会有动力追求“如何做得更好”。
所以DevOps是什么?
我尝试给出我的答案:
DevOps是一种文化理念、工具与实践的结合,目的是更快更可靠地向用户持续交付价值。其中最重要的是文化,文化要求Dev和Ops团队责任共担,目标一致,也要求整个团队持续学习,抱着成长的心态,ContinuouslyEverything。其次DevOps离不开高效的工具集,工具是自动化的基础。最后我们要在各个环节追求最佳实践,不管是工具的使用,还是团队的协作模式,沟通方法上面。
最后,关于标题“什么是DevOps?看这一篇就够了!”,我想告诉你,DevOps文化里不存在“够了”,所以我不得不承认,我撒谎了。本文只代表我个人现阶段的粗浅认知,我建议你查阅更多的资料,持续学习,永不满足。当然如果本文对你有一点点的帮助,那么我很满足。