Devops落地实践思路

【引言】
Devops自2009年诞生以来,经过这么多年的摸索,开始逐步变成一种主流的运维模式。网上也有很多关于devops的讨论,但大多数都停留在思想层面,真正可落地的方法并不多,本文根据作者自己12年的从业经验和唯品会公司的落地实践,加以总结,希望给读者一定思考启发和帮助。
在本文开始之前,需先明确几个概念,后文会用到。
Itil:一种以流程为基础的运维模式,基本思想是PDCA。
服务:能够独立提供完整的一个或者多个功能模块,这里特指业务研发编写可上线运行的代码。
组件:能够独立部署,但需要和其他组件联合才能提供服务的基本单位。
本文主要回答两个方面问题:
1、为什么需要devops?
2、devops如何落地?
本文建议的阅读者:有一定开发和运维经验的工程师,最好是经历过实际生产困难后面临转型困境的人员。

【正文】
1、为什么需要devops?
在回答这个问题之前,我们先了解一下什么是运维模式。
所有的模式,是对待人和事物的态度后得到的方法论。
比如我对人性是持悲观的态度,那么我就需要建立流程,制度对人加以约束,使得他们在做事的时候尽量减少自己的主观意志,尽量客观的去完成所分配的任务。

反之,如果我对人性持有乐观的态度,那么我可能更多的去激励,让人员发挥主观能动性,形成共同的价值观,行为准则,通过系统的方式给予落地。

这里需要注意的是:人是很复杂的动物,往往不能单一而论,大多时需要两者结合,合适自己的才是最好的。

在流程约束上,目前做的最好的运维模式是Itil理论,它通过流程驱动运维的落地,同时,它有很好的落地实践,包括要建设哪些系统都有清晰的注明。

我记得我第一次接触Itil理论时,惊为天人,在复杂的运维场景下能够抽象出一套完善的理论是一件很不容易的事,很多初成立的团队,我建议选择这种模式作为伊始。itil的优点除了上面易落地外,还有以下优点值得尝试:
见效快,比如只需要建立一个变更流程,就能立即大幅度提升生产质量。
运维部门主导,在Itil模式下的绝大多数系统和流程只需要运维部门实施即可,甚至最关键的CICD,Itil体系也只关注于最后发布到生产那一块。
管理落地,流程落地的过程就是管理落地的过程,在这个过程中,管理者可以把自己的经验和方法完整的实践下来,可以最大屏蔽执行者的差异。
Itil主要关注的是质量和效率之间的质量,兼顾效率。这句话的理解是,当质量和效率发生冲突时,itil会优先保障质量。

而当需要效率优先时,itil会比较困难,这也就为Devops发展提供了空间。当然Itil本身也有其他问题,比如流程的反弹,边际效益等,但由于不是本文重点,因此不展开讲,如果想了解可以私信我。

而Devops模式的本质,是对开发、测试、运维角色的分工挑战。当我们关注点在结果,即如何快速提供服务给用户时,就会遇到一个问题:如何让开发、测试、运维融为一体,减少角色本身带来壁垒——即我们常常说的那堵部门墙。其实这堵墙不仅仅体现在组织架构层面,还体现在开发、运维二者关注的角度,风格习惯以及语言体系的不同。

举个生产变更的例子:
小D:业务研发
小O:应用运维
他们实施的是DO分离(DO分离也是一个很大的概念,如果以后有空,再单独讲)

现在小D要做个变更需求,假设增加一个环境变量,做代码使用,他们实施的过程会是什么样的呢?
step1——小D会提交一个变更需求申请,在申请中写明要干什么事情,然后经过小D的上级审批,工单流转到小O。
step2——小O收到申请,然后他需要写变更执行步骤,在写的时候,他需要确认一下业务影响,所以他线下找到小D问为什么要这样做?
step3——小D解答自己这么做的原因,并且贴出自己的代码,说明在哪里引用。
step4——在交流过程中,小O发现一个额外步骤,即改完环境变量需要重启应用,而应用重启需要小D发布新的代码,这时他告诉小D,变量更改完,下次你们发代码后生效。
step4——几轮后二者达成一致,小O开始做变更,做完后,等待小D验收。
step5——小D无法验收,因此要求代码发布日那天,小O要在场,出现问题及时回滚。

这只是生产最平常也是最简单的一个变更场景,在这个场景中,有两个问题,其一,二者沟通的信息有效么?或者更进一步说,当变更完成后,这次变更中所交流的所有信息对以后工作有促进么?其二,这一件工作,真的需要二者一起完成么?

其实,答案都是否定的。

很多在变更过程中的质疑和沟通都是无效的,只不过二者所处的角色导致信息必须对称,才能做好一个变更,最后造成效率的低下。

解决沟通最优的方式不是提升双方技巧,而是舍弃沟通。

如果,运维能够提供一个系统或者平台,在上面设置好各种运维场景,开发可以在上面可视化操作,那么则无需沟通,这也是很多人的思路,即系统化是落地Devops的途径。

在这里,我复述一遍:Devops的本质是系统化,我个人比较认同这个理念。但在实际操作中,落地过程并不顺利,那么问题来了,为什么都明白这个道理,但依然做不好Devops?

2、Devops如何落地?
事实上,Devops的方法论并不清晰,它的所有思想都停留在较为抽象的层面,系统化算是很好的一种落地思路。

但是,很多公司系统化后,Devops之路并不顺利,究其原因,主要是没有找到运维和研发的切入点,导致无法罗列出所有运维和研发的使用场景,最后只能不断的打补丁,疲于应对,没法持续改进。

CICD是一个很好的切入点,它是刚需,场景明确单一,同时也是最大化解决开发痛点,利于推广实施,网上也有很多讨论,所以这个不是本文重点,大家自己去找即可,这里主要讲在生产治理尤其是生产变更场景下的Devops落地方案。

问一个问题:在变更场景下,如果我们找到一个开发和运维都共同关心的事物,那是什么?

不是代码,代码运维并不关心,即使想关心,也是有心无力。
不是操作系统,对于大多数研发而言,编写代码需要屏蔽底层的差异,如果真的存在这样的事物,那么只能是和代码产生直接关系的组件,比如中间件Tomcat,缓存Redis,Mc,数据库Mysql等。实际上,绝大多数开发的变更需求也是围绕这些组建实施的。这个很好理解,因为代码层次的变更,开发可以自己掌控,只有这些直接关联的组件需要运维配合实施。

因此,做好这些组件的变更场景系统,则能满足百分之九十以上的开发变更需求。

结合所在公司的实践,来阐述如何去做。

1)如何基于组件实施Devops?

首先,要指定组件的范围,既找到上文我们所说的和开发关联密切的组件,每种组件抽象出操作集合,并把这些操作标准化和脚本化,如下图:
在这里插入图片描述

有了这些梳理,接下来就可以进行系统建设。

在系统划分时,需要遵循以下两个原则:
其一,闭环原则,每个组件层面的操作是个封闭的集合,即系统要能囊括这个组件变更的方方面面。
其二,横向抽象原则,对于各个组件共性方面进行横向抽象,用一个系统来完成。比如每个组件都会有配置文件的管理,这类就可以抽象出组件的配置中心平台统一管理。

接下来,以配置举例,我们来看看是如何构建这个系统的。
crab统一配置平台是针对组件层面做的配置管理平台,每一个组件都由代码和配置两部分组成,我们操作最多的也是对这些配置的修改,但绝大多数配置是不需要修改的,也就是和应用属性无关。

以tomcat为例,在众多配置中,只有Server.xml和Context.xml需要进行个性化设置,而在这些个性化设置里,也只有如下参数需要动态调整,如下图:

Server.xml参数表:
在这里插入图片描述

Context.xml参数表
在这里插入图片描述

crab把这些参数进行key值化,然后抽象出模板的概念。原理如下图:
在这里插入图片描述

其中有一些细节需要注意:
key分为通用型和自定义型,通用型的key基本和业务无关,或者可以说是标准化后的标准,例如服务的端口号,这些由运维把控,全网生产统一,自定义型的key和业务相关,可以交由研发来掌控,当然,这两种类型的key是可以互换的,然而由自定义向通用型过渡是一个比较麻烦的过程,要小心操作。

某些场景下,key值会对应多个value,例如同样是php最大进程数,物理机和容器是不同的,同一个应用,在不同的IDC配置也会有不同,这些需要在渲染过程中加入下发者对象才能实现,这种特殊逻辑越少越安全。
2)如何控制风险?
当系统的权限放开到业务开发时,面临的最大问题是风险失控。这里需要强调一点,devops并非不要流程,我看过很多devops体系丧失流程的概念,效率提升了,却忘记了运维三角型中运维的及格线:质量。

质量可以通过风险矩阵来控制变更风险的,每一次变更,我们都发现其实是由三部分构成:变更对象、操作类型以及执行变更的人。

但当我们系统化后,变更执行人的因素会变弱很多,所以一个风险矩阵真正起作用的是变更对象是否是核心,操作过程是常规还是特殊,由历史数据推断操作的风险系数,这样,我们就得到一个变更风险矩阵,如下表:
在这里插入图片描述

高风险的变更仍然需要人工审核介入,但审核的内容由原来的执行步骤转变为需求是否合理以及操作时间是否合理。Itil的变更流程依然存在,只不过蜕化为第二层,对用户不可见,蜕化后的系统结构如下图:
在这里插入图片描述

3)如何持续改进?
评价Devops的指标有两个,一个是整个变更的平均完成时间,这个时间可以分为高风险,中风险和低风险三个纬度。我们目标是降低低风险和中风险的变更时间,高风险一般不做时间要求。另外一个指标是研发的自助变更率。当然,有一些变更必须运维才能完成,这类的变更在统计时要排除在外。

【总结】
Devops落地过程中,最麻烦的是观念的转变,即原来运维的工作,开发凭什么承担。这就需要前期的宣导培训,最好是让部分开发参与到前期Devops系统需求中来,让大家看到实实在在的好处,不能为了Devops而Devops。

Devops和Itil二者理念不同,但关注点相似,并不存在必须舍弃一种的说法,可以在质量和效率之间选取平衡。

如果说itil需要自上而下贯彻实施,那么Devops则需要变更的执行者、需求者都参与,二者最后会贯穿整个链路。

最后,还是那句话,没有好不好,只有合不合适,只有最合适的,才是最好的。

任何问题,欢迎与我交流,微信号:wangxc_ruc

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
DevOps 五大理念及其落地实践 研发运维一体化(DevOps)成熟度模型 中国DevOps现状调查报告及解读 构建企业DevOps的度量体系 DevOps实践指南精要 分布式敏捷和DevOps实践案例 AWS DevOps 助力爱乐奇大规模业务扩展 AWS 云上的 DevOps 实践简介 多云环境下的 DevOps 实践 DevOps中如何系统开展微服务性能测试 “神兵”天降 - 揭秘平安 DevOps 的核心实践 大型Scrum实践银行产品敏捷转型与DevOps实践经验分享 如何基于 Jenkins 支撑腾讯上千产品的CICD SecDevOps工具链 券商DevOps转型—平安证券容器化实践之路 招行如何基于 K8S 容器技术打造 DevOps 流水线 民生银行的DevOps实践之旅 以自动化先行的 DevOps 落地实践经验 东方明珠集团基于 AWS 的 DevOps 实战分享 中小银行的DevOps 实践之路 让DevOps生产线加速的敏捷之道 云原生时代的 DevOps实践 新场景高效能快交付腾讯敏捷研发平台 DevOps 解决方案 中小金融企业如何开心玩DevOps DevOps 变革的剖析与实践 猎豹移动基于 AWS 构建 DevOps 实践分享 DevOps在联通IT系统的落地实施 DevOpsMadeByGoogle 流水线3.0打造DevOps落地工具链 混合云下的DevOps在vivo互联网的探索落地 大型企业实施 DevOps 的三个阶段 DevOps最佳实践之海量资源技术运营 诺基亚 DevOps 演进-大数据推动流程优化与高效执行 苏宁 AIOps 实践之路 金融云业务网络 智能采集与一体化分析实战 如何构建新一代智能运维平台 CMDB - 企业一体化运维平台的基石 用友方法+之-YSDP 研发交付平台实践之路 顺丰云计算和运维自动化团队从0到1的DevOps之旅 诺基亚的转身:数字化时代的 DevOps 转型之路 大型主机核心银行系统的 DevOps 践行之路 DevOps标准认证评估权威指南及案例解读. 浙江移动的DevOps实践 携程持续交付与构建系统实践 每天万次触发的持续交付工具链实践 Android 超大型代码的快速集成之路 基于猪齿鱼构建企业研发体系 大型制造业实践DevOps团队之路等

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值