笔记每一个开发都应该懂得故障处理

韩旭051 韩旭051     2022-12-09     206

关键词:

眼疾手快 悬崖勒马 故障发生时 做紧急处理

亚马逊能够快速定位故障源,被影响的团队做处理 控制故障的范围不被扩散

出现故障时,最重要的不是 debug 故障,而是尽可能地减少故障的影响范围,
并尽可能快地修复问题。

恢复系统的手段

  • 重启限流:解决可用性问题
  • 回滚:解决新代码 BUG
  • 降级:停止服务故障公告 不把事态扩大
  • 紧急更新:需要有自动化系统 进行 自动化测试 自动化发布

运维团队通常只能处理一些基础设施方面的问题,或是非功能性的问题。对于一些功能性的问题,运维团队是完全
没有能力处理的,只能通过相应的联系人,把相关的开发人员叫到线上来看。

居安思危 未雨绸缪 做故障前的准备

  • 以用户功能为索引的服务和资源的全视图
    为各个服务指定关键指标 一套运维流程和工具 应急方案
    有导航仪 有章法 就不会混乱
  • 设置故障等级
    1. 全站不可用
    2. 功能不可用 不可替代
    3. 功能不可用 可替代
    4. 非功能故障
  • 故障演练
    见得多了 驾轻就熟
  • 灰度发布系统 或 A/B 测试

反躬自省 进行 故障复盘

解决一个故障可以通过 技术和管理两个方面入手

技术方面 亚马逊COE

亚马逊会编写 COE(Correction
of Errors)文档

  • 故障处理过程 log
  • 故障原因分析
  • Ask 5 Whys 至少问五个为什么
  • 整改计划:举一反三 根本上解决所有问题

管理方面 阿里故障责任人机制

  • 阿里会将向上操作改成两个人完成 一人操作一人检查 增加审批环节
  • 阿里会 编写一个新的系统 监控原来不好的系统
  • 阿里也会 通过灰度发布减少故障

不认同 阿里 惩罚故障责任人 的机制

  • 做的越多错的越多 只会让人更保守
  • 惩罚责任人对 解决故障没有帮助

故障整改方法

慢 SQL 的故障复盘

  1. 为什么从故障发生到系统报警花了 27 分钟?为什么只发邮件,没有短信?
  2. 为什么花了 15 分钟,开发的同学才知道是慢 SQL 问题?
  3. 为什么监控系统没有监测到 Nginx 499 错误,以及 Nginx 的
    upstream_response_time 和 request_time?
  4. 为什么在一开始按 DDoS 处理?
  5. 为什么要重启数据库?
  6. 为什么这个故障之前没有发生?因为以前没有上首页,最近上的。
  7. 为什么上首页时没有做性能测试?
  8. 为什么使用这个高危的 SQL 语句?
  9. 上线过程中为什么没有 DBA 评审?

提出问题的逻辑

第一,优化故障获知和故障定位的时间。

  • 从故障发生到我们知道的时间是否可以优化得更短?
  • 定位故障的时间是否可以更短?
  • 有哪些地方可以做到自动化?

第二,优化故障的处理方式。

  • 故障处理时的判断和章法是否科学,是否正确?
  • 故障处理时的信息是否全透明?
  • 故障处理时人员是否安排得当?
    第三,优化开发过程中的问题。
  • Code Review 和测试中的问题和优化点。
  • 软件架构和设计是否可以更好?
  • 对于技术欠债或是相关的隐患问题是否被记录下来,是否有风险计划?
    第四,优化团队能力。
  • 如何提高团队的技术能力?
  • 如何让团队有严谨的工程意识?

识微见几 药到病除 根除问题的本质

技术问题 隐藏着工程能力的问题
工程能力的问题背后是 公司管理的问题
公司管理问题 隐藏着 公司文化 创始人的问题

三条原则

  1. 举一反三解决当下故障。
    赢得更多时间
  2. 简化负责不合理的技术架构、流程、组织
    无法在复杂环境解决根本的问题
  3. 全面改善优化系统 组织
    根本上 改善调整整体结构

要想本质解决问题 就需要 大扫除 但要想做到简化 非常难 在烂摊子中解决问题 几乎不可能

相关链接

笔记源于课程 左耳听风 :故障处理最佳实践:应对故障 和 18 | 故障处理最佳实践:故障改进
2017-11-28 陈皓
在这里插入图片描述

不懂得问题

...代码怎么解决?2.合作都有可能走到解体阶段,那么假如一个大公司的团体走到了这个阶段的话,会造成什么样的损失?3..做软件都要做一个需求分析,假如要做一个新的软件,应该怎么样去了解到大众真正的需求呢?4.敏捷流... 查看详情

台式电脑和笔记本电脑的的常见维护方法(应该每一个人都能用用到)

一、台式电脑的常见维护方法这里我们主要谈谈存储设备的维护,因为它们属于消耗品。1、硬盘的维护(1)不要拆卸硬盘当发现硬盘有故障时,任何时候任何场合都不要打开硬盘。在达不到超净100级以上的条件下拆开硬盘,空... 查看详情

为什么每一个爬虫工程师都应该学习kafka(代码片段)

为什么每一个爬虫工程师都应该学习Kafka摄影:产品经理与产品经理环游世界的瞬间这篇文章不会涉及到Kafka的具体操作,而是告诉你Kafka是什么,以及它能在爬虫开发中扮演什么重要角色。一个简单的需求假设我们需要写一个微... 查看详情

vmware故障处理笔记

ovf导入检测到版本不一致等https://www.vmware.com/support/developer/ovf/下载一个ovftool高版本覆盖到vmware目录下,然后导入###############################################################导入后,链接不上网络一.故障现象:[[email protected]~]#serv 查看详情

大学生活6上课应该记笔记。应不应该有错题集?

...,就不做。即可    好记性不如烂笔头。上课应该记笔记,而且每一个必修,专业选修课程都应该有一个笔记本。有的人会说了,每个课程都有一个本子,那得多费钱呀。我说,不呀。你到网上买2,3块钱一个本子,课程笔记... 查看详情

ajax学习笔记

Ajax什么是ajaxAJAX即“AsynchronousJavaScriptandXML”(异步的JavaScript与XML技术),指的是一套综合了多项技术的浏览器端网页开发技术。以前,几乎所有的网站都由HTML页面实现,服务器处理每一个用户请求都需要重新加载网页。... 查看详情

你应该如何正确健壮后端服务?(代码片段)

...3适当保护第三方,慎重选择重试机制2.防备使用方2.1设计一个好的api避免误用2.2流量控制,按服务分配流量,避免滥用3.做好自己3.1单一职责原则3.2控制资源的使用3.3避免单点4.小结  对每一个程序员而言,故障都是悬在头上... 查看详情

嵌入式开发gcc学习笔记-编译c程序及编译过程

一.C程序编译过程编译过程简单介绍:C语言的源文件编译成可运行文件须要四个步骤,预处理(Preprocessing)扩展宏,编译(compilation)得到汇编语言,汇编(assembly)得到机器码,连接(linking)得到可运行文件;--查看每一个步骤的编译细节:"-E"相应... 查看详情

读书笔记

你之所以看不见黑暗,是因为有人把黑暗挡在你看不见的地方。-《湄公河行动》纪念23人两弹一星麦哲伦不惧怕风暴完成环球航行的壮举从此人类走出天圆地方的误解哥白尼不盲从权威创立太阳中心学说从此人类开启对宇宙的... 查看详情

软件开发中网站常见故障及处理方法(代码片段)

...结如下。设置问题日志问题问题场景所有的日志都保存在一个文件中,文件过大。例如Tomcat中不配置日志文件和路径,直接使用catalina.out进行日志的存储。会导致日志文件过大,我曾将 查看详情

jdbc笔记

JDBC是一些类和接口(在java.sql和javax.sql中)目的是用于连接数据库,好处是方便与不同数据库打交道。SUN定义了JDBC中接口规范,不同的数据库厂商针对各自的数据库软件实现了这些接口(Connection,Driver等)。Driver接口每一个驱... 查看详情

《深入理解计算机系统》读书笔记

 第一部分概述综述本书从几个生动的计算机程序实例引入,带我们走进了一个庞大的计算机世界。计算机系统的诞生经历了无数个创新性时刻,每一个看似显然的成果都是来之不易的。比如,让计算机用一种我们能够理解的... 查看详情

CloudKit - 哪些 CKErrors 应该作为 .partialFailure 处理,它们是不是也应该作为非部分故障处理?

】CloudKit-哪些CKErrors应该作为.partialFailure处理,它们是不是也应该作为非部分故障处理?【英文标题】:CloudKit-whichCKErrorsshouldbehandledas.partialFailure,andshouldtheyalsobehandledasanon-partialfailure?CloudKit-哪些CKErrors应该作为.partialFailure处理,... 查看详情

tensorflow实战--阅读笔记part3

一、Tensorflow实现卷积神经网络卷积神经网络的概念最早出自19世纪60年代科学技术提出的感受野。当时科学家通过对猫的视觉皮层细胞研究发现,每一个视觉神经元只会处理一小块区域的视觉图像,即感受野。一个卷积层中可以... 查看详情

我应该使用排队系统来处理付款吗?

...款。一切都很好,但是直到最近,我发现我的系统中存在一个令人担忧的故障,我认为这可能是一个比我想象的要大得多的问题。在我的逻辑中,在支付流程的三个独立检查点,我检查了我的 查看详情

故障公告被放出的bing爬虫,又被爬宕机的园子

...后,我们只剩忐忑不安——如果再被重罚,将是灾难。近一个月的忐忑不安,试着放虎归山,结果又让园子人仰马翻。前天,我们试着放出了被屏蔽的Bing爬虫,结果昨天1 查看详情

uml大战需求分析——阅读笔记04

读《UML大战需求分析》有感04  开发某系统的重要前提是:  这个系统有谁在用?  这些人通过这个系统能做什么事?  一般搞清楚这件事,再画个业务流程图,就能条例清楚的表达系统的需求了。作... 查看详情

嵌入式系统开发:驱动程序设计的5个窍门

...xff0c;总结了设计驱动程序开发者应该掌握的五个技巧。每一个嵌入式应用软件都会在某些时候访问最底层的固件和进行一些硬件控制。驱动的设计和实施是确保一个系统能够满足其实时性要求的关键。以下五个窍门是每一个开发... 查看详情