救火队员的那些事(2)

  这次救的火救的时间有点长,持续一年多,总共4次,每次去厦门大概1个月左右,每次去救火都是顶着巨大的压力,还好每一次我都不错的活着回来了。

  这个项目与很多要救火的项目一样,项目交付第一,质量被抛在后面,几十人的团队不断往上堆需求,没有人做架构看护,没有人真正关注能否持久,只要功能实现了,暂时不出问题了,没有人care你的代码写的怎么样,可维护性怎么样。

  在这四次救火中,举2个印象最深的例子,有一天晚上9点多,领导给我打电话说厦门某项目的系统今天下午系统挂了一次,他们在那边搞不定,希望我能出差支持一下,我说好的那我明天去,领导说能否今天晚上就去,没办法,订了10点多的机票,匆匆忙忙的赶到机场,由于飞机晚点,到厦门已经是凌晨2点了。到了以后,我还没找到地方住下,厦门这边的PM就给我打电话,直接去他们的办公场所解决问题,于是直接去了厦门软件园,到了以后,当时心里是很感动的,因为还有一波人在那里等着我一起和他们解决问题,想想大家都挺不容易的。

  于是开启了我连续2天2夜没有睡觉的先河,接下来在11天的时间里每天凌晨2到3点回酒店。先不说这些苦逼的加班了,再多的加班,如果不能解决问题,都是徒劳的。我们先是把之前发现的一些问题做了梳理,然后我开始阅读他们写的代码,开始优化,测试,但是在头2天里,仍然抵挡不住用户访问的洪流,系统在连接2天上午高峰期间挂了,下午挂了,甲方的在当地最大的领导就站在我们的背后看着我们的系统挂了,重启。当时的心理压力是巨大的,但是我心里有底的,因为在前面几年磨练中,我已经遇到过绝大多数的问题,我对linux操作系统有足够的了解,我对java有足够的了解。

  但是一开始开出的药方,似乎总是命不中要害。这时已经临近春节还有十多天的时间了,领导发话,如果此问题不解决,除了扣分以外(影响收入),所有的人春节都不允许回家。虽然外部不断的施压,但是当时我还是有信心解决的,我仍然在不断的在现网patch代码,分析日志,直到第3天,我给出一个当时绝大多数同事都不太认可的方案,将合并部署的数据库单独迁移到单独的数据库服务器上。他们认为这个方案的成本太高,从服务器的下单、到货、安装在短短十天的时间很难完成,如果迁移到新的数据库上仍没有解决问题,我们就一点退路就没有了。大部分人都不同意这个方案,而我相信自己的分析,一遍遍的拿出充分的数据做图表分析,当时幸亏自己熟练的写perl脚本,做了很多分析的工作。为什么要迁数据库到新的数据库?

  我们的系统的数据库是和另外一个系统的数据库是合并部署在一台小型机上,这台小型机号称是IBM性能最猛的服务器,内存好像是128G,处理器是64核,因为我发现我们的系统的sql的执行时间不稳定,从单个sql来看,执行时间最高的时候会比正常的时间高于30%左右,这样看来问题不明显,但是不要忘了,我们为什么挂的功能是一个非常复杂的功能,一个流程有大量的sql执行,如果这些sql执行时间都很慢,那么整个流程就会慢很多。这也是为什么他们怀疑的地方,就是因为单个sql性能差异不那么明显,但是他们没有想到整个流程中会执行很多次sql. 另外我发现另外一个系统会不定时执行的非常耗资源的sql会拖累这个最猛的服务器,一旦服务器性能影响,在这台服务器上所有的进程都会受到影响。

  其它人也没有更好的办法,最后只能采用我的方案,后来想办法调借一套ATAE双机,操作系统安装,安装Oracle数据库双机,这中间有一个小插曲,那天晚上甲方技术负责人都在帮我们一起来装解决数据库双机的问题,搞过数据库的同学可能知道,这些大型的软件在安装的时候因为补丁之类的问题,有时会出现一些难缠的问题。累了,大家就拿了硬纸板找个角落睡一会儿,在放假前3天的凌晨,我们完成了数据库的迁移。

  我还记得迁移完成以后大概是凌晨6点左右,等待着早上9点左右的业务高峰期,大家都很紧张,总共有近20台服务器,把top命令开着一直盯着,一上午服务器的CPU都没有超过30%。接下来的3天也再没出现过之前的服务挂的情况,CPU和数据库的连接一直都稳定在安全范围线内。

  在放假前的最后一天,我和PM一起回了南京,在从南京机场回市区的路上他对我说,如果没有你,我真的不知道该怎么办,那一刻感觉自己做的事情还是挺有意义的。回到南京的时候,南京已经下了白皑皑的雪,回到公司的时候,大部分同事已经回家了,从公司把自己东西拿上然后把停在公司的车开上,路上人很少,心情很好

时间: 2024-10-10 08:22:44

救火队员的那些事(2)的相关文章

救火队员的那些事(1)

“预防胜于救火”,道理都懂,但是当面临成本.时间等压力时,最易被放弃的就是质量,在HW做过很多次这样的事情,虽然每次压力山大,但是收获颇多. 分享的第一个案例是我们的产品在08年由于中标了印度某运营商, 中标以后,这个项目就由印度的同事交付以及维护,这个项目每个月能够给运营商带来几百万美刀的收入,加上项目是合营的,利润还是不错的.由于印度同事对产品的理解不够深入,以及产品本身代码质量并不高,所以在08年年底交付以后,网上问题一直不断,但是因为利润还不错,由于印度人自己和自己人打交道,所以质量问题

救火队员的那些事(4)-关于流控

这次救火讨论的是流控,流控可以很简单,也可以非常复杂,特别是动态流控.我们有一个产品在T国某个运营商遇到了麻烦,这个运营商的母公司是欧洲的运营商,而欧洲的运营商对于产品验收的苛刻是出了名的,而这次给我们带来麻烦的就是流控. 这个产品的大致功能就是把订阅的短消息或者彩信内容发送到户手机上,就类似于在几年前火了一段时间的手机报.这个产品的流控有些复杂: 1.首先这套系统部署是集群,假设集群有6台主机,这6台主机的每秒下发的消息量不能超过一个值,假设为10000,为什么有这个要求,是因为下游执行发送消

救火队员的那些事(3)

这个项目最初我是PM,当时要求集群达到60000tps,单服务器要能达到2000tps,这个要求说实话的确有些夸张,最终结果虽然没这么高,但单台服务器主要流程的确能达到近1000tps,这不是重点.我负责的项目交付一期以后,交给另外一位同事继续后续的二期的开发,这个项目后续在甲方重视程度很高,至今仍有大量人力在支持这个项目.有一天这个项目的PM给我打电话,说最近系统出现一个奇怪的现象,非常小的概率会出现500错误,一旦出现错误以后,再访问都是500错误,只有重启才能解决,cpu和内存使用率都非常

【项目那些事】项目管理真的可以完全靠人来管理吗?

项目是组织工作非常常见的一种形式,但我理解项目并非只是为了完成某一项独特的产品或服务所做的一次性努力.在这里,我提出一个新的概念:凡事皆项目,凡是涉及到计划.协作.跟踪.记录.分析和沟通空间的,可以统称为项目管理.包括一次性的传统项目和持续性管理工作,如部门管理工作.产品管理工作等都可以以项目的方式来进行管理. 项目管理本身是一件非常复杂的事情,目前能够真正做好项目管理的企业并不多,但我坚信一个原则,把简单的事天天坚持做好,那就是不简单;容易的事坚持天天认真做,那就是不容易.作为管理者,需要学会

关于打码的一些事

1.今晚打代码算是遇到好多问题了,但是谷歌,stackoverflow,谷歌翻译,一点点都解决了,问别人也没回,所以说还是靠自己,记得更久一些,自己栽过的坑,印象会更深刻. 2.静下心来做一件事,很多事情没想象的那么难的. 3.喜欢这种学习后的充实感,不会像打完游戏或者看完视频一样迷茫. 4.继续加油吧. 5.原来右键网页图片可以get到url.

10682 deathgod想知道的事(数论)

10682 deathgod想知道的事 该题有题解 时间限制:1000MS  内存限制:65535K提交次数:265 通过次数:14 题型: 编程题   语言: G++;GCC Description 一只蚂蚁从衣服地图上爬过留下痕迹,deathgod看到后在地图上建了个坐标,将蚂蚁留下的痕迹分成多条线段首位相连而成, 且那些线段的端点都是整数点,现在他想知道这只蚂蚁经过了坐标中多少个整数点. 输入格式 第一行输入一个整数t,表示case数:对于每个case,第一行输入一个整数n(0<=n<=

转 离婚前夜悟出的三件事

文/铁眼(简书作者)原文链接:http://www.jianshu.com/p/832be4f659a0?utm_campaign=hugo&utm_medium=reader_share&utm_content=note著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”. 前两天,在一次吃饭的时候,感觉嘴里有异样,用牙签一挑,一颗智齿酥了,脱落下来.当时很惊恐,自己才30多点,牙齿就坏了,那时只有后悔的想法,如果再往回调两年时间,我一定好好认真的刷牙,保养好牙齿. 牙齿如此坚固

专业房产经纪人必须知道的九件事

1 顾客说的话不全信 顾客是上帝,但是上帝从来不会把自己的心交给他的下人.80%的顾客因为对你抱有戒心,所以他是不会把自己的真实承受价格告诉你的,当然这种留有余地的做法是人之常情.你要做的不过是告诉顾客你是多么的专业就可以了,你要让顾客相信你,这样,你的工作才能完成. 2 永远不要对顾客说没有 永远不要对顾客说没有,即便顾客的要求非常无理.我们接到一个电话,可能是形形***的,有细心询问,有侃侃而谈,我们怎么在一个电话间去判断这个顾客?如果判断对了,顾客对你的信任度就会加强,接下来一切工作都好办

[java学习笔记]Hello World那些事

我们安装和配置好java后,必须得大展拳脚一番,根据国际惯例,第一个程序必须是Hello World,下面我们就看看Hello World的那些事. 1.Hello World的运行 Hello World流程: 将java代码编写到.java后缀的文件中保存. 通过javac编译命令对该.java文件进行编译(编译后产生.class文件). 通过Java命令运行产生的,class文件. 流程图:   F:\Demo.java文件内容: public class Demo{ public sta