美文网首页
混沌工程该如何做

混沌工程该如何做

作者: 子不语的花未眠 | 来源:发表于2022-08-15 22:36 被阅读0次

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 混沌工程案

相关文章

  • 【混沌工程入门】领导让我做混沌工程……该咋做?——《混沌工程》动

    太长不读 分布式系统就是一种复杂系统,其活动规律是不可预知和非线性的。 生产环境的动荡,来源于复杂系统内部所固有的...

  • 混沌工程-阿里周洋肖长军以及Thoughtworks伍斌的实践

    云原生架构下的混沌工程实践,讲述了什么是混沌工程,混沌工程的5项原则。为什么要引入混沌工程?介绍了混沌工程开源工具...

  • 前端组件 混沌

    什么是混沌 混沌即混沌工程,首先我们得知道混沌工程是什么。 混沌工程起源于Netflix公司,Netflix公司的...

  • 混沌工程

    混沌工程的原则 混沌工程通过运行经过仔细计划的试验来了解系统在发生故障时的行为,一般分为三个步骤: 先是假设系统在...

  • 混沌工程

    混沌工程是什么 背景 随着服务化、微服务和持续集成的普及,软件研发效率和敏捷性得到了极大提升,但大规模服务节点和复...

  • 混沌工程

    混沌工程是近十年出现的,然而我们大部分人包括我自己都没有接触或者听说过,对我自己小白做个知识普及。 混沌工程定义 ...

  • 混沌工程

    定义 混沌工程是一种可试验的、基于系统的方法来处理大规模分布式系统中的混乱问题。通过不断试验,了解系统的实际能承受...

  • 混沌工程简介

    最近看到 Netflix 的混沌工程的介绍,感触颇深。在 TiDB 里面,我们为了保证系统的健壮性,也做了很多工作...

  • 混沌工程原理

    混沌工程是在分布式系统上进行实验的学科, 目的是建立对系统抵御生产环境中失控条件的能力以及信心。 大规模分布式软件...

  • 混沌工程意义

    背景 由很多微服务组成的分布式系统中,永远难以全面掌握什么事件会导致系统局部不可用,甚至全面崩溃。主要因素: 1)...

网友评论

      本文标题:混沌工程该如何做

      本文链接:https://www.haomeiwen.com/subject/cimdgrtx.html