Fork me on GitHub

一个线上问题的深思

问题回顾

    1. 上午发现mybatis引发的问题,没有搞太清楚问题的真正原因,就直接升级版本,从mybatis3.1.1升级到3.4.1.
    2. 下午进行简单测试,仅测试了一个update
    3. 19:49,进行了灰度发版
    4. 19:57,开始报警
    5. 20:14,grep出线上对应日志
    6. 20:14,确定引发问题的sql
    7. 20:25,禁用线上灰度的那台机器
    8. 20:21,配送方发现订单状态没有同步
    9. 20:26,对照禁用机器操作的时间和订单取消订单的时间,时间基本对应,对应操作也与问题sql对应,确定是由该问题所引发的线上订单问题
    10. 20:30,组长问这笔订单怎么回事,回复是升级版本所引发的问题,组长联系配送方问题已经找到
    11. 随后开始在本地跑单测,测试那条sql,一个一个版本的试,想找到没有问题的mybatis版本
    12. 第二天凌晨4点,问题解决

思考

    1. 随意升级版本,没有考虑周全,单测不够全面。时间充裕不用着急发版,但这段时间内没有进行全面的测试。
    2. 报警后,第一时间不应该直接开始搂日志,去确定哪里出了问题。应该先禁用灰度的机器,然后回退版本,将影响降到最小。如果是第一时间这样做,也不会引发接下来的订单问题。
    3. 既然已经将机器禁用,线上就不再存在问题,那么接下来要解决的不再是找合适的mybatis版本,而是找解决问题的方法,因为版本早晚要升,找出问题怎么解决才是正解。
    4. 既然已经找到问题sql,那么应该首先找是哪里出现了问题。比如这里是因为升级的版本跨度太大,mybatis的语法可能已经修改,直接去翻官方文档找最新版本的语法支持,然后修改就完事了。

方法论

    1. 啥叫方法论?最近总是听到个名词。
    2. 开组会,向领导汇报下一个Q的工作内容需要方法论,按照明确的方法论,你可以很快让领导明白:
      1. 背景
      2. 为什么做?能解决什么问题?
      3. 成本
      4. 能产生的效益
    3. 这样也能节省时间,让领导快速review
    4. 同时解决问题也要有一套方法论。

总结

    1. 以后遇到事情,事后要多思考,多总结,回顾事情的整个过程,如果下次再次发生如何最快最完美的解决。
    2. 生活、工作,人生短暂,不善于总结,不善于思考,就很难进步。🤔
posted @ 2016-10-20 12:04  郑斌blog  阅读(662)  评论(0编辑  收藏  举报