记一次重大的生产上线事故,借此反思成长

61 阅读5分钟

目录

写在前面

生产上线出现问题

问题1:logger日志没打印报错信息

问题2:日志打印不全的问题

问题3:equals报空指针问题

问题4:还是空指针问题

问题5:json报文字段上送有误

问题6:微服务配置问题

问题7:上线问题

问题8:代码的可读性

写在最后

加油,打工人


写在前面

    毕业两年,一直都是做的一些小型的管理系统,对于真正的互联网大项目接触的很少,基本上只有在自己学习的时候才能接触到。

    自认为自己掌握的技术已经足够了,可是,最近这堂课,真的是结结实实的让我明白了,其实技术只是其中一回事,经验真的非常重要。

    但是最最重要的,还是自己的态度,自己的认真和仔细。

生产上线出现问题

   项目开发完了,是springcloud的项目,因为自己这种互联网的项目接触的的确比较少,所以生产出现了很多问题。

问题1:logger日志没打印报错信息

 log.error("sftp上传文件失败");

以上代码有没有出现在你的项目中?如果有,就需要反思一下了。

这种日志打印是不会打印报错的堆栈信息的!!出现问题连找都不知道从哪找!并且只是一串光秃秃的文字打印,到时候生产日志一堆,从哪里找你的日志?

以下是调整:

 log.error("id为{}的任务sftp上传文件失败", id, e);

问题2:日志打印不全的问题

日志打印是非常重要的,这是测试、生产查找和定位问题的关键。

日志一定要在关键位置打,并且携带时间、流水号、提示信息。

这样查找问题一定会事半功倍!

问题3:equals报空指针问题

String name = student.getName();
if(name.equals("张三")){
//xxx
}

如上代码貌似看起来也没什么问题。但是!name如果是null的话,就不可避免的出现空指针了。

以下是调整:

String name = student.getName();
if("张三".equals(name)){
//xxx
}

问题4:还是空指针问题

空指针问题一定要严防!一定要控制在任何可能出现空指针的地方做好判断!

尤其是string字符串操作的时候,一定要谨慎谨慎!

问题5:json报文字段上送有误

有的字段,比如说职业,有的接口是枚举值(0、1、2等),有的接口就是汉字,一定要确认确认再确认!

有的字段,还是拿职业来说,如果送的是汉字,结果自己理解成枚举值,结果落库时字段长度设置少了,就会报数据库的错。

还有,报文字段一定要一一对应好,这个字段该送什么,那个字段该送什么,不明白的一定要问,不要怕打扰别人。毕竟不管怎么样总比生产出问题强。

问题6:微服务配置问题

因为项目使用微服务,所以有多个微服务,导致配置量增多。

每次上线都要检查很多配置项,其中如果不够仔细就会遗漏。所以,每次开发的时候,一定要随手将自己要添加、修改的配置项进行记录,上线的时候做好充分检查。

问题7:上线问题

因为开发人员和上线人员毕竟不是同一个人,所以上线文档要写的详细详细再详细!

其中有一项不详细,就很容易造成生产事故!

问题8:代码的可读性

代码的可读性很重要。可以参考(重构-改善既有的代码设计),这本书虽然比较古老,但是读完之后真的对我受益良多,强力推荐!

写在最后

不管是代码出现bug、生产出现问题,第一件事永远不是想着要甩锅。

是自己的问题就要勇于承担,但是最最重要的就是,要时刻进行反思与总结。

出现问题不可怕,可怕的是一错再错不知悔改!

加油,打工人