作者简介
周少冉 百度高级研发工程师
负责百度智能运维(Noah)部署产品的设计和研发工作,对部署上线有着广泛的实践经验。
背景
在互联网公司中,除了我们熟知的开发,测试,产品之外,还有一群非常重要的人。他们主要负责服务器的维稳和日常上线更新工作。没有了他们的存在,我们的服务器肯定会出现各种未知的问题。没错,他们就是传说中的运维(OP)同学。 OP同学的两大工作事项:一维护服务器稳定运行;二进行模块上线。大部分人都认为一非常重要,是OP同学最费精力的事儿,对于模块上线,很多人觉得只是将文件进行简单替换就好。事实真的是这样吗?那我们不妨先看下某位OP同学真实经历再下结论吧。
OP小强同学受难记
小强同学是公司的一名OP,日常主要工作就是负责服务器的稳定和上线。在公司开始发展阶段,业务不是很多,几台服务器就能够轻松搞定,每次找他上线的开发(RD)和测试(QA)同学,他都能轻松熟练的帮他们进行上线。
随着公司业务发展,服务器日益增多,找他来上线的RD和QA也络绎不绝,平时能够轻松完成上线的小强,发现每次都手动上线,又费时又费力,还经常出错,这样下去总是不行的,得想个办法。于是他就找了RD同学,希望他能够帮自己,写个自动化脚本实现一键上线。
RD同学虽然不乐意,但是也考虑到实际情况,就答应帮助小强同学,让小强说一下上线场景。小强想了一下说,上线吗,无非就是替换个包之后,运行起来就可以了。那你就按照:下载新文件→替换旧文件→开启服务这种顺序开发吧。
不到三天,RD同学帮小强开发出了一个程序。只需要填写下载地址,替换路径和开启服务命令,就可以完成上线自动化。有了这个神器,小强自然省了不少力气,对开发同学自然也是感激不尽。
到了周末,小强约上自己的女盆友出来约会。
本来两个人开开心心的。结果小强突然收到一条短信,短信提示某个服务突然停掉了。公司最近为了服务器的稳定,对每台服务器都安装了报警提示功能。只要是有服务或者机器发生异常,就会对OP立马进行提示,以便最快的速度进行修复。
是立马解决报警上线问题,还是先好好陪自己的女朋友?小强陷入了两难境地。To be,or not to be,that is a question.
没办法,作为一名职业的OP,问题再小也是问题。简单安抚女盆友之后,立马就赶回家,打开电脑检查问题。得出的结果是,RD同学在周末加班完之后,要进行上线测试。期间必须要关掉正在运行的服务,才能做文件替换。这个报警正是因为服务关掉而触发的。
小强同学很郁闷,这种报警属于假报警,本不应该是值得关心的问题。结果因为这个,搞砸了难得的约会。
第二天刚到公司,立马就来了一个新难题。QA和RD同学都要同时上线。而上线的代码是完全相同的,但是因为一个要部署在测试环境,一个要部署在开发环境,所以要上线两次。小强心里觉得,还好还好,只要上两次而已。但是当他看到源文件的时候...
原因是因为本次上线的文件多达100个。这样通过自动化脚本的时候,光下载那一步就得耽误好久。而且只是因为开发和测试的环境不同,代码一摸一样,却要对每个环境都要上线一次,这不是浪费时间和资源吗?但是没办法,只能硬着头皮上线。小强为了能够提高速度,同时开了多个程序下载。不到一会,服务器就出现了I/O过高的问题。
当他千辛万苦部署好测试环境后,想再次部署开发环境的时候,发现了上线失败。为什么呢?经检查发现,是因为周末RD曾经上线过的文件夹用的是RD名字。本次小强要更新这个文件夹,用自己的名字当然会提示权限失败,当然上线就失败了。哎,没办法,小强只能跟那位RD同学沟通一番了。
结果,一天下来,发现自己啥事情都没有做,仅仅就光完成这两部分上线。
好不容易熬到了周五。为了弥补上周对女盆友的缺憾,小强早早就约了周末再次出去玩,而女盆友也是开心的答应了。结果在周五晨会的时候,经理下达全公司服务器都开始使用Docker。因为Docker容器的概念,能够实现快速部署和节省资源。所以这就需要所有OP同学在短期内,能够迅速把环境搭建好,不影响RD和QA的进度。所以,宣布本周OP要进行加班。不用说,女盆友又是非常的不爽了。