现代企业中软件系统体量越做越大,导致故障产生的原因千奇百怪,同时正所谓在当前快节奏的研发迭代过程中,线上故障的产生几乎是不可避免的。遇到故障并不可怕,大胆求证,找到原因,快速解决即可,事后总结经验教训,避免同样的问题再次踩坑。因此本文不谈任何具体故障,只是从大的系统方向上分析,试图总结出一些通用性的方法和规则。
一、假如故障产生了,如何快速发现线上问题?
1、系统监控,监控cpu、内存、io、线程、流量、gc等等。
2、服务监控。吞吐量、延时。
3、业务监控。访问量、错误率。
4、关联系统报错,上游系统或者下游系统出现问题。
5、开发、运维例行检查日志。
6、客服人员接到客诉反馈,再将问题转给技术人员。
7、预发环境和生产环境的回归测试,尽量完善。
8、生产环境执行自动化测试,争取比客户更早发现问题。
9、灰度发布机制。
10、故障台机制。
二、如何快速解决线上问题?
1、优先恢复系统运行。
2、在不影响业务前提下,发现问题后,快速解决,快速上线。
- 版本回滚。
- 比如rn、h5热更新方式,native则需要发布紧急升级版本。
- 服务扩容、服务降级和服务熔断。
3、通过客服人员,对客户进行引导,如何操作,尽量快速恢复用户正常操作。
4、对客户发送短信,引导操作,以及致歉,降低客诉。
三、如何避免线上重大问题?
1、引入代码review机制。
2、引入单元测试,尤其新代码应该100%单测覆盖。
3、引入静态代码扫描机制。
4、灰度发布。
5、持续维护回归用例。
6、实现自动化测试(selenium、airtest),常规发布运行线上自动化测试。
7、严格遵守代码规范,设计原则,加强代码健壮性。
8、启动合理的问责机制(合理的奖惩机制或者和kpi挂钩),提高相关人员对线上故障的重视。
9、修复后一周内举办故障复盘会议,总结教训,避免再犯同样错误。
源自公众号 三国测