救火队员的那些事(1)

  “预防胜于救火”,道理都懂,但是当面临成本、时间等压力时,最易被放弃的就是质量,在HW做过很多次这样的事情,虽然每次压力山大,但是收获颇多。

  分享的第一个案例是我们的产品在08年由于中标了印度某运营商, 中标以后,这个项目就由印度的同事交付以及维护,这个项目每个月能够给运营商带来几百万美刀的收入,加上项目是合营的,利润还是不错的。由于印度同事对产品的理解不够深入,以及产品本身代码质量并不高,所以在08年年底交付以后,网上问题一直不断,但是因为利润还不错,由于印度人自己和自己人打交道,所以质量问题一直没有成为Top 1的问题。

  但是09年的时候这个项目的甲方的高层领层换了人,换个领导以后就会把这个事情摆上台面,甚至提出这些质量问题如果不解决的话,后续的合同不续签。

  印度的同事因为对产品接触的时间才一年多,我虽然接触也才2年,但是因为我在国内接触的资料会比他们多一些,加上我在当时的团队里技能稍微好一些,于是领导就把这个“伪专家”给抛出去了。万事开头难,和印度的同事除了语言他们那非常重的口语我经常听不懂以外,还有他们做了近2年的定制开发,很多功能已经和最早的产品已经不一样了,怎样在短期内快速的解决明显的问题,我心里真是没有底,不知道自己能不能完成这个任务。

  接到任务以后,和他们邮件、电话做了充分沟通以后,了解到他们最突出的问题:网上运行不稳定,以至于他们每天晚上安排一个兄弟把集群里每个机器挨个重启一遍,这样大部分情况下能够确保能跑一天,但是每天这么重启也不是办法。在和他们商量以后,计划分2步走:

  1、止血: 先确保不用每天手工的重启

  2、在实验室环境搭建同样的环境,将主要流程在实验室进行压测,重现问题。

  第一针止血,他们的要求很简单,就是不要每天半夜起来人工重启。这个要求简单,用perl写了一个watchdog的脚本,这个脚本原理很简单,但是发挥了很重要的作用。因为它不仅能够发现服务挂掉,它还能收集大量的信息快照并打包,这样每天把重启的记录进行分析,能够更加准确快速的分析问题。watchdog判断重启有2个条件,一个是cpu的使用率如果持续100%,在判断cpu的使用率的时候,并不能直接用vmstat或者top,而是读取/proc/stat,因为这里能读取到每一个cpu的使用率,有时即使一个cpu一直是100%也是有问题的,另外还有一个条件就是判断心跳的页面了。重启前会收集gc、内存、日志、磁盘io等所有可能的信息。这个perl脚本总共应该不超过80行代码,但是后来我在很多地方都用到了。其实我们的系统也有watchdog的,但是发现这个watchdog有时自己也会被hang住,所以用这个脚本单独的进程更加稳定一些,后面我们的产品也的按我的这个想法重新设计了watchdog.

  有了watchdog以后,发现导致重启的很多时候原因是因为数据库连接不够了,而导致连接不够了,要么是慢sql,要么是一些查询语句太过频繁,性能比较差,一点点的优化,发现watchdog重启的频率越来越低了。

  第二就是在实验室中做性能测试了,我们收集了典型的场景做了压测,主要发现的问题是一些流程性能比较低,比如像页面展示的动态广告,每次实时查询数据库,而每个页面不管是否展示广告都会进行一些复杂的逻辑计算以及数据库的查询。一般的方式都是能够异步的操作,异步操作。比如广告的点击量数据,其实没那么高实时性,我们改成每天晚上后台统计算一次,展示的时候直接查询,而不是每次渲染页面实时的进行查询。

  有了第一针的止血,加上第二招的实验室测试,前前后后大概一个月左右的时间,逐渐的稳定下来,自己在这过程中学习了如何看awr报告,如何用linux命令定位性能问题,如何用LoadRunner性能测试。稳定以后,写了一篇总结给印度的同事,这个事情基本算告一段落了,对了,09年的国庆节我没有休息,全陪印度的同事在搞这个了。

时间: 2024-08-11 05:41:42

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

救火队员的那些事(2)

这次救的火救的时间有点长,持续一年多,总共4次,每次去厦门大概1个月左右,每次去救火都是顶着巨大的压力,还好每一次我都不错的活着回来了. 这个项目与很多要救火的项目一样,项目交付第一,质量被抛在后面,几十人的团队不断往上堆需求,没有人做架构看护,没有人真正关注能否持久,只要功能实现了,暂时不出问题了,没有人care你的代码写的怎么样,可维护性怎么样. 在这四次救火中,举2个印象最深的例子,有一天晚上9点多,领导给我打电话说厦门某项目的系统今天下午系统挂了一次,他们在那边搞不定,希望我能出差支持一

救火队员的那些事(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