不同技术团队的配合问题及DevOps

一、技术团队细分及配合问题

在IT企业里产品从创意到交付给用户,从整体上看是由技术部门负责,但如果深入到技术部门,会发现由不同的技术团队负责不同的部分或者阶段。一般会 分产品团队、开发团队、测试团队以及运维团队,在互联网公司里,运维团队一般还分基础运维和产品运维两个团队,基础运维负责基础设施(包括机架、网络、硬 件)和操作系统的安装,为整体公司的所有产品提供基础设施的运维服务。而产品运维负责线上产品的问题处理、代码的布署和跟开发的接口等。

不同的技术团队一般隶属不同的部门,分散在公司不同的办公区域,团队内部的沟通相对多一些,但团队之间的沟通较少。不同团队都会形成自己的办事习 惯、节奏,都有自己的关注点,一般只是知道与之接口的团队的总体职责,但是不知道对方可能面临的困难与工作中的挑战点。另外,如果公司够大,每个团队内部 又会分为许更细的小团队,如基础运维一般有系统团队、网络团队和IDC团队等,这样更加重了团队之间沟通难度。

从产品策划到上线,一般是以下边的顺序经过各个团队:

  1. 开发团队收集产品的需求,定下时间表并进行开发
  2. 开发完后,交由测试或质量团队进行测试
  3. 然后交给运维团队布署新产品或新版本
  4. 运维团队将运维过程中发现的代码缺陷反馈给开发团队进行修复

在上面的每个阶段,对应的团队都是各做各的,一般是在最后才会把球踢给下一个团队,如果下一个团队发现问题又会把球踢回原来的团队。如果你深入到不同的团队中去,或听到不同的抱怨声音。

基础运维团队经常抱怨:

  • 产品开发一点计划都没有,突然要上线机器,让我们措手不及。
  • 每个产品都急着上线,谁催得急就上谁的,谁能说一下,到底那个重要?
  • 动不动就要重装系统,坏了一块盘就着急去修,刚从机房回来,又要过去。
  • 上线太突然了,没有交换机,没有机架,还需要搬别的机器腾地方。
  • 那个地方有机架和交换机端口,但没有四层设备,他们又要放在四层后边,真的没有办法了。
  • 刚跟他们上线到一个机房,他们又说要换到另一个机房,尽折腾。
  • 他们怎么能那么用设备,把上连端口带宽都跑满了。

产品运维团队会说:

  • 真没办法,上个线不是说没机架,就是没有交换机,还有就是说没有四层设备。
  • 从来不告诉我们什么时候能设备能上线交付给我们,不派专人催着这事,一点谱都没有。
  • 本来没有想好怎么用这些设备,先提前一个月申请上线,得我们想清楚了,他们却说又得换机房。
  • 网络怎么老是出问题,他们怎么规划的。
  • 开发的代码太不靠谱,一上线就引发用户投诉,只能回滚到老版本。
  • 开发人员的技术能力不行,写不出能用的版本。
  • 开发要求有一个跟生产环境一样的测试环境,这不可能有的。

而开发团队却说:

  • 他们又不让我们碰线上的系统,生产环境是什么样,我们都不知道,没法开发代码。
  • 我们辛苦开发几个月,上线出问题又直接回滚了,心情很不好受。
  • 代码在测试环境或我的机器跑的好好的呀,怎么一上线就出问题呢。
  • 测试怎么测的,那么多问题发现不了。
  • 我们希望产品运维同事帮忙搭一个跟线上一模一样的测试环境。

另外,测试团队的人也许会说:

  • 开发人员不写规定写单元测试代码。
  • 想着能用一个自动的集成测试环境,因为开发的原因,老是实现不了。
  • 测试环境跟生产环境不一样,好多问题才发现
  • 还有那么多的bug没有解决,产品就催着上线。

二、技术团队之间配合不好的影响

上面看到的团队之间的冲突和抱怨问题虽然都不一样,产生的影响确是类似的:

  • 产品上线的进度延误,整个团队很难正常交付新版本。
  • 产品上线后问题很多,影响用户的访问。
  • 团队的士气很差。

最近又发生了运维团队与开发团队之间的配合不好的问题,影响及原因如下:

  1. 新产品上线延误了两个星期,正常情况下一天就可以上线。原因是开发考虑不周,测试环境中没有发现,到上线前才发现部署到多台机器上后,按开发原先计划的方式多台机器无法协作完成任务。还有就是在设计阶段没有考虑生产环境的状况,在上线的过程中需要做出对应的代码调整。
  2. 上线后质量不稳定,出现多次紧急修复。原因同上。
  3. 临时增加硬件投入。新产品中有个组件采用全新的技术方案,跟原来的LAMP体系不兼容,所以需要新增机器,单独部署。
  4. 除低了服务可用性标准,并产生了遗留问题。因为临时需要增加硬件,而恰好又只有一台,这样就形成了单点,如果该机器出现故障,服务将全部 中断。另外,由于开发前设计上考虑不周,跟别的组件集成时产生别的单点。所以这些降低了服务的可用性,以后还得想办法解决。除此之外,组件采有新的软件, 安装、服务起停以及软件配置的管理都是纯手工打造,以后还得找时间纳入到自动配置管理中。
  5. 影响了团队士气。在上线过程中开发、测试和运维都觉得不舒服,相互之间产生了抱怨。如果不处理好,会影响以后的配合。

虽然,有些问题确实需要靠某些团队提高自身的人员技能才能解决好,但这些团队能够形成一股合力的话,同样的人员组合肯定会产生更好的效果。

三、过去解决团队配合问题的方法

第一次碰到团队之间的配合问题时,我们还没来得及解决的时候,公司战略调整,整个开发和系统运营团队转给了另一个大部门。但我们在别的地方重新梳理技术团队时,后来又没有出现这种问题,回想起来,我们的做法是:

  • 部分开发人员有生产环境中服务器的帐号,可以观察代码的运转情况,少数核心开发人员还有sudo权限,当然他们也不会随便修改服务器的设置
  • 开发时一开始就会跟系统运维团队沟通,在代码中增加数据收集的接口和监控接口,这样上线后,很容易收集产品的性能数据,并能方便地对运行状态进行监控与报警
  • 生产环境中也有沙箱与beta环境,这样大的版本从测试中过渡到生产环境前,先在沙箱环境中适应一段时间,这样能相对平稳过渡到生产环境
  • 部分开发人员临时转到系统运维团队工作一到二个季度,跟系统运维同事一起上线产品,解决产品在运行中发生的问题,这样更好地了解代码如何在生产环境中运行,回去之后能更好地运维同事沟通,开发出来的代码更容易在生产环境中运行

这样,不同团队之间虽然有职责上的明确分工,但在中间的配合的部分做了不少柔性处理。另外,开发、运维与测试等团队中的核心人员之间本身就有认同 感,大家一开始的目标就是奔着公司能成功来的,这是没有出配合问题的根本原因。这一点其实跟DevOps的核心点类似,既然如此,何不重新审视一下 DevOps,并参考着解决团队之间的配合问题呢。

四、DevOps

DevOps是2010年从欧洲传过来的概念,最先是由一群有着跨学科技能的工程师提出来的,为了解决下面的问题:

  • 推出新功能和解决老问题的周期过长
  • 新产品或新版本上线充满风险,代码能否在生产环境中稳定运行,没有人有信心,只能艰难地推上去,再看是不是有问题
  • 不同团队相互隔离,配合差。如开发人员收到问题后,第一反应是“在我的机器上工作得好好的呀”

我认为DevOps的核心是不管你是开发者、测试人员、管理者、DBA、网络工程师还是系统管理员,大家都是一起的,只有一起努力给客户提供稳定而高质量的软件服务,实现公司的商业利益才会有别的,包括自己的工作机会。

所以,DevOps实际是给各个团队之间搭桥,让他们不仅仅是依靠上线申请单这样的鸿雁传书工具进行沟通,而且经常离开自己的孤岛,走到别人的岛上去,了解别人,并提供自己的想法,帮助对方。

DevOps更象是一种运动,每家公司都需要根椐自身的特点进行借鉴,推动团队之间的协作与合作。需要在三个方面努力:

  1. 人员

一方面对现有人员进行培训,鼓励他们了解别的团队的工作、面临的挑战等,让他们用自己的特长去审视和帮助别的团队,另一方面也想办法招一些全面的技术人才,在不同团队之间搭出一些适用的桥来。

流程

在研发的前期,让系统运维同事参与起来,一起搭建测试环境,验证想法,或者也可以在一些项目团队中直接配有系统、开发和测试以及产品人员, 一起为产品的上线努力。出现问题的时候,一起想方法找到问题的真正根源,避免相互推托,将解决方案落实在以后的研发过程中。从绩效考核流程上也需要考虑协 作因素。

工具

说实在的,大家针对DevOps在工具方面其实讨论得更多,这里面跟敏捷有些类似之处。快速的系统部署和自动化产品代码发布方面的工具显得尤为重要了。

为了避免校弯过正,走向另一个极端,也需要避免下面的对DevOps的常见误解:

  1. DevOps意味着要给开发者root权限

可以给开发者加sudo权限,运行指定的命令,比如重启web服务。让开发者更多地了解生产环境和产品的运行状况,但并不意味着让开发者象管理员一样的去管理机器。

所有系统管理员需要写代码,所有开发者需要上架机器

在系统管理和开发者各个领域仍然需要各自的专家,如存储、网络、安装、javascript等专门的人才,DevOps并不意味着让大家不做自己专长的事情。

你一定要用某个工具,不然就不是DevOps

一些技术和自动化的工具对推动各个团队之间协作很有帮助,但是还是需要聚焦于要解决的问题,根椐问题和组织的特点选择合适的工具。

我们需要招聘DevOps

DevOps不是一个新的岗位

五、结合DevOps,解决团队配合问题

管理人员关注团队之间的沟通机制及氛围:

  • 以新版能在生产环境中可靠稳定运行为目标,形成协作的氛围。
  • 在项目的早期,立项之间,运维、开发与测试就进行沟通,可能的话坐在一起,面对面沟通。
  • 在项目上线前,除了测试功能,还要关注部署、备份、监控、安全以及配置管理,在早期发现的问题越多,越能尽少后期的问题并避免影响用户体验。
  • 建立各个团队的核心成员定期沟通机制。
  • 团队之间的协作纳入绩效考核过程中去。

让开发人员了解运维工作、关注点及挑战,并从开发视角帮助运维:

  • 开发人员参与运维团队的内部培训,了解线上的系统。
  • 了解运维如何定位并解决故障、如何监控系统的运转情况等。
  • 少数开发人员可以跟运维一样发版本到生产环境中,让开发人员关注并了解自己代码的运行情况。
  • 从运维的视角修改代码,方便运维人员进行日常的变更与调整,监控与报警。
  • 帮助运维人员修改puppet配置模板。
  • 帮助运维人员编写与修改产品的发布脚本,提高自动化水平。

让运维人员了解开发过程的关注点及挑战,并从运维角度改善开发过程:

  • 运维为开发在公司搭建基于虚拟机的测试环境,虚拟机的安装、配置管理以及代码的发布采用跟生产环境一样的方式。
  • 开发人员与测试人员象运维一样发布版本到测试环境中。
  • 鼓励开发与测试人员修改puppet配置与模板,管理自己的虚拟机。
  • 在生产环境中建立了beta环境,开发人员可以直接发版本上去,让代码在最终上线前多一层缓冲。
  • 运维去了解代码的模块结构,从运维的角度修改代码,让产品上线后更方便运维与适应生产环境的特点。
  • 运维参与到持续的集成测试中,用自己的自动化知识帮助实现自动的集成测试等。

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

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

相关文章

jquery validation验证身份证号、护照、电话号码、email

$.validator.setDefaults({ submitHandler: function(form) { form.submit(); } }); // 字符验证 jQuery.validator.addMethod("stringCheck", function(value, element) { return this.optional(element) || /^[\u0391-\uFFE5\w]$/.test(value); }, "只能包括中…

C++/C中定义与声明的区别

在C/C中,定义与声明是不一样的,主要区别在于是否分配了内存。 定义:编译器创建一个对象,为该对象分配一块内存,并为该内存起一个名字,这个名字就叫变量名。 例如: int a;//未初始化 int b 0;…

ubuntu php.ini 配置,ubuntu下配置PHP+JSON模块(apache) | 学步园

搭配完毕apachephpmysql环境后我们开始来配置PHP加载JSON模块1.下载源文件包:wget http://www.aurore.net/projects/php-json/php-json-ext-1.2.0.tar.bz22.解压tar xvjf php-json-ext-1.2.0.tar.bz23.进入目录cd php-json-ext-1.2.04.编译前要初始化PHP环境:phpiz…

A good book to learn C#2.0 ----C# 2.0 : Practical Guide for Programmers

c#2.0,已经出来很久了,相信已经有不少人或多或少了解了它的一些特性了.而这本<C# 2.0 : Practical Guide for Programmers>(作者&#xff1a;Michel de Champlain, Brian G. Patrick)是一本2005年2月出的turorial类型的好书,通过这本书不仅可以学习c#2.0的新内容,还可以对…

单线程会导致死锁吗?

我之前在我们的项目里面解决了一个死锁的问题&#xff0c;然后我跟一个我的朋友聊了下&#xff0c;他让我深入研究下这个问题。大家也可以考虑想我的这个问题。首先我们再看看什么是死锁&#xff1f;什么是死锁用个通俗的例子讲一讲死锁死锁从文字理论上说明的是两个线程&#…

细节‘出卖’你

细节‘出卖’你 ①喜欢眨眼&#xff1a;这种人心胸狭隘。②习惯盯着别人看&#xff1a;代表警戒心强。③喜欢提高音量说话&#xff1a;多半是自我主义者。④穿着不拘小节&#xff1a;也代表个性随和。⑤一坐下就翘脚&#xff1a;这种人充满企图心有行动力。⑥边说话边摸下巴&am…

makefile / CMake

- makefile syntax ifneq https://www.gnu.org/software/make/manual/html_node/Conditional-Example.html - [CMake] undef a symbol https://cmake.org/pipermail/cmake/2012-June/050708.html 但是我发现用这个和用remove_definiton对我移植OpenCV的时候都没起作用. https:…

Json的优缺点

JSON的定义 一种轻量级的数据交换格式&#xff0c;具有良好的可读和便于快速编写的特性。业内主流技术为其提供了完整的解决方案&#xff08;有点类似于正则表达式 &#xff0c;获得了当今大部分语言的支持&#xff09;&#xff0c;从而可以在不同平台间进行数据交换。JSON…

appcrash事件java,java – SpringBoot应用程序崩溃

请告诉我哪里有问题&#xff1f;我尝试启动我在Spring Boot上开发的第一个应用程序.我已经在SpringMVC上有简单的Web项目,现在我想在BOOT上构建它.这是错误输出&#xff1a;org.springframework.beans.factory.BeanCreationException: Error creating bean with name messageSo…

书摘:35岁之前成功的12条黄金法则

第一章:一个目标 一艘没有航行目标的船&#xff0c;任何方向的风都是逆风1、你为什么是穷人&#xff0c;第一点就是你没有立下成为富人的目标2、你的人生核心目标是什么&#xff1f;杰出人士与平庸之辈的根本差别并不是天赋、机遇&#xff0c;而在于有无目标。3、起跑领先一步…

软件工程师 VS 硬件工程师

因为在软件行业35岁就算老人了而搞硬件的53岁正辉煌表面上看起来高大上的硬件工程师在实际的工作中&#xff0c;其实很惨...以上漫画虽然调侃的意味更多但现实中搞硬件的门槛确实很高收入也会随着经验的增多不断增长硬件工程师也基本不存在中年危机如果实在搞不下去了转项目经理…

假如我们的坦克继续前进队——需求改进系统设计

需求和原型改进 在上个星期的《需求说明书》课堂讨论中&#xff0c;老师提出了游戏的用户界面的设计问题。 经过小组成员的讨论后&#xff0c;我们的想法如下&#xff1a;设计关卡基于时间和人手问题难以实现因此改为一关的形式&#xff0c;以便有更多的时间出开发趣味性更高的…

瑞星2009:3大拦截2大防御功能主动遏制木马病毒

12月16日&#xff0c;“瑞星全功能安全软件2009”正式发布&#xff0c;它基于瑞星“云安全”技术开发&#xff0c;实现了彻底的互联网化&#xff0c;是一款超越了传统“杀毒软件”的划时代安全产品。该产品集“拦截、防御、查杀、保护”多重防护功能于一身&#xff0c;并将杀毒…

Android中使用软引用和弱引用避免OOM的方法

个人总结如下&#xff1a; 4种类型的引用 由高到低依次为&#xff1a;强引用>软引用>弱引用>虚引用 (1)、强引用 如&#xff1a;Object objectnew Object&#xff08;&#xff09;&#xff0c;object就是一个强引用了。 当内存空间不足&#xff0c;Java虚拟机宁愿…

DIY一个低成本多功能点阵时钟!

大家好&#xff0c;转发一篇正念同学的文章----大家好&#xff0c;我是ZhengN。本次转载一篇保姆级的diy教程&#xff1a;基于Esp8266的多功能点阵时钟 。简介很早就了解ESP8266了&#xff0c;当时也用这个搞过一些小demo&#xff0c;一直也没有想过要弄些实际的作品出来&#…

从DataTable导出Excel,并下载,删除Excel进程。

页面上加入一个button即可.源代码如下: usingSystem;usingSystem.Collections;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Web;usingSystem.Web.SessionState;usingSystem.Web.UI;usingSystem.Web.UI.WebControls;usingSystem.Web.UI.HtmlC…

Traceroute(路由追踪)的原理及实现

现实世界中的网络是由无数的计算机和路由器组成的一张的大网&#xff0c;应用的数据包在发送到服务器之前都要经过层层的路由转发。而Traceroute是一种常规的网络分析工具&#xff0c;用来定位到目标主机之间的所有路由器 原理 在介绍Traceroute的原理之前&#xff0c;需要了解…

社交网站与网民隐私安全报告(2009)

社交网站与网民隐私安全报告&#xff08;2009&#xff09; 免责声明&#xff1a; 本报告主要内容来自瑞星客户服务中心和瑞星互联网攻防实验室的调查和研究成果&#xff0c;部分数据来自来自瑞星“云安全”系统&#xff0c;仅针对网民在使用国内社交网站&#xff08;SNS&#x…

Intent传递数据时,可以传递哪些类型数据

Intent传递数据时&#xff0c;下列的数据类型哪些可以被传递&#xff08;abcd&#xff09;(多选) A、Serializable B、charsequence C、Parcelable D、Bundle 除了上面的还能传递基本数据类型(byte/boolean/char/short/int/float/long/double)、String/StringBuffer/StringBu…

周记之琢磨下计算机网络(2018/10/22-2018/10/28)

网络&#xff0c;就如同空气一样&#xff0c;我们身处其中&#xff0c;却对它的存在司空见惯&#xff0c;从未察觉&#xff0c;而计算机网络这门课&#xff0c;的确让我看到了它的本来面目&#xff0c;它的五大层次&#xff08;从上往下&#xff09;&#xff1a;应用层、传输层…