《Puppet权威指南》——1.1 浅谈运维工程师

本节书摘来自华章计算机《Puppet权威指南》一书中的第1章,第1.1节,作者:王冬生著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

1.1 浅谈运维工程师

想必大家都看过《好的程序员是普通程序员效率的数十倍》这篇文章,这句话是比尔·盖茨说的,被很多文章引用和转载。笔者读后感同身受,觉得这篇文章讲的并不夸张。程序员如此,运维工程师也是如此,一个优秀运维工程师的效率确实是普通运维工程师的数十倍。本节笔者将带领大家了解一下优秀运维工程师和普通运维工程师之间的不同之处。我们从运维工程师的定位和职责开始介绍,继而详细分析普通运维工程师和优秀运维工程师的差别,最后落脚到自动化运维工具。
1.1.1 运维工程师定位和职责
要想了解普通运维工程师和优秀运维工程师之间到底有什么不同,首先要了解运维工程师的定位,也就是运维工程师处于工作链的哪一环节;然后要了解运维工程师的职责是什么。下面笔者将分别进行介绍。

《Puppet权威指南》——1.1 浅谈运维工程师_第1张图片

  1. 定位
    首先我们来看运维工程师处于工作链的哪一环节。我们都知道,公司的老板需要根据市场提出指导思想;项目经理需要对市场状况进行调研分析;产品经理需要根据老板的指导思想,结合项目经理的调研分析设计出产品雏形并提交给开发工程师。在此期间,系统工程师和网络工程师需要根据产品选择IDC、搭建网络环境、分配网络相关资源;开发工程师编写代码,并将开发后的产品提交给测试工程师;测试工程师对产品做系统和功能测试,将稳定的代码提交SVN,这时轮到运维工程师上场了——运维工程师将代码从SVN Check Out出,推到线上系统供用户访问,并进行后续的升级维护等工作。从图1-1不难看出,运维工程师处于最后一个环节,也是最重要的一个环节,运维工程师负责产品后期的维护、升级、监控和服务保障等。如果运维工程师在日常运维中工作做得不到位就直接影响线上用户的访问和体验,后果是比较严重的。

需要注意的是,不同行业的公司对运维工程师的定义也不同。笔者在这里是以互联网公司为背景介绍的,当然即使同样处于互联网行业中的公司也会存在一些差别。规模小一点的公司,一个运维工程师可能需要完成包括系统工程师、网络工程师、测试工程师及部分开发工程师的工作内容;规模比较大的互联网公司,运维工程师的工作职责可能会比笔者介绍的更细致些。

  1. 职责
    有关运维工程师的职责,我们在这里同样以互联网公司为例。笔者将整个运维工作的链条细化为以下3个部分。

基础运维:硬件选型、IDC部署、架构规划、容量规划、资源成本管理、预算控制、容灾、高可用设计和架构可扩展性等。
业务运维:发布变更、监控告警、故障处理、软件安装升级、系统调优、运营质量报告、线上环境备份、运营大数据分析、恢复和线上程序发布维护等。
数据运维:存储架构设计、提升数据的均衡负载能力、数据的备份与恢复、容灾的建设、数据的冷热分离、监控告警、DB调优与SQL优化等。
1.1.2 优秀运维工程师 vs普通运维工程师
优秀运维工程师和普通运维工程师确实存在着一些差别,特别是在一些大的互联网公司内,一个优秀的运维工程师在带来稳定服务的同时还可以为公司节约可观的成本。本小节笔者结合自己的工作经历和体会,来分析一下优秀工程师和普通运维工程师究竟存在哪些差别。笔者希望通过本小节的介绍能使所有的运维工程师找到一点儿成为优秀运维工程师的灵感。当然很多运维工程师已经很优秀了,但是没有最好只有更好,我们可以综合其他优秀运维工程师的优点,让自己变得更优秀。
在《好的程序员是普通程序员效率的数十倍》中有这样一段话:“很多程序员每天编码超过2000行,对于一个程序员来说这很正常,但我们可以说这是一个好的程序员吗?我们再来看一下,网上报道著名的软件公司——微软公司,他们的程序员每天只编写50行代码,差距这么大,难道微软公司的员工就不是好的程序员?”从这段话来看,程序员并不是每天写的代码越多就越优秀。优秀的程序员能够写出正常运行的程序是基本要求;但还需要通过算法提高程序的效率,降低程序使用的系统资源,同时提高程序的复用性和易用性。运维工程师也是一样,并不是每天的工作量大就能成为一个优秀的运维工程师。笔者自己做了比较,刚入行的普通运维工程师和工作多年的优秀运维工程师有着明显的差别。差别主要在以下两方面。
1)对运维工具集的使用。刚入行的运维工程师习惯自己写脚本来完成运维工具建设和日常的运维工作。笔者当年也一样,每次接到新任务都会重新写一套脚本来完成新项目。笔者在工作多年后,也时常看到很多刚入行的运维工程师采用和笔者当年一样的工作方式,这样无疑是比较耗费时间的。单就这方面来说,优秀运维工程师和普通运维工程师相比,主要有以下特点。
撰写通用的脚本。优秀运维工程师会找到每个项目的共同点写出通用的脚本,尽量降低重复劳动,提升工作效率,同时将通用的脚本共享。这样不仅降低了其他人的工作成本,还提高了整个组或部门的工作效率。
尽量使用开源工具。开源工具本身就节省了开发的成本。如果开源工具不能满足项目需求,优秀运维工程师会对开源工具做二次开发。这样一方面节约了大量的成本,另一方面他们也可以借鉴开源工具的一些思路和想法来拓展自己的视野。
2)时间管理。在互联网行业中,运维工程师和其他工种有很大的差别。运维工程师的时间比较零散,比如他们可能前一秒钟还在升级线上程序,后一秒钟由于程序BUG导致线上服务不可用需要他们立即停止正在进行的工作,准备迁移线上流量。运维工程师好比一个消防员,每天处理的都是十万火急的问题,一点都疏忽大意不得。而这样忙碌地工作一天后,总结起来可能实质性的工作并没有很多。其实这是很多运维工程师的弊病。所以想要成为一个优秀运维工程师,就要合理地管理和利用时间。好比一个球队在踢球前会预先设置好阵形,然后在比赛的过程中通过变换阵形来打赢比赛。运维工程师的工作也是如此,需要合理分配时间,平日可以用70%的时间来处理日常的运维工作,20%的时间通过程序或工具将现有流程实现自动化,用10%的时间来提前准备明天的工作。只有这样合理分配时间,才能让我们的日常运维工作事半功倍、井井有条。
除了上面提到的对运维工具集的使用和时间管理外,成为一名优秀运维工程师还需要很多其他方面的能力,比如:
强烈的学习欲望和钻研精神。
良好的沟通和团队协作能力。
技术分享、沉淀、总结、传承能力。
行业洞察力。
好的身体素质和吃苦耐劳精神。
良好的编程能力。
胆大心细,敢于承担责任。
规划能力。
好的心态和情商。
1.1.3 自动化运维工具
上面我们对比了一下优秀运维工程师和普通运维工程师的区别。读到这里想必大家心中也有了基本的了解。伴随着互联网的云时代和大数据时代到来,早年的运维工程师只需要管理几十台、几百台服务器,而到目前为止很多运维工程师需要管理几万台服务器。如果没有一套完善的运维工具,这样的工作量和维护成本是不可想象的。所以想要作为一个优秀的运维工程师,就要借助运维工具来让我们更好地完成日常运维工作。在这里笔者重点向大家推荐3款功能强大的自动化运维工具——Cfengine、Chef和Puppet,它们也被誉为自动化运维工具中的“三把斧”。下一节我们将向大家简单介绍一下这3款工具。

你可能感兴趣的:(《Puppet权威指南》——1.1 浅谈运维工程师)