DevOps团队结构类型汇总:总有一款适合你

前言

组织中任何DevOps工作的主要目标都是改进客户和业务的价值交付,而不是降低成本、提升自动化或者通过配置管理驱动一切;这意味着,为了实现有效的Dev和Ops协同,不同的组织可能需要不同的团队结构。

概述

具体哪种DevOps团队结构或拓扑适合组织取决于以下几个方面:

  • 组织的产品集:产品越少协同越简单,就像康威定律预言的那样,自然形成的筒仓就越少;

  • 技术领导者的职责范围、实力和有效性;Dev和Ops是否有共同的目标;

  • 组织是否有能力或意愿变革其IT运维部门,使其不再只是“上架硬件”和“配置服务器”,而是成为真正与价值流一致的部门,使运维特性为软件团队所重视;

  • 组织是否有能力或技能主导运维。

当然,这里列出的主题有些差异;这些拓扑和类型可作为参考指南用于评估某个模式是否恰当。实际上,组合多个模式或将一个模式转换为另一个模式通常是最好的方法。

那么,什么样的团队结构适合采用DevOps呢?显然,不存在适合每个组织的神奇结构或团队拓扑。然而,介绍几种不同的团队结构模型是有用处的,其中一些模型比其他模型更适合某些组织。通过探索这些团队结构(或“拓扑”)的优缺点,我们可以确定自己的组织中最适合DevOps实践的团队结构,并考虑康威定律。

下面为你一一介绍DevOps实践的各种团队结构。

DevOps的反类型

了解一些糟糕的做法是有用处的,我们可以叫它们“反类型(anti-types)”(这个叫法源于我们常见的“反模式”)。

反类型A:Dev和Ops筒仓

这是典型的Dev和Ops“各管一摊”。这意味着可以尽早声明故事点“完工”(意味着“特性完成”,但还没应用到生产中),而软件可操作性受损,因为Dev没有足够的有关运维特性的上下文信息,而Ops人员没有时间或无意为了软件上线前解决问题而参与开发。

我们可能都知道这种拓扑不好,但我认为,还有实际上更糟糕的拓扑;对于反类型A(Dev和Ops筒仓),我们至少知道这其中寻在问题。

\"\"

反类型B:DevOps团队筒仓

DevOps团队筒仓(反类型B)的形成通常是因为经理或主管认定他们“需要一点DevOps的东西”并创建了一个“DevOps团队”(可能其中全是被称为“DevOp”的人)。DevOps团队的成员迅速形成另一个筒仓,Dev和Ops远比以往任何时候都注意保持距离,因为他们要捍卫自己的老窝、技能和工具集,不被那些“一无所知的Dev”和“守旧落伍的Ops”所破坏。

一个单独的DevOps筒仓只在一种情况下是真正有意义的,就是该团队为临时团队,存在时间不超过12或18个月,其目的是为了让Dev和Ops团结起来,而且很明确,过了这段时间,该DevOps团队就是多余的了;这是我下文所说的5型DevOps拓扑。

\"\"

反类型C:Dev不需要Ops

这种拓扑诞生于开发人员和开发经理的天真和傲慢,特别是当开始新项目或系统时。假设Ops现在已经成为过去(“我们现在有云,对吧?”),开发人员严重低估了运维技能和活动的复杂性和重要性,并相信可以没有他们,或者只在空闲时间涉及他们。

这种反类型C的DevOps拓扑可能最终需要下文说到的3型(Ops即IaaS)或4型 (DevOps即服务)的拓扑,因为他们的软件变得更加复杂,并且运维活动开始占用“开发”(即编码)时间。要是这样的团队认识到,运维作为一门学科的重要性与软件开发同等重要和有价值,他们就能够避免许多痛苦和不必要的(非常基本的)运维错误。

\"\"

反类型D:DevOps作为工具团队

为了“成为DevOps”而又不影响当前Dev团队的速度(或者说功能点交付),创建一个DevOps团队致力于部署管道、配置管理、环境管理等所需的工具。同时,运维人员继续孤立工作,而Dev团队继续把应用程序从“墙上”扔给他们。

尽管这个专门小组的成果就改进工具链而言可能是有好处的,但其影响很有限。在应用程序开发生命周期中Ops人员未能早期参与和协作的基本问题仍然没有改变。

\"图片\"

反类型E:换个名的SysAdmin

这种反类型在工程成熟度较低的组织中很典型。他们想要提高实践并降低成本,然而,他们并没有将IT视为业务的核心推动力。因为DevOps在行业内取得的成功现在已经显而易见,所以他们想“做DevOps”。不幸的是,他们没有反思当前的结构和关系存在什么差距就去为Ops团队招聘“DevOps工程师”,这很难达到目的。

DevOps只是对以前的SysAdmin角色改了个名,没有真正的文化/组织变革发生。这种反类型正变得越来越普遍,因为为了招揽人才而无所不为的招聘人员会赶时髦,寻找具有自动化和工具技能的求职者。遗憾的是,人类的沟通技巧可以让DevOps在组织中茁壮成长。

\"图片\"

反类型F:Ops嵌入到Dev团队

组织不希望保留一个单独的运维团队,因此,开发团队会负责基础设施、管理环境、监控等。然而,在项目或产品导向的方式中,这样做意味着这些工作会受到资源限制和优先级重排的影响,导致低于标准的方法和不成熟的解决方案。

这种反类型表明,组织对有效IT运维的重要性和所需的技能缺乏认识。特别地,开发人员将其视为一种烦恼,Ops的价值因此被贬低(Ops是由开发团队的管理者管理的,而开发团队往往有其他的优先级事项)。

\"图片\"

反类型G:Dev和DBA筒仓

这是反类型A (Dev和Ops筒仓)的一种形式,在中大型公司中非常突出,在这些公司中,多个遗留系统依赖于相同的核心数据集。因为这些数据库对于业务而言非常重要,在Ops保护伞下会有一个专门的DBA团队,负责它们的维护、性能调优和灾难恢复。这是可以理解的。问题是,当这个团队成为任何数据库变更的守门人时,它实际上就成为频繁的小规模部署(DevOps和持续交付的核心原则)的障碍。

此外,就像反类型A中的Ops,DBA团队并不参与应用程序的早期开发,因此,在交付周期中会发现数据问题(迁移、性能等)。再加上需要负责多个应用程序的数据库,最终的结果是不断地灭火和越来越大的交付压力。

\"图片\"

DevOps团队拓扑

与反类型相反,让我们看一些有效的DevOps拓扑。

1型:Dev与Ops协作

这是DevOps的“应许之地”:Dev团队和Ops团队之间顺畅协作,各自专注于自己的工作,并在必要的时候互相分担。可能有许多单独的Dev团队,每个团队致力于一个独立或半独立的产品栈。

我的感觉是,这种1型模型的建立需要相当大量的组织变革,并且要求技术管理团队的高层具有一定的能力。Dev和Ops必须有一个清晰描述且明显有效的共同目标(提供可靠而频繁的变更,诸如此类)。Ops人员必须适应与Dev人员搭配,掌握测试驱动编码和Git,而Dev人员必须认真对待运维特性,从Ops人员那里获得日志实现的输入,等等,所有这些都需要相当大的文化变革。

\"\"

1型适用于具有强力技术领导者的组织
潜在有效性:高

2型:完全共担Ops职责

运维人员已经被整合到产品开发团队,我们看到了一个2型拓扑。Dev和Ops之间几乎密不可分,所有人都高度关注同一个目标,这是一种有争议的1型(Dev和Ops协作)形式,但它有一些自己的特点。

像Netflix和Facebook这种实际上只有一种Web产品的组织已经实现了这种2型拓扑,但我认为,如果不是只关注少量核心产品,这种模式可能不是非常适用,因为在拥有多个产品流的组织中,预算限制和上下文切换很可能会迫使Dev和Ops进一步分开(比如说回到1型模型)。由于没有明显的或可见的运维团队,所以这种拓扑可能也被称为“NoOps”,(尽管Netflix NoOps也可以是下文的3型(Ops即IaaS))。

\"\"

2型适用于具有单一主要Web产品或服务的组织
潜在有效性:高

3型:Ops即IaaS(平台)

对于具有传统IT运维部门(不能或不愿做出足够迅速的变更)的组织,以及将所有应用程序运行在公有云(Amazon EC2、Rackspace、Azure等等)上的组织,这可能有助于将运维视为一个团队,他们只是提供了弹性基础设施供应用程序在上面部署和运行;为此,内部Ops团队直接就相当于Amazon EC2或“基础设施即服务(IaaS)”。

然后,Dev中的一个团队(也许是一个虚拟团队)可以作为运维特性、指标、监控、服务器配置等方面的专家组,可能负责大部分与IaaS团队的沟通。然而,这个团队仍然是一个Dev团队,遵循TDD、CI、迭代开发等标准实践。

IaaS拓扑的潜在效益是实现更容易(不必和Ops人员直接协作)完成,可能比尝试1型(Dev和Ops协作)拓扑更快地获得价值,至于1型,可以后续再试。

\"\"

3型适用于有多个不同的产品和服务以及传统Ops部门的组织,或者应用程序全部在公有云上运行的组织
潜在有效性:中

4型:DevOps作为外部服务

有些组织,特别是较小的组织,可能没有财力、经验或人力可以运维其开发的软件。Dev团队可能会联系服务提供者,如Rackspace,帮助他们构建测试环境及自动化基础设施和监控,并就他们在软件开发周期中实现何种运维特性提供建议。

对于小型组织或团队,如果他们想要学习自动化、监控和配置管理,然后随着他们的发展,会有更多的人专注于运维,他们可能发展成3型(Ops即IaaS)甚至1型(Dev和Ops协作)模型,那么DevOps即服务可能是一个有效而务实的方式。

\"\"

4型适用于运维问题相关经验比较有限的小型团队或组织
潜在有效性:中

5型:具有截止日期的DevOps团队

具有截止日期的DevOps团队(5型)看上去非常像反类型B(DevOps团队筒仓),但它的意图和期限有很大的不同。这个临时团队的使命是让Dev和Ops更紧密地联系在一起,在理想的情况下向1型(Dev和Ops协作)或2型(完全共担Ops职责)模型转化,并最终会淘汰掉。

临时团队的成员将“翻译”Dev语言和Ops语言,引入大胆的想法,像站立会议和运维团队看板,考虑讨人厌的细节,如负载均衡、管理NIC以及为Dev团队进行SSL减负(offloading )。如果有足够多的人开始看到Dev和Ops一起协作带来的价值,那么临时团队就真正获得了一个达成目标的机会,至关重要的是,部署和生产诊断的长期职责不应该给临时团队,否则它就可能会成为一个DevOps团队筒仓(反类型B)。

\"\"

5型是1型拓扑的前身,但要注意反类型B的危险
潜在有效性:低到高

6型:DevOps布道团队

在Dev和Ops之间存在巨大鸿沟(或者差距有变得很大的趋势)的组织里,它可以有效地“促进”DevOps团队,保证Dev和Ops之间的对话。这是5型具有截止日期的DevOps团队的一个版本,但这里的DevOps团队是一直存在的,其具体职责是促进Dev团队和Ops团队之间的协作。这个团队的成员有时也被称作“DevOps布道者”,因为他们帮助宣传DevOps实践。

“DevOps团队”的目标应该是通过赋能组织的其他部分来让自己脱离业务。

——EricMinick

\"图片\"

6型适用于Dev和Ops之间有疏远趋势的组织。注意反类型B的危险
潜在有效性:中到高

7型:SRE团队(谷歌模型)

DevOps经常建议Dev团队加入值班轮换,但这不是必要的。事实上,有些组织(包括谷歌)运行一个不同的模型,软件由开发团队显式“交接给”运行软件的团队,即网站可靠性工程团队(SRE)。在这个模型中,Dev团队需要向SRE团队提供测试证据(日志、指标等),证明他们的软件已经达到一个SRE团队认为足够好的标准。

至关重要的是,SRE团队可以拒绝不符合运维标准的软件,要求开发人员在投入生产之前改进代码。Dev和SRE之间的协作围绕着运维标准展开,但是,一旦SRE团队对代码满意,他们(而不是Dev团队)就会在生产环境中提供支持。

\"图片\"

7型只适用于工程和组织成熟度较高的组织。如果SRE/Ops团队被告知进行“JFDI”部署,则要注意不要回到反类型A
潜在有效性:低到高

8型:容器驱动协作

容器将应用程序的部署和运行要求封装到了容器中,消除了Dev和Ops之间的某些协作需求。在这种情况下,容器充当了Dev和Ops的责任边界。在良好的工程文化中,容器驱动协作模型运转良好,但是,如果Dev开始忽视运维注意事项,那么,这个模型就会向敌对的“我们和他们”回归。

\"图片\"

8型适用性:容器可以很好地发挥作用,但要注意反类型A,不要期望Ops团队运行Dev扔给他们的任何东西
潜在有效性:中到高

9型:Dev和DBA协作

为了消除Dev和DBA之间的鸿沟,有些组织已经尝试使用类似9型的模型,DBA团队的数据库能力与Dev团队的数据库能力(或专长)可以很好地互补。这似乎有助于将以Dev为中心的数据库视图(基本上就是作为应用程序笨拙的持久性存储)和以DBA为中心的数据库视图(智能丰富的业务价值源)之间的转换。

\"图片\"

9型只适用于有一个或多个大型中心数据库连接多个应用程序的组织
潜在有效性:中

你所在的团队开始采用DevOps了吗,是怎样的模式呢?欢迎大家在评论区一起谈谈。

查看英文原文:https://web.devopstopologies.com/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/449434.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

magic

转载于:https://www.cnblogs.com/P201821430028/p/10611080.html

真格量化-bs套利

#!/usr/bin/env python # coding:utf-8 from PoboAPI import * import datetime import time import numpy as np from copy import *#开始时间,用于初始化一些参数 def OnStart(context) :context.myacc = None#登录交易账号if context.accounts["回测期权"].Login…

人生历练必备的十个心态(图)

成功源自心态,如果为自己镶嵌上雄心、信心、决心、爱心、专心、诚心、耐心、恒心、虚心、静心这十颗心,不断打造自己的心态,你就一定会取得人生的成功! 第一个:雄心 你应该让自己试着从人生的地平线上跃起。 第二个&#xf…

【docker】常用docker命令,及一些坑

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 查看容器的root用户密码 docker logs <容器名orID> 2>&1 | grep ^User: | tail -n1因为docker容器启动时的root用户的密码…

kubernetes系列10—存储卷详解

kubernetes系列10—存储卷详解 1、认识存储卷 1.1 背景 默认情况下容器中的磁盘文件是非持久化的&#xff0c;容器中的磁盘的生命周期是短暂的&#xff0c;这就带来了一系列的问题&#xff1a;第一&#xff0c;当一个容器损坏之后&#xff0c;kubelet 会重启这个容器&#xff0…

真格量化-隐含波动率计算

#!/usr/bin/env python # coding:utf-8 from PoboAPI import * import datetime import time import numpy as np from copy import *#开始时间,用于初始化一些参数 def OnStart(context) :context.myacc = None#登录交易账号if context.accounts["回测期权"].Login…

Vue 后台管理

这里是结合vue和element快速成型的一个demo 里面展示了基本的后台管理界面的大体结构和element的基本操作 GitHub的地址&#xff1a;https://github.com/wwwming/adminDemo 转载于:https://www.cnblogs.com/wangming1002/p/10613014.html

生活窍门 这样用钱就会富足

当我终于从恶劣处境中解脱之后&#xff0c;我想买栋房子&#xff0c;然而父亲却丝毫不为我感到兴奋。他说&#xff1a;“在尽一项新的支付义务前&#xff0c;你应该多投资。”那个时候&#xff0c;许多人相信自己的房子是一种投资。我的父亲问我&#xff1a;“如果你买了一栋房…

如何在Kubernetes集群动态使用 NAS 持久卷

1. 介绍&#xff1a; 本文介绍的动态生成NAS存储卷的方案&#xff1a;在一个已有文件系统上&#xff0c;自动生成一个目录&#xff0c;这个目录定义为目标存储卷&#xff1b; 镜像地址&#xff1a;registry.cn-hangzhou.aliyuncs.com/acs/alicloud-nas-controller:v1.11.5.4-43…

Linux查看MySQL版本的四种方法

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1 在终端下执行 mysql -V 2 在help中查找 mysql --help |grep Distrib 3 在mysql 里查看 select version() 4 在mysql 里查看 status…

行业指数动量策略+akshare

以周为单位&#xff0c;获取本周最强的5只行业指数&#xff0c;进行均值购买。 数据源采用akshare。 导入包 import akshare as ak import pandas as pd import numpy as np import matplotlib 日线换为周线 #日线换为周线数据 def transferToWeekLine(df):data1dfstock_da…

2019-03-28 SQL Server Pivot

--现在我们是用PIVOT函数将列[WEEK]的行值转换为列&#xff0c;并使用聚合函数Count(TotalPrice)来统计每一个Week列在转换前有多少行数据&#xff0c;语句如下所示 select * from ShoppingCart as C PIVOT(count(TotalPrice) FOR [Week] IN([1],[2],[3],[4],[5],[6],[7])) AS…

C/C++开发者必不可少的15款编译器+IDE

摘要&#xff1a;C/C这两门语言依然活跃在编程领域里&#xff0c;其不仅拥有强大的功能集&#xff0c;而且还提供了强大的安全保障。为此&#xff0c;笔者专为C/C编码者收集了15款令人印象深刻的IDE和编译器。 Web开发者可选择的编程语言有很多比如&#xff0c;Java、.Net、PH…

白山云科技 CTO 童剑:空降后,如何有技术又有艺术地破局?

TGO 鲲鹏会北京分会举行了一场线下分享活动——《 CTO 空降如何平稳落地 》&#xff0c;白山云科技&#xff08;下称“白山”&#xff09;CTO 童剑分享了他的故事和经验。在工作中&#xff0c;“空降”这个问题不仅仅是 CTO 会遇到&#xff0c;每一个带团队的领导都会遇到。如何…

linux 的 df命令:显示磁盘分区上的可用空间

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 df命令用于显示磁盘分区上的可使用的磁盘空间。默认显示单位为KB。可以利用该命令来获取硬盘被占用了多少空间&#xff0c;目前还剩下多…

akshare改写公募基金轮动策略

群友说&#xff0c;行业指数不行&#xff0c;没办法跟买。这次我换成了etf进行动量策略&#xff0c;选择本周上涨最强的5个etf&#xff0c;平均持仓&#xff0c;一周后移仓。查看回测效果。 不废话&#xff0c;上传代码&#xff0c;但还是有点毛糙。下次加上日期这些数据&#…

BZOJ 离线网站

https://acm.taifua.com/bzoj/index.html https://lydsy.download/archive/ http://lbn187.is-programmer.com/posts/103404.html转载于:https://www.cnblogs.com/Agnel-Cynthia/p/10614287.html

Python--day48--ORM框架SQLAlchemy操作表

ORM框架SQLAlchemy操作表&#xff1a; 表结构和数据库连接&#xff1a; 1 #!/usr/bin/env python2 # -*- coding:utf-8 -*-3 from sqlalchemy.ext.declarative import declarative_base4 from sqlalchemy import Column, Integer, String, ForeignKey, UniqueConstraint, Index…

如何理解指向指针的指针?

本文由 伯乐在线 - 菜鸟浮出水 翻译自 StackOverflow。欢迎加入 技术翻译小组。转载请参见文章末尾处的要求。问题&#xff1a;如何理解指向指针的指针&#xff1f; 我在一篇教程中看到下面这段&#xff0c;它描述指向指针的指针是如何运作的。 引用文章相关段落如下&#x…

Linux定时任务Crontab命令详解

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 linux 系统则是由 cron (crond) 这个系统服务来控制的。Linux 系统上面原本就有非常多的计划性工作&#xff0c;因此这个系统服务是默认…