混沌工程-经典案例分享

news2024/10/5 14:41:14

目录

前言

案例

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.coloradmin.cn/o/1494020.html

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

相关文章

基于Skywalking开发分布式监控(四)一个案例

上一篇我们简单介绍了基于SkyWalking自定义增强的基本架构,即通过把Trace数据导入数据加工模块进行加工,进行持久化,并赋能grafana展示。 现在我们给出一个例子,对于量化交易系统,市场交易订单提交,该订单…

2024国内知名大厂Java岗面经,java容器面试题

前言 刚刚过去的双十一,让“高性能”“高可用”“亿级”这3个词变成了技术热点词汇,也让很多人再次萌发成为「架构师」的想法。先问大家一个问题:你觉得把代码熟练、完成需求加上点勤奋,就能成为架构师么?如果你这么认…

Ubuntu22.04系统 安装cAdvisor提示找不到 CPU 的挂载点错误解决办法。

如果我们在安装cAdvisor时容器启动不起来 查看日志如下图所示 1、查看cgroup文件系统是v2 还是 v1 mount | grep cgroup 如图所示我的是v2 , cAdvisor 目前的最新版本(v0.39.0)仍然只支持 cgroup v1,不支持 cgroup v2。因此&#…

PRewrite: Prompt Rewriting with Reinforcement Learning

PRewrite: Prompt Rewriting with Reinforcement Learning 基本信息 2024-01谷歌团队提交到arXiv 博客贡献人 徐宁 作者 Weize Kong,Spurthi Amba Hombaiah,Mingyang Zhang 摘要 工程化的启发式编写对于LLM(大型语言模型)应…

大数据分析技术工程师CCRC-BDATE

大数据分析技术工程师介绍 大数据始于科技之美,归于创造价值。大数据时代,“谁用好数据,谁就能把握先机、赢得主动”。当下数据驱动的电信、社交媒体、生物医疗、电子政务商务等行业都在产生着海量的数据,随着大规模数据关联、交叉…

vue基本用法

文本插值 {{}} 用来绑定data方法返回的对象属性 v-bind:为标签的属性绑定data方法中返回的属性 事件绑定v-on:xxx 简写为xxx 双向绑定v-model 条件渲染 v-if v-else v-else-if 动态渲染页面元素

兰德:《中国量子技术的产业基础和军事部署报告》

2月1日,美国智库兰德公司发表中国量子技术的产业基础和军事部署报告,该报告强调了美国和中国均视量子科学和技术为确保各自经济和军事领导地位的战略要素。还指出量子科学是一项军民两用的技术。 该报告提到目前美国政府已经为量子科学制定了一项公开的国…

SoraAI优先体验资格注册教程

SoraA1视频工具优先体验资格申请 申请网址:https://openai.com/form/red-teaming-network 申请步骤: 填写基础信息 请使用英文根据内容填写以下内容,名、姓、电子邮件、居住国家、组织隶属关系(如果有)、教育水平 、学位(哪个领…

数据库-DDL

show databases; 查询所有数据库 select database(); 查询当前数据库 use 数据库名; 使用数据库 creat database[if not exists] 数据库名…

【python】六个常见爬虫案例【附源码】

大家好,我是博主英杰,整理了几个常见的爬虫案例,分享给大家,适合小白学习 一、爬取豆瓣电影排行榜Top250存储到Excel文件 近年来,Python在数据爬取和处理方面的应用越来越广泛。本文将介绍一个基于Python的爬虫程序&a…

leetcode热题HOT 54. 螺旋矩阵(59. 螺旋矩阵 II)

一、问题描述: 给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。 二、解题思路: 整体思路就是模拟螺旋遍历矩阵的过程,依次遍历外围边界的元素,并将其按顺序存入结果列表…

vant van-field 密码输入框小程序里隐藏、显示密码bug总结

老规矩先上效果图: vant 输入框组件 密码的隐藏与显示功能: 注: 用password属性控制密码的显示与隐藏 不要用type属性,type属性在真机上有时会没有效果 1、当然如果只用typepassword 不需要切换显示、隐藏也可以使用。 2、如果用到了密码的显示与…

计算机mfc140.dll文件缺失的修复方法分析,一键修复mfc140.dll

电脑显示mfc140.dll文件缺失信息时,不必担心,这通常是个容易解决的小问题。接下来让我们详细探究并解决mfc140.dll文件缺失的状况。以下将详述相应的解决方案,从而帮助您轻松克服这一技术难题。通过几个简单步骤,即可恢复正常使用…

mac使用Vscode运行C语言遇到的问题

mac系统如何使用vscode运行C语言 Unable to start debugging. Program path ‘/Users/ling/Learning/frontEnd/web/Test/main.cpp’ is missing or invalid. LLDB failed with message: Command ‘file-exec-and-symbols’. Target binary ‘/Users/ling/Learning/frontEnd/we…

(2024,SD3,整流流,定制的采样器,DiT)扩展整流流 transformer 以实现高分辨率图像合成

Scaling Rectified Flow Transformers for High-Resolution Image Synthesis 公和众和号:EDPJ(进 Q 交流群:922230617 或加 VX:CV_EDPJ 进 V 交流群) 目录 0. 摘要 2. 流的无模拟训练 3. 流轨迹 3.1. RF 模型的定…

运维知识点-ACCESS

ACCESS access 扫出后缀为asp的数据库文件 迅雷下载,直接改后缀为.mdbMicrosoft Office Access是由微软发布的关系数据库管理系统。它结合了 MicrosoftJet Database Engine 和 图形用户界面两项特点,是 Microsoft Office 的系统程序之一。 Microsoft Off…

商城|商城小程序|基于微信小程序的智慧商城系统设计与实现(源码+数据库+文档)

商城小程序目录 目录 基于微信小程序的智慧商城系统设计与实现 一、前言 二、系统设计 三、系统功能设计 1、用户信息管理 2、 商品信息管理 3、公告信息管理 4、论坛信息管理 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 …

防患未然,OceanBase巡检工具应用实践——《OceanBase诊断系列》之五

1. OceanBase为什么要做巡检功能 尽管OceanBase拥有很好的MySQL兼容性,但在长期的生产环境中,部署不符合标准规范、硬件支持异常,或配置项错误等问题,这些短期不会出现的问题,仍会对数据库集群构成潜在的巨大风险。为…

几种电脑提示mfc140.dll丢失的解决方法,以及如何预防mfc140.dll丢失

mfc140.dll真是一个超级关键的动态链接库文件!一旦这个文件不翼而飞,可能会导致一些程序无法顺利运行,甚至给系统带来麻烦。但别担心!遇到mfc140.dll文件丢失的情况,我们有一堆应对措施可以立马施行,确保问…

qnx display

05-SA8155 QNX Display框架及代码分析(1)_openwfd-CSDN博客 backlight p: 0 t: 0 00000 SHD -----ONLINE----- 2024/03/06 13:49:22.046 backlight p:1060958 t: 1 00000 ERR backlight_be[backlight_be.c:284]: pthread_create enter 2024/03/06 13…