一、技术团队细分及配合问题
在IT企业里产品从创意到交付给用户,从整体上看是由技术部门负责,但如果深入到技术部门,会发现由不同的技术团队负责不同的部分或者阶段。一般会分产品团队、开发团队、测试团队以及运维团队,在互联网公司里,运维团队一般还分基础运维和产品运维两个团队,基础运维负责基础设施(包括机架、网络、硬件)和操作系统的安装,为整体公司的所有产品提供基础设施的运维服务。而产品运维负责线上产品的问题处理、代码的布署和跟开发的接口等。
不同的技术团队一般隶属不同的部门,分散在公司不同的办公区域,团队内部的沟通相对多一些,但团队之间的沟通较少。不同团队都会形成自己的办事习惯、节奏,都有自己的关注点,一般只是知道与之接口的团队的总体职责,但是不知道对方可能面临的困难与工作中的挑战点。另外,如果公司够大,每个团队内部又会分为许更细的小团队,如基础运维一般有系统团队、网络团队和IDC团队等,这样更加重了团队之间沟通难度。
从产品策划到上线,一般是以下边的顺序经过各个团队:
- 开发团队收集产品的需求,定下时间表并进行开发
- 开发完后,交由测试或质量团队进行测试
- 然后交给运维团队布署新产品或新版本
- 运维团队将运维过程中发现的代码缺陷反馈给开发团队进行修复
在上面的每个阶段,对应的团队都是各做各的,一般是在最后才会把球踢给下一个团队,如果下一个团队发现问题又会把球踢回原来的团队。如果你深入到不同的团队中去,或听到不同的抱怨声音。
基础运维团队经常抱怨:
- 产品开发一点计划都没有,突然要上线机器,让我们措手不及。
- 每个产品都急着上线,谁催得急就上谁的,谁能说一下,到底那个重要?
- 动不动就要重装系统,坏了一块盘就着急去修,刚从机房回来,又要过去。
- 上线太突然了,没有交换机,没有机架,还需要搬别的机器腾地方。
- 那个地方有机架和交换机端口,但没有四层设备,他们又要放在四层后边,真的没有办法了。
- 刚跟他们上线到一个机房,他们又说要换到另一个机房,尽折腾。
- 他们怎么能那么用设备,把上连端口带宽都跑满了。
产品运维团队会说:
- 真没办法,上个线不是说没机架,就是没有交换机,还有就是说没有四层设备。
- 从来不告诉我们什么时候能设备能上线交付给我们,不派专人催着这事,一点谱都没有。
- 本来没有想好怎么用这些设备,先提前一个月申请上线,得我们想清楚了,他们却说又得换机房。
- 网络怎么老是出问题,他们怎么规划的。
- 开发的代码太不靠谱,一上线就引发用户投诉,只能回滚到老版本。
- 开发人员的技术能力不行,写不出能用的版本。
- 开发要求有一个跟生产环境一样的测试环境,这不可能有的。
而开发团队却说:
- 他们又不让我们碰线上的系统,生产环境是什么样,我们都不知道,没法开发代码。
- 我们辛苦开发几个月,上线出问题又直接回滚了,心情很不好受。
- 代码在测试环境或我的机器跑的好好的呀,怎么一上线就出问题呢。
- 测试怎么测的,那么多问题发现不了。
- 我们希望产品运维同事帮忙搭一个跟线上一模一样的测试环境。
另外,测试团队的人也许会说:
- 开发人员不写规定写单元测试代码。
- 想着能用一个自动的集成测试环境,因为开发的原因,老是实现不了。
- 测试环境跟生产环境不一样,好多问题才发现
- 还有那么多的bug没有解决,产品就催着上线。
二、技术团队之间配合不好的影响
上面看到的团队之间的冲突和抱怨问题虽然都不一样,产生的影响确是类似的:
- 产品上线的进度延误,整个团队很难正常交付新版本。
- 产品上线后问题很多,影响用户的访问。
- 团队的士气很差。
最近又发生了运维团队与开发团队之间的配合不好的问题,影响及原因如下:
- 新产品上线延误了两个星期,正常情况下一天就可以上线。原因是开发考虑不周,测试环境中没有发现,到上线前才发现部署到多台机器上后,按开发原先计划的方式多台机器无法协作完成任务。还有就是在设计阶段没有考虑生产环境的状况,在上线的过程中需要做出对应的代码调整。
- 上线后质量不稳定,出现多次紧急修复。原因同上。
- 临时增加硬件投入。新产品中有个组件采用全新的技术方案,跟原来的LAMP体系不兼容,所以需要新增机器,单独部署。
- 除低了服务可用性标准,并产生了遗留问题。因为临时需要增加硬件,而恰好又只有一台,这样就形成了单点,如果该机器出现故障,服务将全部中断。另外,由于开发前设计上考虑不周,跟别的组件集成时产生别的单点。所以这些降低了服务的可用性,以后还得想办法解决。除此之外,组件采有新的软件,安装、服务起停以及软件配置的管理都是纯手工打造,以后还得找时间纳入到自动配置管理中。
- 影响了团队士气。在上线过程中开发、测试和运维都觉得不舒服,相互之间产生了抱怨。如果不处理好,会影响以后的配合。
虽然,有些问题确实需要靠某些团队提高自身的人员技能才能解决好,但这些团队能够形成一股合力的话,同样的人员组合肯定会产生更好的效果。
三、过去解决团队配合问题的方法
第一次碰到团队之间的配合问题时,我们还没来得及解决的时候,公司战略调整,整个开发和系统运营团队转给了另一个大部门。但我们在别的地方重新梳理技术团队时,后来又没有出现这种问题,回想起来,我们的做法是:
- 部分开发人员有生产环境中服务器的帐号,可以观察代码的运转情况,少数核心开发人员还有sudo权限,当然他们也不会随便修改服务器的设置
- 开发时一开始就会跟系统运维团队沟通,在代码中增加数据收集的接口和监控接口,这样上线后,很容易收集产品的性能数据,并能方便地对运行状态进行监控与报警
- 生产环境中也有沙箱与beta环境,这样大的版本从测试中过渡到生产环境前,先在沙箱环境中适应一段时间,这样能相对平稳过渡到生产环境
- 部分开发人员临时转到系统运维团队工作一到二个季度,跟系统运维同事一起上线产品,解决产品在运行中发生的问题,这样更好地了解代码如何在生产环境中运行,回去之后能更好地运维同事沟通,开发出来的代码更容易在生产环境中运行
这样,不同团队之间虽然有职责上的明确分工,但在中间的配合的部分做了不少柔性处理。另外,开发、运维与测试等团队中的核心人员之间本身就有认同感,大家一开始的目标就是奔着公司能成功来的,这是没有出配合问题的根本原因。这一点其实跟DevOps的核心点类似,既然如此,何不重新审视一下DevOps,并参考着解决团队之间的配合问题呢。
四、DevOps
DevOps是2010年从欧洲传过来的概念,最先是由一群有着跨学科技能的工程师提出来的,为了解决下面的问题:
- 推出新功能和解决老问题的周期过长
- 新产品或新版本上线充满风险,代码能否在生产环境中稳定运行,没有人有信心,只能艰难地推上去,再看是不是有问题
- 不同团队相互隔离,配合差。如开发人员收到问题后,第一反应是“在我的机器上工作得好好的呀”
我认为DevOps的核心是不管你是开发者、测试人员、管理者、DBA、网络工程师还是系统管理员,大家都是一起的,只有一起努力给客户提供稳定而高质量的软件服务,实现公司的商业利益才会有别的,包括自己的工作机会。
所以,DevOps实际是给各个团队之间搭桥,让他们不仅仅是依靠上线申请单这样的鸿雁传书工具进行沟通,而且经常离开自己的孤岛,走到别人的岛上去,了解别人,并提供自己的想法,帮助对方。
DevOps更象是一种运动,每家公司都需要根椐自身的特点进行借鉴,推动团队之间的协作与合作。需要在三个方面努力:
-
人员
一方面对现有人员进行培训,鼓励他们了解别的团队的工作、面临的挑战等,让他们用自己的特长去审视和帮助别的团队,另一方面也想办法招一些全面的技术人才,在不同团队之间搭出一些适用的桥来。
-
流程
在研发的前期,让系统运维同事参与起来,一起搭建测试环境,验证想法,或者也可以在一些项目团队中直接配有系统、开发和测试以及产品人员,一起为产品的上线努力。出现问题的时候,一起想方法找到问题的真正根源,避免相互推托,将解决方案落实在以后的研发过程中。从绩效考核流程上也需要考虑协作因素。
-
工具
说实在的,大家针对DevOps在工具方面其实讨论得更多,这里面跟敏捷有些类似之处。快速的系统部署和自动化产品代码发布方面的工具显得尤为重要了。
为了避免校弯过正,走向另一个极端,也需要避免下面的对DevOps的常见误解:
-
DevOps意味着要给开发者root权限
可以给开发者加sudo权限,运行指定的命令,比如重启web服务。让开发者更多地了解生产环境和产品的运行状况,但并不意味着让开发者象管理员一样的去管理机器。
-
所有系统管理员需要写代码,所有开发者需要上架机器
在系统管理和开发者各个领域仍然需要各自的专家,如存储、网络、安装、javascript等专门的人才,DevOps并不意味着让大家不做自己专长的事情。
-
你一定要用某个工具,不然就不是DevOps
一些技术和自动化的工具对推动各个团队之间协作很有帮助,但是还是需要聚焦于要解决的问题,根椐问题和组织的特点选择合适的工具。
-
我们需要招聘DevOps
DevOps不是一个新的岗位
五、结合DevOps,解决团队配合问题
管理人员关注团队之间的沟通机制及氛围:
- 以新版能在生产环境中可靠稳定运行为目标,形成协作的氛围。
- 在项目的早期,立项之间,运维、开发与测试就进行沟通,可能的话坐在一起,面对面沟通。
- 在项目上线前,除了测试功能,还要关注部署、备份、监控、安全以及配置管理,在早期发现的问题越多,越能尽少后期的问题并避免影响用户体验。
- 建立各个团队的核心成员定期沟通机制。
- 团队之间的协作纳入绩效考核过程中去。
让开发人员了解运维工作、关注点及挑战,并从开发视角帮助运维:
- 开发人员参与运维团队的内部培训,了解线上的系统。
- 了解运维如何定位并解决故障、如何监控系统的运转情况等。
- 少数开发人员可以跟运维一样发版本到生产环境中,让开发人员关注并了解自己代码的运行情况。
- 从运维的视角修改代码,方便运维人员进行日常的变更与调整,监控与报警。
- 帮助运维人员修改puppet配置模板。
- 帮助运维人员编写与修改产品的发布脚本,提高自动化水平。
让运维人员了解开发过程的关注点及挑战,并从运维角度改善开发过程:
- 运维为开发在公司搭建基于虚拟机的测试环境,虚拟机的安装、配置管理以及代码的发布采用跟生产环境一样的方式。
- 开发人员与测试人员象运维一样发布版本到测试环境中。
- 鼓励开发与测试人员修改puppet配置与模板,管理自己的虚拟机。
- 在生产环境中建立了beta环境,开发人员可以直接发版本上去,让代码在最终上线前多一层缓冲。
- 运维去了解代码的模块结构,从运维的角度修改代码,让产品上线后更方便运维与适应生产环境的特点。
- 运维参与到持续的集成测试中,用自己的自动化知识帮助实现自动的集成测试等。
分享到:
相关推荐
3. **中小团队的挑战**:中小团队在实施云原生DevOps时可能会面临资源限制、技术选型、团队协作和知识积累等问题。他们需要找到适合自身规模和需求的工具链,同时培养跨职能团队,以实现高效协作。 4. **最佳实践**...
2. **AI/ML在DevOps中的应用**:人工智能和机器学习技术的应用将进一步提升DevOps的智能化水平,比如通过智能分析来预测潜在的问题并提前采取措施。 3. **安全性和合规性的增强**:随着网络安全威胁的增加,安全性...
中国DevOps现状调查报告及解读 构建企业DevOps的度量体系 DevOps实践指南精要 分布式敏捷和DevOps实践案例 AWS DevOps 助力爱乐奇大规模业务扩展 AWS 云上的 DevOps 实践简介 多云环境下的 DevOps 实践 DevOps中如何...
他的 2013 年的 novelette 《凤凰项目》描述了一个虚构的 IT 组织及其使用 DevOps 原则来解决一系列严重的问题。他把之前数百家组织已经实施成的 DevOps 经验浓缩于 2016 年的《 DevOps 手册》,为任何开展 DevOps ...
DevOps 的实践不仅涉及技术变革,还涉及到组织结构和文化的调整。 #### 二、亚马逊的DevOps之旅 亚马逊是全球领先的电子商务公司之一,也是DevOps领域的先驱。自2001年起,亚马逊就开始对其开发流程进行重大改革,...
《DevOps实践:驭DevOps之力强化技术栈并优化IT运行》是一本深入探讨DevOps理念、工具和技术的著作,旨在帮助企业提升IT运营效率,优化技术栈,促进开发与运维团队之间的协作。这本书中文高清版包含了完整的PDF内容...
DevOps 还要求运维人员在他们的系统工作中使用许多与开发人员相同的技术。 DevOps 核心价值观: * 文化(Culture): DevOps 强调文化的重要性,鼓励团队成员之间的沟通和协作。 * 自动化(Automation): ...
简单概述DevOps的主要内容,让读者尽快了解DevOps的整体思路。
容器化DevOps系统核心技术........
DevOps是一种旨在促进开发(Development)和运维(Operations)团队之间协作与沟通的软件工程实践。随着敏捷开发的普及,DevOps应运而生,它强调快速交付高质量的软件产品,通过自动化流程来提高效率,确保软件在...
1. **DevOps简介**:DevOps不仅仅是一种技术实践,更是一种文化和组织变革。它强调开发(Development)和运维(Operations)之间的协作,以缩短产品从开发到生产的周期时间,提高业务价值的快速流动。 2. **持续...
多元化的团队能够更好地理解并服务于全球用户,同时也能减少团队内部的盲点,提高问题解决能力。虽然有时可能会增加内部摩擦,但有效的沟通和协作策略可以克服这一挑战。 这些样题展示了DevOps Master认证考试的...
首先,研发运营一体化(DevOps)指的是将软件应用的需求分析、设计、开发、测试、部署和运维等各个环节统合到一个紧密协作的流程中,旨在通过加强团队协作、优化应用架构、使用自动化工具和持续的反馈机制,达到敏捷...
最后,文章强调了技术发展带来的挑战和DevOps如何帮助解决这些问题。 在标签中提到的三个关键词“devops”、“kubernetes”、“helm”,分别代表了三个重要的领域:DevOps代表了一种文化和实践,Kubernetes是容器...
此外,文档提到了容器技术,与传统虚拟化技术不同,容器技术将应用程序及其运行环境打包为容器镜像,这个镜像在不同环境中的执行结果是一致的。容器技术的应用有助于消除环境差异带来的问题,实现更标准化、更快速的...
这反映出企业在DevOps转型过程中仍面临挑战,包括如何在组织内形成统一的认识、如何解决技术和管理上的障碍等问题。 最后,报告还探讨了企业期望通过DevOps实现的目标和判断DevOps成功实践的因素。企业期望通过...
例如,丰田方式强调组织内部的紧密配合和对细节的持续改进,而协同方式则强调不同部门或团队间的高效协作,持续交付方法则侧重于软件开发的持续流和快速反馈。 DevOps的成功实施通常伴随着业务流程的改进和业务指标...
DevOps 标准认证评估权威指南及案例解读 拍拍贷基础架构的DevOps演进之路-杨波-web 企业如何迈出 DevOps 第一步?-刘相 任发科:构建适合自己的DevOps工具平台和团队 石建松-混合云下的DevOps在vivo互联网的探索...
通过这些资料,我们可以了解到2018年时DevOps在国内外的发展状况,包括如何运用DevOps原则提高软件开发效率,如何构建高效的DevOps团队,以及如何通过持续集成和持续交付(CI/CD)来实现快速、可靠的产品迭代。...