什么是DevOps?

点击上方“程序员小灰”,选择“置顶公众号”

有趣有内涵的文章第一时间送达!



本文转载自公众号  码农翻身


开发和运维的战争

五天前,张大胖负责的开发团队向运维部门交付了一批新代码,这是一次用户期待已久的重要升级,部署进行得非常顺利,大家都很高兴。 

可是今天生产环境的CPU持续接近100%,有好几台服务器都down机了, 运维老大勃然大怒:“已经是第三次了! 张大胖,你们开发团队怎么搞的? 新代码一上线CPU就100%!”  

张大胖自然也不甘示弱:“我们在测试环境测试得非常充分,用户压力比生产环境大多了,代码坚如磐石,肯定是你们配置错了什么东西!” 

“不可能,我们是严格按照你们要求的步骤来部署的,肯定是你们代码的问题!” 

“那测试环境怎么就没有问题?”

 ......  

两位主管吵了好久,也没有什么好的解决方案,大家又熬了一个通宵,把代码回滚到上个版本,烧香拜佛,希望不要再出问题。 

经过这一番折腾,今年年底的奖金估计是悬了! 

张大胖觉得极为郁闷, 心绪难平,黑着脸来到茶水间倒了一杯咖啡,坐在那里一边喝一遍感慨这运维部门简直是太难合作了! 

看看他们新招的这些人,完全不懂业务,他们为了要“逃避责任”,经常说:“我不懂业务,这次上线的内容,你要把每一步都写得清清楚楚,我只管执行,不问为什么,出了问题可不是我的责任。”你说气人不气人! 难道他就想当个机器人吗? 

还有,他们运维团队每个人侧重不同,有人负责数据库脚本执行,有人负责Web服务器,有人负责SSO , 我的天,每次上线前都得把一堆人拉过来开好几次会,让他们熟悉操作步骤。 这个人部署了一次,好不容易熟悉了,下一次又换了一个人,还美其名曰这是人力资源池,能提高效率,但是新人又需要从头儿学习,这怎么可能不出错?! 唉......

张大胖的回忆

喝了两杯咖啡以后,张大胖稍微平静了一下,仔细想想,本质原因还是软件本身太复杂了,不但开发复杂,部署也超级复杂,每次部署就把人扒掉一层皮。 

张大胖不由地想起来这些年来自己经历过的软件开发和部署流程。 

大学时候,跟着老师做一些小项目,开发、测试都是一个人搞定,部署到用户那里也是自己做,几乎没出过岔子。 

毕业后进入一个小公司,做的是C/S架构的系统,有了开发团队、测试团队之分,开发团队把代码写完,交给测试团队测试,通过以后就可以到客户那里部署了。 

通常来说实施人员也都是开发或者测试的兄弟们兼任,自己也兼职干过,拿着部署文档和光盘,到客户那里严格按照步骤把系统安装到客户的机器上,基本上没啥大问题,即使有了问题,现场调试一下也都能解决,大不了把开发的兄弟们叫过来一起熬夜。

再后来互联网浪潮来临,自己也跳槽到这家互联网公司,专门做一个网上约车的系统,给用户提供约车服务,根本不用到客户那里去安装软件,公司独立地运行、维护好这个系统就万事大吉。 

但是这个网上约车的系统可比原来的单机软件、C/S软件要复杂得多,尤其是要面对海量用户的高并发访问,需要解决各种各样的技术难题,挑战巨大。 系统不但复杂,还需要以24*7的方式运行, 靠开发或测试的兼职人员已经无法维护了。

公司专门设立了运维(Operations)部门,负责系统的部署、日常维护、监控。运维人员的地位空前提高,当然,对他们的技能的要求也空前提高。 

张大胖看过一个招聘的运维的邮件: 

熟练使用Linux, unix, windows操作系统; 

精通各种常用服务器软件(tomcat, apache, nginx,redis,mysql...)的配置及优化 

了解负载均衡和高可用的原理,如LVS,Keepalived等 

熟悉网络原理,TCP/IP协议,掌握至少一种脚本语言。 

会使用各种配置管理和部署管理的工具。 

...... 

总之,运维的重要性已经和开发差不多了。 

开发和运维的鸿沟

为了加快交付速度,前两年,自己带领着开发团队实施了敏捷转型,成功地把原来的瀑布开发方式转换成了小步快跑,经常交付的敏捷模式。  

(图片来源:http://www.agilenutshell.com/scrum) 

通过敏捷软件开发,把需求人员,开发人员,测试人员拉到了一起,形成所谓“特性团队”,把需求拆分成一个个独立的,对用户有价值的故事,按优先级排序以后再开发、测试,甚至可以达到每两周就能交付几个独立需求的程度。

 (码农翻身注,参见《白话敏捷软件开发》) 

成功的敏捷转型获得了公司的极大认可,还对外输出了不少培训。 

虽然能频繁地交付,但是却不能频繁地上线,原因很简单:搞运维的家伙们总是希望系统稳定、稳定、再稳定, 稳定压倒一切。所以他们从骨子里不想频繁地上线,那不是给自己找麻烦吗? 

这恰恰和自己的敏捷软件开发相反,敏捷就是要拥抱变化啊 !

 (开发要求变化,运维要求稳定,图片创意来自 http://dev2ops.org,老刘做了重画) 

想通了这个本质矛盾,张大胖就明白自己是搞不定这个问题了,必须上层出面解决。 

张大胖立刻去找CTO Bill,希望他能出点好主意。  

Dev + Operations = DevOps

让张大胖没想到的是, 运维主管老李已经在Bill办公室里了,张大胖心说不好,这小子也许恶人先告状了。 

Bill 一看到愁眉哭脸的张大胖,让他先坐下,听老李把开发和运维之间的“矛盾”和“战争”讲完。 

老李唠唠叨叨,说的问题和自己思考的也差不多。 

Bill笑着说:“大胖,软件的开发流程基本上就是需求->开发->测试->部署, 现在你的团队已经把需求、开发、测试给‘团结’到一起了, 看来你又要‘团结’一个新的小伙伴了!” 

“难道是老李的运维部门?” 

“没错。” 

“那是不可能的, 我们的目标都完全不同,一个要变化,一个要稳定,怎么可能在一起玩?” 大胖非常诧异。

“不,以后我们要强调业务目标,以用户的价值为唯一的评判标准,团队的考核评价机制也要改变,个体和团队的成功都要放在整个开发-运维生命周期内来进行评价,开发完成了很多用户需求不一定是成功,运维保障系统不down机也不一定是成功!只有用户想要的功能被及时实现了,被成功部署了,被稳定使用了才算成功。 ” CTO总是很擅长用MBA的词汇来讲话。 

“就是说要求我们运维和开发紧密合作喽?” 老李接着问道。 

“是啊,现在有个热词叫做DevOps,就是把敏捷开发部门和运维部门之间的围墙打通,形成闭环。”

 “难道我们要再增加一个部门,叫DevOps部门? 招聘DevOps工程师?” 

“不不,如果再增加一个这样的部门,岂不是又增加了一堵墙? 我们本来是要打破开发和运维团队之间的隔阂啊。其实运维部门的工作目标不仅仅是让我们的网上约车系统更加稳定和高效,更需要支持业务的快速演化——这一点是和你们敏捷软件开发的目标是一致的啊。”

 "但我们也不能频繁部署啊?快速和稳定的矛盾还是解决不了。"老李叹了口气。

 "我知道张大胖的团队正在实施微服务的改造,将来再部署的话就不是以一个巨无霸应用为单位了,而是以一个个微服务为单位,那样就简单得多,频繁部署是有可能的,并且出了错回滚也便捷得多,肯地不用你们熬夜了!"  

张大胖和老李都点头认同。 

 “那具体该怎么做?” 

 “首先是观念的改变,以后你们不能互相推卸责任,互相指责,而要共同担责了!一个项目的开发、部署、维护,是你们双方的事情,双方都要对业务负责,出了什么问题,你们要通力合作,共同解决。这一点你们回去后要给组员多`洗洗脑`。”

 张大胖心想,我们刚刚通力合作回滚了代码。

 “还有,”,Bill看了一眼老李, “运维人员也要了解业务,Code变化带来的影响要告知运维人员。你们开发人员工作的开发/测试环境要尽可能地和生产环境一致。” 

“运维部门所要求的详细安装步骤实在是太烦人了!” 张大胖抱怨。

Bill说道:“我们先设定一个短期目标,把部署工作完全自动化起来。部署的脚本由老李的运维部门主导,有问题大胖来辅助, 将来这个部署脚本要在所有的环境都用起来!”

 张大胖和老李再次点头。 

Bill又说道:“最后一点就是度量,例如失败部署的百分比,用户开的ticket数目,故障恢复的平均时间等等,这些老李应该比我清楚。我们会用这些度量指标去衡量DevOps做得到底怎么样, 最重要的是我们无论用了什么工具、方法,如果最后没有减少需求从提出到上线,交付给用户使用的时间,那都是失败。我要求你们两个想尽一切办法,去减少这个时间,不是一次、两次,而是持续、稳定地交付给用户。”

张大胖说:“这DevOps听起来不错,但实施起来估计难度不小啊!”

Bill说道:“我们先选定一个产品作为试点,然后再扩大推广吧!”




—————END—————



喜欢本文的朋友们,欢迎长按下图关注订阅号程序员小灰,收看更多精彩内容


  • 42
    点赞
  • 114
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
### 回答1: DevOps 是一种新的软件开发方法论,它将软件开发、质量保证、运维和运营四个领域结合起来,提高软件产品的质量和效率。 DevOps 的核心思想是通过提高团队协作和自动化流程来缩短产品上线周期,提高软件的可用性和安全性。 ### 回答2: DevOps是一种结合了开发(Development)和运维(Operations)的文化、方法和实践。它旨在通过软件开发团队和运维团队之间的协作和沟通,打破传统的分工模式,实现软件开发、测试、交付和部署的流程自动化、持续集成和持续交付。 DevOps的核心理念是通过自动化工具和流程,将开发和运维环节紧密结合起来。它鼓励开发和运维人员共同参与从软件的开发阶段到部署和运行阶段的整个生命周期。开发人员与运维人员之间的协作和沟通可以减少问题和错误,提高软件的质量和稳定性。 DevOps重视持续集成(Continuous Integration)和持续交付(Continuous Delivery),通过频繁地集成代码和自动化的测试,能够快速发现和修复问题。持续交付则指的是能够在任何时候将可靠的软件版本交付给用户,实现更快速、更可靠的软件交付。 DevOps还注重监控、日志和问题解决。通过实时监控系统性能,快速捕获问题并及时解决,可以降低系统故障和停机时间,提供更好的用户体验。 总而言之,DevOps帮助开发和运维团队建立合作、高效的工作流程,加速软件开发和交付过程,提高软件质量和稳定性,满足当今快速迭代的软件开发需求。 ### 回答3: DevOps是一种软件开发和运维的方法论和文化。它通过将开发团队和运维团队紧密结合,促进沟通和协作,实现高效的软件开发和持续交付。 DevOps的核心理念是将软件开发和运维视为一个整体,强调开发人员和运维人员之间的协作和共同责任。传统上,开发和运维是两个独立的部门,存在着沟通障碍和合作困难。DevOps通过打破这种壁垒,使开发和运维团队能够更紧密地合作,共同解决问题,提供快速响应和高质量的软件交付。 在DevOps中,自动化是一个重要的概念。通过使用自动化工具和流程,可以减少手动劳动和错误。软件开发和部署过程中的许多重复、繁琐和容易出错的步骤可以通过自动化来处理,提高效率和质量。此外,DevOps还强调持续集成和持续交付的实践,通过频繁地进行代码集成和部署,快速反馈和修复漏洞和问题。 DevOps还注重监控和日志的重要性。通过实时监控软件的性能和运行状态,可以及时发现和解决问题,避免发生严重的故障。同时,收集和分析日志可以帮助开发人员改进代码和系统设计,提高软件的稳定性和可靠性。 总结来说,DevOps是一种团队合作的方式,通过结合开发和运维团队,借助自动化工具和流程,追求快速、高质量的软件开发和交付。它强调协作沟通、自动化和持续改进,旨在提高效率、减少错误和改善软件质量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值