后端如何减少生产问题以及如何处理生产问题
后端如何减少生产问题以及如何处理生产问题
事前--如何减少生产问题
- 开发多做单元测试,自测。
提前做单元测试,能够及早发现问题。
- 哪怕只是很小的改动,也要测试回归
有些研发同事,优化了代码,以为只是很小的改动,引发了生产问题。
哪怕只是很小的改动,也要测试回归!避免好心办坏事。
- 功能测试之后,最好提前在预发布环境,再测试一遍。
如果代码分支合并错误,或者是没有合并,能够提前发现,避免代码遗漏。
- 产品一定要验收。
产品同事如果不验收,那开发出来的功能,不一定与产品期望的一致。
- 发布到测试环境之前 / 部署到预发布环境之前,最好找写过相关代码的同事Code Review。
提前 Code Review,尽早发现问题。
- 核心流程,最好打日志。
生产问题发生时,如果有日志,能够大大提高定位问题的效率。
- 上线之前,加上日志监控。
加上监控,提前发现问题。不要等用户反馈了才去解决生产问题。
- 发版前发布评审checkList, 发版后功能回归 checkList。
发布评审checkList ,检查sql脚本、配置、代码分支、服务。
发版之后的 功能回归 checkList,检查核心功能是否正常。
事中--如何解决生产问题
- 尽快解决,能临时处理就先临时处理
有些问题,可以通过sql脚本先处理的,就先用脚本处理。
- 修复后测试再上线
修复之后,测试通过再上线。避免出现其他问题。
- 短期无法修复的看能否先回滚代码
在发布了新功能后,发现生产问题,无法立即修复的,先回滚代码。
- 其他模块是否会有类似的问题
某一条数据、某一个功能出现问题,要查看下其他的数据 / 功能会不会有类似的问题。
事后--如何避免问题再次发生
- 复盘
总结生产问题发生的原因,如何避免再次发生。
- 监控
发生过生产问题的,要补充日志监控。
生产问题发生的原因
- 没有考虑数据量。
数据量越大,越要小心。设计时注意数据表的字段是否需要加索引、是否需要分库分表等。
- 没有考虑并发。
考虑高峰期的并发场景,接口是否需要加缓存, 是否需要加分布式锁等。
- 没有兼容处理历史数据。
比如数据表新增一个字段,字段规定不能为空,而历史数据没有这个字段,导致历史数据报错。
或者是历史数据的类型为A,新功能将类型修改为B,没有兼容处理历史数据,导致历史数据执行报错。
可以给数据表的字段加上默认值,或者代码兼容字段,或者根据不同的日期执行不同的逻辑(慎用)。
- 没有考虑边界条件。
最大值、最小值、负数之类的边界条件。
特殊的值,比如为空、为0之类。
- 修改了公共的逻辑、方法。
比如某一个方法,在A功能用到了,B功能也用到了,那么在修改后,一定要在提测时让测试同事两个功能都验证一下。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了