No.178# 混沌工程相关内容梳理

news2024/11/28 16:49:29

引言

随着公司规模业务的快速增长,数以千计甚至万计的微服务,依赖的各类组件越来越多。

分布式体系架构体系越来越复杂,没有任何一个人能够掌控所有复杂的耦合性。

也就是说复杂性无法避免,不可能再回到单体应用,也无法彻底消除这种复杂性。

需要考虑的是如何应对这种复杂性问题。

一、混沌工程要点梳理

在《混沌工程--复杂系统韧性实现之道》给出了对了混沌工程的定义:

混沌工程在分布式系统上进行实验的学科,目的是建立对该系统能够能够承受生产环境的动荡条件的信心。

混沌工程原则5条黄金标准:

  • 建立关于稳态行为的假说

  • 多样化的引入现实世界的事件

  • 在生产环境中进行实验

  • 持续运行自动化实验

  • 最小化爆炸半径

稳态行为需要关键指标衡量,所以监控的关键指标就特别重要。

多样化的引入现实世界的事件,注意演练case的质量,多个视角观测,不拘役简单实现,也不忽略用户体验。

在生产环境中进行实验,其实刚起步阶段基本都是在非生产环境执行的,随着成熟度的提升,逐步在生产环境演练。

持续运行自动化实验,从最开始拉着运维手动干,逐步沉淀到混动系统中。

最小化爆炸半径,提升精准打击能力,某个集群、某个节点、某个应用、某个接口、某次调用。

通过混沌工程建立一种文化,在不确定的结果出现时保持系统的韧性。

通过混沌工程不断探索未知、将未知变为所知、提升应对不确定风险的韧性。

二、混动工程平台建设

构建蓝绿对抗平台:案例编排、演练自动化、沉淀案例、统计可视化、成熟度度量。

故障点注入

  • 注入的故障类型

  • 注入的目标服务

  • 注入的故障内容

  • 注入的故障监控

备注:例如故障监控关联日志、链路、操作记录等。

可视化统计

  • 故障演练执行CASE数量

  • 攻防成功失败CASE数量

  • 演练发现问题数量

  • 演练故障类型分布

  • 演练问题类型分布

成熟度模型

  • 成熟程度的等级

  • 引发的故障等级

  • 演练的时间范围

  • 故障的持续时间

  • 故障的恢复能力

三、精准打击实现方法

「最小化爆炸半径」 是混沌工程的5条黄金法则之一,下面梳理两种精准打击方法。

1、通过流量染色实现精准打击

下面对服务C做故障演练,例如:注入对某个方法注入超时5秒故障,此时对A服务和B服务均会造成故障。

可以通过对故障流量染色,只对属于故障演练的请求注入故障。

4d9ceb3c342dc5c0127667543ade8cd5.png


另外可以对iptables出口流量干扰,制造请求级故障。

2、通过输入参数控制爆炸半径

例如:通过拦截器分析入参,对输入用户ID在特定范围的请求,篡改返回参数制造故障。

四、强弱依赖自动判定


强弱依赖治理   平台能力在强弱依赖治理演进上可以考虑下:梳理强弱依赖主要是保障核心服务的稳定性 ,避免由于弱依赖服务故障对核心服务造成拖累。

服务之间的依赖:微服务之间的上下游调用形成服务之间的依赖。

强依赖:服务A调用服务B,B服务出现故障时A服务也不可用

弱依赖:服务A调用服务B,B服务出现故障时A服务仍然可用

方式一:强弱依赖人工梳理

通过走查服务代码核心逻辑,识别哪些链路接口是核心服务,哪些是非核心链路。

针对这些非核心链路逻辑能够拆分到非核心服务中去,针对非核心链路可以配置降级措施。

方式二、通过对依赖接口注入故障

步骤1:为选定服务或接口拉取依赖关系

步骤2:为接口依赖设置预判预期

步骤3:为依赖接口注入故障并引入流量

步骤4:监控指标并观测影响

步骤5:强弱依赖结果判定

06c4c74e410e371f4ef6990a11897cb2.png


五、常见通用故障Case梳理

故障类型事项说明
节点故障杀掉ecs节点、进程、Pod、容器、节点重启等
网络故障网络分区、网络中断、网络丢包、网络延迟、网络阻塞、带宽限制
IO类故障磁盘损坏、写入IO延迟、写入返回错误等、IO瞬时飙高
CPU/缓存/域名CPU瞬时飙高、内核内存分配异常、内存/CPU使用率过高、DNS域名解析错误
集群类故障扩缩容、频繁变更节点角色
应用类故障请求超时、网络异常、重复请求、入参修改、返回值修改、限流熔断异常、线程池填满、频繁GC、内存溢出等

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

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

相关文章

西门子精彩触摸屏SMART V3组态配方的具体方法示例

西门子精彩触摸屏SMART V3组态配方的具体方法示例 本次和大家分享在精彩系列触摸屏中进行配方组态的具体方法,以下内容仅供大家参考: 如下图所示,首先,在连接中添加新的连接,这里以S7-200SMART为例,PLC和HMI的IP地址要设置在同一网段内, 如下图所示,在变量中,添加配…

【Java面试】来讲一讲你对String的理解

文章目录字符型常量和字符串常量的区别什么是字符串常量池?String 是最基本的数据类型吗String有哪些特性String为什么是不可变的?String真的是不可变的吗?String不可变的必要性是否可以继承 String 类数组有没有 length()方法?St…

windows线程 互斥锁CreateMutex、ReleaseMutex、CloseHandle

互斥 相关问题 多线程下代码或资源的共享使用。 互斥的使用 1.创建互斥 HANDLE CreateMutex( LPSECURITY_ATTRIBUTES lpMutexAttributes,//安全属性(废弃参数,置NULL) BOOL bInitialOwner,//初始的拥有者TRUE/FALSE LPCTSTR lpName //命名 );…

集成电路技术——如何制造芯片(1)

1.概述 电子工业是现在高新技术的核心,它在人类的科技发展中发挥了巨大作用,电子工业已经成为成为当今世界发展最快的高新技术产业,在全世界各国国民经济中起着举足轻重的作用。当今的电子技术离不开集成电路,集成电路是电子工业…

hadoop集群迁移

集群迁移 主要是要找到两个集群中active状态的namenode 集群迁移不同于服务器之间的文件发送,在hdfs中,文件是以块的形式,只可以通过namenode访问文件,所以迁移时需要通过hadoop命令 主要命令是distcp distcp有很多参数&#xf…

Kafka - 06 Kafka 集群环境搭建(三台服务器)

文章目录1. 克隆虚拟机2. Zookeeper 集群搭建3. Kafka 集群搭建4. 测试消息发送和消费1. 主题操作2. 生产者生产消息3. 消费者消费消息1. 克隆虚拟机 kafka集群搭建,需要3台虚拟机环境,但是我目前只安装了一台虚拟机,因此还需要准备两台虚拟…

[附源码]计算机毕业设计springboot-Steam游戏平台系统论文

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

纯CSS制作3D动态相册【流星雨3D旋转相册】HTML+CSS+JavaScriptHTML5七夕情人节表白网页制作

这是程序员表白系列中的100款网站表白之一,旨在让任何人都能使用并创建自己的表白网站给心爱的人看。 此波共有100个表白网站,可以任意修改和使用,很多人会希望向心爱的男孩女孩告白,生性腼腆的人即使那个TA站在眼前都不敢向前表白…

MySQL数据库管理及用户管理以及数据库用户授权

MySQL数据库管理及用户管理以及数据库用户授权MySQL数据库管理1、库和表2、常用的数据类型查看数据库结构SQL语句1、SQL语句分类:创建及删除数据库和表管理表中的数据记录(表数据的增删改查)向数据表中插入新的数据记录(增&#x…

大二Web课程设计——动漫海贼王(可以很好的应付老师的作业)

HTML实例网页代码, 本实例适合于初学HTML的同学。该实例里面有设置了css的样式设置,有div的样式格局,这个实例比较全面,有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代码的过程来实践设计。 精彩专栏推荐&#x1f4…

Java基础:入门程序、常量、变量

第一章 HelloWorld入门程序 1.1 程序开发步骤说明 Java程序开发三步骤:编写、编译、运行。 1.2 编写Java源程序 在D:\java\javaCode目录下新建文本文件,完整的文件名修改为HelloWorld.java,其中文件名为 HelloWorld,后 缀名必须…

音视频技术开发周刊 | 273

每周一期,纵览音视频技术领域的干货。新闻投稿:contributelivevideostack.com。「紧急通知」LiveVideoStackCon 2022 音视频技术大会北京站改期各位LVSer们:因疫情影响,北京近期不再允许举办大型线下活动,我们无奈且抱…

如何向瑞芯微平台添加驱动

如何向瑞芯微平台添加驱动驱动配置驱动文件放置配置相应的编译选项与设备树结合设备树配置以avafpga视频驱动为例:驱动配置 驱动文件放置 为了保证驱动文件能够被系统正确识别编译,需要将驱动文件的源文件avafpga.c放在./kernel/drivers/media/i2c/下 …

外观专利申请定要注意哪些因素呢?

问题一:申请外观专利需要提交哪些申请材料呢? 1、外观专利请求书; 2、外观设计七视图的照片或者设计图; 3、申请人的身份证明材料; 4、外观设计的简要说明材料。 问题二:外观专利申请定要注意哪些因素…

Automatic Online Calibration of Cameras and Lasers 论文翻译

目录题目AbstractI. INTRODUCTIONII. SENSOR PROCESSINGA. Image processingB. Laser processingIII. MISCALIBRATION DETECTIONIV. AUTOMATIC CALIBRATION TRACKINGV. EXPERIMENTAL RESULTSVI. CONCLUSION题目 Automatic Online Calibration of Cameras and Lasers 下载地址&…

C++ Reference: Standard C++ Library reference: Containers: list: list: size

C官网参考链接&#xff1a;https://cplusplus.com/reference/list/list/size/ 公有成员函数 <list> std::list::size C98 size_type size() const; C11 size_type size() const noexcept; 返回大小 返回列表&#xff08;list&#xff09;容器中的元素个数。 形参 没有…

Python tkinter -- 第18章 画布控件之图像(image)

18.2.16 create_image(position, **options) 在画布的指定位置创建一个图片对象。这里的图片对象是gif&#xff0c;png&#xff0c;pgm和ppm。 &#xff08;1&#xff09;position&#xff1a;图片的坐标(x,y)。 &#xff08;2&#xff09;**options&#xff1a;图片选项 选项…

IO流~字节流

字节流 IO流分类 按照数据的流向&#xff1a;输入流&#xff1a;读数据\输出流&#xff1a;写数据按照数据类型来分 字节流&#xff1a;字节输入流&#xff1b;字节输出流字符流&#xff1a;字符输入流&#xff1b;字符输出流 一般来说&#xff0c;IO流的分类是按照数据类型…

触发器,寄存器,三态输出电路

目录 一&#xff1a;触发器 二&#xff1a;寄存器&#xff08;register&#xff09; 缓冲寄存器 三态输出电路&#xff08;只看标红的即可&#xff09;数据总线上很常用 考试会问你触发器&#xff0c;寄存器&#xff0c;存储器是什么关系你知道就行。这个简答题在存储器笔…

基于Java+SpringMvc+Vue求职招聘系统详细设计实现

博主介绍&#xff1a;✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取联系&#x1f345;精彩专栏推荐订阅&#x1f447;&#x1f…