2013年4月的QCon北京会场上,两位在运维界打拼多年的技术男聚首专访间,就“运维人员的终极发展目标”这个话题展开了深入的讨论。他们是:
邵海杨(个人页面),网名“海洋之心”,系统架构师,业余撰稿人,十多年来一直致力于开源软件及前沿科技的研究和探索,目前在又拍云存储任运维总监。杭州LUG组织者之一。
赵建春(Coati),腾讯业务运维T4专家工程师,总监,技术运营通道委员。04年大学毕业后加入腾讯,先后参与过交友、音乐、贺卡、QQ空间等业务的开发。06年后和团队一起专注于技术运维,负责腾讯社交网络事业群社区类WEB业务的运维和建设工作至今。经历了业务规模从数十台设备到数万台设备的快速发展历程。过程中Coati在运维环境标准化,业务Set化,运维自动化及多地分布式部署等方面积累了丰富的实战经验。
运维工程师的终极目标是什么?运维人员在职业发展上有哪些选择?在DevOps趋势滚滚而来的当下,运维应该如何应对,如何与Dev团队形成和谐的步调?下面的对话将尝试对上述问题进行解答。
InfoQ:今天的话题是海杨选的,整个谈话也由海杨主持。我们今天不谈那些沉闷的话题,而是聊聊运维应该如何规划自己的职业和人生。那,海杨开始吧:)
我们是不是应该先把“运维”这个词重新定义一下?作为腾讯T4 level的运维工程师,你能否讲一讲你所经历的运维人生,给刚刚上路的运维者一些启示?
赵建春:我这边主要是比较偏软件层面的运维,硬件层面运维接触的比较少。另外,我是做开发出身的,所以和开发沟通起来比较好。
我的团队都是做偏软件层面的事情的。归根到底,我们是做什么的呢?我认为,我们是让软件活起来的人。开发把软件开发出来以后,它只是一个程序。我们运维把它部署到线上去,这才让它真正的运转起来。我们是让软件真正的活起来的、有生命的一群人。
邵海杨:我同意。运维工程师真正的终极目标就是让机器能够跳跃起来,能够滚动起来,能够把我们业务的美好的一面给展现出来。运维工程师最大的成就是什么?能够操作成千上百台机器……
赵建春:成千上万台。
邵海杨:而且还能够和睦相处。机器与机器之间也可以团结互助,比如你的机器这里有问题的,其他机器自动过来帮你分摊一下。
赵建春:是的。而且这样的状态是要软件来实现的。
邵海杨:是这样的。对于有些团队来说,可能软件工程师的技能有限,无法在交付软件的时候就考虑到机器和谐共处的这些问题,这种时候就必须要靠运维工程师进行一些工作,如水平扩展、分库、分表,从业务层面上去辅助软件,做一些软件开发的工作。
你可以在开发和运维之间自如切换,这一点我真的很佩服你。我自己原来是做PHP的,没有接触过大型的软件开发的经历,开发方面还是偏弱一点。
赵建春:这也是和自己的机遇相关的。这个是平台机遇,很难每个人都碰到一样的平台机遇。
我觉得,每个人出去找到的第一份工作肯定是各式各样的,有的人可能一不小心就成为软件工程师了,有的人一不小心就进入到了运维工程师的行业。那个时候我就告诉他,你不管进哪个行业都没有关系,因为我们前进、发展的道路是一样的――比如,都要往架构师走。架构师说白了,就是以软件为基础。运维做到一定程度,你会用更多时间去想软件要怎么改进,运维的工作量就会减少。同时,软件开发师在设计软件的时候,也会更多考虑如何让运维更加智能。无论你是在这两种岗位中的哪一个岗位上,只要能够有这种跨领域的交流,其实慢慢都会走到架构师这条路。
InfoQ:我打断一下。我觉得刚才你们说的是一种理想的状态,而现实是很骨感的。你们看到的现状离这种理想的状态还有多少差距?
赵建春:在我看来,做运维分两类人:一类就是找了份工作,一类是真心喜欢技术。
找了一份工作的人,他对技术的痴迷以及研究没有那么深刻。当他在运维过程中遇到问题时,协调能力好的人就能够通过协调的方式把这个问题解决了;协调能力不好的人,就只能打酱油。这两种人都会有一个问题:长远发展会有瓶颈。打酱油的那个肯定是不行的。有协调能力的人,他会把一个目标任务通过协调资源做好,但是对技术深度的积累就会比较差,这样他在做一些偏技术型的推进、推广的时候,就不能够去胜任,因为和他合作的人会不太信任他。
对技术特别感兴趣的人,遇到了问题,或者出了一些故障,他就会找各种各样的办法解决它,看看业界对这个问题有什么研究结果,用各种办法把它弄明白。这个时候如果有一个快速发展的平台,经常面临爆发式增长的业务,他就会在很短时间内遇到很多不同种类的问题和异常,很快成为一个很有积累的人,每个事情他都钻的很深,他会积累到别人几年时间都积累不到的经验,然后会有很多深刻的体会和感受。
这种人又分两种:一种协调能力很好;一种不怎么说话。不怎么说话的人,会成为运维领域专家,能够解决很深的技术问题。协调能力很好的人,慢慢会有自己的想法,从根本上去反推开发,和开发讲道理,探讨这个问题应该怎么样来解决。因为很深入技术,所以和开发的沟通是对等的,他认为你说的有道理。长此以往,你对开发会越来越有影响力,给整个的业务和架构带来控制和影响。
我以前招聘的时候常说,也许你做过开发,也许你没做过开发,长远的发展都是运维架构师。我们是不写代码的架构师,通过规范和约束产品的架构使它变得更好。
邵海杨:腾讯是大公司,高手多,分享又多。你们有腾讯大讲堂,淘宝有阿里大学,只要努力积极的向别人去学习,成长的空间和机会就很多了。像我们小公司呢,一方面要积极的向自己的同事去学习,另外还要多去参加社区活动。因为在小公司,毕竟个人的能力有限,你旁边有个高手,把他学到手了,还是井底之蛙。要不断的走出去。
对于现在正在运维路上挣扎的那些人,他可能想让自己的工作变得轻松一点。你对他们有什么技能上的建议?
赵建春:让工作变得轻松一点?
我觉得运维这个岗位和研发不太一样,他要的知识面是广度加深度。研发往往更要求深度,除了架构师之外,大部分研发工作需要有很好的深度才能完成。运维是软件和硬件之间的一个桥梁,所以你就要懂得技术,懂得软件,懂得开发,还要懂操作系统,懂硬件,所以听上去对你的要求就会比较多,很难样样都很精深。
要让自己做得比较轻松,你要能清楚的认识自己是一个什么样特点的人。
如果你是一个技术深度没那么深的人,那就建议多做一些技术项目的推动工作。其实团队里面,很多东西都是要持续的去花一年、两年时间去推动的,把它从没有做到百分之百,这个过程中,需要很多沟通、推动的技巧。一个很闷的工程师要把一个方案推销出去,难度是很高的。但是一个很会打交道的人,他去推动这个事情就会很容易。虽然你对技术没那么精通,要做管理决策的时候会有问题,但是适合做项目的推进。
如果你对技术非常感兴趣,尤其是如果你觉得自己对协调、推动这种事情不感兴趣,那最好是走技术专家的道路,比如数据库专家,软件架构专家等等。
这两个也可以结合起来。深、广结合的人适合做管理。大多数这样深度也还不错、协调能力和沟通能力也还不错的人都走到管理上去了,这样的人发展的前景会更好一些。
不管怎样,你应该很好的认识自身的特点。
邵海杨:你刚才提到的运维人员必须表达能力要好,这一点我非常赞同。运维工程师做的两个事情,第一个是机器要听话:我们要让自己闲下来,用自动化的工具,统一管理,把流程规范掉,这样我就可以批量的去操作机器。
第二个事情就比较难了,我需要问老板要资源。身边十台机器,用完了就用完了;再要十台的时候,就要考察你的表达能力。这一点我觉得非常痛苦。
我有个经验,老板他其实是对钱比较关心,或者对数据比较关心,你口头跟他去讲,他是没有感觉的。如果老板是懂技术的,我们就直接拿生产线上的监控图给他看,说负载已经这个样子了,他就能理解。如果老板是不懂技术的,你给他看这个数据他还真的看不懂,所以必须给他业务报表,图形化的业务报表给他看。总之,还是要动一些小聪明,去转换成老板能够理解的方式去问他要资源。你只要能够做到这两点,这个事情就能够做得很好。
赵建春:一般这样的人的思维会比较清晰,说事情也会说的比较清晰。你要把一个技术问题让别人听懂,有些人还真做不到。
邵海杨:你今天上午演讲的话题,我个人感觉还是偏大,大公司里用的多。小公司,比如说我们,还是用小的自动化加Puppet用的比较多一点。
赵建春:但是我觉得小公司也要非常注意,因为我们就是从小变大的。在这个过程中,我们最终选择了这样一个路,其实回过来看也是有很多的教训,为什么早不做?为什么在很小的时候不做?在小的时候不意识到这个在大了以后会带来的麻烦和困惑有多大,你就没有这个压力和动力去做;但是等它大了以后,资源永远是有限的,尤其是咱们搞互联网的,整天都在加班处理故障,哪有时间回过头来做打扫清扫的工作。
你越早做,以后越不需要你去回过头去把这个不标准的变成标准的。
InfoQ:我插一个问题:你也不知道你会不会变大,万一白做了怎么办?
赵建春:当然是希望变大了。
邵海杨:我相信你做了标准化组件以后还真的会变大,因为你有这种想法以后,这个公司想不强大都不行。
赵建春:也不一定一开始就要做标准化组件,但是一开始你要多想,最好是根据长期对比选择一两样的技术方案,而不是说什么技术方案都有。不同的人进来就会带来一套不同的技术架构,这是很不应该的,因为人员会迭代,会更替,他会走,也会来新的人。一旦人员发生更替变化之后,原来那堆系统就没人管了。开发不用管,运维你得管,因为要对用户服务。这时候痛苦的是你。
邵海杨:是的,必须要流程化。
我想问一个我比较关心的问题,当我进入一个公司以后,运维要去做一些事情,然后会牵扯到跟研发的争议。怎么去协调运维跟研发之间的节奏?
赵建春:这也不见得是我个人的经验了,是公司的经验,包括我的一些体会。
我总结就是有张有弛:开发进的时候我们退,开发退的时候我们进。
我们是要服务产品、服务用户的,最终是要为用户服务好。开发进的时候,他们可能会有很多很紧急的事情,要保证这个产品按时上线,或者说抢占市场,他会产生很多需求。这个时候我要开下绿灯,那我们就退一下,全力支持好开发,去把这个做好。
但是呢,产品也会有周期,也会有波峰低谷,它有的时候比较闲,在这个时候你退我进,和开发造成一个很好的一个互动。
正式的做法是这样子的:我们运维线每年都会制订一个年度规划的大目标,比如说我们今年要做容错容灾的跨Site分布,这是我们的一个年度的计划。当然这一年也许完成不了,如果完成不了就延后到下一年,但是我们提前就告诉你我们要做这样的事情,明年我们在产品上做一些优化的项目,后年我们要支持一下IPv6,这些项目我们在年初的时候就会有一些优先的一些思考,今年应该做什么,明年重点做什么。这个时候和开发沟通,最好是让两边都把这个任务考虑进去,排到自己的KPI里面去。这个时候我们就会和开发协商,在一年的间里面协商一些重要的事情,包括我们做这种规范化的建设,可能也会要他们来配合,那我不是说一年时间,你肯定是有忙的时候有闲的时候,忙的时间我肯定全力支持你,闲的时候你全力支持我,你进我退,我退你进,就是这样。
邵海杨:你是说运维和研发是要充分交流的?
赵建春:我们是交流很多的,很多任务是共同协商里面就要认同去做的。说白了,我们是支持开发的,是服务他们的,但我们要争取他们的服务,在理论上要是对等的,不能我们一味的服务你,你不服务我。如果形成良好的互动以后,他就会互相支持。
邵海杨:不过,在我公司里也有这种情况:技术员有点水平,就开始有点脾气了,我们运维人员还得去迁就。
赵建春:这是有可能的。但是,这也跟我们中午讨论的一个话题有关,就是看能不能和开发形成良好的互助互信任的一个机制。而且我觉得除了刚才说的,也要高层来制订一些在技术线上的一些长远的目标。
邵海杨:我曾经在一个公司做的很开心,就是因为有高层支持。我们特别成立了一个研究组――我不知道你那边腾讯叫什么?类似技术委员会?
赵建春:技术委员会是做直接晋升那种。
邵海杨:我们成立了一个研究组,这个研究组有个运维总监,就比如说我,然后还有个研发的头,还有一个就是做业务这一块的,还有一个就是产品经理。我们发现我们四个人坐在一张桌子上办公的时候效率特别高,因为沟通只要跟上面的Leader沟通就好了。最怕就是什么呢?就是前期没沟通,等到要上线了再跟你来说,每个人心里都会抵触一下。我发现那个时候坐在一起的时候效率特别高,而且我们互相之间都学到了东西,一些好的Idea,好的技术,马上就可以去做一些研究跟进。
赵建春:我们运维和研发Leader在和总监一起的时候就经常会讨论一些问题,最近运维需要我们支持帮你们做什么推动和改进。然后过年的时候交换一下信息,你明年重点做什么,然后互相留下时间。但是呢,不要在开发很忙的时候去强制他做一些事情,这样会使他会反感很大,他觉得你不理解他,他压力也很大。
邵海杨:下一个问题,我想问一下,你认为运维工程师最需要的一种品质是什么?
赵建春:我先说一个非技术的,就是能够受委屈。为什么这么说呢?因为不管什么地方发生了故障,都和运维有关,你都逃不了干系,都是你有一定的责任。所以有时候,你觉得自己很委屈,这个事真的和自己没关系,甚至是公司有些处罚或者什么的时候,他一定会把你涵盖进去,这时候觉得做这个工作很没意义,很痛苦。
但这个也不能这么想。实际上,确实是所有的问题都可以归结为一条:监控不到位。
还有,胸怀是被委屈撑大的,心胸放开阔了以后,那这些问题都不是问题,每一个问题都是一次学习的机会。
第二,我比较喜欢技术,我认为还是要有钻研精神,要去学习深入了解技术。因为我们做运维的纯粹是做技术的,我们不是做产品,不是做销售。刚才我讲的这个协调项目型的人,团队里确实需要,但是不需要太多,一个团队有那么几个就够了。还是希望团队的同事更多去更深入的研究和学习技术,然后这样我们和开发才能有一个对等的沟通和交流,否则开发可能真的是会懒得跟你讨论问题,他觉得我们两个不在一个频道上,沟通起来会很难。
我们每双周都有团队内部的分享。我曾经尝试过两次,第一次失败了,组织了一堆人要去分享,让你第一次讲,他第二次讲,他第三次讲,这样安排的发现不行,分享了三四节课以后断了。第二次做的时候,我就亲自出马,自己提前准备了四门课,组织起来以后,如果哪里没人讲了,我就讲。同时我在底下去找一些Leader,找一些骨干的同事,和他们讨论他们有什么可以贡献的,希望他们来讲。这时候再去大方向的撒网说,谁愿意讲来找我,给大家来提前准备,我就去提前把两、三个月的分享的议题先统计下来。你可能没做好PPT,那我就问他你要不要讲,他说要讲,沟通一个大概时间,他给我一个承诺以后他就去准备,这个时候等快断粮的时候再去收集一下。
现在这个机制保持的比较好,我们已经坚持了两年时间,有时候一周不止一次。
邵海杨:这点说到我心坎里去了。运维人员要不断的学习新技术,同时还要分享,我一直认为一个人的学习是有限的。
赵建春:而且这样的一个氛围会带动周围的人去学。那些刚开始没有想着去分享的人,看到别人都在分享,如果这个人有上进心,他会觉得自己落后了,是不是考虑要分享一下。
邵海杨:而且可以帮助他们锻炼口才,就把交际能力这一块也给提上去了。
赵建春:很多人很乐意分享。我们团队里面有很多同事分享了好几次,他有些课题他要一次讲不完,他要分好几次讲,比如Hadoop,或者是Linux Container,一次讲不完,他就分几个章节来讲。
邵海杨:所以我对运维工程师只强调两点,第一点就是运维自动化,一定要让自己闲下来,才有更多的时间和精力去学习新知识;第二个,一定要坚持学习,尤其是Linux,因为很多新技术都是先在Linux上被实现的,所以你要坚持每天学习一点点。最关键的是一定要学会分享,因为你一旦会分享了以后,你会发现你的交际能力也变强了,你的口头能力也变强了。
赵建春:也提升了影响力。
邵海杨:这些能力提升以后,以后我们去问老大要资源,就会变得很Easy。