混沌工程初分享

news2024/11/25 1:05:24

混沌工程初分享

一、什么是混沌工程
1、什么是混沌
   混沌是一种现象,在一个动力系统中,因为各种不同的参数变化导致的一系列的连锁反应。

比如:

   在南美洲亚马逊河流域热带雨林中的蝴蝶,偶尔的几次振翅,可以在两周以后引起美国得克萨斯州的一场在龙卷风。

   因为蝴蝶振动翅膀的行为,导致其身边的空气系统发生变化,并产生微弱的气流,而微弱的气流的产生又会引起四周空气或其他系统产生相应的变化,由此引起一个连锁反应,最终导致其他系统的极大变化。
2、什么是混沌测试
    混沌测试 是一种 可试验的、基于系统 的方法来 处理大规模分布式系统中的混乱问题。

    通过不断试验,观察系统的行为和反应。了解系统的实际能承受的韧性边界并建立信心,总而言之—— 以试验的方法尽早揭露系统弱点。
3、如果不做混沌测试
  我们会尽可能多地编写单元测试,覆盖代码逻辑;

  进行足够多的系统测试、场景覆盖测试,确保我们的系统可以与其他组件一起工作;

  进行回归测试,确保新功能与老系统的兼容性等。

  还会执行性能测试,用以改进处理数百万次请求的性能。

  可是,这些 对于分布式系统来说还远远不够。




 无论我们做了多少测试,仍然无法100%保证我们的系统能够应对生产环境的各种不可预测性。

我们可能会遇到以下的应用层、数据层、中间件层、操作系统层、存储层、网络层存在的各种问题。

在这里插入图片描述

所以为了让我们的分布式系统更加健壮,我们需要注入各种可以控制的异常;

并进行全链路实时监控,全面掌握注入异常可能导致的系统问题;

从而 提升系统容错性,建立系统抵御生产环境中不可预知问题的信息。

4、业内混沌工程有哪些

在这里插入图片描述

  • Netflix 是混沌工程的著名先驱,也是最早将其用于生产系统的公司之一。并出版了混沌工程领域内的首部书籍《混沌工程:Netflix 系统稳定性之道》,另外其开源混沌项目-Chaos Monkey (用于向基础设施以及业务系统中注入各类故障类型。这只 “猴子” 就是混沌工程起源。)

  • 阿里巴巴是国内较早开始探索混沌工程并做出开源的公司,其开源项目 ChaosBlade可以结合阿里云进行 chaos 实验。

  • PingCap 作为国内优秀的数据库领域开源公司,在最近开源了内部混沌工程实践平台 - Chaos
    Mesh。(一个云原生的混沌测试平台,Chaos Mesh 提供在 Kubernetes 平台上进行混沌测试的能力。让应用跟混沌在
    Kubernetes 上共舞。)

  • Gremlin 为一家混沌工程商业化公司,该公司提供了一个混沌工程实验平台,用于在已安装 Gremlin
    守护进程(代理)的计算设备上执行和管理混沌实验。同时提出了 chaos gameday
    的概念。(目的是通过有目的地、定期地、创建重大故障来提高可靠性。它们还有助于提升混沌工程的价值)

  • 字节跳动早期在内部使用的故障演练平台,主要通过网络干扰模拟下游依赖故障。

5、不同角色混沌测试中的任务

在这里插入图片描述
架构师:验证系统架构的容错能力

    开发&运维:提高故障的应急效率

    测试:提早暴露线上问题,降低故障复发率

    产品&设计:提升客户使用体验
二、混沌测试梳理思路

在这里插入图片描述

1、被测服务链路梳理
 -数据链路(进直播间接口)

链路追踪:

1、使用服务链路梳理平台对被测服务的上下游依赖进行梳理

梳理服务依赖

2、强弱依赖梳理:梳理核心接口依赖,选择接口,筛选trace,选择查看深层关系依赖图

3、涉及中间件

方法A:

使用traceid 查看数据链路,同时结合代码查看 ,从代码里可得知,网关层,网关层接口有热门房间缓存 是本地缓存(需要重启容器才可清缓存)

由链路可得知,直播间接口 → 房间信息接口 → 勋章信息接口, 勋章信息接口服务依赖redis(后续注入中间件故障时,需在勋章信息接口服务进行)

方法B:服务依赖梳理平台也会罗列 mysql、redis 的配置信息,进行梳理

2、故障类型梳理
-依赖RPC服务故障:强弱依赖超时/不可用/内容异常
-中间件故障:配置中心超时/不可用,Redis 超时/不可用,Databus 超时/不可用

-机器故障:自身宕机、CPU满载、内存异常、磁盘空间满载、网卡流量满载、网络中断
-基础设施故障:数据库超时/不可用,DNS 超时/不可用,机房超时/不可用

故障类型大致分为不可用、不稳定,给出以下参考配置,给出以下参考配置

故障类型 故障配置 备注
服务不稳定

CPU占用率>=70%

内存占用率>=70%

服务网络丢包50%

服务不可用

服务超时

服务网络丢包100%

服务自身宕机(杀pod)

CPU占用率100%

内存占用率100%

数据库中间件不稳定

redis网络丢包50%

db网络丢包50%

数据库中间件不可用

redis连接超时 (注入overlord伴生容器)

redis连接报错

db连接超时

其他 配置中心超时

3、故障方式确认(故障平台)

故障注入平台 平台地址 使用指南 实现原理 支持功能 优缺点
基于chaosblade的FIT平台

uat 环境:http://uat-sre.bilibili.co/chaos/test

pre/prod 环境:http://sre.bilibili.co/chaos/test

2.1 单一实验

容器层面故障:

使用Linux中的一些kill、tc等一些命令,提供故障模拟的能力

模拟CPU负载:CPU100% 就是起个服务,真实的去占用容器的CPU资源,这个是模拟CPU争抢(处理慢或者超时,能响应 也是符合预期的)

模拟IO高:两个进行,一个读、一个写,调用dd命令实现的 IO 高模拟;

模拟端口不通:ChaosBlade 是通过 iptables 命令添加 drop 规则来实现的禁用端口;

模拟丢包: ChaosBlade 是通过 traffic control 添加过滤器队列、分类、过滤器来实现的。也就是 tc 的 netem loss。

模拟网络延迟:通过 traffic control 添加过滤器队列、分类、过滤器来实现的网络延时。也就是 tc 的netem delay。

ChaosBalde 是通过将 tc 来实现的模拟丢包和延时。杀死进程:kill命令

支持系统问题的异常注入:

基础组件:server重启、下游服务宕机、网络延迟&丢包、内存&CPU高负载、中间件Redis、DB、MQ等调用异常

业务:CPU打满、内存异常、磁盘读写故障、数据库、缓存、下游服务的网络延时和丢包、DNS篡改。

服务层面仅支持 A 到B这种故障,B自身这块平台上没支持

优点:

使用chaosblade方案,容器级别 的故障

缺点:

1、手工方式操作,比较繁琐,效率低、难以复用

2、每次执行要手动重新配置

3、容器爆炸半径难以控制

4、不能在线上环境操作

混沌故障平台

uat环境:https://uat-main-infra.bilibili.co/#/applicationHighAvailability/appList

pre/prod 环境:https://main-infra.bilibili.co/#/applicationHighAvailability/appList

故障演练平台-Quick Start	

集成SDK的模式:

调用(redis、mc、grpc、http)组件前,会先调用故障演练的sdk,根据平台配置按需注入错误,拦截到真实组件的调用;

指定集群、节点、接口和用户,在请求粒度上注入错误,实现故障的精确控制。

比如请求redis: 请求-> 故障演练sdk(这里拦截,redis请求报错、超时等) -> redis sdk -> 真实redis

优点:

1、简便选择接口、缓存端口号等;

2、支持实际强弱依赖自动收集

3、可控制爆炸半径范围

4、实时日志等

缺点:

1、使用前,代码需接入sdk(一行代码),对实际性能无影响

2、不支持cpu、内存异常故障

4、故障表现梳理

  • 强弱依赖确认:强弱依赖关系是否合理,弱依赖是否走降级策略
  • 故障后预期:预期是什么(兜底、重试策略、崩溃等),是否可控
  • 指标的确认:故障注入、恢复时间

详情:混沌测试梳理思路

EG : 直播送礼场景梳理:https://info.bilibili.co/pages/viewpage.action?pageId=298977715

以送礼功能为参考:

【混沌测试一期】…/…/混沌工程/【已评审–全量】–混沌测试送礼功能.xmind

【混沌测试二期】s12送礼混沌测试

三、问题详情举例

1、送礼 下游依赖的 用户 服务,对于礼物面板展示属于弱依赖,故障不可用后

预期礼物面板应该展示正常,送礼失败,其他功能不受影响;

实际上游依赖方超时,礼物面板不展示,影响送礼核心功能;

因为针对强依赖我们也需要关注:

2、下游数据能正常返回,即使是错误数据也对主流程(长链路)不影响

3、下游不能将耗时耗尽,影响主流程执行

4、送礼服务缓存超时,查缓存不回源时,礼物面板不展示;预期送礼异常,面板正常返回。【技术预期优化】

5、全屏动画资源配置服务下游 的 飘屏资源服务 注入故障不可用(丢包率100%),Android 配置全屏动画的道具可以正常展示,送礼正常;

预期配置全屏动画的道具不可展示,不能赠送,iOS符合预期。【产品预期优化】

四、Q&A

Q A 备注

五、后续优化

1、根据业务形态,新增不同场景,不同业务的混沌测试。

2、可以从UAT环境逐步走向预发、生产环境。

3、全自动、全随机的混沌测试。通过不定期、不定时的进行随机故障注入。

4、端上能够全时段,全平台,对主干体验进行监控,在故障时,有兜底策略。

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

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

相关文章

下载遥感数据慢的原因

由于地图资源下载工具2.0工具能够“批量下载”、“错误重试”和“断点续传“,我能够长时间下载并监测网络下载的情况及看到错误,因此我对部分下载进行了分析和总结: 这类网站例如:LANDSAT下载网站!下载速度并不是一直慢而是分时段…

A Survey and Framework of Cooperative Perception 论文阅读

论文链接 A Survey and Framework of Cooperative Perception: From Heterogeneous Singleton to Hierarchical Cooperation 0. Abstract 首次提出统一的 CP(Cooperative Percepetion) 框架回顾了基于不同类型传感器的 CP 系统与分类对节点结构&#x…

CCF CSP认证 历年题目自练Day25

题目 试题编号: 201403-3 试题名称: 命令行选项 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述   请你写一个命令行分析程序,用以分析给定的命令行里包含哪些选项。每个命令行由若干个字符串组成,它们之间…

解决远程git服务器路径改变导致本地无法push的问题

解决远程git服务器路径改变导致本地无法push的问题 (1)第一步:查看git配置 git config -l(2)第二步:删除远程git地址 git remote remove origin(3)第三步:再次查看git配…

JUC第十九讲:Java线程池实现原理及其在美团业务中的实践

JUC第十九讲:Java线程池实现原理及其在美团业务中的实践 随着计算机行业的飞速发展,摩尔定律逐渐失效,多核CPU成为主流。使用多线程并行计算逐渐成为开发人员提升服务器性能的基本武器。J.U.C提供的线程池ThreadPoolExecutor类,帮…

Vue中如何进行图像识别与人脸对比(如百度AI、腾讯AI)

Vue中的图像识别与人脸对比 在现代Web应用程序中,图像识别和人脸对比技术越来越受欢迎。它们可以用于各种用途,如人脸识别门禁系统、图像分类和验证等。百度AI和腾讯AI是两个流行的人工智能平台,它们提供了强大的图像识别和人脸对比API。本文…

【threejs】基本编程概念及海岛模型展示逻辑

采用three封装模式完成的海岛动画&#xff08;点击这里查看&#xff09; 直接上代码吧 <template><div class"scene"><video id"videoContainer" style"position:absolute;top:0px;left:0px;z-index:100;visibility: hidden"&g…

37.普利姆(Prim)算法

从一个问题开始 “要想富&#xff0c;先修路”&#xff0c;郝乡长最近为了德胜乡修路的事情愁白了头。 得胜乡有A、B、C、D、E、F、G七个村子&#xff0c;现在需要修路把7个村庄连通&#xff0c;但是又想要耗费的公路建材最少&#xff08;修建公路的总里程最短&#xff09;&…

强烈推荐这5款功能强大的小软件

​ 今日的栽种&#xff0c;明日的果实&#xff0c;今天继续分享五个功能强大的小软件。 1.文本编辑——IDM UltraEdit ​ IDM UltraEdit是一款功能强大的文本编辑器&#xff0c;它支持多种编程语言和文件格式&#xff0c;可以处理大型文件&#xff0c;进行代码折叠&#xff0…

IDEA插件版本升级和兼容新版本idea

1.关于IDEA插件的版本设置问题 打开jetbrains插件市场&#xff0c;随意打开一个插件详情页面的Versions菜单&#xff0c;我们可以看见一个插件包不同时期发布的不同版本&#xff08;Versions&#xff09;&#xff0c;并且每个版本包含了可兼容IDEA或PyCharm的版本范围&#xf…

文件智能管理将文件统一保存在某个指定文件夹中

日常工作中经常会整理文件到指定的文件夹&#xff0c;少的时候用鼠标拖拖&#xff0c;多了就很麻烦了&#xff0c;手动操作很容易出现漏洞&#xff0c;会漏个某文件没有移动进去或出现重复移动同一个文件等&#xff0c;移动文件这种工作很枯燥可以交给文件批量改名高手软件&…

Excel宏管理库存清单

1. 开启宏: - 打开 Excel - 选择 “文件” > “选项” > “自定义功能区” > “开发工具” &#xff0c;将其添加到功能区。 - 返回Excel界面&#xff0c;点击 “开发工具” 选项卡。 2.准备你的库存清单&#xff1a; - 在一个新的工作表中创建你的库存清单。…

【QT入门1】

目录 1.创建工程时基类的选择 2.第一个QT程序 3.创建一个按钮 4.对象树简单理解 5.信号和槽 5.1自定义信号槽 5.2信号连接信号 5.3信号函数和槽函数的注意事项 5.4配合lambda表达式 1.创建工程时基类的选择 在创建工程时会被要求选择一个基类&#xff1a; 这里有三个…

【Java】语法特性篇

语法特性篇 Java对象的比较 1. 对象比较的问题 Java中引用类型的变量不能直接按照 > 或者 < 方式进行比较。那为什么可以比较&#xff1f; 因为&#xff1a;对于用户实现自定义类型&#xff0c;都默认继承自Object类&#xff0c;而Object类中提供了equal方法&#xf…

Kafka实战案例

kafka系统的生成&#xff0c;自顶向下 1. kafaka发送消息 1.1 是最初始外部调用kafaka的地方1.6 是最初调用kafaka的函数。中间是对kafaka的构建 1.1 向Kafka发送一条发布视频的message 在videoHandler的发布视频逻辑中&#xff0c;向Kafka发送一条发布视频的mq&#xff0c…

Ubuntu 22.04 安装系统 手动分区 针对只有一块硬盘 lvm 单独分出/home

自动安装的信息 参考自动安装时产生的分区信息 rootyeqiang-MS-7B23:~# fdisk /dev/sdb -l Disk /dev/sdb&#xff1a;894.25 GiB&#xff0c;960197124096 字节&#xff0c;1875385008 个扇区 Disk model: INTEL SSDSC2KB96 单元&#xff1a;扇区 / 1 * 512 512 字节 扇区大…

基于Springboot实现论坛管理系统项目演示【项目源码+论文说明】分享

基于Springboot实现论坛管理系统演示 摘要 在社会快速发展的影响下&#xff0c;论坛管理系统继续发展&#xff0c;使论坛管理系统的管理和运营比过去十年更加信息化。依照这一现实为基础&#xff0c;设计一个快捷而又方便的网上论坛管理系统是一项十分重要并且有价值的事情。对…

排序(order by)

MySQL从小白到总裁完整教程目录:https://blog.csdn.net/weixin_67859959/article/details/129334507?spm1001.2014.3001.5502 语法格式: select */列名 from 表名 order by 列名1 asc/desc, 列名2 asc/desc; 说明&#xff1a; 排序的目的&#xff1a;改变查询结果的返回顺序…

学习笔记(css穿透、vue-cookie、拦截器、vuex、导航守卫、token/Cookie、正则校验)

目录 一、记录 1、CSS穿透 2、输入框是否提示输入 3、插槽 #slot 4、v-deep深入改掉属性值 二、vue-cookie 1、官方文档 2、使用 三、拦截器 1、请求拦截器 2、响应拦截器 四、vuex对信息存取改 五、路由导航守卫 1、登录思路 2、设置白名单 六、Token与Cookie…

vue3 集成 tailwindcss

tailwindcss 介绍 Tailwind CSS 是一个流行的前端框架&#xff0c;用于构建现代、响应式的网页和 Web 应用程序。它的设计理念是提供一组可复用的简单、低级别的 CSS 类&#xff0c;这些类可以直接应用到 HTML 元素上&#xff0c;从而加速开发过程并提高样式一致性。 主要特点…