企业运营对 DevOps 的「傲慢与偏见」
摘要:出于各种原因,并非所有人都信任 DevOps 。有些人觉得 DevOps 只不过给开发者改善产品提供了一个途径而已,还有的人觉得 DevOps 是一堆悦耳的空头支票,甚至有人认为 DevOps 根本无法采用。
【编者按】近日,Alex Honor 在 Dev2ops 上撰文阐述了当下企业对 DevOps 所存在的偏见,并就造成这些问题的原因分享了企业该如何向 DevOps 模式切换,本文系 OneAPM 工程师编译整理。
笔者曾帮助多家大型企业深入了解 DevOps,帮助他们理解如何改善服务交付能力。这些公司大多听说过 DevOps,也在四处寻求一个策略来采用 DevOps 方法,从而进一步占领市场,提升产品质量。出于各种原因,并非所有人都信任 DevOps。有些人觉得 DevOps 只不过给开发者改善产品提供了一个途径而已,还有的人觉得 DevOps 是一堆悦耳的空头支票,甚至有人认为 DevOps 根本无法采用,因为其所在领域所必须的自动化工具根本不存在。
通常在企业里,运维通常由一个集中且独立的团队完成,同时他们需要支撑多个应用程序组。如果网站的可用性出问题,责任就落在运维团队身上。一旦出现性能问题、宕机或故障,运维团队无疑是第一道防线,但有时问题升级会返回到应用组去修复 bug 或者帮助诊断问题。
对 DevOps 感兴趣的企业往往实践或采用了一个对运维需求非常搞的敏捷技术,比如建立一个测试环境,或者测试节后发布软件到生产环境。持续加快的步伐给运维团队施加了很大的压力,因为大多时候工作集中在项目后期(例如,是时候发布到生产环境中)。迫于时间压力或者过量工作,运营团队很难完成相对请求,甚至有时听到开发者埋怨想亲力亲为。那些用户可能想重建服务器、获取 Shell 访问、安装软件、运行命令和脚本、设置虚拟机、修改网络 ACL 和更新负载平衡器等。他们认为有些事情还不如自己来做,从而不再需要高度集中的运维小组。
如何让运维团队,一直负责生产环境运行时的部门能扩展其支持的环境?他们应该如何避免成为各应用团队项目周期尾端的瓶颈?如何让业务更加稳定可靠,而不是混乱、中断或不按预期执行?
如果你身处这种企业环境,又该如何进入 DevOps?如果你身处高度集中的运营团队,又该解决采用 DevOps 的压力,这里有几个问题需要企业团队谨慎考虑,问题的答案则是一步步形成 DevOps 战略的重要步骤。
那么,一个高度集中的运营团队如何处理必要任务,使得应用程序可以在生产环境或其他环境下顺利运行?
在有些企业中,初期会创建一个名为「Devops」的专业团队来解决各种「Devops 问题」,这便是良好运营的开端。这个团队可能会负责接手开发团队的应用程序,使用自动化工具进行打包,进行部署并将其转交给 Site Reliability 团队。不幸的是,集中式的 Devops 团队也可能变成「silo」 ,也要不断接受传统运维组所面临的「项目末期」交接挑战。同时,随着更多的开发者和开发项目涌入,Devops 工程师和 Devops 团队再次成为瓶颈。集中的 Devops 团队和传统的 QA 部门一样,当他们尝试「添加质量检测」作为一个独立过程阶段时,也不得不面临同样的压力。
为了确保应用程序可以在生产环境以及其他环境下正常运行,Devops 重点必须嵌入应用体系结构。这就意味着,让应用程序易于配置、部署和监控均在开发阶段完成。集中的运维团队必须学会开发一个共享式软件交付流程和工具链。在交付工具链内部,任务可以分布在多个团队。集中的运维组可以支持工具链,正如架构师和服务提供者提供给应用开发团队一个基础框架,而在填充所需的构件就可以驱动这个管道。
什么是合规策略(compliance policies)?
大多数企业都遵循一个修改策略,即预先指定谁可以在生产过程中做出修改。很多时候,这一策略常常被理解为除了运维组以外,其他人都不能发布更新。这种切换可能导致交付时间拖延,同时如果在传递过程中丢失信息,甚至可能导致故障发生。
这些规则都是由企业制定的,但事实上,在交付端的职员从未去认真地去理解这些政策的语义,他们通常根据想象或者习惯去判断。而随着时间推移,工具和流程往往发酵成无效率的官僚机构。
基于应用或客户类型,通常会形成不同的限制规则。当涉及到如何缩短交付周期时,这些差异应该纳入考虑,因为它能帮助你发现究竟谁可以做出更改,以及修改该如何进行。
除了主动理解规则,规则同样需要做到快速和便捷地审校:
简单易懂的规则能清晰展现以下内容:
- 谁做出了变动以及是否有权限
- 改变应用在哪里
- 具体的改变内容,这些调整是否能接受
这种查询应该能即时访问,而不是在某个事情后(比如故障发生)通过人工收集得到。当你拿到服务器过去24小时的工作报告时,便能轻而易举了解到环境中发生了哪些变化。
这些审计视图应该包含基础设施和工件信息,因为不管是开发者还是运维人员都想清楚软件和服务器的信息,一堆不明所以的修改信息和错误链接报告无论如何也无法组成一张全景图。
如何开放访问又不会失去控制?
通过审视软件交付的整个过程工作流全时监控将变得简单,在以往这个工作通常由一个独立的团队完成,他们往往以往竞争优先级导致的上下文切换而变得没有效率,这种情况通常在运维团队发生。运维团队需要平衡来源于应用开发团队的工作(例如,参与敏捷开发冲刺)、网络操作(例如,处理中断和生产问题)、企业用户(例如,收集信息用于控制策略)。最后,运维还需负责维护或改善基础设施等项目工作。
为了释放这个流程的瓶颈,企业必须发掘应该如何重新分配工作,或者建立一个自服务流程。因为部署、配置和监控都是需要设计到应用中的运维问题,一次需要将之一定程度地传递给开发人员。聚焦这一系列动作,运维团队需要维护一组基本的自动化模块,给开发人员相应方法来参与。创建一个开发环境和工具允许开发人员在自己的沙箱中将所需的改变整合到这个框架中。通过自助服务界面让开发人员可以便捷地创建托管环境,打开 VMs 或者容器,允许他们测试运维管理代码。
给运维管理框架构建合规的审计日志,便能跟踪到哪些资源被创建和使用。一旦资源发生冲突,这些日志将会有非常大的帮助,并让你了解到哪里需要更多的沙箱或者哪些更细粒度的配置需要定义。
欲速则不达,速度越快反而导致质量下降?
对于企业来说,不断提升创新速度才能保持竞争力,所以速度至关重要。因此这里需要更快的软件交付速度,也正是采用 DevOps 做法的主要动机。
许多 DevOps 成功案例都在展示其一天能部署多少次,10还是1000。但是在现实世界中,这些指标简可以称得上是神话。有些企业尽量一个月实现一次部署,还有些企业一个主要版本更新需要按年计算,而发布给用户更需要30天的时间。这三十天的滞后时间,同时生产环境处于不一致的状态,所有人都难以应付生产中出现的问题。「是新版本还是旧版本造成了这个尚未确定的问题?」操作无法加快的一个主要原因是无法确定问题究竟是发生在改变期间或改变后。
当改动导致问题,可能导致以下结果:
- 添加更多控制过程(审批门槛更多,改动窗口更小)
- 改变批次变大(更多的工作塞到给定的变化窗口)
- 增加「紧急修正」(高优先级功能得到快速跟踪,才能避免正常的变化流程)
- 因为批系统和非正常软件发布流程,应用程序快速更新将带来很大压力
鉴于以上后果,加快改变速度的想法显得不切实际,因为它确实可能诱发更多的问题。
问题是企业该如何快速给系统做更新?首先,指定更新过程中的安全策略非常重要。快速转变意味着能安全地快速改变。下面是一些常见策略:
小批量
大批量改变所带来的工作量需要耗费大量的人力和时间。
解决办法是利用这种策略:变化越少越容易实现,完成后也便于检查。
预演
这里有一个很好的谚语,「Don’t practice until you get it right. Practice until you can’t get it wrong」。当然,你不能在生产环境中实践这个途径。将更新应用到生产环境之前,你应该在非生产环境下进行多次实验。不要依赖于运气,要抱着必然存在故障的理念。
可核查的流程阶段
不管是新建立的一个网站或者是现有应用程序需要更新,请确保已经为先决条件做好了足够的检查。也就是说,如果你要部署一个应用,在这之前你就要准备好脚本测试,来证实你的外部或环境依赖性。如果你正在构建一个网站,在安装操作平台之前,保证你已经确认好硬件和网络环境。在流程阶段边界构建这种自动化测试,对于防止问题遗漏是一个巨大的安全保障。你可以使用这些验证检查来决定「stop the line」。
流程规则
是什么导致了环境中布满了特殊定制的服务器和网络?缺少规则。如果企业无法统一管理变动,每个人都会按自己的方式行事。那如何对流程进行管控?搜寻所有不同的版本。如果流程在两个版本中不同,那么就意味着这里存在一个 variation。流程 variation 意味着流程失控。有两个简单的度量可用于了解你对流程控制的程度:交货时间和报废率。交货时间代表改变所需的时间。废品率是返工频率。预演和可核查的流程可以通过降低废品率和稳定交货时间帮助获得控制过程。流程管控的最大好处是提高可预测变化的能力。业务依赖于这种可预测性。可预测性的业务可以提前规划移动速度的快慢。
更多途径进入运维管理环境?
每个人都更好地了解生产中各部分是如何执行的,可以帮助企业设计更好的系统来支持业务。如果开发人员或测试人员都难以发现服务运行的问题,只会耽搁有利于用户操作的改进。让任何人都能容易地了解到应用版本在主机是如何部署的,以及主机配置和应用程序的性能。
有时数据隐私规则使得数据访问并不那么直接。一些日志包含客户数据和规则可能限制有限的用户访问。不要说「没有」或手动地去收集和清洗,这里需要存在一个自动化的自服务,从而让开发者或审计人员可以自己获取。
生产环境的可见性对于开发人员来说是至关重要的,从而他们可以建立一个类似的环境。模拟声场环境建模开发和测试环境是减少变数并让一切都在控制中的有效手段。
这是否意味着允许开发者进行 Shell访问?
这个问题是传统企业运营团队的弊病。通常这个问题是另一个问题的征兆。为什么一个开发者要 Shell 访问运维支持的环境?在开发或早期的测试环境下,开发人员可能需要Shell访问来实验开发部署和配置代码。这的确是申请 Shell 访问的一个合理理由。
这是临时或生产环境中 Shell 访问的请求吗?Shell 访问请求可能是即席改变方法的一个标志,从而改变一个环境的稳定性。因此,对改变方法进行自动化封装非常重要。
归根结底,Shell 访问生产环境确实有很大的风险。
原文链接:http://dev2ops.org/2014/06/adopting-devops-in-enterprise-operations/
本文系 OneAPM 工程师编译整理。想阅读更多技术文章,请访问 OneAPM 官方博客。
企业运营对 DevOps 的「傲慢与偏见」的更多相关文章
- 企业建立成功 DevOps 模式所需应对的5个挑战
[编者按]本文作者为 Kevin Goldberg,主要介绍要想成功部署 DevOps 模式,企业所需应对的5大挑战与问题.文章系国内 ITOM 管理平台 OneAPM 编译呈现. 要给 DevOps ...
- 企业玩转DevOps转型:由弱到强,只需7步
[摘要] 在参考业界方法并总结客户成功故事的基础上,本文提出了“七步法”路线图,希望能帮助更多的企业顺利进行DevOps转型. 从2009年诞生,DevOps已经悄然走过了10多个年头.Gartner ...
- 报名|「OneAPM x DaoCloud」技术公开课:Docker性能监控!
如今,越来越多的公司开始 Docker 了,「三分之二的公司在尝试了 Docker 后最终使用了它」,也就是说 Docker 的转化率达到了 67%,同时转化时长也控制在 60 天内. 既然 Dock ...
- [转帖]「知乎知识库」— 5G
「知乎知识库」— 5G 甜草莓 https://zhuanlan.zhihu.com/p/55998832 通信 话题的优秀回答者 已关注 881 人赞同了该文章 谢 知识库 邀请~本文章是几个答 ...
- 玖章算术受邀参加红杉Talk「创新的复利」科技专场,共同探讨云计算的前世今生
9月2日,本周五14:00 「创新的复利」 Sequoia Talk系列论坛,首期直播盛大启动.在第一期科技专场,4位红杉中国资深投资人.8位创新创业者将带我们深入工业软件.机器人.云计算等领域,围绕 ...
- 对于前端,「微信小程序」其实不美好
微信小程序开放公测了,9月底我曾经写过一篇 「微信小程序」来了,其中最后一句:"谢天谢地,我居然还是个前端". 这种火爆的新事物总是令人激动,感谢这个时代. 但是,当我真作为开发者 ...
- 「微信小程序」有哪些冲击与机会?
昨天晚上相信大家的朋友圈被「微信小程序」刷屏了,这影响力赶上了国务院出台新政策一样,足以说明微信在中国的影响力之大. 然后今天公号后台一大堆人问我怎么看这件事,不少人非常忧虑,仿佛自己将要失业一样. ...
- 深圳即将启动首届「全国人工智能大赛」:超过 500 万大奖 & 政府资助,潜信息你读懂了吗!
人工智能加速“视频/视觉”发展,近期,深圳市即将迎来人工智能领域权威赛事之一——首届「全国人工智能大赛」(The First National Artificial Intelligence Chal ...
- 这款 IDE 插件再次升级,让「小程序云」的开发部署提速 8 倍
今年3月份,在阿里云北京峰会上,阿里巴巴正式发布了“阿里巴巴小程序繁星计划”,截至当前,已经有成千上万的开发者加入这个计划,使得小程序得到蓬勃发展,然而不可避免的是,这些服务加重了对云端的开发部署.运 ...
随机推荐
- (转)Yale CAS + .net Client 实现 SSO(6)
第一部分:安装配置 Tomcat 第二部分:安装配置 CAS 第三部分:实现 ASP.NET WebForm Client 第四部分:实现基于数据库的身份验证 第五部分:扩展基于数据库的身份验证 第六 ...
- CodeSmith和PowerDesigner的使用安装和数据库创建
原文链接: http://www.cnblogs.com/huangcong/archive/2010/06/14/1757957.html 废话少说,开始我们的CodeSmith旅程吧,我先讲讲这个 ...
- IE Problem : inetcpl.cpl
从windows8升级windows8.1后每次关闭ie11浏览器总是跳出出现一个问题导致关闭,我都快疯了,以前windows8一点问题都没有.这是怎么回事?还有能回到ie10吗?(张浩228) 小昕 ...
- Java通过代理类实现数据库DAO操作
下面的所有代码示例都取自李兴华的<Java Web开发实战经典>的随书源码,因为觉得设计得很好,所以将代码摘录下来作成笔记. 首先,我们在一个java文件中定义要存储的结构类型: impo ...
- C++11智能指针
今晚跟同学谈了一下智能指针,突然想要看一下C++11的智能指针的实现,因此下了这篇博文. 以下代码出自于VS2012 <memory> template<class _Ty> ...
- MySql安装时在Start Service处失败
安装MySql时在最后Start Service时失败: 首先先卸载掉MySql. 查看MySql服务有没有启动,若启动,则先停止MySql服务. 打开注册表,到HKEY_LOCAL_MACHIN ...
- Google Chrome七大新特性
Google Chrome 在日常生活中扮演的角色不只是一个功能强大的网络浏览器,它内置的 DevTools 同样也是网络开发者进行网络开发的重要工具. DevTools 在不断的进行版本更新,其中有 ...
- openerp 经典收藏 workflow中的‘非典型’自动触发器trigger_model(转载)
workflow中的‘非典型’自动触发器trigger_model 原文:http://cn.openerp.cn/workflow%E4%B8%AD%E7%9A%84%E9%9D%9E%E5%85% ...
- unity--IOC框架资料整理
今天在网上找了一些unity资料研究,出了好多问题,编译无法通过,经人指点总算成功编译运行,做个笔记,整理如下: 一.下载unity: 二.在项目中添加Microsoft.Practices.Unit ...
- MVC学习系列——Model验证扩展
MVC中,实现了前端后端的验证. 前端验证.步骤: web.config这两个得开启: <add key="ClientValidationEnabled" value=&q ...