当前位置:网站首页>【软件工程之美 - 专栏笔记】37 | 遇到线上故障,你和高手的差距在哪里?
【软件工程之美 - 专栏笔记】37 | 遇到线上故障,你和高手的差距在哪里?
2022-08-04 17:49:00 【if...else...】
专栏信息
专栏作者:宝玉
专栏发布平台:极客时间

主要内容
新手和高手在应对故障时有什么不同?大厂在处理线上故障时,有哪些可以学习借鉴的地方。
一、遇到线上故障,新手和高手的差距在哪里?
新手遇到复杂的线上故障,不知道该怎么下手
遇到复杂的故障,通常新手就不知道该怎么下手了。
对高手来说,会在实践中总结一套自己解决问题的步骤,遇到问题,会按照解决问题的步骤有条不紊地去分析和解决。
新手遇到线上故障,会想着马上修复 Bug
当发现 Bug 后,尤其是自己的 Bug,很多开发人员马上就想到了 Bug 的修复方案,迫不及待就要去写代码打补丁了。
而对于高手来说,会首先对故障进行评级,看对用户的影响范围,如果是核心业务,大面积影响用户,那么当务之急是恢复生产,然后再考虑如何去修复 Bug。
新手遇到线上故障,不知道如何快速定位到 Bug 在哪
对于比较复杂的线上故障,新手通常不知道从哪里下手,看日志看代码都看不出所以然,而高手却总能快速地定位到 Bug 在哪。
新手解决完线上故障后,下次可能还会发生类似故障
对于线上的故障,如果不找到产生的原因,那么下一次还会发生类似的故障,甚至比以前还更严重。
高手对于线上故障,会仔细分析 Bug 产生的原因,从根本上解决,避免类似的故障再次发生。
二、大厂都是怎么处理线上故障的?
通过看这些大厂的故障处理流程,你会发现,大厂其实是把高手解决故障的方式,变成故障处理的流程和操作手册,并且通过反复地故障演习。不断练习和强化对故障处理的流程,让系统更健壮,让新手也可以快速上手,做到高效处理线上故障。
至于具体的处理流程,其实大同小异。
- 首先,对故障进行评级。
- 其次,要马上恢复生产,避免进一步损失。
- 另外,要分析故障原因,修复故障。
- 最后,记录故障发生处理全过程,分析故障原因,提出后续改进方案。
三、大厂处理线上故障处理机制有哪些值得借鉴的地方?
故障报警和轮值机制
要做到最快速度处理线上故障,关键就是要让正确的人第一时间就可以去响应。正确的人就是对故障服务最熟悉的人,通常就是这个服务的开发人员。
实战演习
实战演习就是频繁地对故障进行演练,来测试平时做的这些方案是不是真的可行,这样遇到真正的故障,才不至于手忙脚乱不知道如何应对。
其中最有名的就是 Netflix 的混乱猴子军团。
也有人把这样的实战演习叫“混沌工程”。
日志记录和分析工具
对于软件来说,线上出现问题,分析日志记录是最简单有效的定位问题方式。
还有一些其他好的实践,例如说新功能上线时,灰度发布的策略。通过开关控制,先让一小部分用户使用,如果出现故障,马上关闭开关,避免影响。
四、其他摘抄
- 恢复生产并不一定需要修复 Bug,可以用一些临时性的方案,比如说回滚系统到上一个稳定的版本;重启服务看是否能恢复正常。
- 一种常见手段就是先重现 Bug,因为有了重现的步骤,就等于将问题的范围,缩小到重现 Bug 的这几步操作相关的代码上,就很容易发现问题在哪。
- 还有一种手段就是分析错误日志,通过错误日志,可以马上定位到错误在哪里。
总结
今天带你一起学习了线上故障的处理。对于线上故障的处理,基本原则就是要先尽快恢复生产减少损失,然后再去查找原因,最后不要忘记总结复盘。
边栏推荐
- 图解LeetCode——899. 有序队列(难度:困难)
- "Involution" Index Analysis Based on AHP
- 下一代 AutoAI:从模型为中心,到数据为中心
- RecyclerView 缓存与复用机制
- 对象实例化之后一定会存放在堆内存中?
- hi, 请问下这是什么问题, 我看官网的example就是mysql的, 咋提示不支持?
- LeetCode 899. Ordered Queues
- Learning to Explore - Setting the Foreground Color for Fonts
- 网络靶场监控系统的安全加固纪实(1)—SSL/TLS对日志数据加密传输
- 使用bash语句,清空aaa文件夹下的所有文件
猜你喜欢

网页端IM即时通讯开发:短轮询、长轮询、SSE、WebSocket

谷歌开源芯片 180 纳米制造工艺

NLP未来,路在何方?从学术前沿和业界热点谈起

DMPE-PEG-Mal,二肉豆蔻酰磷脂酰乙醇胺-聚乙二醇-马来酰亚胺简述

字节二面被问到mysql事务与锁问题,我蚌埠住了

动态数组底层是如何实现的

Codeforces积分系统介绍

Create Sentinel high-availability cluster current limiting middleware from -99

OpenInfra Days China 2022|SelectDB与你共享 Apache Doris 在互联网广告业务中的实践

嵌入式开发:使用堆栈保护提高代码完整性
随机推荐
arm交叉编译
hi, 请问下这是什么问题, 我看官网的example就是mysql的, 咋提示不支持?
NLP未来,路在何方?从学术前沿和业界热点谈起
自定义组件,并在组件中注入自定义组件实现多种场景的下的组件切换
《机器学习理论到应用》电子书免费下载
LeetCode 899. 有序队列
asp dotnet core 通过图片统计 csdn 用户访问
【日记】nodejs构建API框架以及RESTful API 和 JSON-RPC的取舍
力扣学习---0804
Thrift IDL示例文件
dotnet core 输出调试信息到 DebugView 软件
【MySQL】数据库的4中隔离级别
Speech Recognition Learning Resources
leetcode 14. 最长公共前缀
darknet source code reading notes-02-list.h and lish.c
【注册荣耀开发者】赢【荣耀70】手机
init和destory方法
[Web Automation Test] Quick Start with Playwright, 5 minutes to get started
关于大学生内卷的文献综述
To eliminate asynchronous callbacks, it has to be async-await