当前位置: 首页 > news >正文

故障演练 | 微服务架构下如何做好故障演练

前言

微服务架构场景中,应用系统复杂切分散。长期运行时,局部出现故障时不可避免的。如果发生故障时不能进行有效反应,系统的可用性将极大地降低。

什么是故障演练

故障演练是指模拟生产环境中可能出现的故障,测试系统或应用在面对故障时的反应和响应能力。

故障演练可以模拟各种故障情况(网络故障、数据库故障、服务过载,CPU或内存异常等)。

为什么需要故障演练

故障演练是微服务架构下非常重要的实践,用以测试系统或应用在面对故障或缺陷时的反应表现及其恢复能力。

通过故障演练,至少可以在以下几方面获得收益:

  1. 提前发现、预测生成环境可能出现的部分故障,快速响应,防止故障扩散。
  2. 在演练中识别系统和应用程序的风险和漏洞,取必要的纠正措施。
  3. 改进团队响应流程 。 故障演练可以促进团队沟通、理解和协作,完善生产环境的排障流程。

故障演练的目标

故障演练的目标是尽可能模拟真实世界中的故障情况,战略性推动全面和深入的风险管理与测试。

故障演练的基本流程

故障演练大致可以分为:计划、演练、评价、改进四个阶段,其基本流程如下图所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

云原生、微服务架构场景下故障模拟的挑战

微服务场景下故障演练的挑战

  1. 微服务的架构复杂性:微服务由许多小型、相互依赖的服务组成,部署架构复杂。在演练过程中需要考虑服务间的交互和依赖。
  2. 演练环境难以复制:故障演练需要尽可能确保演练环境和生产环境的一致性。在微服务应用程序中,数据在多个服务之间相互流动,生成环境的数据和设施不一定能完全复制到演练环境。
  3. 监控和记录难度大 – 在微服务场景下,服务分散,通常需要更强大的监控和日志记录方案来跟踪故障的发生并找到它们的原因。
  4. 成本和资源问题:微服务架构通常会占用更多的计算、存储、网络资源,而且部署演练环境所需要的人力投入也更大。
  5. 团队协调:微服务架构下,系统通常是有不同的团队协作搭建的,因而故障演练也常常涉及到多个团队的协作沟通。

云原生、微服务场景下的故障演练工具

以下是云原生、微服务场景下常用的故障演练工具:

  1. Chaos Mesh:Chaos Mesh 是一个开源的云原生混沌工程平台,提供丰富的故障模拟类型,具有强大的故障场景编排能力,方便用户在开发测试中以及生产环境中模拟现实世界中可能出现的各类异常,帮助用户发现系统潜在的问题。
  2. Gremlin:这是一款用于可靠性测试和混沌工程的工具。可以模拟真实流量、人工输入等方式来模拟各种稳定性问题,如网络延迟、磁盘故障等,而不是仅仅使用硬编码的方法 simulations 的混沌工程平台。Gremlin 完全云托管,可在云和本地基础架构上使用。
  3. chaosmonkey:Chaos Monkey 负责随机终止生产中的实例,以确保工程师实施其服务以适应实例故障。
  4. Kube-monkey:kube-monkey 是 Netflix 的 Chaos Monkey for Kubernetes 集群的实现。这是一款开源的 Kubernetes 故障模拟工具。它随机删除集群中的 Kubernetes (k8s) Pod,鼓励和验证容错服务的开发。
  5. LitmusChaos:Litmus 是一个开源混沌工程平台,使团队能够通过以受控方式引入混沌测试来识别基础设施中的弱点和潜在中断。

如何进行故障演练

故障演练通常可以按照面的流程和步骤来进行:
在这里插入图片描述

演练前 | 确认演练对象与目标

  • 确定演练对象,例如可以是整个系统,某个部分,或者某个服务等等;
  • 确定演练目标,包括期望模拟出哪些故障场景,如网络故障,服务器故障,系统缓慢等等;
  • 确定所需的数据和监控指标,以便评估演练质量和结果。

演练前 | 准备演练环境

  • 确定演练环境(包括硬件、网络、安全等等),尽可能接近生产环境;
  • 决定是否要使用模拟器或其他形式的虚拟基础设施,并准备相应的实验数据;
  • 解除故障演练的相关限制。

演练前 | 制定故障应对策略

  • 按照目标和需求开发故障响应计划,包括如何快速定位问题、处理方法和流程、在哪些问题下开展演练等等;
  • 为处理问题的步骤定制标准操作程序,以便在演练期间可以更好的实施。

演练前 | 协调演练人员

  • 确定相应的演练人员;
  • 分配合适的职责和任务,以确保演练进度和目标的完成;
  • 指定一个负责人,协调和管理演练过程。

演练前 | 演练周知

  • 在演练开始前,向参与演练的用户、管理员、支持或其他流程中的责任人员发送通知,以确保他们知道这个演练是为了什么,何时开始,以及他们可能会受到哪些潜在影响;
  • 向所有相关部门进行演练周知,确保相关人员充分了解和理解演练内容并能够按计划进行。

演练中 | 故障注入

  • 使用已准备好的故障注入测试工具注入故障或模拟所需故障场景;
  • 根据演练计划,按照预先制定的步骤逐步模拟不同的故障。

演练中 | 观察与记录

  • 在故障注入后,观察并记录故障的发生,并确认监控数据的变化;
  • 确认是否已经按照预期的流程进行了处理,并将事件的应对措施记录并报告。

演练中 | 故障响应

  • 当出现故障时,按照预先制定的响应流程进行处理,确保演练不影响日常生产;
  • 在故障修复后,进行必要的后续操作,例如清理环境并恢复生产流程。

演练后 | 清理现场,恢复环境

  • 在演练完后,清理测试环境和测试数据,确保不会影响到生产环境;
  • 恢复环境到正常状态,并检查环境是否已完全恢复正常状态,包括检查应用程序、网络、系统状态,确保各项指标均处于正常运行状态。

演练后 | 报告与总结

  • 汇总并报告故障演练的结果,包括每个故障场景的模拟效果、记录的数据和监控指标等;
  • 分享演练中发现的问题,并制定改进方案,推进后续工作。

演练后 | 后续规划:系统改进与流程改进

  • 根据演练结果和总结,制定后续系统改进措施,进一步提高系统的可用性、容错性等;
  • 优化故障响应流程,提升故障修复效率。
  • 故障演练常规化,不断调整和优化演练流程和方法,不断提高演练的质量和效率,并能够更好地支持未来的需求和挑战。、

我的公众号

在这里插入图片描述

相关文章:

故障演练 | 微服务架构下如何做好故障演练

前言 微服务架构场景中,应用系统复杂切分散。长期运行时,局部出现故障时不可避免的。如果发生故障时不能进行有效反应,系统的可用性将极大地降低。 什么是故障演练 故障演练是指模拟生产环境中可能出现的故障,测试系统或应用在…...

Python爬虫-获取汽车之家车家号

前言 本文是该专栏的第9篇,后面会持续分享python爬虫案例干货,记得关注。 地址:aHR0cHM6Ly9jaGVqaWFoYW8uYXV0b2hvbWUuY29tLmNuL0F1dGhvcnMjcHZhcmVhaWQ9MjgwODEwNA== 需求:获取汽车之家车家号数据 笔者将在正文中介绍详细的思路以及采集方法,废话不多说,跟着笔者直接往…...

No195.精选前端面试题,享受每天的挑战和学习

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…...

pytest与testNg自动化框架

一.pytest 1.安装pytest: pip install pytest 2.编写用例 - 收集用例 - 执行用例 - 生成报告 3.pytest如何自动识别用例  识别规则如下: 1、搜索根目录:默认从当前目录中搜集测试用例,即在哪个目录下运行pytest命令,…...

数据库安全:Hadoop 未授权访问-命令执行漏洞.

数据库安全:Hadoop 未授权访问-命令执行漏洞. Hadoop 未授权访问主要是因为 Hadoop YARN 资源管理系统配置不当,导致可以未经授权进行访问,从而被攻击者恶意利用。攻击者无需认证即可通过 RESTAPI 部署任务来执行任意指令,最终完…...

前端---认识HTML

文章目录 什么是HTML?HTML的读取、运行HTML的标签注释标签标题标签段落标签换行标签格式化标签图片标签a标签表格标签列表标签表单标签form标签input标签文本框单选框复选框普通按钮提交按钮文件选择框 select标签textarea标签特殊标签div标签span标签 什么是HTML&a…...

竞赛 题目:基于FP-Growth的新闻挖掘算法系统的设计与实现

文章目录 0 前言1 项目背景2 算法架构3 FP-Growth算法原理3.1 FP树3.2 算法过程3.3 算法实现3.3.1 构建FP树 3.4 从FP树中挖掘频繁项集 4 系统设计展示5 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 基于FP-Growth的新闻挖掘算法系统的设计与实现…...

保姆级jupyter lab配置清单

❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️ 👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博…...

数据结构预算法--链表(单链表,双向链表)

1.链表 目录 1.链表 1.1链表的概念及结构 1.2 链表的分类 2.单链表的实现(不带哨兵位) 2.1接口函数 2.2函数的实现 3.双向链表的实现(带哨兵位) 3.1接口函数 3.2函数的实现 1.1链表的概念及结构 概念:链表是一种物理存储结…...

数据结构线性表——栈

前言:哈喽小伙伴们,今天我们将一起进入数据结构线性表的第四篇章——栈的讲解,栈还是比较简单的哦,跟紧博主的思路,不要掉队哦。 目录 一.什么是栈 二.如何实现栈 三.栈的实现 栈的初始化 四.栈的操作 1.数据入栈…...

自定义 springboot 启动器 starter 与自动装配原理

Maven 依赖 classpath 类路径管理 Maven 项目中的类路径添加来源分为三类 自定义 springboot starter starter 启动器定义的规则自定义 starter 示例 自动装配 文章链接...

16 _ 二分查找(下):如何快速定位IP对应的省份地址?

通过IP地址来查找IP归属地的功能,不知道你有没有用过?没用过也没关系,你现在可以打开百度,在搜索框里随便输一个IP地址,就会看到它的归属地。 这个功能并不复杂,它是通过维护一个很大的IP地址库来实现的。地址库中包括IP地址范围和归属地的对应关系。 当我们想要查询202…...

vb.net圣经带快捷键,用原装的数据库

Imports System.Data.SqlServerCe Imports System.Text.RegularExpressions Imports System.Data.OleDbPublic Class Form1Dim jiuyue As String() {"创", "出", "利", "民", "申", "书", "士", "…...

Unity中Shader的雾效

文章目录 前言一、Unity中的雾效在哪开启二、Unity中不同种类雾的区别1、线性雾2、指数雾1(推荐用这个,兼具效果和性能)3、指数雾2(效果更真实,性能消耗多) 三、在我们自己的Shader中实现判断,是…...

企业微信开发教程一:添加企微应用流程图解以及常见问题图文说明

最近在前辈的基础上新添加了一个企微应用,过程中遇到了一些卡点,这里一一通过图片标注与注释的方式记录一下,希望能给后来人提供一些清晰明了的帮助,话不多说,大家直接看图吧。 (文中包括一些本项目独有的配…...

【LeetCode】67. 二进制求和

67. 二进制求和 难度:简单 题目 给你两个二进制字符串 a 和 b ,以二进制字符串的形式返回它们的和。 示例 1: 输入:a "11", b "1" 输出:"100"示例 2: 输入:a "…...

【LeetCode刷题笔记】二叉树(一)

102. 二叉树的层序遍历 解题思路: 1. BFS广度优先遍历 ,使用队列,按层访问 解题思路: 2. 前序遍历 , 递归 ,在递归方法参数中,将 层索引...

NativeScript开发ios应用,怎么生成测试程序?

在 NativeScript 中,要部署 iOS 应用程序,你需要遵循以下一般步骤: 1、确保开发环境: 确保你的开发环境中已经安装了 Xcode,并且你有一个有效的 Apple 开发者账号。 2、构建 iOS 应用: 在你的 NativeScri…...

Js面试题:说一下js的模块化?

作用: 一个模块就是实现某个特定功能的文件,在文件中定义的变量、函数、类都是私有的,对其他文件不可见。 为了解决引入多个js文件时,出现 命名冲突、污染作用域 等问题 AMD: 浏览器端模块解决方案 AMD即是“异步模块定…...

媒体转码软件Media Encoder 2024 mac中文版功能介绍

Media Encoder 2024 mac是一款媒体转码软件,它可以将视频从一种格式转码为另一种格式,支持H.265、HDR10等多种编码格式,同时优化了视频质量,提高了编码速度。此外,Media Encoder 2024还支持收录、创建代理和输出各种格…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动

一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...

23-Oracle 23 ai 区块链表(Blockchain Table)

小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?

论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

如何在看板中有效管理突发紧急任务

在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...

相机从app启动流程

一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)

文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...

【Go语言基础【13】】函数、闭包、方法

文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...

20个超级好用的 CSS 动画库

分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...

Ubuntu Cursor升级成v1.0

0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开,快捷键也不好用,当看到 Cursor 升级后,还是蛮高兴的 1. 下载 Cursor 下载地址:https://www.cursor.com/cn/downloads 点击下载 Linux (x64) ,…...

阿里云Ubuntu 22.04 64位搭建Flask流程(亲测)

cd /home 进入home盘 安装虚拟环境: 1、安装virtualenv pip install virtualenv 2.创建新的虚拟环境: virtualenv myenv 3、激活虚拟环境(激活环境可以在当前环境下安装包) source myenv/bin/activate 此时,终端…...