后端如何减少生产问题以及如何处理生产问题

后端如何减少生产问题以及如何处理生产问题

事前--如何减少生产问题

  • 开发多做单元测试,自测。

提前做单元测试,能够及早发现问题。

  • 哪怕只是很小的改动,也要测试回归

有些研发同事,优化了代码,以为只是很小的改动,引发了生产问题。

哪怕只是很小的改动,也要测试回归!避免好心办坏事。

  • 功能测试之后,最好提前在预发布环境,再测试一遍。

如果代码分支合并错误,或者是没有合并,能够提前发现,避免代码遗漏。

  • 产品一定要验收。

产品同事如果不验收,那开发出来的功能,不一定与产品期望的一致。

  • 发布到测试环境之前 / 部署到预发布环境之前,最好找写过相关代码的同事Code Review。

提前 Code Review,尽早发现问题。

  • 核心流程,最好打日志。

生产问题发生时,如果有日志,能够大大提高定位问题的效率。

  • 上线之前,加上日志监控。

加上监控,提前发现问题。不要等用户反馈了才去解决生产问题。

  • 发版前发布评审checkList, 发版后功能回归 checkList。

发布评审checkList ,检查sql脚本、配置、代码分支、服务。

发版之后的 功能回归 checkList,检查核心功能是否正常。

事中--如何解决生产问题

  • 尽快解决,能临时处理就先临时处理

有些问题,可以通过sql脚本先处理的,就先用脚本处理。

  • 修复后测试再上线

修复之后,测试通过再上线。避免出现其他问题。

  • 短期无法修复的看能否先回滚代码

在发布了新功能后,发现生产问题,无法立即修复的,先回滚代码。

  • 其他模块是否会有类似的问题

某一条数据、某一个功能出现问题,要查看下其他的数据 / 功能会不会有类似的问题。

事后--如何避免问题再次发生

  • 复盘

总结生产问题发生的原因,如何避免再次发生。

  • 监控

发生过生产问题的,要补充日志监控。

生产问题发生的原因

  • 没有考虑数据量。

数据量越大,越要小心。设计时注意数据表的字段是否需要加索引、是否需要分库分表等。

  • 没有考虑并发。

考虑高峰期的并发场景,接口是否需要加缓存, 是否需要加分布式锁等。

  • 没有兼容处理历史数据。

比如数据表新增一个字段,字段规定不能为空,而历史数据没有这个字段,导致历史数据报错。

或者是历史数据的类型为A,新功能将类型修改为B,没有兼容处理历史数据,导致历史数据执行报错。

可以给数据表的字段加上默认值,或者代码兼容字段,或者根据不同的日期执行不同的逻辑(慎用)。

  • 没有考虑边界条件。

最大值、最小值、负数之类的边界条件。

特殊的值,比如为空、为0之类。

相关推荐
小小莴苣5 分钟前
Spring Boot中 CommandLineRunner 与 ApplicationRunner作用、区别
java·spring boot·后端
讓丄帝愛伱8 分钟前
Intellij Idea显示回退和前进按钮的方法
java·ide·intellij-idea
qq_25183645710 分钟前
1978Springboot在线维修预约服务应用系统idea开发mysql数据库web结构java编程计算机网页源码maven项目
java·数据库·intellij-idea
fengxingke15 分钟前
IDEA中SpringBoot项目数据库连接加密方法
java·ide·intellij-idea·jasypt·数据源加密
原来是大华啊~16 分钟前
idea导入文件里面的子模块maven未识别处理解决办法
java·开发语言·数据库
不称职的程序员❦18 分钟前
IDEA启动报错:Abnormal build process termination...
java·ide·intellij-idea·idea启动报错·abnormal build
小明java问道之路29 分钟前
已解决javax.xml.datatype.DatatypeConfigurationException异常的正确解决方法,亲测有效!!!
java·linux·服务器·后端·架构·exception·error
薛定谔式炼丹30 分钟前
arm-linux-gnueabihf-gcc:Command not found 解决办法
java·linux·arm开发
爱吃奶酪的松鼠丶35 分钟前
C#给SqlSugar封装一个单例类
java·开发语言·c#
小黄人软件36 分钟前
android 是Application类先运行还是AndroidManifest.xml中action先运行?Application类先运行
android·xml·java