您好,欢迎访问三七文档
运维自动化实践精彩观点抢鲜看实现运维自动化闭环,最主要就是配置管理、状态管理和变更管理能力。治大国如烹小虾,我们来类比餐厅老板,看如何实现炒菜的自动化:首先,我要知道我的厨房里到底有些什么东西是可用的,比如备了哪些菜,有那些工具,这些就是配置管理。此外,我要让系统帮我去做菜,是炒、是炖还是煮?是加水、加油还是加火,这些都是变更管理的能力。最后,系统还需要能够知道我炒的菜目前是一个什么样的情况,有几分熟,温度有没有太高,油是不是太少什么的。这些就是状态管理的能力。不管是什么样的自动化系统,实现本质就是这三个能力的闭环。正文我结合自己在运维方面的一些工作经验,介绍一下怎么样去设计和建设一套完整的运维系统以便支持分布式架构的系统。首先简单自我介绍下,本人从事运维相关的工作有很长一段时间了,应该有十几年了吧!我的第一份工作是做系统集成,期间建过网络、建过机房、爬过天花、搬过服务器,感觉全是各种体育锻炼,锻炼出来的身体正好就是干运维的料子。因为运维首先得有体力搬得起服务器。印象中我搬过最重的服务器是IBM的RS6000,应该有个几百斤吧!一个人根本扛不动,四个人搬都非常吃力。我原来身体好的时候能做一百多个俯卧撑,自从不搬服务器了,现在估计30个都做不动了。2006我加入了腾讯,腾讯企业文化很好,经常会有很多小组活动、部门活动什么的,但是做运维很苦。经常在外面玩得时候,人刚到电话就过来了。有一段时间我专门负责值班优化,承包了所有的告警处理,那时候每天晚上要起来四五次处理故障,一个故障最少也要搞个半个多小时到一个小时,当时一直觉得这事只熬过来别的事情就应该都是小菜一碟了。虽然当我有小孩之后,才发现原来还有比干运维更辛苦的事情的。都说运维苦,但其实只要干好了,也可以是非常快乐和有成就感的。为了让运维都干得比较快乐。所以,2015年的时候我们几个腾讯的同事一同创业,希望把我们的想法和经验能够传递出来。通过推动和帮助各个企业进行运维平台的建设,来解放运维的压力,帮助运维进行转型,并形成运维技术的企业竞争力。1、运维的趋势与挑战先说说目前的运维的一些变化。首先,从运维的职能来看。只要干好一件事就可以,那就是让我们管的机器,或者业务能够一直正常运行,只要它不故障,基本就没有运维的事了。但如果出了异常,不管什么事都会有我们的责任,这就是运维。为了做好运维,需要关注的事情很多很广。从能力维度来看,我们需要关注运营产品的质量,效率成本。从产品的生命周期过程来看,我们需要关注发布前、发布中和发布后的整个过程。其次,从运维服务的发展趋势来看。很多年前我们经常非常会YY一下,我们在腾讯所做的运维优化和支持是不是可以打包成服务或解决方案去支持商业用户,当年觉得是异想天开。但随着云计算的出现,大家可以看到,现在上面已经有很多的服务,其实就运维所做的优化和提供的服务。运维的价值不断地从内部向外去传递。运维能力的建设也越来越受到企业的重视。最后,来看看运维能力的发展趋势。这里我列出了腾讯互联网运维团队所经历的三个阶段。最早的时候运维只要关注各种底层的东西,如服务器、网络、交换机等,把安排的事情干完就可以。但随着你业务规模做大,需要做的事情就没那么简单,不但要把事情做了,还得做得快,做得好,这就需要有能力平台的积累。通过运维平台,一方面是把我们好的、正确的经验积累下来,二是能够通过平台把我们的工作变得更可靠、更高效。当平台建设达到一定的水平之后,就进入到了第三个阶段,即数据分析和云计算的阶段,在目前大数据分析能力快速发展的情况下,数据的价值不断地被大家发现和有效利用。运维作为数据的直接管理人,我们可以在数据的层面上去挖掘很多的价值,尤其是在服务优化和成本优化等方面,运维可以通过把有价值的数据实时采集和分析出来,并反馈给研发、产品团队,来推动产品的不断优化。从这个角度来看,这里有很多的挑战,比如说云计算带来的一些新技术,对人能力的要求。这些不同的新开源组件,新的技术,新的方法,都会对传统的运维工作带来变革的要求。甚至今天主题提的分布式存储,分布式架构,各种新的架构方案和技术的流程也对运维工作带来很多冲击,这些都是需要我们去面对,去变革的。举个例子,我刚到腾讯的时候,腾讯有一个很奇怪的面试官,叫通道委员会。他反复问我什么是ITIL,那个时候完全不懂,大家做运维的应该没有人不熟悉这个东西了。以前流行通过ITIL,通过流程的理念来管理IT系统。这东西虽然有用,但运维来说非常的烦人,它会设定没多的门槛和流程,其实这里面很多是不科学的。比如,我们以前要求做故障单管理,故障修复完一定要关闭故障单,我故障早都已经恢复完了,但系统总是记录我忘记结单,处理超时。为了关闭事件单,我就需要浪费额外的时间去登陆系统,去手工关闭流程。这种时间上的浪费,当你维护的系统变大的时候,效率的损失就边得很可怕了。所以ITIL的管理理念现在已经不流行了。现在大家都讲DEVOPS,提研发、测试和运维的协同。以前ITIL讲分工,发布就是运维的责任,现在DEVOPS强调协同,发布就都让研发去做了。这样很合理,因为程序发布这事你让运维去负责,其实大部分情况下出了问题运维根本识别不出来,你说别人写的代码到底有没有问题我怎么知道,真出了问题,耽误了时间,最后事情还是得交由开发来定位和处理。而DEVOPS重视的就是高效,整个团队协同去处理这个事情,什么样的模式或什么样的人去做这个事情会变得更高效,谁就是第一责任人,我们就让他去负责,这样团队的流转就更高效和科学了。这是理念上的一些变革。对应这些变革,运维人员的能力要求也有所变化。以前我们搬搬服务器,写个脚本什么的就可以了。但是随着技术和管理理念的变化,现在不一样了,运维也要开始写代码了,JAVA、PYTHON、C++什么的。运维在公司的角色定位也不太一样了,以前就只是任务实施,现在慢慢朝平台建设,甚至朝运营分析方向转变。我们不但要有能力写代码还得有能力和研发一起讨论架构,和产品进行运营沟通。真要想把运维做好,你要学的东西太多了。对于各种新技术的学习、应用和融合,如果说每个公司或每个运维都要去重头开始琢磨,那成本会非常大,对人的要求也会非常高。2、平台建设理念刚才提了很多挑战和趋势,总的来说,如果我们要去做一个运维平台,去解决运维遇到的这些问题和挑战,我们要怎么做,怎么样才能够把运维的能力通过平台去不断地提升?我这里给了一些自己的想法,这些也是我们在腾讯这么些年积累下来的经验。首先想讲的是平台建设的理念。很多时候做事情时,事情背后的理念往往会比做事情的方法会更重要,不知道大家认不认同这一点。技术人员特别容易陷进一个误区,我要做一个事情,只要关注最新潮的方法和手段,背后的一些背景和因果全部都不管。就比方说有些技术人员,他们喜欢用Markdown来写文档,但他们就从来不考虑写出来的东西商务人员该怎么使用,结果我们公司的所有商务也得学用Markdown。在公司内部也许这种妥协是容易的,但放到市场环境下这种妥协就不现实了。所以,我觉得在建设运维平台之前,有必要先沟通一些成功的经验和方法轮。任何公司想要建设它自己的运维平台都会是一个庞大并复杂的系统工程。这里面牵涉到方方面面。很多人往往在设计的时候会希望一步到位。比如,希望要一步到位,希望直接就设计一个能力非常全面的平台,这个平台要包含所有需要的功能,要把权限管理好,要把安全控制住,要把稳定性做高、要把用户体验做精。这种情况下,平台的建设就会很难,建设的周期也会非常的长,很多情况下项目可能还没有建设完成,需求就已经变了,项目也就烂尾了。其实,我们应该考虑先从0到1,然后再从1做到N。先考虑把核心最迫切的功能功能先快速实现,只有用起来才是好平台。简单的功能可以先实现,再不断地慢慢再完善,不断地丰富它的功能,这样过程中的平台收益才会最大化。第二,标准先行。做过运维的人都知道,我要管理的事情非常多,环境会非常复杂。当我们推行标准化的时候,它带来的最大好处是降低平台设计和实现的难度。标准化能力和系统建设能力是一个翘翘板。我们在业务架构标准化方面做得好一点,那么系统建设的复杂度就低一点。比如说,如果我们的运维标准化做得较差,我们有10种不同的硬件,每种配置都不一样,上面操作系统也不一样,这种情况下我们的平台就需要做不同系统和环境做兼容性,系统实施成本就非常的高了。标准化先行,这样系统的建设复杂度和难度都会相应降低。第三,快速尝试。复杂系统的设计和建设都是非常难的,而且对于没做过的东西,其实很多方面在一开始的时候跟本想不清楚,也想不明白,这种情况下,应该先简单一点快速实现DEMO原型,而不是停留在反复的讨论和设计。只要系统在应用环境中跑一阵子,很快你就会发现问题和找到相应对策的。第四,接受不完美。腾讯现在自动化运维平台对外有两个品牌,织云和蓝鲸,而我刚好在两个团队都待过,也都经历了两个平台的建设和成长。比如织云平台的建设,最早是从打包规范的推广开始。早期的平台只是一个简单的脚本工具平台,之后才逐渐补充了一此管理功能,如Web管理,组件管理,包发布、配置发布等,最后才逐渐建成面向全业务管理和调度的织云平台。这里一定是个逐步完善、逐步演进的过程。腾讯也有很多一开始就规划得很大的项目,现在看起来,基本上这些大项目都死光了。所以,这里在设计和建设中,大家都要能够接受或是忍受不完美。对技术人员来说,这点也许会有点困难吧。记得上次参加GOPS全球运维大会的时候大众点评的一个讲师提到一点很有道理:我们在面对不完美的平台时,要知道没有任何一个平台是完美的,也没有任何一个技术是完美的。但我们决策用不用它的时候,可以评估,如果我用它,它带来的好处、优点比缺点更多,那这个平台和技术就是有价值的。第五,业务导向。建成的平台能否发挥作重就看我们的推广能力,这里实际也是有一些技巧的。任何一个新的东西,任何一个新的技术、在推广的时间其实都会遇到阻力。就腾讯内部的平台推广经验来看,最有效的手段就是先找一些比较配合的团队、或是重点的业务,这些团队和业务相对的资源也比较丰富。当我们快速完成了这些试点业务的推广,就能够在公司内部建立业务标杆,并形成影响力和口碑。当建立了业务标杆之后,后面的业务再去推动就会容易很多了。所以,过程中平台快速的上线,尽快输出成效,是非常重要的。3、平台建设实践讲完方法论,现在回到具体的系统设计和实现。我们应该如何来设计这个运维平吧呢?作为一个完整的运维平台,一定要考虑形成运维管理能力的闭环,并逐步实现自动化。如何才能实现运维的自动化闭环呢?最主要就是掌握配置管理、状态管理和变更管理能力。运维的自动化大家可能不太好理解,我举个简单的例子。比如我是餐厅老板,我希望实现炒菜的自动化。那要怎么实现呢?其实非常简单:首先,我要知道我的厨房里到底有些什么东西是可用的,比如备了哪些菜,有那些工具,这些就是配置管理。此外,我要让系统帮我去做菜,是炒、是炖还是煮?是加水、加油还是加火,这些都是变更管理的能力。最后,系统还需要能够知道我炒的菜目前是一个什么样的情况,有几分熟,温度有没有太高,油是不是太少什么的。这些就是状态管理的能力。不管是什么样的自动化系统,实现本质就是这三个能力的闭环。对于运维平台来说,我们通过配置管理能务来收采和管理所有的系统资源,通过状态管理能力实时的监控资源的运行情况,最后再根据监控的结果来对现多的资源进行变更和调度。能力闭环实现了,自动化能力也就实现了。在运维平台的设计实现上。我里有一张PPT,大家应该经常能够在老王的演讲中看得到。为了实现一个完整的平台能力,我们需要对整个平台进行分层设计,最底层是各种硬件和资源的管理平台,它能够抽象地去管理各种物理资源和逻辑资源,和这些资源自身有关的管理能力也都会放在这一层。再往上是通用能力层,这一层实际上是把运维所负责的常规服务都实现成为系统能力。比如运维日常的配置管理、域名管理、文件管理等。通过第二层的平台把运维的工作全部服务化,而这里服务化的核心就是把日常手工工作都进行系统封装,变成服务接口。这种服务接口可以供外部的服务或更上层的系统进行调用和扩展。当运维系统的服务能力构建成熟,我
本文标题:运维自动化实践
链接地址:https://www.777doc.com/doc-7434140 .html