混沌工程-经典案例分享

目录

前言

案例

1、强弱依赖不合理

2、预案不生效

3、异常数据不兼容

4、监控体系缺陷

5、系统缺整体架构设计

总结


前言

        我们公司从启动混沌工程到现在已经几乎覆盖了线上的所有核心业务,先后进行过2000次演练共挖掘出120个漏洞。这些漏洞有些得了及时修复避免了生产故障的发生,也有些因为各种原因推进缓慢没能在引爆之前得到修复,通过血泪教训验证了混沌工程的价值。本篇将通过梳理这120个漏洞以及我们混沌中发现的一些共性的问题拿来一起分享下,希望对大家有所帮助。

案例

1、强弱依赖不合理

        我们在演练电商业务线时发现当某商品的库存服务不可访问时会导致该商品页无法正常打开,这是个典型的强弱依赖不合理的经典案例。

         在应用场景中商品信息与库存信息应该是弱依赖,因为用户只是想浏览和了解商品而已,凭什么因为不知道有多少货就不给用户看了呢?库存信息与交易信息才是强依赖,当用户真正决定购买时才涉及到有多少货的问题。

        这种强弱依赖不仅是代码端做好降级判断等问题,更理想的做法是做好服务拆分,从物理上进行节点的隔离,这样就能更好的根据强弱依赖进行不同等级的高可用设计。例如商品的评论服务节点对于所有的电商模块来说都是弱依赖,那我们就可以在评论相关的资源配备上采用更激进的策略节约成本

2、预案不生效

        案例场景:A调用B、B调用C,当B调用不到C时就用本地缓存获取数据返回给A。

        这个场景中B的设计就是典型的利用缓存做降级的预案设计,每个研发可能都会信誓旦旦的表示这么简单的逻辑绝对不会有问题,但我们在实际的混沌演练中确实发现此类预案没有生效!不生效的原因基本都聚焦到对降级条件的判断上。B从C拿到不完整的数据要不要启用本地缓存?B到C网路延时、延时多少要用缓存?

3、异常数据不兼容

        混沌工程在网络层面的故障注入常用的方法是模拟4层异常,例如域名解析错误、网络延时、通信丢包、网络不通等,这确实可以发现大部分因网络问题引发的故障,但不能发现7层引发的问题,例如异常的数据格式。

        案例场景:A调用B,如果B返回200就从B的body中按协商好的Json格式进行解析。

        那么问题来了,当B返回非200A会怎样?返回200但body无数据A会怎样?body有数据但Json格式与协商不一样会怎样?甚至说body返回的就不是一个Json会怎样?这些异常是真实会发生而且一定会发生的,那么演练一定要覆盖到,所以这里就需要用到7层的网络异常注入了。

4、监控体系缺陷

        有个成语叫“手眼通天”,混沌工程中像ChaosBlade这类的异常注入工具只是我们的“手”,手帮我们造成混乱,但混乱造成的影响需要靠“眼”来看到,监控体系就是混沌工程的“眼”。手的能力和眼的视野决定了混沌演练效果的上限。 实践中发现很多时候我们的“眼”是有缺陷的,明明用户体验已经严重受损但我的监控健康度仍然100分;明明用户体验一切正常但我们的告警已经达到灾难级,或者演练时我们需要关注某些指标但我们提供不了,这些都是现有监控系统需要优化改造的点。

5、系统缺整体架构设计

        案例:后端服务分别部署在两个集群节点,对接同一套数据库,前端通过主域名和备用域名的跨域名重试实现多节点容灾设计,当我们模拟主节点到数据库网络异常时,期望前端通过备用域名仍能提供稳定的用户体验。

        如图:

        经过演练发现用户的前端界面在卡顿6秒后才能正常展示,并不符合我们的预期,于是逐层去分析原因。 

        前端:先尝试主域名请求,因为不清楚后端服务是否具备幂等性所以必须等待后端明确返回非200的状态码后才能进行跨域名重试。

        后端:数据库链接超时2秒,重试3次,3次都不成功返回500+。

        前后端的设计都合情合理,甚至说无懈可击,但组合在一起就造成了这6秒延时,从系统架构来看明明可以快速失败进行跨域名重试,从而提高用户体验的,而这些设计并不是前端、后端具体某一个团队负责的,需要整体架构设计与相应的规范。

总结

        混沌工程是一种产生新数据的技术,通过演练不仅能提前发现隐患避免故障的大范围爆发,还能发现运维体系的盲区和整体架构设计的缺陷,可以说混沌工程本身就是优秀架构设计的试金石。

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

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

相关文章

DevEco Studio编译时候自动生成js、js.map文件导致项目无法运行

这算是开发工具的bug吧,估计后期能修复。 解决办法,手动删除.js、.js.map文件即可; 文件太多,删除很麻烦,有个大佬写了个插件,可一键删除:ArkCompilerSupport DevEco Studio 运行项目有时会自动…

二叉树进阶leetcode

606. 根据二叉树创建字符串 要点:前序遍历,当左子树为空时,右结点有数字时要给左边加括号 class Solution { public:string tree2str(TreeNode* root) {string s;//创建一个字符串if(rootnullptr){return s;}sto_string(root->val);//保存…

网络、网络协议模型、UDP编程——计算机网络——day01

今天来到了网络编程,主要讲了网络、网络协议模型以及UDP编程 网络 网络主要是进行:数据传输和数据共享 网络协议模型 OSI协议模型应用层 实际发送的数据表示层 发送的数据是否加密会话层 是否建立会话连接传…

调研图基础模型(Graph Foundation Models)

🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ 图基础模型(Graph Foundation Models,简称 GFMs) 是一种经过预训练的图大模型,旨在处理不同领域的图数据和任务。让我们详细探讨一下这个概念。 Github …

uniapp让输入框保持聚焦状态,不会失去焦点

使用场景:当输入框还有发送按钮的时候,点击发送希望软键盘不消失,还可以继续输入,或者避免因输入图片标签造成的屏闪问题 多次尝试后发现一个很实用的方法,适用input输入框和editor输入框 解决办法:把cli…

AXI4总线解析

一、读地址 AWVALID和AWREADY同时为高时,在这个上升沿,图中黄线,将接下来的数据写入地址40000000中。 在

基于状态机的按键消抖实现

摸鱼记录 Day_14 !(^O^)y review 在day_13中以按键状态判断为例学习了状态分析基于状态机的按键消抖原理-CSDN博客 分析得到了下图: 今日任务:完成此过程 !(^O^)y 小梅哥对应视频: 15B 基于状态机的按键消抖Verilog实现_哔哩哔哩…

DataFunSummit 2023:洞察现代数据栈技术的创新与发展(附大会核心PPT下载)

随着数字化浪潮的推进,数据已成为企业竞争的核心要素。为了应对日益增长的数据挑战,现代数据栈技术日益受到业界的关注。DataFunSummit 2023年现代数据栈技术峰会正是在这样的背景下应运而生,汇聚了全球数据领域的精英,共同探讨现…

Linux 文件操作命令

1 文件与目录操作 cd /home 进入 ‘/home’ 目录 cd .. 返回上一级目录cd ../.. 返回上两级目录cd - 返回上次所在目录cp file1 file2 将file1复制为file2cp -a dir1 dir2 复制一个目录 cp -a /tmp/dir1 . 复制一个…

【Qt】初识Qt

文章目录 一. 行业岗位介绍二. 什么是客户端?三. GUI 开发的各自技术方案四. 什么是框架?五. Qt 的发展史五. Qt 支持的系统六. Qt 的优点 一. 行业岗位介绍 二. 什么是客户端? 既然 Qt 是用来进行客户端开发的,那我们就要了解什…

如何保证ES和数据库的数据一致性?

在业务中,我们通常需要把数据库中的数据变更同步到ES中,那么如何保证数据库和ES的一致性呢?通常有以下几种做法: 双写 在代码中,对数据库和ES进行双写,并且先操作本地数据库,后操作ES&#xff…

Ubuntu20.04安装并配置vscode

Ubuntu20.04安装并配置vscode vscode安装miniconda安装创建虚拟python3.8环境pytorch和匹配的cuda安装 vscode安装 VSCode可以通过 Snapcraft 商店或者微软源仓库中的一个 deb 软件包来安装。 我们这里选用安装VSCode snap版,打开你的终端(CtrlAltT)并且运行下面的…

px2rem实现vue项目响应式布局

第一步 首先需要在项目中安装px2rem插件 npm install postcss-px2rem px2rem-loader --save 第二步 在项目src目录下新建util文件夹,在util文件夹下新建rem.js文件,内容如下: // rem等比适配配置文件 // 基准大小 const baseSize 14 //…

【机器学习300问】27、什么是决策树?

〇、两个预测任务 (1)任务一:银行预测偿还能力 当前,某银行正致力于发掘潜在的放贷用户。他们掌握了每位用户的三个关键特征:房产状况、婚姻状况以及年收入。此外,银行还拥有过往这些用户的债务偿还能力的…

Linux系统——LVS-DR群集部署及拓展

目录 引言 1.LVS的工作模式及其工作过程 2.列举出LVS调度算法 3.LVS调度常见算法(均衡策略) 3.1固定调度算法:rr,wrr,dh,sh 3.2动态调度算法:wlc,lc,lblc 4.LVS三种工作模式区别 一、I…

更快更强,Claude 3全面超越GPT4,能归纳15万单词

ChatGPT4和Gemini Ultra被Claude 3 AI模型超越了? 3月4日周一,人工智能公司Anthropic推出了Claude 3系列AI模型和新型聊天机器人,其中包括Opus、Sonnet和Haiku三种模型,该公司声称,这是迄今为止它们开发的最快速、最强…

Linux系统——SElinux

目录 前言 一、SELinux 的作用及权限管理机制 1.SELinux 的作用 1.1DAC 1.2MAC 1.3DAC 和 MAC 的对比 2.SELinux 基本概念 2.1主体(Subject) 2.2对象(Object) 2.3政策和规则(Policy & Rule)…

Nginx+Tomcat实现负载均衡动静分离

目录 一、背景与环境 1. 背景 2. 环境图示 3. 目标 二、操作过程 1. 第一层 2. 第二层 一、背景与环境 1. 背景 在一个Web应用程序中,通常会将动态内容(由Tomcat处理)与静态内容(如图片、CSS、JavaScript文件等&#xff…

什么是5G边缘计算网关?

随着5G技术的飞速发展和普及,边缘计算作为5G时代的关键技术之一,正日益受到业界的关注。而5G边缘计算网关,作为连接5G网络和边缘计算节点的桥梁,扮演着至关重要的角色。HiWoo Box,作为一款卓越的5G边缘计算网关&#x…

springcloud:3.5测试慢调用熔断降级

服务提供者【test-provider8001】 Openfeign远程调用服务提供者搭建 文章地址http://t.csdnimg.cn/06iz8 相关接口 测试远程调用:http://localhost:8001/payment/index 服务消费者【test-consumer-resilience4j8004】 Openfeign远程调用消费者搭建 文章地址http://t…