原文链接:https://blog.matthewskelton.net/2013/10/22/what-team-structure-is-right-for-devops-to-flourish/
原作者:Matthew Skelton
翻译君:CODING 戴维奥普斯

大部分组织对 DevOps 发起设立的初衷是改善客户和业务之间的交付价值,而不是降低成本,增强自动化,或驱动组织架构;这意味着不同的组织可能需要不同的团队结构才能进行有效的 Dev(开发)和 Ops(运维)协作。

所以关于问题 ”什么是可以帮助 DevOps 发展的正确组织架构?“是没有一个明确答案的。很显然,没有一种神奇的团队结构可以适用于任何组织。

不过,确实有少量的团队结构模型对某些组织来说具有一定的参考价值。通过探索这些团队结构的优缺点,同时考虑到康威定律的情况下,或许可以确定最适合我们组织的、并有利于 DevOps 实践的团队结构。

很多 DevOps 团队结构之前已经被介绍过了,特别是 CollabNet 的 Lawrence Sweeney 在 Ben Kepes 的博客评论中详细介绍了我将在本文提及的 Anti-Type B(独立的 DevOps 谷仓:DevOps Silo)、Type 3(基础设施服务:IaaS)和 Type 1(开发运维共同协作:Smooth Integration)。

DevOpsGuys 列出了十二个 DevOps 反类型,Jez Humble、Gene Kim、Damon Edwards(以及其他许多人)也说过类似的事情。在这里我增加三个额外的团队结构,关于这三种类型我之前很少见过或听过人提及:全嵌入式/共享运维(Fully Embedded),DevOps 即服务(DevOps-as-a-Service),和临时 DevOps 团队(Temporary DevOps Team)。

DevOps Anti-Types

首先,看待事物的一个有效方式是去观察它不好的一面,这种方式我们称之为“反类型”(在普遍存在的“反模式”之后)。

Anti-Type A:独立谷仓/Dev 和 Ops 分离

这是一种传统的分裂了 Dev 和 Ops 的“抛过墙法”。这意味着 story point(需求点)可以被提前估算(“DONE”意味着功能完整,但是不意味着可以在生产中使用),同时软件的可运维性受损,因为 Devs (开发人员)没有足够的上下文环境去了解功能操作,Ops (运维人员)也没有时间或倾向参与到 Devs 中去共同解决软件上线前的问题。

我们可能都知道这种类型很糟糕,但我认为很多的团队结构实际上更糟糕;至少到目前为止,我们已经意识到这个反类型 A 的问题所在了。

Anti-Type B:独立的 DevOps 谷仓

这种独立的 DevOps 团队通常情况下来自经理或执行官,他们“需要一点 DevOps 的事情”,然后就启动了一个“DevOps 团队”(也有可能有一个人的名字叫做 “DevOp”)。这个 DevOps 的成员会迅速形成另一个团体,让 Dev 和 Ops 分得更开,因为他们要从“无知的 Devs”和“恐龙一样的 Ops”手里保卫自己的角色、技能和工具集。

唯一一个让这种模式可以被理解的情况就是当团队组织为临时的、时间短于十二或十八个月的时候。其目的是让开发人员和运营人员更紧密地联系在一起,并明确授权在这段时间之后,这个团队将变得多余。

这就成为了我所称的 Type 5 DevOps Topology(见下文)。

Anti-Type C:“我们(开发)不需要 Ops(运维)”

这种团队结构是由开发人员和开发经理的幼稚自大结合而来的,特别是当一些新项目启动的时候。假设 Ops 现在已经成为了过去式 (“我们现在有云了,对吧?),开发人员严重低估运维技能和活动的复杂性及重要性,认为没有这些技能和活动他们仍可以做到,或者只要花费一些空余时间就可以。

当他们的软件变得更复杂,更多的运维活动开始淹没“开发”(即编程)的时候,这种 Anti-Type C 的类型可能最终会需要 Type 3(IaaS)或者 Type 4 DevOps topology(DevOps-as-a-Service)。

只要这样的团队能认识到运维作为一个规则的重要性和软件开发一样重要和有价值时,他们将能够避免许多痛苦和不必要的(以及非常基本的)错误。

DevOps 团队结构

在已经了解了反类型的糟糕之后,我们可以看一些 DevOps 良好运作的团队结构。

类型一:开发运维顺畅协作

这是 DevOps 的“乐土”:开发团队和运营团队之间顺畅协作,每一个团队都在需要的地方专业化工作,但也在需要的地方共享。

可能有许多独立的开发团队,但每个团队又会在一个单独或半独立的产品组合上工作。我的感觉是,类型一的平滑协作模型需要相当大的组织变革来建立它,并且在管理团队需要有较高的能力。

开发人员和运维人员必须有一个明确有效的共同目标(“高质量交付、快速迭代”或其他)。运维人员必须与开发人员进行舒适的合作,掌握测试驱动的编码和 Git,开发人员必须认真对待运维特性,寻找运维人员以输入日志记录等等,所有这些相比较过去都需要进行相当大的文化变革。

类型一适用性:具有强大技术领导类型的组织
潜在有效性:高

类型二:全嵌入式/共享运维

当运维人员完全融入进产品开发团队中的时候,我们看到了这种类型。Dev 和 Ops 之间的分离很少,以至于所有人都共同高度关注一个目标,这可以说是类型一的一种形式,不过它也具有一定特殊性。像 Netflix 和 Facebook 这样的组织有效地实现了一个基于 Web 的产品,它已经实现了这种类型的结构。

但我认为它可能不太适用于狭窄产品线模式之外,因为预算限制和多个产品线之间通常存在上下文切换,这可能会迫使 Dev 和 Ops 进一步分开(例如回到类型一模型)。这个模式也可以被称为“NoOps”,因为没有明显的或可见的运维团队(尽管 Netflix NoOps 也可能是类型三)。

类型二适用性:基于单一 Web 的产品或服务的组织
潜在有效性:高

类型三:基础设施即服务

对于具有相当传统的 IT 运维部门的组织,他们无法或不能(足够)快速作出改变,和对于在公共云(Amazon EC2、Rackspace、Azure 等)中运行所有应用程序的组织来说,将运维作为一个只需提供应用程序部署和运行功能的弹性基础设施团队或许比较有帮助。这样内部运维团队直接等同于 Amazon EC2 或基础架构即服务。然后 Dev 中的团队(可能是虚拟团队)充当有关操作特性、度量、监控、服务器供应等方面的专业知识来源,并且可能与 Iaas 团队进行大部分沟通。

然而这个团队仍然是一个开发团队,遵循诸如 TDD、CI、迭代开发、指导等标准实践。IaaS 团队结构具有一些潜在的有效性(失去与 Ops 人员直接协作),以便更容易实施,可能比类型一更快地获得价值。

类型三适用性:具有几种不同产品和服务、具有传统运营部门或其应用程序完全在公共云中运行的组织
潜在有效性:中等

类型四:DevOps 即服务

一些组织,特别是较小的组织,可能没有资金、经验或工作人员来领导他们的软件运维。开发团队可能会接触到像 Rackspace 这样的服务提供商,去帮助他们建立测试环境并自动化其基础设施和监控,并就软件开发周期中实现的各种运维功能提供建议。

可以被称之为 DevOps-as-a-Service 的应该是帮助小型团队了解自动化、监控和配置管理的一种有效务实的方法。随着业务的发展和更多的员工加入,可能转向第三类甚至第一类模式。

类型四适应性:运营经验有限的小型团队或组织
有效潜力:中

类型五:临时 DevOps 团队

这个类型看起来和反类型 B 有极大的相似,但是实际上其本质意图和长远性是完全不同的。这个临时团队的任务是使 Dev 和 Ops 更紧密的联合在一起,理想目标是完全转型成类型一或二。临时团队成员将在 Dev-speak 和 Ops-speak 之间进行翻译,并引入一些疯狂的点子,例如为 Ops 团队介绍站立会和看板系统,还有一些吹毛求疵的细节,例如为 Dev 团队介绍负载均衡器,管理 NIC 和卸载 SSL。

如果有足够多的人意识到 Dev 和 Ops 团队结合后将带来的价值,临时团队将有机会真正的实现它的目标。至关重要的一点是,对部署和生产分析的长期责任不应该被分配给临时团队,否则很可能会朝着反类型 B 的不利方向演进。

类型五适应性:想达成类型一的前身,但是要警惕演变成反类型 B 的可能
有效潜力:低至中

总结

究竟哪个 DevOps 团队结构适合一个组织取决于以下几点:

  1. 该组织的产品组合:较少的产品会使团队协作更加容易,因为根据 Conway 定律,这种情况下的独立谷仓会比较少。
  2. 技术领导的范围力度和有效性;Dev 和 Ops 是否有清晰明确的共同目标。
  3. 组织是否具有能力或欲望去该改变它的 IT 运维部门,从“服务器的组建和配置”转变成真的可以实现其价值流,以及软件研发团队认真对待运维团队。
  4. 组织是否具有能力和技能去解决运维问题。

当然,这里描述的主题有所不同,团队结构和类型作为参考指南或启发,或许可以对评估哪一种模式是适合的带来一些帮助。实际上,将多种模式结合,或将两种模式构成转变和递进的结构模式,往往能达到更好的效果。

活动预告

7 月 21 日本周日,CODING、腾讯云、腾讯 TEG 技术工程事业群将共同举办首届腾讯运维技术开放日 活动,旨在分享和交流腾讯内部在运维方面的实践经验,打造腾讯内部与外部共同交流、共同进步的运维技术生态。

CODING 深耕 DevOps 市场,除腾讯外,也为富士康、拉卡拉、国泰基金、天津大学等组织提供 DevOps 工具服务。CODING 创始人张海龙受邀参加本次活动,将与大家分享协助客户进行 DevOps 转型的经验,以及在 DevOps 的大趋势下开发与运维的新关系

点击此处报名活动
7 月 21 日期待大家的到来!

五种团队的组织方式落地 DevOps的更多相关文章

  1. iOS五种本地缓存数据方式

    iOS五种本地缓存数据方式   iOS本地缓存数据方式有五种:前言 1.直接写文件方式:可以存储的对象有NSString.NSArray.NSDictionary.NSData.NSNumber,数据 ...

  2. JavaScript常见的五种数组去重的方式

    ▓▓▓▓▓▓ 大致介绍 JavaScript的数组去重问题在许多面试中都会遇到,现在做个总结 先来建立一个数组 var arr = [1,2,3,3,2,'我','我',34,'我的',NaN,NaN ...

  3. Java中五种遍历HashMap的方式

    import java.util.HashMap; import java.util.Iterator; import java.util.Map; public class Java8Templat ...

  4. 用五种不同的布局方式实现“左右300px中间自适应”的效果

    float浮动 <section class="layout float"> <style media="screen"> .layou ...

  5. Ngui 五种点击事件实现方式及在3d场景中点透的情况

    http://www.unity蛮牛.com/thread-22018-1-1.html ngui作为unity界面插件之一中,无疑是最好用,使用最多的了从自学unity到现在界面一直使用它 由于它的 ...

  6. ASP.NET Core中配置监听URLs的五种方式

    原文: 5 ways to set the URLs for an ASP.NET Core app 作者: Andrew Lock 译者: Lamond Lu 默认情况下,ASP. NET Core ...

  7. js去掉字符串前后空格的五种方法

    转载 :http://www.2cto.com/kf/201204/125943.html 第一种:循环检查替换[javascript]//供使用者调用  function trim(s){  ret ...

  8. Javascript 去掉字符串前后空格的五种方法

    第一种:循环检查替换 [javascript] //供使用者调用 function trim(s){ return trimRight(trimLeft(s)); } //去掉左边的空白 functi ...

  9. js去掉字符串前后空格的五种方法(转)

    出处:http://www.2cto.com/kf/201204/125943.html 第一种:循环检查替换[javascript]//供使用者调用  function trim(s){  retu ...

随机推荐

  1. luogu P1731 [NOI1999]生日蛋糕 |暴力枚举

    题目背景 7月17日是Mr.W的生日,ACM-THU为此要制作一个体积为Nπ的M层 生日蛋糕,每层都是一个圆柱体. 设从下往上数第i(1<=i<=M)层蛋糕是半径为Ri, 高度为Hi的圆柱 ...

  2. CF 1131A,1131B,1131C,1131D,1131F(Round541 A,B,C,D,F)题解

    A. Sea Battle time limit per test 1 second memory limit per test 256 megabytes input standard input ...

  3. 了解一下Mysql分布式事务及优缺点、使用案例(php+mysql)

    在开发中,为了降低单点压力,通常会根据业务情况进行分表分库,将表分布在不同的库中(库可能分布在不同的机器上),但是一个业务场景可能会同时处理两个表的操作.在这种场景下,事务的提交会变得相对复杂,因为多 ...

  4. vs里 .sln和.suo 文件 Visual Studio里*.sln和*.suo文件的作用

    Visual Studio里*.sln和*.suo文件的作用      VS项目采用两种文件类型(.sln   和   .suo)来存储特定于解决方案的设置.这些文件总称为解决方案文件,为解决方案资源 ...

  5. 新更新的OV7670 OV7725模块效果展示 OV7670 FPC版 30万像素 CMOS模块 兼容官哥方便 FPGA stm32f407 68013等使用

    原创OV7670,30W像素摄像头模块, 3) 光学尺寸1/6 ,像素面积3.6 μm x 3.6 μm,灵敏度1.3V/Lux-sec 4) 工作电压:3.3V 5) 接口定义为10*2的2.54间 ...

  6. Python流程控制之循环结构

    目录 while循环 for循环 嵌套循环 break.continue.pass 练习 当出现有规律或者是重复的事情就可以使用循环. 1.循环变量初始化 2.循环条件 3.循环体 4.改变循环变量 ...

  7. 2019年Java并发精选面试题,哪些你还不会?(含答案和思维导图)

    Java 并发编程 1.并发编程三要素? 2.实现可见性的方法有哪些? 3.多线程的价值? 4.创建线程的有哪些方式? 5.创建线程的三种方式的对比? 6.线程的状态流转图 7.Java 线程具有五中 ...

  8. 将SD系统启动卡恢复成普通卡

    1.卸载SD卡分区 在使用fdisk命令前,请使用如下命令卸载boot分区和rootfs分区: umount /media/boot umount /media/rootfs 2.在插入SD卡前后分别 ...

  9. ELK和EFK的区别

    ELK 是现阶段众多企业单位都在使用的一种日志分析系统,它能够方便的为我们收集你想要的日志并且展示出来 ELK是Elasticsearch.Logstash.Kibana的简称,这三者都是开源软件,通 ...

  10. 【转载】Opening Robot Framework log failed

    问题: 两种方法可以解决: 1.临时解决方案 jenkins系统管理—>运行命令行,在文本里输入 System.setProperty("hudson.model.DirectoryB ...