关于线上故障的思考

周末早上,一个哥们突然@我,问是否有线上故障处理和定级的规范或者模板,虽然手头有既有文档,但内容显的太具象了,跟我们的业务有很强的关联性,并不是那么好直接复制到他的团队中。因此,个人对过去的线上故障处理进行了回顾和思考,并进行了简要的归纳,望帮助到需要的同学。文本将按事中处理、事后总结和事前预防的顺序进行介绍,不足之处望大家不吝赐教。

换个角度来说,其实故障处理的过程,和小朋友发高烧的处理过程类似。首先mama会带孩子上医院,如果温度高医生会要求打退烧针,类似发布回滚,之后再通常吃对症的药物慢慢恢复疾病。接下来,mama会明确小朋友生病的原因,如吹风受凉,并抱怨程序员爸爸不细心。最后,mama会提出很多的预防计划,比如禁止程序员爸爸带孩子时写代码,6了6了。

1.事中处理

遇到线上故障永远是尽快处理问题,而不是追究谁的责任,有时候快速合理的故障处理,完全可以规避掉大部分的故障危害

1.1线上故障处理SOP

  • a.线上故障第一要务【发布回滚】,因此针对高风险代码,一定要单独发布,便于回滚
  • b.线上故障第二要务【周知干系人】,随时通报故障处理进度,让真正了解该问题的干系人尽早参与进来
  • c.故障代码revert【通常来说,代码问题只要无法在30分钟内修复,就一定要回退代码,避免其他项目把错误代码带上线,再次带来故障】
  • d.修复问题,冷静的完成回归测试后重新上线,如果BUG带来错误数据则需要全面评估数据清洗的风险,避免造成更加严重的次生伤害【很常见】

2.事后总结

2.1.故障定级

简单的可以定位3级【推荐更进一步细化为3-5个层次】,严重性逐步递增:a.线上bug;b.线上故障;c.线上灾难。

一定要针对不同业务、不同层次、不同持续时间、不同后果细化故障定级,并且要周知所有干系人,确认后执行,以电商平台为例。

  • 不同业务:交易、支付、领券属于重要业务,出问题对公司影响很大;C端影响通常要比B端影响大很多
  • 不同层次:前端的影响会小一些,后端的会大一些,基础的会更大【包括中间件、运维等】
  • 不同持续时间:如故障持续3分钟,bug一上线就发现,通常故障级别会比较低,持续12小时,可能CTO都危险了,因此出现问题及时通报很重要,瞒报只会无限的扩大风险
  • 不同后果:影响用户下单100单,产生15个客户投诉,影响商家编辑商品2小时等,这部分的指标一定要和业务、产品沟通确认,他们有这部分最大的发言权。
业务 持续时间 后果 定级
用户订单 5分钟 损失10万订单 线上灾难
商家商品 45分钟 商家45分钟不能编辑和新增商品信息 线上故障
用户评论 3分钟 用户3分钟不能编辑和查看评论信息 线上bug

tip:

【后果数据来源】:通常取前1日、上周同日数据作为参考,根据业务线有差异,此外,互联网业务因变化快去年的数据通常不具参考意义

【构思角度】:可以从空间、时间、组合空间和时间维度

2.2.责任人范围

明确责任人,到底是产品、开发还是测试同学的责任,亦或者是多个干系人共同分担责任。比如由于是产品设计不合理带来的bug,产品同学需要负主要责任,有测试同学参与的项目,测试同学需要和开发同学共担责任,而其他情况,就只能是开发同学自己背锅了。

2.3.故障复盘

在故障处理完成后,一定要复盘并由责任人编写Case Study,并根据相关价值决定是否需要团队内分享【一定要避免同样的问题再次发生】

2.4.故障处罚

开发人员及其多级Leader、[测试人员]及其多级Leader共同分摊,比如开发小A罚款200元,Leader罚款500元,CTO罚款1000元等。

3.事前预防

3.1.故障预防

  • a.规范代码规范、数据库设计规范、日志和告警打点规范
  • b.规范git分支建立和合并、规范测试流程【全面的单元测试、是否需要测试介入等
  • c.规范Review制度,明确审核的责任【至少要识别出代码上线带来的风险,以明确Review的仔细程度】
  • d.规范上线流程【每个项目都需要上线计划,包括配置、数据库、代码项目和发布顺序、回滚方案等】
  • f.引入灰度发布、预发和监控机制,灰度应用出现问题及时回滚
  • e.规范【数据清洗】等高风险行为,高度重视这类操作【容易被忽视】,必须提供完整方案【包括是否备份、如何回滚等】

tip:

以上内容很多是站在比较理想的角度去思考的,实务中,一定要根据具体业务、成本考量、团队能力等因素进行剪裁和权衡,祝?永远都没有线上故障。

名词解释

SOP: Standard Operating Procedure标准操作流程,就是将某一事件的标准操作步骤和要求以统一的格式描述出来,用来指导和规范日常的工作

原文地址:https://www.cnblogs.com/xiong2ge/p/bughandle_standard.html

时间: 2024-11-05 17:31:26

关于线上故障的思考的相关文章

JVM 线上故障排查基本操作--CPU飙高

JVM 线上故障排查基本操作 CPU 飚高 线上 CPU 飚高问题大家应该都遇到过,那么如何定位问题呢? 思路:首先找到 CPU 飚高的那个 Java 进程,因为你的服务器会有多个 JVM 进程.然后找到那个进程中的 “问题线程”,最后根据线程堆栈信息找到问题代码.最后对代码进行排查. 如何操作呢? 通过 top 命令找到 CPU 消耗最高的进程,并记住进程 ID. 再次通过 top -Hp [进程 ID] 找到 CPU 消耗最高的线程 ID,并记住线程 ID. 通过 JDK 提供的 jstac

JVM 线上故障排查基本操作

# 前言 对于后端程序员,特别是 Java 程序员来讲,排查线上问题是不可避免的.各种 CPU 飚高,内存溢出,频繁 GC 等等,这些都是令人头疼的问题.楼主同样也遇到过这些问题,那么,遇到这些问题该如何解决呢? 首先,出现问题,肯定要先定位问题所在,然后分析问题原因,再然后解决问题,最后进行总结,防止下次再次出现. 今天的文章,就如我们的题目一样,讲的是基本操作,也就是一些排查线上问题的基本方法.为什么这么说呢?因为线上问题千奇百怪,就算是身经百战的专家也会遇到棘手的问题,因此不可能在一篇文章

机一次cpu100%的线上故障

某天发现线上crm机器cpu100%了,估计是哪里写了个死循环,用jstack看了下 at java.util.HashMap.hash(HashMap.java:351) at java.util.HashMap.getEntry(HashMap.java:443) at java.util.HashMap.containsKey(HashMap.java:434) at ognl.OgnlContext.get(OgnlContext.java:491) at com.opensymphon

JVM 线上故障排查基本操作--内容问题排查

内存问题排查 说完了 CPU 的问题排查,再说说内存的排查,通常,内存的问题就是 GC 的问题,因为 Java 的内存由 GC 管理.有2种情况,一种是内存溢出了,一种是内存没有溢出,但 GC 不健康. 内存溢出的情况可以通过加上 -XX:+HeapDumpOnOutOfMemoryError 参数,该参数作用是:在程序内存溢出时输出 dump 文件. 有了 dump 文件,就可以通过 dump 分析工具进行分析了,比如常用的MAT,Jprofile,jvisualvm 等工具都可以分析,这些工

tomcat 远程debug配置,教你远程调试代码,解决线上故障

IDEA远程DEBUG Tomcat很简单,配置如下: 1.修改tomcat服务器配置 打开tomcat/bin/catalina.sh 在空白处添加如下参数 CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=xxx.xxx.xx.xx:60222,suspend=n,server=y" 说明:address为tomcat服务器ip地址,这里必须填上(如果是局域网ip,就填局域网ip,如果不填ip,可能启动会用12

mysql 线上故障排查

Mysql 系统报连接池满 iostat slowlog What's in slow log? Mk-query-digest mk-query-digest 全面分析slow log

JVM探秘:线上CPU占用过高故障排查

线上系统突然变得卡顿或无法访问,排除网络异常的情况下,检查服务器资源占用情况,如果CPU.内存.磁盘IO等资源占用过高,就会导致无法继续处理HTTP请求. 如果是CPU占用飙高,有可能是程序中存在死循环.死锁导致的,也有可能是内存紧张从而频繁GC导致的,要具体问题具体分析. 排查过程 这里记录一次线上CPU占用过高的故障排查过程,重点会用到jstack命令. top命令 首先,使用top命令查看服务器资源使用情况,找到CPU占用过高的进程. 发现pid为29167的Java进程CPU占用很高,已

如何快速处理线上故障

概述 线上故障通常是指大规模的影响线上服务可用性的问题或者事件,通俗点讲就是:掉'坑'里了,这个'坑'就是线上故障!线上故障的处理过程可以形象地表达为:'踩坑'.'跳坑'.'填坑'.'避坑'. 线上故障的处理不仅是一项技术活,更是对技术人员/技术团队反应能力.决策能力.判定能力.组织能力的考验.面对突发的生产故障,需要快速定位问题,找到解决方案,快速实施解决方案并不是一件容易的事情.本文主要包括如下内容:线上故障处理的目标.思路.步骤.基础设施.本文是依据平时经历的生产故障排查和处理,总结一些肤

线上应用故障排查之二:高内存占用

搞Java开发的,经常会碰到下面两种异常: 1.java.lang.OutOfMemoryError: PermGen space 2.java.lang.OutOfMemoryError: Java heap space 要详细解释这两种异常,需要简单重提下Java内存模型. Java内存模型是描述Java程序中各变量(实例域.静态域和数组元素)之间的关系,以及在实际计算机系统中将变量存储到内存和从内存取出变量这样的低层细节. 在Java虚拟机中,内存分为三个代:新生代(New).老生代(Ol