故障演练实战

news2024/11/18 14:43:52

做了两年多的故障演练, 一直想聊聊自己对故障演练的理解,但是每次提起笔都不知道写一些什么。

什么是故障演练

在这里插入图片描述

为什么要做故障演练

在没做故障演练之前,我想很多人可能和我有一样的想法,我的系统跑了好多年,也没出什么问题,认为自己写的代码挺牛逼的,稳定性贼强。但是做过故障演练之后就会发现“什么垃圾东西”。

故障演练的演练场景非常广泛,小到代码,大到机房。能够覆盖绝大多数故障场景。如:

  • 磁盘读/写满载故障,验证应用在磁盘高负载情况下的容错能力(如:磁盘满载导致服务 rt 升高。)。
  • 网络抖动故障,验证在网络异常的情况下应用的容错能力(如:服务无法链接数据库)。
  • 方法异常,验证代码异常情况下服务的纠错能力(如:数据库查询异常)。
  • 方法抛出异常,验证核心方法异常后的容错能力。(如:创建订单抛出异常)
  • ……(基础故障见下图)
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/57ca35c1ec844527b60a8356e7cc49f0.png如上,通过故障演练不单单可以验证代码层面的异常,也可以检测磁盘、网络等各种异常场景下服务的容灾能力并验证预案是否有效。保障我们在真实故障发生时能够从容面对,并高效解决问题。

历史事件

如何做故障演练

故障注入时机

根据故障发生过程分为前,中,三个阶段

  • 故障发生前(验证在故障发生时应用的可用性)
  • 故障发生中(红蓝对抗 之 给故障填一把火)
  • 故障发生后(故障复现)

故障发生前 - 故障验证

在绝大多数场景下进行的故障演练都发生在故障发生前。流程大致如下

  • 对可能发生的故障进行分析,输出故障类型、故障预计影响范围。
  • 故障编排 编排故障,(需要多个故障的场景,组合多个故障)配置故障目标
  • 故障注入
  • 观测故障注入后对应用的影响。(如关注 avgRt,maxRt,errors,tps 等各种指标但根据故障的不同,验证内容的不同观测的指标也不尽相同,需结合实际场景。)
  • 撤销故障
  • 验证故障撤销后应用是否恢复 输出故障报告(故障实际影响范围,预案是否生效、撤销后是否恢复等数据)
  • 项目优化

以上是一个基础的故障注入流程,比较重要的是:

  • 一定要在故障注入前先评估故障影响范围,因为有些故障是不可逆的,可能造成不可挽回的损失,比如你注入了一个 cpu满载、磁盘满载故障、或者网卡网络延迟故障,这些故障都可能导致故障无法撤销,只能通过 reboot 。
  • 确定本次故障注入是否有意义,防止做无用功。盲目的进行故障演练并不会提升系统的稳定性,健壮性,只会增加负担。
  • 故障撤销后故障并未结束,确保故障撤销后应用恢复。

故障发生中 - 红蓝对抗 之 给故障填一把火

这部门内容也扔在探索进行中,以下是本人的一些拙见。

红蓝对抗这个概念因该也并不陌生,在军事上进行红蓝对抗验证军队攻守能力、现代化作战能力等,在互联网行业,同样可以进行无硝烟的红蓝对抗。
(注:红军为进攻方,蓝军为防守方。不同公司对红蓝的定义并不相同)
故障演练只能作为功放,也就是进攻方搞破坏的一方。
作为一个合格红军的标准:
随时 - 注入时间随机
随地 - 注入目标随机
随机 - 注入故障随机

根据以上定义,其实总结下来就一个字
在这里插入图片描述
以上是我设计的一个比较简单且容易实现的流程,第一部配置一个故障池一个目标池,然后开始任务接下来全都交给随机数。在这个流程下故障注入的影响范围是不可控的,就达到了足够坏的目标。但是同样因为是不可控的所以存在故障注入过度,也存在故障注入达不到目标的风险。
如果通过增加逻辑做限制的方式到最后就像一件乞丐服缝缝补补。
探索中后续有进展再跟进

故障发生后(故障复现)

这一部分就不想详细介绍了,几乎没遇到过通过故障注入复现故障场景的情况。

强弱依赖

//TODO

开源工具

chaosblade

//TODO

chaosmesh

//TODO

未来还能做什么

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

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

相关文章

Docker容器数据持久化

Docker容器数据持久化 Docker容器数据卷:volumes 1、什么是数据卷? 数据卷是经过特殊设计的目录,可以绕过联合文件系统,为一个或者多个容器提供访问,数据卷设计的目的,在于数据的永久存储,它完…

Java-day11(集合)

集合 1.集合框架 用于存储数量不等的多个对象,还可用于保存具有映射关系的关联数组 Java集合可分为Collection和Map两种体系 Collection接口 Set:元素无序,不可重复的集合----(类似数学中的集合) List:元素有序,可重…

linux内网yum源服务器搭建

1.nginx: location / {root /usr/local/Kylin-Server-V10-SP3-General-Release-2303-X86_64;autoindex on;autoindex_localtime on;autoindex_exact_size off; } 注:指定到镜像的包名 2.修改yum源地址 cd /etc/yum.repos.d/vim kylin_x86_64.repo 注: --enabled设置为1 3.重…

Android Studio 的github 工程克隆

上文介绍了Android Studio 里的"Git 建立和简单操作。本文介绍从github 上的工程fork 和clone到本地,然后学习和改进。 本文参考 https://learntodroid.com/how-to-use-git-and-github-in-android-studio/ 克隆clone Github 仓库: 先 Fork 你选择…

仓储23代拣货标签操作指导

服务器使用 V1.4基站已经内置服务程序,无需搭建服务;可跳至第1.4部分 服务器搭建 安装mysql5.7, 创建db_wms数据库并导入原始数据库文件 安装jdk1.8, 配置java环境变量 下载tomca8.0, 部署wms.war到tomcat, 并启动tomcat 下载资源 Windows 64bit: …

知乎如何精准引流?

知乎,用过的人都知道,它是一个相当重要的引流平台。因为它用户规模大、粘性高、活跃性强、百度权重高,流量也相对精准,这也意味者变现能力强。 做引流的朋友都知道,想要把用户从别的平台引流到自己微信上,就…

Gradle项目如何开启debug?

一、打开Idea的终端,输入命令gradle build --debug 开启构建DeBug模式 二、点击编辑配置,并填写自己debug的名称 三、编辑好debug配置后,点击以下debug按钮,就可以开始调试代码了。

vue3下的密码输入框(antdesignvue)

参考:vue下的密码输入框 注意:这是个半成品,有些问题(输入到第6位的时候会往后窜出来一个空白框、光标位置会在数字前面),建议不采用下面这种方式,用另外的(画六个input框更方便) 效果预览 实现思路 制作6个小的正方形div 用一个input覆盖在6个div上 给input设置透明(…

LabVIEW开发油气井管道内无线通信微波系统

LabVIEW开发油气井管道内无线通信微波系统 由于石油和天然气行业的重要性,许多公司和研究人员正在研究和开发新的通信和传感器技术。需要解决的问题与管道状况、地震活动、腐蚀水平、可能的气体泄漏检测和其他性能问题的实时和连续监测有关。处理这些问题的最广泛使…

forlium 笔记 Map

用于创建交互式地图 1 主要参数 1.1. location 地图位置 地图的经纬度 import foliumm folium.Map(location[31.186358, 121.510256],zoom_start15)m 1.2 tiles 内置样式 默认是OpenStreetMap 1.2.1 Stamen Terrain 它强调了地形特征,如山脉、河流和道路 m …

9、Spring_事务管理

六、Spring 事务管理 1.Spring 事务简介 事务概述:保证数据库操作同时成功或者同时失败 Spring 事务的概述:在数据层保证数据库操作同时成功或者同时失败 2.转账案例分析 转账肯定有一个业务方法:给转出用户减钱,给转入用户加…

Java+Github+Jenkins部署

Java项目—Jenkins部署笔记 一,准备 一台服务器操作系统,示例为ubuntu 22.0.4 可运行lsb_release -a查看 二,安装 docker 更新软件包列表: sudo apt update安装必要的软件包,以便使用HTTPS通过APT下载软件包&#x…

财务大模型,产业路向何方?

无论过去还是将来,财务的角色和意义都不会被颠覆,只会被清晰化,只会回归到本源。 作者|思杭 编辑|皮爷 出品|产业家 “今年,我们被市场倒逼着做数字化转型。一切都被打乱了,像这样的转变是前所未有的。到了8月&…

泰迪大数据实训平台产品介绍

大数据产品包括:大数据实训管理平台、大数据开发实训平台、大数据编程实训平台等 大数据实训管理平台 泰迪大数据实训平台从课程管理、资源管理、实训管理等方面出发,主要解决现有实验室无法满足教学需求、传统教学流程和工具低效耗时和内部教学…

hadoop 学习:mapreduce 入门案例三:顾客信息与订单信息相关联(联表)

这里的知识点在于如何合并两张表,事实上这种业务场景我们很熟悉了,这就是我们在学习 MySQL 的时候接触到的内连接,左连接,而现在我们要学习 mapreduce 中的做法 这里我们可以选择在 map 阶段和reduce阶段去做 数据: …

聚合支付-第3章-支付宝支付接入指南

惠民支付 第3章讲义-支付宝接入指南 支付宝接入步骤: 1、进入网址https://open.alipay.com/develop/manage 2、扫码登录支付宝账号,控制台,最下边有一个沙箱环境 3、在“支付宝开放平台开发助手”软件中生成密钥,点击生成密钥,保…

Axure RP 8.1.0.3400(原型设计工具)

Axure RP 8是一款原型设计工具,它提供了丰富的功能和工具,帮助用户创建高质量的网页、移动应用和桌面软件原型。以下是Axure RP 8的一些特色介绍: 强大的交互设计:Axure RP 8支持创建复杂的动画和过渡效果,让你的原型更…

一文彻底扒光 Handler

作者:HenAndroid 典型的生产者-消费者模式。 Android跨进程要掌握的是Binder, 而同一进程中最重要的应该就是Handler 消息通信机制了。我这么说,大家不知道是否认同,如果认同,还希望能给一个关注哈。 Handler 是什么?…

AI智能语音识别模块(一)——离线模组介绍

文章目录 离线语音控制模块简介引脚定义开发平台总结 离线语音控制模块 简介 这是一款低成本,低功耗,小体积的高性价比离线语音识别开发板。能快速学习、验证离线语音控制各种外设,如继电器、LED灯,PWM调光等。 板载了Micro USB接…

MySQL DATE_SUB的实践

函数简介DATE_SUB()函数从DATE或DATETIME值中减去时间值(或间隔)。 下面说明了DATE_SUB()函数的语法: DATE_SUB(start_date,INTERVAL expr unit); DATE_SUB()函数接受两个参数: start_date是DATE或DATETIME的起始值。 expr是一个字符串,用于确…