左耳听风_018_17_故障处理最佳实践应对故障

你好,我是陈浩网名猪耳朵house.我们多多少少呢都会经历一些线上的故障。

在我自己的职业生涯中呢就经历过很多的线上故障。

说实话,线上故障是我们技术人员成长中必须要经历的事儿。

从故障中呢,我们可以吸取到很多的教训,也能让我们学到很多书本上学不到的知识。

那坑踩多了之后呢,我们会变得越来越有经验,也就成为老司机了。

不过呢我看到很多公司处理线上故障的方式并不科学,而且还存在着很多的问题。

所以啊今天这节课呢我就来分享一些我的经验。

那这些经验呢主要来自亚马逊和阿里这两家互联网公司。

希望我个人的经验总结,希望这套方法呢能够对你参考资料:https://51gx.top/detail/253有所帮助。

首先说在故障发生的时候要怎么做?那在故障发生的时候呢,最重要的是快速恢复故障。

而快速恢复故障的前提是快速定位故障源。

因为在很多分布式系统中呢,一旦发生故障,就会出现多米诺骨牌效应。

也就是说系统会随着一个故障开始一点一点的波及到其他系统,而且这个过程可能会很快。

那一旦很多系统啊都在报警,想要快速定位到故障源啊,就不是一件简单的事了。

那在亚马逊内部呢,每个开发团队啊至少都会有一位on call的工程师。

在on call的时候啊,工程师要专心处理线上的故障,轮换周期呢是每人一周。

那一旦发生比较大的故障,比如s一全部不可用,或者说s二某功能不可用,而且啊还找不到替代方案。

那么这个故障呢就会被提交到一个工单系统里啊,几乎所有相关团队on call的工程师啊都会被叫到线上去处理问题。

整个工作流是这样的,工程师先线上签到啊,然后自查自己的服务。

那如果自己的服务没有问题,那么就可以在旁边待命,以备在需要的时候进行配合。

那如果问题没有被及时解决,就会自动升级到高层,直到SVP级别。

那大家都知道啊,在亚马逊不是按技能分工,而是按职责分工。

也就是说一个团队不是按前端后端运维等来分工,而是按所负责service来分工的。

所以呢亚马逊的开发人员啊都是前端后端测试运维全部都要干的。

而亚马逊内部呢有很多的服务一旦出现问题,为了避免一个工单在各个团队流转啊,他需要所有的团队上线处理。

那这样是最快的那如果我们的系统架构呢是分布式服务化的,那么一个用户的请求就会经过很多的服务。

那开发和运维起来啊是非常麻烦的那这个时候呢跨团队跨部门的开发和运维就变得非常重要的那就我的经历来说呢,在故障发生的时候,亚马逊的处理流程是比较有效和快速的,尤其是能够快速的定位故障源。

那对于被影响的其他团队呢,也可以做一定的处理。

比如说降级处理。

那这样呢可以控制故障的范围,不被扩散。

故障源所在的团队呢通常有这么几种手段来恢复系统。

首先呢是重启和限流,而重启和限流呢主要解决的是可用性的问题,不是功能性的问题。

那重启还好说,但是限流这个事儿就需要相关的流控中间件了。

那第二呢是回滚操作。

那回滚操作一般来说啊主要是为了解决新代码的bug.那么把代码回滚到之前的版本呢是比较快速的方式。

那第三种手段呢是降级操作,因为并不是所有的代码变更都是能够回滚的那如果无法回滚啊,就需要降级功能了。

也就是说你要挂一个停止服务的故障公告,主要啊是不要把事态扩大。

那还有一种手段呢是紧急更新,紧急更新是常用的手段。

那这个呢就需要强大的自动化系统,尤其是自动化的测试和自动化的发布系统。

假如说你要紧急更新一千多台服务器,而如果你没有一个强大的自动化发布系统啊,是很难做到的。

也就是说出现故障的时候呢,最重要的不是第bug故障,而是要尽可能的减少故障的影响范围,并且啊尽可能快的修复问题。

那国内的很多公司呢都是有专职的运维团队来处理线上问题的。

但是呢运维团队啊通常只能处理一些基础设施方面的问题,或者是非功能性的问题。

那对于一些功能性的问题呢,运维团队啊是完全没有能力处理的,只能通过相应的联系人把相关的开发人员叫到线上来看。

而可能这个开发人员呢看到的是别的系统有问题啊,所以又会叫上其他团队的人过来。

那这样一级一级的传递下去啊,会浪费很多的时间。

所以为了能在面临故障的时候做的有条不紊,我们就需要做一些前期的准备工作。

那这些准备工作做的越细,故障处理起来啊也就越有条理。

我们知道啊故障发生的时候啊,一切都会变得混乱。

那这个时候呢,对于需要处理故障的我们来说啊,事儿可以乱,但人不能乱。

那如果人跟着事儿一起乱,那就是真真的混乱了。

所以呢我们需要做一些故障前的备备作。

那在这里呢我给出一些我的经验。

第一条经验呢就是我们要做一个以用户功能为索引的服务和资源的诠释图。

首先呢我们需要一个系统来记录前端用户的操作界面和后端服务,还有服务使用到的硬件资源啊,它们之间的关键关系。

那这个系统呢有点像CMDB啊,也就是配置管理数据库。

但是啊比CMDB要大得多,因为它是以用户端的功能来做索引的。

然后呢再把后端的服务服务之间的调用关系,那服务使用到的资源都关联起来,做成一个视图。

那这个视图呢最好是由相应的自动化监控系统来生成。

那有了这个资源图之后呢,我们就可以很容易的找到处理故障的路径了。

啊,这就好像一张地图啊,如果没有地图,我们就只能像一只无头苍蝇一样乱世了。

那我的第二条经验呢,就是要给地图里面的各个服务制定关键指标,以及一套运维流程和工具,包括应急方案。

那以用户功能为索引,给每个用户功能的服务,都制定一个服务功障的检测处理和恢复手册,还有相关的检测、查错或者恢复的运维工具。

那对于基础层和一些通用的中间件呢,也需要有相应的最佳时间的方法。

比如REDISS啊,我们应该怎么检查它是否存在了问题,怎么查看它的健康和运行状态?那它的关键指标有哪些?面对常见的故障,应该怎么应对?服务不可用的服务方案是什么?服务需要回滚了,应该怎么操作等等。

这个呀就好像是一个导航仪能够告诉你怎么做,而没有导航仪呢就没有章法,就会导致混乱。

我的第三条经验呢就是要设定不同故障等级的处理方式。

比如亚马逊呢,一般就把故障分为四级,一级呢是全功障,可用有级呢是某功能不可用,而且啊没有替代方案。

那三级呢是某功能不可用,但是有替代方案。

四级呢是非功能性故障,或者是用户不关心的故障。

那阿里内部呢分类更多样一些,有时候还会根据影响用户的多少来定故障等级。

那制定故障等级呢,主要是为了确定一个故障,要牵扯多大规模的人员来处理。

那故障级别越高,牵扯进来的人啊就越多,参与进来的管理层级别啊也就越高。

就像亚马逊的全员上线uncle一样啊,这就好像是我们社会中常用的红色警报、橙色警报以及黄色警报之类的,会触发不同的处理流程。

那我的第四条经验呢就是要进行故障,演练,故障呢是需要演练的,因为故障并不是时常发生的,但是我们又需要不断提升处理故障的能力,所以呢就需要经常演练。

那一些大公司,比如netflix啊,会有一个叫chaos monkey的东西,会随机的在生产线上乱来。

那facebook呢也会有一些故障演习,比如随机关掉线上的一些服务器。

总之啊要提升故障处理水平最好的方式啊,就是实践践的多了,处理的多了才能驾轻就熟。

那故障演练呢就是一个非常好的实践。

另外呢要减少线上故障的影响范围啊,通过灰度发布系统来发布呢是一个很不错的方式。

毕竟呢我们在测试环境中啊是很难模拟出线上环境的所有情况的。

所以在生产线上进行灰度发布,或者是AB测试是一件很好的事。

那亚马逊的发布系统呢就有一个叫web lab的系统,那它就是用来做灰度发布的。

另外呢亚马逊全球啊会有多个站点,一般来说呢它会先发中国区啊,如果中国区没什么问题了,就发日本区,然后再发欧洲区。

最后呢是美国区。

那如果你没有很多个站点的话,那么就需要一个流量分配系统来做这个事儿了。

好啦,我今天就分享这么多。

我觉得啊只要能做好上面那几点,你处理起故障来啊,就一定会游刃有余了。

在这节课的末尾呢,我想发个邀请给你,请你来评论区聊一聊你所经历过的线上故障,以及有哪些比较好的故障处理方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/863215.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Vue】单向和双向数据绑定

在 Vue.js 中,数据绑定可以分为单向数据绑定和双向数据绑定两种类型。 单向数据绑定 单向数据绑定是指数据从模型流向视图,即数据的变化会自动反映到视图中,但视图中的变化不会自动反映回模型。Vue.js 中的单向数据绑定主要通过以下方式实现…

Linux的fwrite函数

函数原型: 向文件fp中写入writeBuff里面的内容 int fwrite(void*buffer,intsize,intcount,FILE*fp) /* * description : 对已打开的流进行写入数据块 * param ‐ ptr :指向 数据块的指针 * param ‐ size :指定…

无人机赋能工程测绘

勘察设计 业务挑战 采集效率低导致工程周期延长,难以满足及时交付的需求 外业工作量大,人员、时间、设备投入成本高 测绘成果单一,仅限于数字线划图,无法提供可视化模型 无人机优势 快速构建二三维模型,提供丰富…

VUE-CLI脚手架项目的初步创建与配置

目录 1,首先创建一个VUE项目,注意选择版本为 2.6.10 2,打开APP.vue文件,并且删除APP.vue中多余的代码 3,创建index.vue文件 4,在此文件中写入如下图片中的代码来初步创建页面 5,创建router…

前端代码生成辅助工具

1,Axure Axure设计的界面如何生成HTML文件 https://blog.csdn.net/qq_43279782/article/details/112387511 Axure 生成HTML 文件,并用Chrome打开 https://blog.csdn.net/qq_30718137/article/details/80621025 2,OpenUI [开源] OpenUI …

树上启发式合并(DSU-on-Tree)

树上启发式合并DSU-on-Tree 前言入门题例1例2例3CF600ECF570D 略复杂一点的题目CF208ENC235719NC235715 小结 前言 树上启发式合并,用来解决子树查询问题,是一种离线的、“暴力的”算法。从某种角度而言,与莫队算法有些类似,即&a…

pandas数据分析(1)

pandas,即Python数据分析库(Python data analysis library) DataFrame和Series DataFrame(数据帧)和Series(序列)是pandas的核心数据结构。DataFrame的主要组件包含索引、列、数据。DataFrame和…

“论模型驱动架构设计方法及其应用”,软考高级论文,系统架构设计师论文

论文真题 模型驱动架构设计是一种用于应用系统开发的软件设计方法,以模型构造、模型转换和精化为核心,提供了一套软件设计的指导规范。在模型驱动架构环境下,通过创建出机器可读和高度抽象的模型实现对不同问题域的描述,这些模型…

基于QT开发的气体成分检测数据记录软件

1、软件概述 气体成分检测数据记录软件用于实现多种气体分析仪及相关设备实时数据的获取、存储和传送。目前支持的设备主要有气体分析仪、多通道进样阀箱、冷阱处理系统和气体采样处理系统。   气体成分检测数据记录软件可以根据实际应用需要进行配置,以实现不同应…

算法 —— 双指针

目录 移动零 复写零 快乐数 盛最多水的容器 有效三角形的个数 查找总价格为目标值的两个商品 三数之和 四数之和 移动零 下图以样例1为例,看下图如何做到保证非零元素相对顺序前提下,移动零元素。 代码实现如下: class Solution {…

Python 学习之基础语法(一)

Python的语法基础主要包括以下几个方面,下面将逐一进行分点表示和归纳: 一、基本语法 1. 注释 a. 单行注释:使用#开头,例如# 这是一个单行注释。 b. 多行注释:使用三引号(可以是三个单引号或三个双引号&…

MySQL高级-SQL优化- order by 优化(尽量使用覆盖索引、注意联合索引创建的规则、增大排序缓冲区大小)

文章目录 0、order by优化原则1、Using filesort2、Using index3、连接数据库4、查看索引5、删除索引6、按照年龄进行排序7、执行计划 order by age8、执行计划 order by age,phone9、创建联合索引 (age,phone)10、再次执行计划 order by age11、再次执行计划 order by age,pho…

013、MongoDB常用操作命令与高级特性深度解析

目录 MongoDB常用操作命令与高级特性深度解析 1. 数据库操作的深入探讨 1.1 数据库管理 1.1.1 数据库统计信息 1.1.2 数据库修复 1.1.3 数据库用户管理 1.2 数据库事务 2. 集合操作的高级特性 2.1 固定集合(Capped Collections) 2.2 集合验证(Schema Validation) 2.…

基于go1.19的站点模板爬虫

一、go1.19 go1.19是Go语言的一个版本,于2021年8月发布。它带来了许多新的功能和改进,包括但不限于以下方面: 并发性能改进:go1.19引入了新的调度器算法,称为“网状调度器(netlink scheduler)”,它可以更好地处理大量并发任务,在某些情况下提高了系统的并发能力。 垃…

计算机高并发浅析

一、 高并发简介 高并发应用场景涉及大量用户同时访问或操作系统,这对系统的性能、稳定性和扩展性提出了高要求。以下是一些常见的高并发应用场景及其复杂性简介: 1. 电商平台 场景:在大促销活动期间,如双十一、黑色星期五等&a…

标准版小程序订单中心path审核不通过处理教程

首先看自己小程序是不是已经审核通过并上线状态才在站内信里面提醒的? 如果没有提交过审核,请在提交的时候填写。path地址为:pages/goods/order_list/index 如果是已经上线的小程序,当时没要求填这个,但新的政策要求填…

聊天伴侣-豆包

前言 2024年5月14日凌晨,OpenAI发布最新多模态大模型 GPT-4o。GPT-4o的“o”代表“omni”,意为全能,与现有模型相比,它在视觉和音频理解方面尤其出色。GPT-4o可以在音频、视觉和文本中进行实时推理,接受文本、音频和图…

队列的相关知识

目录 创建 初始化 销毁 头插 尾删 取出头 取出尾 数字个数 判空 队列的性质与特征 性质:一种先进先出的线性表 特征:FIFO(先进先出) 实现:用数组和链表的都可以 例子:在生产者消费者模型用到了…

夏天到了,用这两款软件,悄悄惊艳所有人!

哈喽,各位小伙伴们好,我是给大家带来各类黑科技与前沿资讯的小武。 夏天来了,又到了“露肉”的季节,或许大家会为了身材烦恼,即便有运动意愿却苦于健身计划和时间上安排,也没有合适的免费软件。 别担心&a…

RpcRrovider分发rpc服务(OnMessage和Closure回调)

目录 1.完善rpcprovider.cc的OnConnection 2.完善rpcprovider.cc的OnMessage 3.完整rpcprovider.h 4.完整rpcprovider.cc 这篇文章主要完成,protobuf实现的数据序列化和反序列化。 1.完善rpcprovider.cc的OnConnection rpc的请求是短连接的,请求一次…