混沌工程该如何做

00 开始之前

  1. 混沌不是计划内的事情,是冷不丁的来一下。
  2. 没上混沌工程之前,一些小bug都知道
  3. 上了混沌工程之后,小事变大事,bug瞒不住
  4. 混沌不是找茬,是提前发现问题

01 混沌工程是不是大公司专属

1.1 混沌工程的由来

Chaos Engineering is the discipline of experimenting on a distributed system in order to build confidence in the system`s capability to withstand turbulent conditions in producion.

什么是混沌工程

  • 在分布式系统上进行实验的学科,建立在生产环境中低于突发事件的信心
  • 混沌工程并不是为了制造问题,而是为了捅破问题

混沌工程解决了什么问题?

  • 分布式系统的反脆弱问题


    image.png

混沌工程出现的原因

  • 服务调用黑洞
  • 不可预知的用户使用场景
  • 对稳定性的极致要求
image.png

混沌工程的解决思路

  • 主动出击,攻击是最好的防御

混沌工程的几个误区

1. 故障演练
- 故障演练是对已知问题的复现 —— 开卷考试
- 混沌工程是没有预案的“攻击”
image.png
2. 技术能力足够强
- 技术能力是一个量变到质变的过程,需要厚积薄发
- 是一个逐步积累的过程,也是一个去除技术债的过程。不做永远都不会做
3. 只适合互联网行业
- 混沌工程和行业无必然关系
- 入股故障后悔出现灾难性结果,那么就推荐使用混沌工程。反之,不建议使用。
4. 只是一种特殊的测试,和真实情况有偏差
- 测试 - 基于已知的场景,验证是否为预期的结果
- 混沌工程 - 基于线上真实场景,随机模拟用户使用情况,无固定预期结果:例如拔个网线、换个IP,对于用户是无感知的,注重用户体验
5. 影响线上环境
- 混沌工程是为了发现潜在的问题,而不是创造新的问题
image.png

- 将k=1改成k=2,这是没事找事,不可能发生的,这不叫混沌,叫伪混沌
- 机房掉电,这是可能发生的,这属于混沌工程

  • 混沌是为了发现潜在问题,而不是为了创造新的问题
6. 混沌就是随即停止机器
- 混沌工程存在多种故障场景
image.png

1.2 混沌工程的总结

  • 拥抱失败
  • 主动防御
  • 技术实践
  • 证有不证无

1.3 总结

  1. 混沌工程重点是发现影响系统可用性的问题,而不是发现逻辑bug。
  2. 混沌工程的思路是主动出击,通过模拟各种合理范围内的故障,来验证系统是否达到高可用性的要求
  3. 实施混多工程过程中,需要设计多种故障场景,控制爆炸半径,降低对线上环境的冲击性

02 如何在我的场景中使用混沌工程

2.1 混沌工程的原理

  • 稳态假设
  • 模拟真实世界
  • 线上推演
  • 持续自动化
  • 爆炸半径

2.1.1 混沌工程原理 - 稳态假设

  • 设定稳定的标准
  • 与监控系统联动
    image.png

2.1.2 混沌工程原理 - 模拟真实世界

  • 真实!=全量:(一般是线上环境直接做,但是风险很大,从用户角度直接出发)
  • 针对核心指标指定实验变量
    image.png

2.1.3 混沌工程原理 - 线上推演

  • 流量可控
    不要针对全量用户搞混沌
    哪些服务需要经受考验
    需要对这些服务做哪些混沌操作
  • 范围可控
    如果范围和流量不可控,就不要搞混沌
  • 失败预案
    混沌危险系数非常高,最好是有一键恢复,一键回滚
    常见兜底方案:别的可以不搞,至少要实现网关层的降级熔断(⚠️一定要实现的)
image.png

2.1.4 混沌工程原理 - 持续自动化

  • 手动的实验缺乏可持续性
  • 自动化建立在自动化监控系统之上
    1)只有实现了自动化搞混沌,才算落地了
    2)混沌工程需要建立在自动化监控系统之上,是一件高度体系化的事情
    :自动化监控、自动化运维、服务自愈、CICD自动化、失败预案,这些东西全都要搞齐之后,才能开始混沌工程,因为我们做混沌用的是线上环境,要有敬畏之心

2.1.5 混沌工程原理 - 爆炸半径

爆炸半径:要测试的服务+要测试的故障场景融合在一起
选择爆炸半径的时候,要有一定的基础:CMDB,需要做好CMDB,才能生成拓扑图,这样想对某个服务做混沌,才知道哪些服务依赖这个服务,会有什么影响和后果

  • A/B测试
  • 流控
    原则是:最好不让用户感知到,线上在搞混沌工程
    image.png
image.png

2.2 设计混沌工程

  • 单节点故障
  • 单区域故障
  • 服务故障
  • 全链路故障
  • 自动化

2.2.1 设计混沌工程 - 单节点故障

  • 混沌工程的基础
  • 资源超负荷
    如CPU、内存、IO
  • 资源不可用
  • 节点不可用
    单节点频繁重启、网卡频繁的up、down(前提是机器有管理网卡)

⚠️注意:对于单节点故障,一定要给自己留后门,比如网卡需要有管理网卡,如果没有down掉后,就再也无法访问了、CPU打满后需要给一定时长等等


image.png

2.2.2 设计混沌工程 - 单区域故障

1. 自建IDC的情况:

  • 集群高可用的基础
  • 电源故障
    问一下机房有没有双路电源,最近定期有没有做过断电演练;我们主要是模拟故障,不是真的来制造一个故障,真把电源断掉了就属于制造故障了
  • 网络设备故障
    看一下接入层的设备有没有云备份,交换机是不是两台,别在同一个机柜上,把两台分散开,可以通过插拔网线验证一下,插拔网线一般不会出啥问题,比电源故障来的轻多了

2. 公有云的情况:

  • 专线不可用
    从你的机房到公有云的机房这两段的网络设备是否高可用,当然公有云那边设备不需要看,就看自己的机房这边的设备是否高可用,如果胆大的话,可以先拔一根网线,如果心里没底可以问一下再拔网线,先把网络拓扑弄清楚,再看能否拔网线
  • 基础设施不可用
    模拟集群对外不可用就可以了
    1)模拟一下VPC路由规则,改自己VPC网络的路由规则,模拟两个不通
    2)主要是通过改网关层来模拟,其他都是虚化层(已经在单节点模拟过了)
image.png

2.2.3 设计混沌工程 - 服务故障

  • 业务高可用的基础
  • 服务资源超负荷
    比如业务qps超过1000,看能不能响应
    如果有流量限流,我们可以先降成800或者500,通过这种方式模拟资源超负荷
  • 当前节点超负荷
    把当前CPU打满,看服务是否还稳定
  • 依赖中间件故障
    mysql、redis网络故障或者连不上,mysql慢查询、redis缓存失效了,在这种情况下,看服务是否高可用
  • 基础设施不可用
    dns、lb等会不会触发服务的降级熔断
    image.png

2.2.4 设计混沌工程 - 全链路故障

istio:做这块全链路故障时候很好的一个搭档工具

  • 线上环境高可用的基础
  • 网关不可用
  • 流控故障
  • 网络故障
    image.png

2.2.5 设计混沌工程 - 自动化

  • CI/CD高可用的基础
    最常见的在CD过程中,V1版本是稳定的,上V2版本是有问题的,要看CI/CD能否降级、回滚的操作等稳定性
  • 基础设施故障(镜像仓库,配置中心)
    拉到一半镜像仓库拉不下来了,看CI/CD反馈,是告警还是回退还是正常往下走还是等待在这里
  • 网络故障

2.3 开源工具

  • ChaosBlade


    image.png
  • Chaos Mesh


    image.png

2.3.1 开源工具 - ChaosBlade(1)

—— 开箱即用

  • 场景丰富
  • 使用简单
  • 无侵入
    image.png
image.png

2.3.1 开源工具 - ChaosBlade(2)

  • 支持多种场景实验
  • 对Java和C++服务支持较好
  • 典型使用场景
    • 计算资源 / 服务资源 / 网络资源
      image.png

03 混沌工程案

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,001评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,210评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,874评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,001评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,022评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,005评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,929评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,742评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,193评论 1 309
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,427评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,583评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,305评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,911评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,564评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,731评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,581评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,478评论 2 352

推荐阅读更多精彩内容