DevOps背景下的分合之事

Stella981
• 阅读 802

DevOps倡导“谁开发,谁运维”和开发运维一体化。那么是不是简单地把开发和运维人员放在一起就完事了呢?

01

“插队”的故事

小明入职时是运维专员,原来隶属于运维部门,负责某业务线系统的应用维护工作。一旦系统的生产环境出现任何故障,或者业务人员在生产环境上有任何请求,都是由小明所在的运维部门先处理,处理不了的,再联系该系统的开发团队一起处理。

由于生产环境关乎业务部门的业绩,每天收到的请求量也非常多,小明的压力很大,而且并不是每个故障或请求他都有能力或来得及处理;找开发团队,又会被开发团队说他只是把事情“左手交右手”,没有提供价值,小明很委屈也很为难。他并没有参与系统的开发,而系统上线后的问题却需要他来应对,干着最苦最累的“背锅侠”的活,却没有什么掌声和成就感。

两年前,公司开始进行DevOps转型,把运维部门撤销了,小明“插队”到了业务线系统的原开发团队中。公司希望借此让业务线的交付团队负责从开发到运维的整个链条,也让像小明这样的运维人员有机会参与到项目工作中,提升他们的技能和工作满意度。原来的开发人员也要参与运维,在开发中更多地考虑到生产环境运行的问题。有重大问题时,整个团队都可以参与运维、解决问题。但几个月后,小明发现他的具体工作并没有什么变化,生产环境的一切事务依然还是先派给他,由于这项工作已经占据了他所有的工作时间,他没有机会参与项目交付。他感觉自己和团队里的开发人员是“同床异梦”,也没有机会拓展自己的能力。

小崔是持证DBA。原来隶属于独立的IT运维部门,该部门掌管着一切IT基础设施,如服务器、操作系统、数据库、中间件、网络以及相应的专家团队。由于重要的权限都掌握在这些专家团队手上,业务线交付团队如果无法获得IT运维部门的支持,项目就进展不下去。当各业务线的项目需求越来越多时,IT运维部门就成了整个公司的瓶颈。为了解决这个问题,公司开始将IT运维部门去中心化,部分领域专家“插队”到各业务线交付团队中,从而减少交付团队的对外依赖,实现“自给自足”。

小崔就是这波浪潮中的其中一员。被收编到交付部门后,他比过去更忙了。由于DBA是比较专业的技能,多大的团队需要一个全职DBA成了一个问题。团队太小,拥有一个DBA响应力绝对没有问题,但是无法充分利用其时间;如果几个团队共享一个DBA,又会出现新的瓶颈问题。小崔就是一个被几个交付团队“共享”的DBA,因为要疲于应付各交付团队的请求,他已经没有时间成长。过去,由于DBA都集中在一起,他们之间可以频繁交流,相互学习,共同成长。而小崔现在收获到的只有孤独和压力。

同样以DBA身份入职的大鹏则面对另一个情景。由于他是新招的,直接进入了交付团队,但该团队的DBA工作不饱和,他被安排做了很多与DBA不相关的项目工作。半年后,他辞职了,因为他感觉再这样下去,他的DBA武功就要废了。

如果你的公司也在做DevOps转型,以上故事是否也在你身边发生呢?虽然说分分合合是组织转型的常态,但是处理不好,代价是相当沉重的。

02

什么样的工作需要整合,什么样的工作不应该整合?

既然我们已经通过多年的经验证明了在软件交付领域,分角色的精细分工是不利于整体交付效率的,那为什么在DevOps倡导下的全栈工程师、开发运维一体化又会产生新的问题呢?如何解决这些新问题呢?

也许,我们需要认真思考,在整个软件交付过程中,什么样的工作需要整合,什么样的工作不应该整合。

在前DevOps时代,分角色分工的思路其实是来源于工业时代的。做过手工的都知道,如果要手工做100只灯笼,一开始会做得很慢,做了几只后,会越做越快,所谓熟能生巧。再进一步,把做灯笼的过程拆解一下,比如拆解成搭骨架、糊纸、上色等工序,然后多找几个人来,每人负责其中一道工序,经过几番磨合,由于每个人要做的事情比较单一,很容易上手和熟练,效率将会大大提升。灯笼的成品和质量也会越来稳定。把这个过程放大,就是一个工厂的模式。所有工厂都是通过拆解和精细分工获得极高的效率的,而且,分工越精细,效率越高。而生产最大的特点是在不断地做重复的事情****,产出是同样的产品,而且产品间的差异越小越好,最好趋近于零。对于重复的事情,就应该通过拆解、精细分工、标准化和自动化来提升效率。

但是软件交付过程则完全不一样,和生产最大的区别就是“不重样”。每一个软件需求都是不一样的,用户想要的结果也是不一样的,这导致需求分析、开发、测试面对每个需求,或者运维面对每个故障的具体工作是不一样的。而且软件交付是一个知识工作,是信息流动和转换的过程,而交接会带来信息的衰减和变异,因此在软件交付过程中,按角色分工非但不会带来像生产那样的效率提升,反而会因为信息在不同角色间的交接和传递而产生不必要的摩擦和误解,甚至交付出错误的软件产品。因此,我们更希望软件交付团队成员可以具备从需求到运维的端到端的交付能力,每个团队针对一个特定的业务领域能够独立完成交付,减少交接,减少对外依赖。而且这个团队应该足够小(最好不多于7人),以确保团队内目标一致、高效沟通和高度灵活。

然而,对于业务或用户来说,IT系统和服务是一个整体,除了软件,还有硬件。而每个人的带宽和能力都是有限的,术业有专攻,不可能每个人都是全能的,特别是有些细分领域专业度非常高。如果把所有的职责都归到业务线交付团队,那么交付团队必然需要拥有具备各类所需技能的专家,从而形成新的庞大实体,除了造成不必要的资源浪费外,组织一旦变大,势必又会变得官僚和低效,原本想避免的问题又会重新出现。

03

找出哪些工作是重复的,哪些是非重复的

那么问题的症结在哪里呢?通过前面的分析,我们知道,重复的工作,可以通过拆分、精细分工、标准化和自动化来提升效率,非重复的工作,可以通过减少交接和依赖来提升效率。要解决如何分、如何合的问题,最关键的就是找出哪些工作是重复的,哪些是非重复的。重复的,解决方案是整合资源、角色分工和自动化;非重复的,解决方案是一体化。

那么在软件交付过程中,哪些工作是重复性的呢?我想到的有以下这些:

  1. 网络、硬件等IT基础设施不会因为不同的项目和需求有太多的差异,而且专业性强,不太适合一人分饰多角,这些角色整合在一个独立团队中,使他们保持专注,也有利于这些专业领域的技术交流和知识传递。

  2. 部署,应该尽量自动化,最低要求也应该标准化,有标准的具体作业流程,谁都可以遵照流程做好。我们可以安排前文中的小明把应用部署过程整理成含具体操作步骤的标准化手册,这样这项工作团队内谁都能做,把他从部署这项具体工作释放出来,在此基础上,让他把这个过程自动化,从而让他学习流水线和自动化部署的技术,接触技术性工作。他也可以把故障处理流程整理成操作手册,赋能其他团队成员在合规的环境下承担运维工作,把他自己释放出来;

  3. DBA、操作系统等专家团队应该通过脚本、自助服务等形式赋能交付团队在受控的环境下满足交付需要,减少对他们的依赖。我们可以让前文中的小崔和大鹏收集各交付团队对于DBA的具体需求,把具有共性的需求提炼出来,做成可以通过DBA权限执行的脚本,既满足交付的需求,又确保了DBA权限不会被滥用;

  4. 所有项目都必须要走的标准流程,如采购等,由专业的团队提供服务的形式来执行,大大降低各项目团队由于需要熟悉繁琐流程的过程所导致的不必要浪费;

需求分析、开发、测试、业务支援等非重复性工作则应该保持在一个自满足小团队中,为特定的业务领域提供软件交付和维护服务。

04

总结

分分合合是组织转型的常态。DevOps的目标是实现持续交付,提升整体的交付效率。要实现这个目标,简单地把开发、应用维护,甚至IT运维整合在一起,有点过于粗暴。我们还是应该认真分析哪些具体工作是重复的、可标准化的和哪些是非重复的、不能标准化的来分开处置。重复的,解决方案是整合资源、角色分工、标准化和自动化;非重复的,解决方案是一体化。

关于作者


  • 就职于世界500强银行,负责基金服务业务软件开发与交付

  • 敏捷、精益、DevOps专家

  • 精通极限编程、Scrum、看板方法、测试驱动开发、持续集成、行为驱动开发、DevOps工具栈

  • 曾在GDevOps、DevOpsDays Meetup、中国软件技术大会等论坛发表主题演讲

  • 著有《猎豹行动:硝烟中的敏捷转型之旅》一书

DevOps背景下的分合之事

购书通道

纸质书、电子书在京东、当当、亚马逊等渠道已全面上架,搜索“猎豹行动 硝烟中的敏捷转型之旅”。

当当自营购书码:

DevOps背景下的分合之事

京东自营购书码:

DevOps背景下的分合之事

关注公众号看其他原创作品

DevOps背景下的分合之事

本文分享自微信公众号 - 敏于思 捷于行(kennethz2016)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
Tommy744 Tommy744
3年前
DevOps简介
DevOps是一个完整的面向IT运维的工作流,以IT自动化以及持续集成(CI)、持续部署(CD)为基础,来优化程式开发、测试、系统运维等所有环节。DevOps的概念DevOps一词的来自于Development和Operations的组合,突出重视软件开发人员和运维人员的沟通合作,通过自动化流程来使得软件构建、测试、发布更加快捷、频繁和可靠。
Tommy744 Tommy744
3年前
DevOps与CICD的区别 及 docker、k8s的CICD思路
1\.DevOps简介DevOps就是开发(Development)、测试(QA)、运维(Operations)这三个领域的合并。image.png为什么要合并这三个领域?主要是开发和运维的脱节。DevOps是一种思想、一组最佳实践、以及一种文化。DevOps落地实施,从组织架构、设计人员、流程、人员分工、人员技能到工具,变化
Tommy744 Tommy744
3年前
一份DevOps工程师职责清单,待你查阅
如果一个组织的开发人员和运维人员是独立工作的模式,实施DevOps就需要对组织进行大的调整。因为,只有具备合适的组织人员,文化和工具来才能成功实施DevOps。根据显示,实施DevOps的最常见的障碍之一是员工缺乏技能。什么是DevOps工程师?DevOps工程师是一位IT专家,应该对开发和运维工作都有广泛的了解,包括编码,基础
Tommy744 Tommy744
3年前
DevOps概述
DevOps概述DevOps(Development和Operations的组合词)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营(运维)、质量保障(测试)(QA)部门之间的沟通、协作与整合。随着业务复杂化和人员的增加,开发人员和运维人员逐渐演化成两个独立的部门,他们工作地点分离,工具链不同,业务目标也有差异,这使
Stella981 Stella981
2年前
Redis 备份、容灾及高可用实战
郝朝阳,宜搜科技,运维工程师,负责前端运维工作。专注于运维自动化的实现。致力于DevOps思想的推广,帮助企业形成形成自有文化的运维体系建设。一,Redis简单介绍Redis是一个高性能的keyvalue非关系型数据库,由于其具有高性能的特性,支持高可用、持久化、多种数据结构、集群等,使其脱颖而出,成为常用的非关系型数据库。此
Stella981 Stella981
2年前
DevOps简介
DevOps是一个完整的面向IT运维的工作流,以IT自动化以及持续集成(CI)、持续部署(CD)为基础,来优化程式开发、测试、系统运维等所有环节。DevOps的概念DevOps一词的来自于Development和Operations的组合,突出重视软件开发人员和运维人员的沟通合作,通过自动化流程来使得软件构建、测试、发布更加快捷、频繁和
Stella981 Stella981
2年前
DOIS 2019 DevOps国际峰会北京站来袭~
DevOps国际峰会是国内唯一的国际性DevOps技术峰会,由OSCAR 联盟指导、DevOps时代社区与高效运维社区联合主办,共邀全球80余名顶级专家畅谈DevOps体系与方法、过程与实践、工具与技术。会议召开时间:2019070508:00至2019070618:00结束会议召开地点:北京主办单位:DevOps
Stella981 Stella981
2年前
DevOps第一讲:什么是DevOps
DevOps概念早先升温于2009年的欧洲,因传统模式的运维之痛而生。!(https://static.oschina.net/uploads/img/201707/22121051_DBdW.jpg)DevOps是为了填补开发端和运维端之间的信息鸿沟,改善团队之间的协作关系。不过DevOps其实包含了四个部分:产品、开发、测试和运维。!
Stella981 Stella981
2年前
Linux运维常见面试题之精华收录
Linux运维常见面试题之精华收录1、什么是运维?什么是游戏运维?1)运维是指大型组织已经建立好的网络软硬件的维护,就是要保证业务的上线与运作的正常,在他运转的过程中,对他进行维护,他集合了网络、系统、数据库、开发、安全、监控于一身的技术运维又包括很多种,有DBA运维、网站运维、虚
初识DevOps
基本概念和延伸的思考DevOps,是Development(开发)和Operations(运维)组成的复合词,一般译为“开发运维一体化”。看到这个概念,首先会产生几个问题:开发是什么,哪些环节是开发?运维是什么,哪些环节是运维?开发人员写好代码在本地调试,环境出问题了自己来调整,这是开发工作还是运维工作?系统故障后,运维人员发现是配置文件内容出错了就改成了正