一个线上问题的深思
问题回顾
- 上午发现mybatis引发的问题,没有搞太清楚问题的真正原因,就直接升级版本,从mybatis3.1.1升级到3.4.1.
- 下午进行简单测试,仅测试了一个update
- 19:49,进行了灰度发版
- 19:57,开始报警
- 20:14,grep出线上对应日志
- 20:14,确定引发问题的sql
- 20:25,禁用线上灰度的那台机器
- 20:21,配送方发现订单状态没有同步
- 20:26,对照禁用机器操作的时间和订单取消订单的时间,时间基本对应,对应操作也与问题sql对应,确定是由该问题所引发的线上订单问题
- 20:30,组长问这笔订单怎么回事,回复是升级版本所引发的问题,组长联系配送方问题已经找到
- 随后开始在本地跑单测,测试那条sql,一个一个版本的试,想找到没有问题的mybatis版本
- 第二天凌晨4点,问题解决
思考
- 随意升级版本,没有考虑周全,单测不够全面。时间充裕不用着急发版,但这段时间内没有进行全面的测试。
- 报警后,第一时间不应该直接开始搂日志,去确定哪里出了问题。应该先禁用灰度的机器,然后回退版本,将影响降到最小。如果是第一时间这样做,也不会引发接下来的订单问题。
- 既然已经将机器禁用,线上就不再存在问题,那么接下来要解决的不再是找合适的mybatis版本,而是找解决问题的方法,因为版本早晚要升,找出问题怎么解决才是正解。
- 既然已经找到问题sql,那么应该首先找是哪里出现了问题。比如这里是因为升级的版本跨度太大,mybatis的语法可能已经修改,直接去翻官方文档找最新版本的语法支持,然后修改就完事了。
方法论
- 啥叫方法论?最近总是听到个名词。
- 开组会,向领导汇报下一个Q的工作内容需要方法论,按照明确的方法论,你可以很快让领导明白:
- 背景
- 为什么做?能解决什么问题?
- 成本
- 能产生的效益
- 这样也能节省时间,让领导快速review
- 同时解决问题也要有一套方法论。
总结
- 以后遇到事情,事后要多思考,多总结,回顾事情的整个过程,如果下次再次发生如何最快最完美的解决。
- 生活、工作,人生短暂,不善于总结,不善于思考,就很难进步。🤔
梦想要一步步来!