大概两个月前,维护两个系统,其中的一个系统数据的价值大概一年3个亿(系统2),另外一个系统每日新增的数据量过亿。(系统)
维护系统主要负责人就两个:我和我项目经理。
也就是说:我认为可以搞,项目经理也认为可以搞,我们就直接搞了。所以大多数矛盾都是我和项目经理的矛盾。
——————————————————————————
我的日常有两个:一个是给开发善后,第二个是给用户善后。
善后的意思就是擦屁股。系统不一致了,维护给用户改;工单无法流转,维护给用户改。
大多数的人都认为:这些工作都是开发做的啊,系统出了bug、数据不一致了不应该找开发吗???
用户急着用啊,所以维护先擦,开发后修。你开发天天写bug面向bug编程,那么维护日子就不好过;你系统设计的不合理用户天天投诉,维护的日子也不好过。(系统1)
还有一些可能,是根本没有开发。(系统2)
所以我每天的日常是:
第一个问题:我们前台兼容性很差,所以维护需要给前端处理兼容性的事情。
第二个问题:我们开发写了bug用户投诉,我需要负责把bug发送给项目经理,并且和开发一起把数据恢复正常。
第三个问题:如果流程不支持,那么维护需要兼职人力代码,负责从数据库取数据、改数据。
我认为修bug是开发的事情,所以日常那就是各种踢皮球。
比如说:用户回不了单,查出来是系统A和系统B交互的问题。所以这个这个事情和我维护没有关系
A系统开发:这些数据用户给的,我们只负责给你传递真实数据,对数据真实性不做校验(做开发的懂的都懂,啥脏数据都有)
B系统:你A传给我数据是脏数据,我们处理不了的。
于是项目经理就问我:你给他改一下时间呗。
我:我为啥要给他改呢?要不然你A系统做脏数据校验,要不然B系统做脏数据校验,我数据库天天搞,不正规啊,而且这种工作一开头就没有结束啊。
于是吵,开发发邮件:你们用户不要给我们发脏数据了!!!出了问题我们处理不了!!!!
用户:我们只是用他们的设备,我们不知道啊???
项目经理:那你就去问生产设备的厂家!!!!!他们给的数据!!!
用户:那么这个工单???
项目经理:我让维护(就是我)给你改数据让你回单。
第三天:你好,我们系统又因为这个事情卡单了,请后台修改数据以便我们回单。
我统统拖到第二天处理。用户嫌慢自己找项目经理投诉去。
你走正规流程,那就去压开发让他们去做校验去,让我维护给你开发擦屁股是咋回事?????
事情多了以后,我和开发矛盾极大。开发就觉得:我维护需要给开发擦,因为我是处理客诉的,这种小事不应该影响他们做业务写代码。我就嫌弃开发不作为。
我就和开发不说话了。
————————————————————————————————
我之前维护的系统是系统1和系统2,我给系统1留个位置,说系统2.
系统1的位置
入职的时候比较菜,于是项目经理和两个开发商量:谁带一下?
开发1(十年工作经验):我不带。
开发2(七年工作经验):我不带。项目经理你带。维护(说我)真的菜啊,带起来费劲而且离职率高,何必呢?爱咋咋地。
后来离职找了新工作,也是没人带,就给个文档自己看。
大部分企业都是这样。
————————————————————————————————————————————————————
遇见前端作妖。
我们前端用的是flameworks,兼容性极差,所以用户投诉过来说前端打不开,我又不能把前端卖了,于是说立刻处理,然后转过来问开发,前端给了一个一千多字的说明文档。需要用户去读一千多个字。
我们项目经理给了我一个四千多字的文档,来处理前端兼容性差的问题和报错问题。
兼容性差是flamework做框架的原因,前端不背锅啊,那你为啥前端要用famework……
第二个业务,就更过分了:我自己整理的 + 企业给的一万个字!!!!!!!!
这个业务是需要用户做的,可是用户根本搞不定,于是发邮件要求我们处理。就是各种特殊处理、业务逻辑的,遇见一个我就记一笔。离职的时候整理了一万多!!
离职之前和项目经理说过,项目经理说了:我们有十几个不同的业务逻辑,而我只整理了七八个字数就过万了。(常用的七八个)
其实项目经理的意思是:你慢慢学,你要学的东西还很多呢。你这离职太草率了!!!
我的态度:开发呢???我要找他喝茶!!!!!!你开发不写文档,让后来的人咋工作?????你凭啥不写文档!!!!!
————————————————————————————————————————————
之前面试的时候,有人问我一件事:你们系统有几个数据库,有几个前端有几个卡夫卡机??
我自己不知道啊,于是胡说了。
后来我就一直想不明白:你为啥不告诉我系统有多少服务器???
冷静下来以后明白了:我们系统没做分权,你给维护裸连生产库的权限,那肯定不行啊!!!全部都是生产环境你维护用root来连出了问题咋办????
至于为啥不做分权,那就问这两个不做分权的开发(如果你的服务用root启动,那么所有写入啥的都是root才能做,而我们系统可能部分核心用的root……)
所以我工作一年,我没登陆过服务器,就百分百没有写过代码,啥都不知道。
测试?测试环境维护登陆干嘛呢?维护又不负责测试功能……维护就是刷数据查日志啊。
不过:能确认的就两个:我们的系统没做分权,我们的数据库也没做。
——————————————————————————————————————————————————
我们有个系统有数据一致性的要求,而我们的系统是数据源,所有的系统都和我们系统有同步。
只要出现一切数据不一致的,其他系统统统扔给我们系统查询(保证数据源不一致),而这个系统就我一个维护,所以通通给我了。开发他不屑于做这种事情。
另外一个系统回不了单,先去问我维护的这个系统。另外一个系统数据有误,先问我们数据源给的数据对不对。
别的系统违规操作导致告警,需要我们手工清除告警。
————————————————————————————————————————————————————————
很久之前出过一个项目:电话督办。不过被督办的人是领导。
这个项目也不知道是咋通过的……不过督办领导和甲方这种事情我是第一次听说。
说督办不太合理,应该是“领导优先知情”。故障发生的第一时间领导优先知情,赶紧找负责人问发生啥事情,以便故障排除。
服务功能麻溜的做了,发个电话这种东西都是很简单的东西。
过了两天,领导打电话炸毛了:晚上两点你打你X的电话?改!!!
于是改到工作时间督办。
过了两天,领导打电话炸毛了:我挂了一个电话另一个电话立马来?就不能把所有故障都在一个电话里面写明?改!!!!
于是改。
大概连续五天,每个领导都说了:看见这个督办电话就烦,说电话太多、啰嗦、时间不合理等等等等,(这些督办电话影响他们心情了……),领导一发话就得改,改规则改了很多次。
最后做到基本上没有督办电话了,领导才终于消停了。
后来我自己复盘:甲方的一句话需求。(或者一个设想做的需求)
————————————————————————————————————————————————————————————————
大数据取数。
我们系统一个单表一天写入大概一千万(可能略低于这个数字,不过差不多,一个月2亿多)。所有的有效数据基本上都在这个表里面。
于是,很多人想从我们系统里面取数。
比如用户说:我们需要一年内所有的停电告警。
可是:这个字段没有索引。(不过后来想,有索引这个数据也没用啊!!!!!一次导出个几百万对我们服务器负载极大)
于是我就求助于项目经理,项目经理:打回,做不了,如果要取数据去问XX(我们把全量数据送到XX这个公司了)
可是:在数据时代,数据就是钱这件事深入人心。不停的有人要求取数。
于是甲方就要求:把你们系统的数据压到一个开发平台,让别人共享你们的数据。
这时候,我遇见了第一次用户讨论。(这个东西其实是个很好的例子)
数据压到卡夫卡,这个基本上有手就行。可是问题是:有的用户他只需要XX业务,有的用户只需要XX业务,每个用户都有自己的需求。所以集思广益,最后讨论结果:开六个kafka接口,一个全量接口。
用户表态表示:其余的数据我要了也没用啊。最好呢,要一个可以过滤的kafka,就跟写SQL一样……
开发当即炸毛:我们系统挂了你们来担责任!!!我们系统很重要,没有那么多负载来处理,如果你们非要做,那么我们先申请更多的服务器你在和我面谈。
项目经理表态:你真的没有办法?
听见系统会挂,项目经理难得的硬气了回用户:就一个接口!你们自己过滤!难道你以后每次扩展一次业务,就要新建一个kafka???
开发和项目经理当庭对质,和用户对质,把需求给打回去了,固定为一个kafka。
——————————————————————————————————————————————————
说系统2。
我们系统是如何做到数据一致的?答:甲方找了两个乙方,每次两个乙方都提供一份数据。
而且,全国把计费给了乙方做的,全国只有3家——我们是其中之一。
这个事情对于甲方那基本上是稳妥的,因为两个系统一起挂的可能性微乎其微,可是对于两个乙方而言,这工作咋办???
我们每个月最难的几天,就是甲方拿到两个乙方的数据,并且比对的时候。
两个周前,用户拿到数据,差了千分之七,也就是大概6W。用户也做不了主,于是就找我们。
项目经理说:查。
查啥啊???千分之七你咋查???
项目经理表态:我怀疑我们系统有问题。
项目经理怀疑汇总的数据有误,项目经理怀疑是流量丢失,项目经理怀疑是有零流量,项目经理怀疑端口有误,项目经理怀疑……
我知道:这个事情没法干了。
项目经理非要查出一个原因来,把所有可能性都排除了吧总得。
于是过了十分钟,项目经理过来说一句:你去查这个。
过了二十分钟,项目经理又过来说:你去查查那个。
查不出结果,天天坐在办公室里听指挥行了。
我离职以后,大领导发话了:这个千分之七有效误差,认了!!!!!
这个事情,没了。
< br />
有人问过我:你工作有啥期望?我里面加了一句话:不做涉及钱财的业务。我是真的搞不定。
————————————————————————————————————————
之前维护系统,所有数据年价值过亿(总量大概几十亿左右,不计费的也算)。
于是用户发邮件:哥们,刷数据去。
我蒙了:这种操作走工单,走流程啊!!!你让我改数据库数据咋回事???
后来发现:甲方和乙方定的流程是:计费的走工单,不计费的不走工单。这些东西是甲方定的规矩。
不计费的没流程。用户只能新增,不能修改不计费的业务。所以用户就发邮件让我们搞。
项目经理就让我搞,说这件事很简单,并且稍微培训了一下。
我:既然你不计费,我就给你刷了。就是我给你说了:计费的让用户走工单去,我一概不刷。
项目经理同意。
用户:麻烦,多小的事情都得走单子,给你差评。
我(碎碎念):你把领导抄上,问问领导啥意见呗。我不怕你差评。
这时候有人告诉我:项目经理如果搞不定他也得离职啊。价值500W的数据维护不好,项目经理基本上也就坐不稳了,所以他必须要改。
我都无语了。
前几天去找工作,新入职的项目经理我也问他这个问题:价值百万的业务,项目经理加压必须做,自己不想做,咋办?
于是项目经理表态:你不做离职。
我估计项目经理的意思是(之前也说过):
1、我不会安排你做这样的事情。
2、我安排的工作必须要做。
3、干不了建议你离职。
第二个是:这种公司没啥前途,建议你离职。
个人理解是第一个意思。
于是我麻溜的离职了。新来的项目经理秒批、然后我被秒拉黑退群。
——————————————————————————————————————————————
修改价值百万的计费业务,其实可以做的,不过第一个是:至少大领导要知道,第二个是有测试环境,第三个是数据误操作可以挽回,第四个出了问题责任不能我担。
可是你要是越级上报,估计工作基本上也就莫得了(我和项目经理不是一级的,差了很多级),去找项目经理他也只会加压,认为这种小事不需要告诉大领导。
第二个问题是:我们系统没有测试环境。
我工作了一年,测试环境一直没有搭建起来。
我们的系统架构是tomcat + mysql + hbase + xxl。而我们的开发只会tomcat和mysql,于是就配置了一个tomcat + mysql的框架。而HBASE和xxl这两个——开发不会、不学、不搭建。
原因很简单:
第一,开发是摊派过来的,项目经理压不住;
第二:做好这个没钱。
我们维护价值过亿的业务,可是我们的总包只有50W。(我也不知道总包为啥只有50W)
要求开发工作需要钱,搭建测试环境也要钱——而搭建起来这个框架开发一分钱也拿不到,建立了以后还得担责任。所以开发拒绝搭建测试环境。
开发搭测试要钱吧,要工作量的吧。工作量要变成钱需要甲方同意吧,甲方他不同意啊!!!
项目经理不知道测试环境是干嘛的,就知道要有,可是不会用……(他是销售转的项目经理,技术是短板)
想搭一个测试,要项目经理抄送大领导给开发加压,开发和项目经理对质。那你工作应该咋办呢?项目经理又何苦呢?所以就不做了。
我们系统就没有测试环境。
于是我问项目经理:你这个项目是如何通过验收的??
项目经理回答:我们系统就是个demo(模型),后来越做越大,到现在还是个demo。(可能有大家知道300,和那个差不多?)
我个人觉得离谱。严重怀疑是喝酒喝出来的生意。
个人认为:开发或者维护在生产库改数据的时候,万一涉及到巨大的金额或者不可挽回的操作,通常都是需要在测试环境里面测试一下再在正式环境操作。可是我没有测试,所以只要有风险的我统统不干。
可是问题是:他项目经理压不了开发,能压我啊!!!我是个外包维护,我是项目经理招聘进来的,他是我直属上级!!
于是他就给我加压。
和另外一个同事诉苦,人家说了:刀架你脖子上了?你不做不就行了??
以后还有呢,让领导以为你是刺头你说你工作咋办??
后来和别人谈的时候,别人吐槽:你这一点也不像大型企业啊!!这个也太吓人了!!!!
——————————————————————————————
我们系统比较烂这个我是认的。不过这个系统不是我开发的,刚来的时候比较没啥感觉。
现在总结起来,有这么几个:
如果遇见DDOS攻击,我们系统必挂。
我之前修复过一个恶性bug(有兴趣的可以去看我之前的文章),那时候发现:我们系统mysql 的最大连接数是1000。而且没有分配连接池,每一个用户一个连接数。所以只要1000个不同IP段的用户同时登陆我们的系统,我们系统就直接too many connections挂了。
第二个比较有趣的事情是:我们用的是Http协议而不是Https协议(我们大多数系统都是用的http协议)。既然用的是http协议,那么用户伪造几个IP伪造几个报文啥的,可能只需要一台可以攻击的服务器即可搞挂我们系统。
和项目经理说了,项目经理表示:听不懂。
————————————————————————————————————————
第二个比较有趣的问题是:
我要去查询数据,然后我就在前台输入了一个数据:%
查询出来了有效数据。我大惊。
我个人怀疑:系统是通过拼接字符串的方式进行sql写的。(因为我自己的代码我也是这么写的)
我和项目经理谈,项目经理表示:输入一个%就能查出全部数据,这个和SQL注入没有任何关系。因为代码里面写的是like拼接的字符串,所以输入%查出来不是很正常啊?
我:这个不就是SQL注入啊??????
项目经理表示听不懂。
有人说了:你嫌弃项目经理菜,项目经理嫌弃你菜,你们两个真的是一对。
我说:我5K不懂那可以,人家薪资过两万人家凭啥不懂sql注入???
有的时候和不懂技术的人说话贼费劲……因为项目经理他就不知道SQL注入的后果是啥。
我认为我这么菜和我的工作环境有巨大的关系。
————————————————————————————————
MySQL的备份是比较有趣的,用的是binlog。
可是我们的数据库没有binlog。
这个事情是咋知道的呢?是有一次用户误删除了数据,想恢复数据,于是个人建议去查binlog找是谁改的。于是查了查,发现一件事:我们系统bin_log是OFF。
我那时候想建议项目经理把生产库 kill - 9以后重启,开一个binlog。可是话还没有说出口就知道项目经理的态度:你XX有X吧??生产环境说重启就重启?所以就没说话了。
我每次修改数据的时候都给自己说:我们系统是没有binlog的,所以你自己不备份就在作死。
我真的想不明白我们系统为啥不做binlog……不会真的有人不知道binlog是做啥的吧?
————————————————————————————————
我们系统有六七个服务器,每个磁盘200G。
你没看错,我们价值几十个亿的数据就在这200G * 6里面。
我给你写文章的电脑是我最值钱的东西,硬盘是2块1T的SSD。花了大概1500左右。作为一个服务器而言,200G的确太过寒酸了。(我们的服务器是四五年前的,估计是五年前SSD很贵,所以磁盘很小)
我就问项目经理:我们磁盘咋这么小?
项目经理表态:我申请了,没下文了。
就是:你系统利润效益低,所以你申请服务器有啥用?(我听完这个就想搞几个故障,让他们认识一下我们系统的厉害)现在比较火的是机器学习,利润比较高,所以服务器都给他们了,配额也优先考虑。
我那时候就想:你项目经理和领导翻脸啊,说我们几个亿的数据就200G,出了问题咋办?后来想了想,项目经理四十多岁了,就是有bug不修混一天算一天的样子,爱咋咋地吧。我自己也不想干久,何必为了这个事情费力。
后来还有更刷新三观的东西:我们系统大概率是raid0(也就是没有备份,如果磁盘坏块那么就是丢数据)搞个raid1那磁盘就剩100G了。
大概两个月前,系统出现了一次系统硬盘坏块导致的恶性故障。邀来诸多大牛终于能跑了。
彻查系统硬盘,发现我们硬盘六块有3块有大量坏道,于是厂家提示:如果数据重要赶紧转移数据。
项目经理茫然无措的说:我们磁盘不够,转移数据不知道咋转移。
——————————————————————————————————————————————————
我入职的时候,项目经理给了我一大堆意义不明的文档。其中有一个大神。
于是我去拜读这个大神的文档,读到其中一个操作的时候我直接把这个大神拉黑了。
就是:SQL需要一个去重的操作,这个人是用复制黏贴到EXCEL里面然后用EXCEL的去重功能去重的。
我自己用了一个group by搞定了以后就再也没有看这个大神的任何一个字了。
我后来发现这个大神的文档还是有很多高深的东西的,不过我下意识的不看,离职了以后读了一遍,比我强。
————————————————————————————————————————
我们系统有个流程不幂等。
就是说:有个流程如果重复提交会导致出现重复数据。
于是:我们每次提交数据的时候,需要把所有作废的业务delete掉。
可是:没有文档,项目经理也不知道!!!所以他就直接给用户回了,让用户抓住小辫子了。
于是,项目经理就说了:维护(就是我)不走前台流程,直接从数据库写入!用了一个极其复杂的流程:先新增,后比较,然后替换,仔细认真的检查!!!
我后来发现:有的人有把简单的事情做复杂的能力,既然不幂等那么把所有旧数据delete掉不就行了???你为啥要在旧数据里面修修补补呢?
我发现只要把工作安排给项目经理,项目经理就想当然……既然你数据不重要可以重新生成,那为啥不全量delete?估计是生产数据库不敢这么做……
可是你价值百万的数据项目经理都敢刷,搞不懂……
————————————————————————————————
很久之前配置服务,每个采集任务都有冗余。
我们系统采集的时候就会有冗余的数据,就是:如果一个配置失败会走第二个。
离职之前几天,项目经理洁癖犯了,说这两个采集一模一样,让我把这些价值过亿的数据去冗余。
我一个没忍住直接开喷了。
我们系统的采集是独一份,如果挂了就死。你让我去冗余你咋不去天台呢?
————————————————————————————————————
我们系统耦合比较严重,还有任何一台服务器挂了都不行。
有人说:你咋知道的呢?
答:我们系统mysql如果挂了,那么XXL就无法工作。因为XXL的参数在MySQL里面。采集机各司其职,如果别的服务器挂了不会自动接替。
之前修bug的时候,就遇见过一个比较骚气的:我们系统想做MySQL集群,可是没做,就一个MySQL的尸体在服务器。而且这个不仅是服务器而且还是采集机(穷嘛)。
我们的分布式是指定分布式。也就是:指定设备A为XX资源的采集机,如果设备A挂了那么这个XX资源也就丢了,其他的服务器不会自动接替。
别人是XX的主备容灾,我们的是任何一个节点挂了就等死。而且数据是采集的,漏了就只能作假。
我们要是项目厉害了其实不用六七台服务器,用一台就行啊!!!!搞一个128G内存、64核,硬盘10T的稳定性不是更强??只是系统比较穷申请不到好的服务器。
对应这种危险的行为,我们系统的故障率也是居高不下。
这估计就是所谓的前人栽树后人乘凉,前人挖坑后人摔跤。这个事情就没人做了。
——————————————————————————————————
作为一个企业,项目是销售拉过来的。
我们作为一个系统,是又穷又难搞,项目经理已经跑了五个了。
项目经理去问总经理:这个系统……能不能不拉了??总经理的意思是:这个东西要做。这个系统很重要。
当然重要了,价值百亿呢。可是甲方不给钱咋办??
项目经理想待下去,想坐稳他项目经理的位置(他四十多了,连个sql都写不利索),所以咬牙认了。
————————————————————————————————————————————————————————————————————————————————————————————
工作一年以后,逐渐的就开始摸鱼了。我才27啊!!
面向bug编程的前端,没有测试环境的系统,做事情不掂轻重的项目经理。让我个人感觉:岌岌可危。
工作一年学的最深的:你得有自己的判断,如果领导安排了一个根本完成不了或者有高风险的业务,你得据理力争,死活不干,摆烂打滚,遇见别人的白眼和摇头要摆回去,要写文档,要越级上报。数据要备份,要自己掂量自己的能力,有多大能力做多大事情。
我拿多少钱呢?5K不到,4K多,我干嘛??
后来得到了别人的批评:
您说你开发面向bug,你说项目经理不知道轻重,你说系统各种问题,同事就没有一个你看的过去的,那么人家为啥工资是你的好几倍呢???
你都这样了你还说别人???(这是我最难受的一句话……)
你自己觉得公司不行赶紧走啊,在工作上碎碎念有意思吗?
我看了以后无话可说。
第二讲事情,就是以后我的同事必须比我强!以后再遇见这种前端后端项目经理,我直接拍屁股走。
于是我腆着一张脸说了:我有一年半开发经验,求大企业带。
————————————————————————————————————————
出了故障需要数据补录。
系统出过几次恶性故障,数据丢了。可是我们数据是周期新的,所以把昨天的数据复制一份改一下时间入库即可。
那时候我自己学的是python,而我们的项目经理是Java吹Oracle吹,所以我用Python写的脚本项目经理不认。
好吧,这种事情我本来就不想做,做好了没钱做错了出事的那种。
找开发,开发说了:一个周之内。
????这个东西XXX的要一个周?????
开发是说:开发有项目,先把项目做完,然后这个东西也不能报工也不能算钱,所以一般拖得很晚。
项目经理就坐着等,偶尔催一次。就等周五的好消息。
总的来说,项目经理很无助,可是我也不愿意担责啊。没钱你去求开发,人家肯接就是面子了。
于是做完以后补录数据,加班熬夜。
其实项目经理有两个开发,可是那两个开发是另一个项目组的,不负责这个系统的业务。
所以工作也安排不下去:我们的另一个系统出了故障,你帮忙修一下。
我们这两个开发,一个十年开发经验一个七年,就说:给你修是情谊,不修是应该的。所以除非重要的事情经理一般不会求。
——————————————————————————————————————
最后说一件好事情:这个系统比较重要,所以这个系统被总部收了,要做一个全国统一的计费平台。
地市公司就不需要维护这个系统了,大概一两年以后这个系统和这些bug就一起消失了。
系统2结束。