[4:5]
敲门声
我:您好
面试官:加加林?
我:对,我是面试的
面试官:我刚才开会呢
我:哦,没事
面试官:老家是山东济南的,对吗?
我:对对
面试官:你这还行,离这儿还不算远,济南到这里。是吗?
我:冒昧问您一句,您家是那儿的?
面试官:我家是河北的
我:哦,更近,离我们更近
面试官:是
原来,一直在老家那边工作?
我:对,是的。我上家公司,公司是在北京。山东那边是办事处,因为机房在那里。所以,在招聘的时候,把我招过去,更方便。维护山东机房的机器,但是总部在这儿。
我先自我介绍一下吧。
面试官:行,你先说吧。
我:我叫加加林,上家公司在北京XXX
面试官:叫什么?XXX?
我:北京XXX,离这儿也不太远。
面试官:离这儿不远吗?
我:不是太远,好像是在……记不清了。
面试官:想不起来了?没事没事
我:是在……不说这个了,不说这个了。
一开始是维护山东体彩——山东体彩管理中心的机房,后来去年又加了……
【被面试官打断】
面试官:维护硬件吗?
我:全部
面试官:全部的?
我:全部!一个山东体彩,一个海南体彩。去年的时候,海南体彩刚上线,然后一起把海南的服务全部上线了。
面试官:这里大概有多少台服务器啊?
我:平均各50
面试官:50?
我:各50
面试官:都是物理机吗?
我:一半dell,一半IBM
面试官:他们用得都是物理机,没有虚拟化的?
我:虚拟化……今年才刚开始用了一部分,都是国企的,就是没有用那些东西。
面试官:行行
我:就是今年也让我们弄过KVM,KVM也安装过。不过,刚开始用嘛,用得不是很多。但是,现在可能好点了。
[6:35]
架构大体分成三大块:一部分是体育总局,还有一部分是手机APP,这个APP有一些前端的模块、还有后端的模块、后端的服务模块,还有子帐户之类的模块。前端的模块有2台或者4台服务器做高性能的集群,用keepalived+nginx;中间的和后台的中间件系统又组成的高性能集群,后台的WEB服务器也是这样,2台或者4台服务器搭载的haproxy+keepalived组成的集群。就是这样。
面试官:它这大概是一个什么样的架构啊?就是后台整个应用的架构是什么样子的?应用层面的架构,包括前面的代理、应用、后面,大体是采用什么样的方式……
【我把面试官打断,他一问细节,我真的慌了。】
我:它最上面是硬件防火墙,一套两台。
面试官:硬件防火墙用的什么防火墙?
我:思科的防火墙
面试官:思科的,是吗?
我:好像是叫“NSA”,也不知道记得对不对,就是一套硬件防火墙。山东和海南共用一个硬件防火墙,往下分三大块:一个是体育总局,体育总局分两部分,一部分是骏彩,一部分是体育总局下辖的科技中心,那是一块。中间一块就是……
体彩那一块就是专门指向于线下的实体投注站,彩民过去那种可以直接打印×××,主要是针对那个。
中间一块就是由一些模块组成,有前端的模块、后端的后台模块、还有子帐户模块,大体有6个这样的模块。从模块往下,细说下去就是工程了。因为每一个彩种实际都是一个工程,而且是2个工程,因为需要keepalived做高可用:一个挂了,另一个能顶上。
面试官:2个工程是什么意思?
我:就是1个彩种需要2个工程,就是一主一备
面试官:……【这里面试官提到1个词,录音听不清】
我:所以,有问题的时候,另一个可以及时补上。往细里分,这是模块,模块就是前端的2台r420服务器……
面试官:可以画一下,如果说不清楚。可以大概画一下,大概是什么样子。不用画太细,我知道它的大体结构就可以了。
【让我画架构图,我就慌了。按照当时的准备,我只能说到这个程度,再细的话,我当时是真的没搭建过。】
[9:35]
我:体育总局……这是骏彩……这是科技中心……
【我画架构图】
[11:00]
这就是刚才给您说的,这是总局的两个部分,这是应用APP的,有前端、后台、后台管理、子帐户模块、中间件模块……
面试官:这是应用的,怎么算应用APP呢?就是application吗?是吧?就是应用服务器吗?怎么算应用呢?
我:就是手机上的软件
面试官:就是手机上的,就是手机上的APP,是吗?
我:对
面试官:哦
我:对。它分成很多模块……
面试官:这一段程序是处理手机的应用?
我:对对
然后,另一大块是对接银行的,有建行和支付宝,它们分别提供各自的接口,对接子帐户……
面试官:这样,它和它就是有关系的?
我:是的,是连接的
面试官:它要调用它的服务
我:对对。这样彩民投注的时候,需要支付嘛,就通过这里来支付。比如中奖了,通过这里来兑奖。
面试官:买×××的话,也是在手机上买?
我:手机上可以买,在这里也可以买。
面试官:在这里也可以买
【这里买是什么意思?不清楚】
我:这部分就是说,我们也维护,但是,有些东西,比如怎么中奖的……会由科技中心直接……不会……类似于黑匣子似的……不会让我们动的。因为有些东西,也很重要。比如怎么中奖……
【被他打断】
面试官:哦,这一块你们是……不让负责……
【我打断面试官】
我:这部分……我们有……但是,×××也有,以他们为主。我们这里,就类似接口的性质,就从我们这里出去了。就是说,真正每周一、三、六中……体彩的……大×××的时候,那个奖其实是从他们的体育总局下面出来,不是从我们这里出来。
面试官:就是你们只能拿他们的数据,但是进不了他们的系统?
我:就是说,他怎么……
面试官:后台你们进不去?
我:就是他们怎么生成的,我们不知道。
面试官:哦
我:因为肯定我们的权限没到那个位置。
[13:11]
面试官:那么,你们能进入到他们的操作系统吗?这个系统里面……你们是运维嘛,这些业务的部署……
我:我是说,中奖这部分,我们肯定是动不了的。但是,他们需要监管,需要控制,怎么出中奖号,肯定是由他们做的。但是,出去之后,都是我们来做。
面试官:就是说,出中奖号的算法是独立的服务器,那块独立的服务器对你们来说,就相当于黑盒子,是吗?
我:对对,是这样。
面试官:然后,你们的应用程序,去调用它们的接口
我:我感觉,您说接口,有点小。因为我们获取之后,就要下放到全省。这种东西,都是一个省一个,各省都不一样。
面试官:就是你们这套服务器,各省都有一套吗?
我:各省都有一套。
面试官:各省都有一套?
我:各省都不一样。
面试官:然后每个省都在自己的数据中心里面,还是在自己的机房里面
我:……【听不清自己说的什么】
面试官:这些是在机房里面吗?
我:这都是在一个机房。
【我指了一下架构草图,画了一个圈】
面试官:这些是一个机房?
我:但是,我还不敢说。因为海南也在我们那里。
面试官:哦
我:海南和山东在一个机房,那你说别的省,比如内蒙古和山西,是不是在一块……
面试官:哦,有的可能是合的,有的……
我:那我不敢说。
面试官:不知道,是吧?
我:不敢说,因为我们都归国家体彩管理中心管,但是它们下面怎么分的,我们就不好说了。
面试官:哦
我:因为海南的业务量太小,所以,可能他们自己考虑……咱不敢说人家感觉没有必要,或者怎么样……就都到我们这里了。
面试官:那没关系
那你们日常的工作呢?你自己只负责山东那一块……
我:我是山东和海南都负责。
面试官:山东和海南的?
我:对
面试官:负责这一块
我:对对。主要是APP这一块。
面试官:主要是APP这一块?
我:主要是APP这一块,再有就是有一个网站,彩民有时候也会登录上去看一下。而且,我们那里和客服中心挨着很近,就在一间屋,挨着的。全省有用户(彩民)出什么问题,我们可以即时反馈到。
面试官:那你们日常的工作,主要日常的工作包括什么呢?
[15:40]
我:日常的工作,就是说,去年的时候,海南的业务是我和另外3位同事,加上领导一起搭建的。
面试官:4个人搭的?
我:对。
面试官:5个人?
我:嗯……算是6个人吧。
面试官:哦,6个人。
我:搭建起来之后,这个海南业务系统和山东系统差不多,结构差不多,基本是一致的。然后说……
【被打断】
面试官:6个人,你们花了多长时间?就是搭建这个系统?
【这里我就悲剧了。这个系统搭建我是知道的,但是,根本就不是我做的。不做的事情,人家干了多久,很难留下深刻的印象。】
我:……【我在编时间】
面试官:总共就50台服务器嘛
我:山东50多,海南40多。
面试官:OK,就按60台大概算吧,也就60、70台服务器吧
我:一共100多啊……
【我满脑子都在算时间,思维已经开始混乱了。这里,面试官就是指海南系统可以先按60台服务器计算。】
面试官:我是说去年搭建的海南系统嘛,海南服务器是40多台,就按50台算吧。你们是一共6个人,花了多长时间?
我:一个月吧
【悲剧了】
面试官:为什么这么长时间?因为我不太明白你这个后台的逻辑有多复杂。
我:其实,逻辑……
面试官:你就说,你们一个月……我想搭建1个50台服务器的一套环境,但是会6个人花一个月的时间……
我:嗯,虽然是6个人,但主要是我们4个人。比如有些问题,我们弄不了,会找我们主管帮忙处理。
面试官:对,就是4个人,搭建一个环境的话,我想你们肯定会有很难解决的问题。否则的话,50台服务器,如果真的很简单的话,程序啊、配置啊,很简单。就是大概清晰明了的情况下,然后,我感觉4个人怎么也用不了1个月。
我:这个……
面试官:所以,我不知道你们的难点在那儿?
我:说实话,没有什么难点。因为我们是按照山东的路子来的,虽然文档不是很成型,但是,大体的框架是有的。但是,都有时间点的。今天完成这一部分,明天完成另一部分。再有就是……然后,就是这样。
【我编不出理由了。这里我的回答,和事实差不多。因为我也想像不到,这样一套业务系统为什么会用1个月的时间。】
面试官:就是说,你们必须按照时间点走吗?还是说,想提前完成,或者之后完成是不可以的?
[18:15]
因为我们这边的服务器要远远比你们的多得多,我们有上万台机器。我们前段时间做几百台机器,上面也有很多系统。比如一套系统大概有60台机器,都是虚拟机,60台虚拟机的情况下,可能顶多顶多一周搞定。1个人,1周搞定。所以,我不知道你们的时间,为什么会花这么多。我不知道难点在那儿。
前段时间我们做数据迁移,所有的环境迁移,包括数据、包括应用,我们从阿里云上迁下来。我们总共是10个系统,250台虚拟机左右,总共花了2个来月。就2、3个人……基本上所有东西都是我一个人弄的。所以,我不知道你们的难点……
我们的系统也是比较典型的混合应用,前端代理、应用服务器、数据库,后边SQL、no SQL,还有我们的系统,包括redis、mongodb,这些no sql的东西,我们都有。所以,我感觉我们的系统已经很复杂了。而且,系统之间后台互相是有调用关系的。如果不对,就会有问题。所以,我不知道你们系统的难点在那儿?
我:……
补充说明:【以下说明是我2天后发给这位面试官邮件的内容,可惜,从来就没有回复过。】
去年5、6月份,之前公司在山东机房上线海南系统,事实上没有耗时一个月,而是一周多一点,大约是10天。为此,我特意联系了之前的同事,这方面得到了印证。
而且,有些事情,面试时我有过介绍,海南系统基本就是照搬山东系统,整个架构没有太多的变化。这样说起来,10天其实也是有点多。我们在上线前把新的dell服务器上架加电,安装CentOS系统,然后是4个人分别部署进度表中,每台服务器上的应用。可是,这些东西弄好之后,还需要开发人员在北京把业务相关的应用安装到机器上面。在这里,出现了一些特殊的情况。无论是山东,还是海南,这套架构都需要得到体彩中心的领导认可,而领导对于架构有一个思路就是只能往上加东西。为了尽可能避免风险,不能随意去掉应用。因此,这套架构随着时间的推移,越来越大。加上开发人员的更替,有些业务模块现在的开发和运维团队也不知道到底有用没用。如果要去掉,就需要打申请,可是申请上又可能说不清楚到底会不会对系统造成影响。于是,我们就多一事,不如少一事。只好不断往上搭积木,基本上不敢撤掉其它积木。
这个特殊情况,对于开发人员来说,就是在新的海南环境里,放进去的业务模块会出现一些在测试环境不会出现的问题。解决的过程,上线时间无形中就被拉长了。
面试官:你可以给我画一下你们的应用层级吗?就拿支持APP的这个后台应用来说,层级大概是一个什么样子的?
我:层级……有一段时间没用,记不清了。
面试官:但是,整体的系统架构都部署了那些,比如什么东西……应用服务器你们用的是什么?weblogic?还是什么?还是PHP的?数据库用的是oracle,还是什么?
我:我们前端是nginx,中间web是nginx和tomcat
面试官:nginx和tomcat都有,就是说,既有PHP的代码,又有java代码?
我:对对。因为手机上都是tomcat的,一般。
面试官:手机都是tomcat?
我:对啊,我们的手机就都是tomcat,手机APP就是tomcat的。
面试官:哦,支持APP那一块是用tomcat做的。
我:对对。然后,后端是mysql
面试官:哦,后端是mysql,多少台服务器啊?mysql
[20:46]
我:mysql是6台
面试官:都是独立的吗?
我:……6台是3组
面试官:哦,3组
我:……是3组,是这样的。然后,最外面的监控是安装的zabbix,然后又安装的svn,发布代码用。
面试官:拉代码下来的时候,要实时编译吗?自己去编译吗?
我:是开发那边发给我们脚本,然后去执行。
面试官:他们发脚本,你们用脚本去打包?
我:对,是是
面试官:你们去打相应的.jar包、.war包之类的,是吗?
我:是是
面试官:打完之后,然后把它们部署到应用服务器上,或者tomcat上去?
我:对,是这样。
【我之前的工作没有发布过代码,这里我的回答,还是吸收模拟面试的教训。但是,这里,显然面试官帮我回答了不少。他如果故意说错,我根本发现不了。】
面试官:然后呢?
【太让人崩溃了。】
我:然后……然后,往细里说,每个彩种就是1个工程,1个工程是2个,然后,它们对应肯定要安装tomcat、jdk之类,然后还有keepalived做高可用。这样,它是……
面试官:这些是用什么装的?还是用脚本安装的?
我:这些是用手工去装的。
面试官:用手工去装的,是吗?
我:这样大概,这些东西……是7个……有十几个。这种有十几个。
说实在的,它们的安装方法和步骤都是一样的。
面试官:对对
我:只要保证仔细看,别出错……就是麻烦点。别的,倒是……
面试官:那个,基本上tomcat无非就是把jdk装上,把JAVA_HOME设好,把PATH设好
我:就是环境变量
面试官:对,没什么问题了就,不会有问题。
我:……大体就这些
面试官:嗯,大概十几台应用服务器,十几个,就按二十个算。然后,前面再有几个代理……
我:哦,还有redis集群。
面试官:还有redis集群?
我:有3台是……
面试官:你用的是redis是那种方式?是cluster,还是master-slave模式,这种单机版?
我:这个不是我装的。
【这段我就不该提。但是,如果不提,这个架构就太小了。1个月完成这套架构,实在圆不过去。】
总结:
redis的master/slave(主/从模式),就相当于是mysql的主从复制;还有就是cluster集群。
关于redis主从模式,查看的方法和mysql很类似,在主上写东西,去从库查看有没有。配置过程,关键也是在从库增加1行参数即可。
关于redis集群,有3种类型:客户端分片(这种类型要由开发实现),优点是分片很清晰,缺点是无法增加节点;redis cluster,优点是智能的分片调度,缺点是客户端支持不好,生产案例少;proxy(代理),优点是对用户透明,缺点好像是不支持数据迁移。
[23:13]
那里是redis和memcache都有,redis是集群。memcache也不是我装的。
面试官:那,那一块是你装的?
我:就是nginx和tomcat,然后就是数据库的主从
面试官:主从是你设的,是吗?
我:对对
面试官:你们是3组主从吗?
我:是个……因为它2台2台不是集群嘛。
面试官:2台2台是集群?
我:2台2台……
面试官:怎么算集群?
我:2台2台是主备,就相当于主从嘛。
面试官:master-slave吗?
我:对,是这样的。
【这一段也是把自己绕晕了。转了一圈,还是回到原点。】
面试官:他们这3组之间有关系吗?就是,还是独立的?比如,第1组假如是子帐户的数据库,然后另1组放的是后台业务模块的数据库,再1组是后台管理的数据库,是这样吗?它们中间有关联的?
我:是分开的,是那个……确实是分开的,因为是3组集群数据库……怎么分得我想不起来了。
总结:
MySQL由4组1主2从构成数据库集群,1组主从是交易数据库(trade)、1组是业务辅助系统数据库(sysman)、1组是数据库监控收集服务系统数据库(moitor),还有1组是子帐户数据库(payment)。
面试官:master-slave这一块,是你设的吗?
我:对
面试官:是你设的。他们应用程序是怎么去用这每一组master-slave数据库集群的?这一组,怎么去用啊?就是程序那一块是怎么去用这个东西?只连主,还是只连从,还是主从同时都连?
我:只连主
面试官:也就是说,从的话,其实仅仅只做备份的工作?
我:对对。因为我们那儿的业务量,没法和您这儿比。
面试官:不大,是吗?
我:是的,没法和您……
面试官:但是,全国的体彩应该还好,应该很大的呀。体彩彩民,好几万人呢。
我:怎么说呢,还是去投注站的更多。
面试官:哦,去网上买的还是少?
我:去网上买的,需要我们公司市场那一部分同事去推广。而且,我们那儿……我家是济南的,那边使用就不如鲁中、鲁东那边用得多。我们那儿好像是每推广1个市,这个市用的就多了。如果不推广,就感觉没有人知道似的。
面试官:但是,对你们的业务类型来说的话,你们的查询会比较多。因为大部分人不会在网上买,但是有可能去网上查。
我:这我还不好说。
面试官:那么,你们服务器的压力大不大啊?
[26:30]
我:压力大……就是说,不同彩种的抽奖开奖时间都是不一样的。
面试官:对。
我:就是说,开奖之后那段时间,一般开奖时间有晚上8点半、9点的,有没有9点半已经记不清了。反正,就是那几个时间点的时候,会高发一点。因为有的人,就是想开奖之前买,还有就是开奖之后看……平时,就一般情况。
而且,我们那里每天0点到6点是关的。
面试官:哦,是关的?不对外提供服务?
我:是的,不对外提供服务。
面试官:那高峰的时候,压力能到多少?
我:这个我没测。
[27:22]
面试官:zabbix不是你去弄的吗?不是,就看zabbix监控,就能看到它的压力啊。
我:这个……
面试官:是不是你做的这个?zabbix?
我:是
面试官:那你没看过zabbix监控的数据吗?
我:……
面试官:因为把zabbix安装好之后,把agent设好之后,肯定要去zabbix的服务器上去看一下每台服务器大概是什么状态:IO多少,CPU多少、内存多少、网卡上的网络流量是多少。你肯定要去看嘛。对吧?
我:对。那就是几个数据库有时候CPU偏高,别的……反正很难看出很明显的很突发的东西来。
面试官:……
总结:查询之前的cacti图表之后发现,10M的带宽,在夜间最高峰的时候,可以达到5M。原因是这台服务器是备份服务器,晚上承担备份的工作。面向用户的前端服务器,夜间能达到4M。
用户对我们网络的冲击,远远小于每天业务系统备份时,由于要同步数据,占用的宽带很大。
【面试官看我的笔试题】
[28:26]
面试官:你这里写错了吧?CentOS 6.11?这里……根本就没有这个版本。
我:……有啊?!
面试官:CentOS 6.11啊?
我:我去年安装的就是……山东的版本是……海南的是6……有啊,光盘上就是6.11啊……
【我已经语无伦次了】
面试官:没有6.11这个版本,现在最高到6.8
我:……啊?
面试官:现在最高到6.8,7版本到7.2了。现在,没有6.11这个……
我:不会是6.1.1吧?
面试官:CentOS版本号不这么说。
我:6.4……
面试官:一般6.0、6.1、6.2、6.3、6.4,都这样说。
总结:
这里应该是我当时记混了。
目前,简历里已经修改在CentOS 6.4 64位。
[29:33]
面试官:那你们zabbix监控redis集群吗?
我:肯定要监控
面试官:都监控什么东西?怎么监控实现的?就是redis的状态。咱不说跑的服务器,……【这里录音模糊】……随便加都可以。但是,redis本身它服务的状态,就是这个服务好,不好,压力多大……
我:想不起来了……
【继续崩溃】
总结:
Redis使用自带的INFO命令,进行状态监控。以一种易于解释且易于阅读的格式,返回关于Redis服务器的各种信息和统计数值。
也就是自定义的监控脚本要调用INFO命令,key需要调用这个监控脚本。
参考资料:http://bjstack.com/article/32——Zabbix应用监控系列之Redis状态监控
【INFO命令也有少量集群的状态参数,鉴于自己目前的水平,先回答到这种程度。以后再补充。】
[30:12]
面试官:简历里写后期的维护,都是维护什么东西啊?
我:后期维护就是,因为和客服中心挨得很近,所以,彩民及时反馈的问题,和监控及时出现的问题,去及时处理。再有就是,如果开发要新加的机器,要做部署之类。大体就这些。
[30:50]
【面试官还是看笔试题】
面试官:笔试题里的脚本没写?
我:脚本用的不是很多。
这个脚本的思路是1个for循环,有1个输入,然后是for循环……
但是,您这个超过100……
面试官:超过100,怎么了?
我:为什么超过100,还加呢?
大于100的,然后求和。您这里就是1列……
面试官:对,1行就1个数字
我:您这个……我能取出205,然后呢……是要和后面的加吗?
面试官:不是,这是1个文件,文件内容是1行,1行是1个数字。然后就是这里面大于100的,求1个和并打印它所在的行数。比如205,它的第3行把它求和,然后303,把它的第4行最终再打印1个总和。那么,现在大于100的,100不大于100,只有这2个大于100,那最终的总和就是508.
然后,这2个数字,一个在第3行,一个在第4行。
我:总和是508?
哦,就是取出来当字符进行加运算?
面试官:当然不能当字符加了,当数字加啊。数字才能加减,字符加减,应该是连接。
【我还是没听明白,把简历还回去,请他继续看】
我:您先看
面试官:nginx这个题,没弄过吗?
【面试官还在看笔试题,我有1个nginx的题空着】
我:想不起来了
您是说,反向代理指向不同的域名,是吧?
面试官:对
我:想不起来了,得回去翻书。
面试官:你现在,已经离职了吗?
我:对
面试官:很长时间?
我:6月份
面试官:6月份?哦,2个多月了。2个月也不长啊,这才8月份。这个东西,你如果做得很多的话,做得很熟,很多是忘不了的。
[33:16]
所以,我不知道……你看,你这儿也不对。
【还是指向笔试题】
你感觉那一块,是你的强项?
就是从你简历里说的这些东西,我不知道那一块是你的强项。因为你简历里写得比较多。你感觉那一块是你的强项,我拿你的强项去问。
【还在看简历】
脚本:一键重启tomcat服务脚本
cat /server/scripts/tomcat_restart.sh #!/bin/sh . /etc/init.d/functions /application/tomcat/bin/shutdown.sh sleep 5 ps=$(ps -ef|grep java|grep -v grep|wc -l) if [ $ps -eq 0 ] then /application/tomcat/bin/startup.sh else echo "please closing tomcat" break fi sleep 2 if [ $ps > 0 ] then action "starting tomcat" /bin/true else action "starting tomcat" /bin/false fi
你的脚本也有问题。
我:您能说一下,有什么问题吗?
就是说,是过滤……
【被他打断】
面试官:你这里用的是bash吗?是bash吗?不是bash……
我:……
面试官:sh是默认指向bash的
我:一个是解释器,再有就是说……
【面试官在细看简历里的脚本】
面试官:……
哦,重启,是吗?
【面试官细看简历里的脚本】
……
知道这个是干什么用的吗?
【指脚本里的“. /etc/init.d/functions”】
我:这是那个子函数,……加载系统函数
面试官:我知道他是系统函数,但是,它里面做了那些东西?
我:就是说,有这个东西之后,可以调用这个东西,调用这个“/bin/true”、调用这个“/bin/false”啊
面试官:嗯
我:单纯这个脚本来说,加它,主要是为了要把它打印出来的时候,要出这个东西。
面试官:哦
【面试官在细看简历里的脚本】
……
“shutdown”……
【面试官在细看简历里的脚本】
……
这个脚本……
【面试官在细看简历里的脚本】
……
我:又有问题啊?
【我苦笑】
面试官:哈哈
[35:43]
这个脚本依赖于本地的东西,你的JAVA_HOME在那儿设的?
……
这个“startup”里面应该是没有JAVA_HOME的,它这里面是没有JAVA_HOME的。你这里面的JAVA_HOME是在那设置的?就是说,你这个脚本,换另一个环境就不好使了。
你没有设JAVA_HOME?
……
而且,你这个脚本也有问题,就是说,想“shutdown”,又“shutdown”不了的时候,用“startup”起不来。对吧?所以说,你现在每次先“shutdown”,你这个脚本不一定每次都会成功的。有很多时候,会失败。
我:不是,我已经做检测了啊?它如果没有shutdown的话,我就不让它启动了。
面试官:对,所以,那运行你这个脚本导致的结果,你的tomcat没有shutdown,也没有启动起来。它一直处在shutdown的状态。但是,没有启动起来。因为你这里已经执行shutdown了。有时候,shutdown的功能,shutdown不了的。有很多时候,它50秒也shutdown不了。所以,这时候你执行这个脚本之后,你的服务是不可用的,可能是。
而且,那个……【听不清】东西,也没有死掉。
【我打断他】
我:没有死掉,所以,我就应该killall把它彻底杀死,再启动吗?
面试官:一定会……【听不清】需要杀死吗?
5秒钟?什么叫就把它杀死了?不是一定的。
我:对,有时候……这东西时间会很长。
面试官:对。
这里面就涉及到很多东西——graceful shutdown,就是优雅的shutdown。你去看很多东西,你就可以知道,在英文里叫“graceful shutdown”……
【我打断他,终于有我听明白的了】
我:哦,就是apache、nginx里的优雅重启吗?
面试官:对
所以,你这样写,其实只是命令的罗列而已。【指简历里的脚本】
而且,这个也不对。【现在只能听当时的录音,他没给我发笔试题的电子版,天知道他指的是那道笔试题】
[38:16]
所以,我就不知道,你认为你自己的优势是什么?
我:我认为是nginx优化那一部分
面试官:什么优化?
我:nginx优化!
面试官:nginx优化,是吗?那你都优化的什么东西?
我:优化就是说,当时,安全方面,至少要把版本号去掉。
面试官:把什么去掉?
我:把版本号去掉,然后就是安装的时候,把名字也换掉,就是随意的。再有就是说,最基本的,要做gzip压缩,那个压缩功能。对js、cs【这里我没有打字错误,我当时就是那么说出来的。】之类的文件做压缩。再有就说是,图片……
【又被他打断】
面试官:为什么要把css、js做压缩呢?
我:因为就是说我在服务器这一端压缩好之后,传出去的时候,省流量,再有就是速度也快,让用户可以尽快收到,然后用户在浏览器那里……
面试官:他一定会快吗?
我:相对……相对来说,会快的。因为它的压缩比是很大的。有时候,能压缩到原来的三分之一吧。我感觉这个速度还是比较可观的。
面试官:但是,你压缩也是需要花时间的。
我:唉,这个东西……
面试官:对吧,而且你这样是耗费服务器的CPU的。1个请求无所谓,但是,有几百万个请求的时候,你这个并不是好的选择。所以,你的压缩可能需要设置1个阈值。多大的文件不压缩,多大的文件压缩,是不是这样?
我:我们那里就是设置的1K以下的不压缩。
面试官:1K以下的不压缩?
我:1K以下的不压缩。
面试官:哦。
[40:12]
我:往上的,都要压缩。
然后就是说,远端……图片类的……就是说……
面试官:要做压缩吗?
我:图片类的不是……就是说,推到用户那里……缓存不清了那种……保存时间。
面试官:保存时间?
我:就是“expires”……推到用户浏览器那里,加载完成之后,只要用户自己不删除,会一直在那里。就是那个参数,忘了叫什么了。要设那个……
【被他打断】
面试官:会去修改什么东西,去达到这个目的?
我:……
面试官:这里面涉及很多http相关的header
我:……是……
面试官:比如像“Last-Modified”,还有“Cache”【他可能是指“Cache-control”】,然后,还有一些就是说,什么情况下它会允许访问304
我:就是说,这些是别的……您应该说的是别的东西,这应该不是缓存时间吧?
【讲到这里,自己的思路又被打乱了。】
面试官:这都是跟缓存相关的,用户客户端浏览器访问服务器的时候,它的缓存是受服务器的控制。什么时候缓存,什么样的情况下是缓存的,我多长时间去访问一次服务器,服务器认为本地不需要再去重新拿了……缓存有失效的。
我:有一些,你比如我服务端有一些东西,是不能这样做的。需要实时推送给用户,还有一些推给用户,会做改名。这样,就可以保证不会说用户会拿到旧的东西。
【这里,我直接说缓存的保存时间就行,他所说的那种文件,把保存时间缩短,甚至不缓存就OK。】
面试官:对啊,那你怎么保证这个东西呢?
[42:11]
我:就是说,我们有些文件推送新东西,会把文件名改名。
面试官:不改名,就实现不了吗?不改名的话,那你如果一直在更新东西的话,你一直改来改去。而且,改完名之后,你的程序也要改吗?比如说,我们启用1张图片,图片第1次使用,名字是“1.jpg”;然后,改名之后,成为“2.jpg”……那么,怎么让它改名成“2.jpg”呢?你要改程序,对吧?
我:不是,您推给用户的图片……
面试官:对用户那边,怎么判断他去拿这个图片的时候,是最新的。
我:这个,也得看推给用户的是什么东西吧。有一些,类似新闻那种东西,推过去就推过去了。有一些图片,修改的时候,如果今天放上去1张图片,明天再放1张一模一样的图片,文件名自动就变了。
【我这里完全就是在扯淡!鄙视自己!!】
面试官:自动就变了,是什么?
我:对,对。就是说,有一些那种blog或者bbs,上传到服务器之后,文件名到服务器端就类似md5取值那样……就很……不能说随机吧……就是说,那种图片就变成那种样子了……
面试官:随机?这肯定不是随机的,这绝对不能随机,“随机”就是程序功能错误。
我:……就是……就是说上传到服务器上的有些图片会自动变成另外……不会说是重名的,即便是同1张图片。
【BBS或者BLOG上,注册用户上传到服务器上的图片,BBS或BLOG程序会把上传的文件重新进行命名。我这里就是和这个东西混到一块了。】
面试官:那比如说,这样,同样1个文件,今天上午把它放上去之后,下午又放了一次。下午这个人同时要再去访问,他拿到的是新图片,还是旧图片?是拿,还是不拿?
我:应该是拿新的。
面试官:应该是拿最新的?
假设我设的cache过期时间是24小时……
【我感觉这里,面试官还是希望我能回答正确的,只怪自己不争气。】
我:您设的是24小时,但是,他访问的时候,会去搜索最新的地址。
面试官:地址不变,同样的文件……
我:但是,您的那个地址是不变,但是,那个图片的名字变了。
面试官:图片的名字不变。
我:那就是说,您这儿的程序是这样设计的……
面试官:不是,就是……比如,我拿logo来说,我这个程序logo,我今天上午访问那个页面是这个图片:“1.jpg”;下午,我想把这个文件更新一下,名字没有变。我下午访问它的时候,那么它会变成“2.jpg”吗?不会。
【我打断他】
我:这是您网站上往上推的东西,就是说百度过去,或者google过去那种图片似的。它到时候有时候会变嘛,比如植树节会变成什么样的之类。那种东西,就把它的缓存时间缩小啊。比如说,缩小到1周,或者几天。然后,到时候再推送新的就是了。
【这里,自己总算回到正路上了。】
面试官:那你怎么去缩短这个时间呢?你再去修改服务器的配置去缩短这个时间吗?那么比如说是这样,第1次cache是1天,再缩成半天,还是缩成多长时间……那么,后来我又更新一次,再把时间缩短,我又更新一次,再缩短。是这样吗?
我:是说指定的图片?
面试官:对,同样的图片,我就更新同1张图片。我怎么保证用户能拿到最新的……这肯定是可以保证的,而且不需要你做任何事情,不需要任何修改用户拿到就是最新的。
【不缓存时间不就OK了?恨自己!】
[46:6]
你可以自己搭建1个tomcat服务器,或者nginx服务器试试。用户拿到的肯定是最新的,他不会拿到旧的,而且,不需要你修改任何东西。如果你持续的改东西,那就没完没了了……把这个cache时间改成0了,这是不现实的。
我问得差不多了,你有什么问题?
我:您刚才说,您这里的东西很多?
面试官:对,我们会有自己的私有云。我们现在的话,大概有五六百台的样子吧:生产环境和测试环境,还有预上线环境。但是,我们自己以后的数据中心建起来以后,我们会自建数据中心,大概有……原来前期规模应该是一千台物理机,加上我们的虚拟化,应该有上万台的规模。
【虽然这家公司已经和我没什么关系了,但是我总感觉这段,面试官说的很虚。当前有五六百台,慢慢要上万台?我感觉不靠谱。】
我:您这儿是给人民日报社用,还是说……怎么着?
面试官:我们有我们自己用的,主要是我们自己用。
我:您这儿还用网站上,就是说……属于人民日报下辖的一家公司,是吗?
面试官:对,对
我:怎么还自己用?您这儿有别的业务?
面试官:我们就是做我们的业务,我们跟人民日报社……我们做的业务,和人民日报社、和人民网的业务有一些……基本上是不冲突的。我们会有自己的私有云,今天他们深圳开大会也在宣布这个东西,我们和腾迅一起,搞媒体融合云,这是我们自己的私有云。我们的私有云不对外提供服务。
我:是,私有云,对。对外提供服务一般都是公有云。私有云都是自己的。
[47:59]
面试官:我们对外提供的SaaS服务,并不提供IaaS。
我:……我这儿,没什么问题了。
面试官:没什么问题了?嗯。
你期望工资是多少?
我:期望工资12000
面试官:你现在多少啊?
我:上家是8000
面试官:嗯,行吧。
【面试官准备撤了】
我:老师,您方便留1个邮箱,或者什么的吗?
面试官:怎么了?
我:就是说,我想……我估计我的笔试题您也都看了,我想拿回去再改改,然后再给您发1份。
面试官:是说简历吗?
我:我是说笔试题。
面试官:笔试题?哦。其实我并不看重笔试题,这笔试题虽然是我出的,但是我没有标准答案,很多题都没有标准答案。
[49:2]
我:是的,您这题出的我感觉挺好的,我想回去再完善完善。您看,可以吗?
面试官:可以,可以。那我回头给你发1个电子版的,给你再看一看。
【我加他QQ有3次,往这个QQ邮箱写了3封邮件,什么回复也没有!】
我:行
面试官:然后,那我给你留1个我的QQ吧。
我:老师,您贵姓?
面试官:免贵姓左
我:左右的左,是吗?
面试官:对
【给我留QQ号】
行,那我没什么问题。
我:行,看您也挺忙的
面试官:没事
【2个人起身】
我:您这儿一般有什么样的要求啊?
【知道自己无望,但希望多了解一点。】
面试官:其实我们这儿是高级的和初级的,都需要。主要还是看做过的东西,其实我,坦白的讲,我期望不管做过什么东西,只要做明白就可以了。不管做任何东西,那怕只做过1个东西,那怕只做过nginx,只要做明白……
我:您这儿的初级有什么要求啊?
面试官:所有的要求都是一样的。
我:初级和高级,不可能一样吧?
面试官:但是,高级的东西,他懂得东西更多,理解的层次不一样。
我:是是
面试官:对吧,比如同样一个东西,做zabbix做了一年,和你做了3年,当然肯定是不一样的。
我:zabbix都有专门的书,专门的技术书籍都有这种东西。
面试官:书是死的,人是活的
我:我的意思是这东西没有有些人想像的那么简单,虽然说只是一个监控。但是,其实,往细里说,其实是一个……它都能写成几百页,肯定不是简单的东西。
面试官:对
我原来也不是做运维的,我做运维也只才做了一年不到。
我:但是,我看您挺全面的。
面试官:对,因为我原来是做开发的。
我:哦
面试官:就是说,很多东西不管做什么,其实都一样。这个东西,做任何一个东西,都要把它做透了。
我:是是
面试官:如果说做透一个东西,你就掌握到其实很多。
我:是是
面试官:但是,我们这边其实涉及的东西太多了,基本上你们用到的东西,我们都用过。而且都在用,而且比你们用的还要多。
我:我看出来了。我们加起来也有100多台服务器,在有些人看来,100台服务器很多了。但是,在您这儿来100台服务器,连十分之一都算不上。100台服务器的管理,和1000台、2000台,他肯定就……
【被他打断】
面试官:就是几十台和上千台,完全是不一样的。
我:这个我知道……
面试官:你说几十台到一两百台可能还能……就是手工去改,手工去操作,可能还能行。但是,如果达到上千台、几千台的规模,手工去处理那当然做不了了。
[51:56 ]
我:我感觉那得换“脑子”,不能用原来的思路去想。
面试官:你要把整个架构方案都得改了。所以说,我们现在做的最主要的东西,最重大的主要是把整个运维的体系用到的东西的架构怎么去做以后。因为现在我们虽然只有几百台,但是,我们很快就会扩。所以说,我们如果这个架构搭不好,这个整体的架构,包括从自动化运维、包括配置、包括从……【听不清】很多的这些东西如果做不好,后边会把我们自己累死的。
我:对,这个东西就和搭积木似的,底下弄不好,上边就摇晃了。
面试官:就是这个模式你要把它走好了。
我:对
面试官:因为这个模式,每个模式,比如zabbix,我们用的也是zabbix,包括我们存放运维的东西,包括我们的数据库我们去搭……对吧,我们都有自动化的东西,所以说,你们部署几十台机器4个人要花1个月……其实我们……当然,刚才我给你说的多了点,我们基本上3天,1个人肯定能搞定,基本上。对于熟手来说,3天肯定能搞定。
我:对,如果是用那种最原始的rpm定制之类,这几十台服务器……
【被他打断】
面试官:而且,就算你们安装tomcat,就看用什么去安装,半天安装50台肯定没问题,肯定是可以的。就是你把jdk装上,把jdk给它解压就行了。tomcat装上,tomcat解压,再设几个环境变量,随便找个地方放就行,放到那儿都可以。只要放好了,后面用java_home设好了。很简单,其实不需要做什么东西。
你像init脚本,像你写的这个脚本,其实……你可以不用去……去网上搜索1个这种init脚本,放在/etc/init.d下面……
【也可能不是init脚本,只是听录音有点像。】
我:嗯,这个知道
面试官:网上有很多很多,你可以随便搜索1个,到……【听不清】上面随便搜索一下,其实都很成熟的。
这个东西,其实没有什么太多东西。脚本拿过来,只要改好了,就是你的东西。你放到那里都可以用。对吧?
所以,这些东西我都已经把它们全部做成……【听不清】化的东西了。我们所有的东西,包括所有的操作系统、软件版本,我们都是固定的。没有任何人,没有说经过大家允许,不允许动任何东西。
我:全都自动化了……
面试官:对。包括版本号:jdk我们是1.1.8.45,tomcat是1.8.21,然后包括数据库我们是5.6.19,CentOS用的6.6,所有这些东西,包括redis用的2.2.7.8,包括nginx用的1.7.8。所有这些东西,版本号都是固定的。没有允许的话,不允许任何人动。
[54:42]
所以,我们所有的环境,包括测试环境、生产环境,我们所有的环境都是统一的。测试环境出的问题,都能发现的话,生产环境基本不会出太大的问题。我们从测试移到生产环境,才会减少最小的风险。
我:测试和生产的服务器都一样,性能和配置都一样就没有问题……
面试官:和配置关系不大……
我:因为有些时候,我听说,如果测试环境配置要低的话,生产环境有些东西它不一样……它的承压不一样。
面试官:对,那就要看你自己配对了吗?就是你的jvm配对了吗?jvm要配对了,不会有太大的问题。如果有问题,说明你原来的配置有问题,不对。
因为我们这边测试和运维都是我管的,所以我们的东西都是统一的。
行吗?
我:行
【分手,我离开】
面试官:从这儿,你可以直接下去,走到头……
我:好,这个我知道。谢谢您啊!
【握手】
我:您感觉我怎么样啊?
面试官:嗯,我们商量一下。
我:行,不难为您了。您忙着,看您也有很多事。好的,再见。
面试官:拜拜
转载于:https://blog.51cto.com/gagarin/1846597