想象一座城市安装了世界顶级的智能交通系统:每个路口都有电子警察和自动调度,车辆按照最优路线行驶。但这座城市的应急管理部门并没有就此满足,他们反而成立了一个特殊的“演练部门”——每天的工作,就是在早高峰时段故意封闭一条主干道、让某座桥的闸机随机失灵、甚至使一处红绿灯进入混乱状态。为什么要自己给自己制造麻烦?因为真正的突发事件不会提前打招呼。演练部门要做的,就是反复制造可控的混乱,观察交通系统能否自动绕行、降级、恢复,从而在灾难真正来临之前把所有薄弱环节暴露出来。 这个思路正是混沌工程的灵魂,而“故意制造可控故障”就是故障注入。在微服务与云原生时代,服务网格(Service Mesh)是城市级的智能交通指挥中心,Chaos Mesh 则是那位经验丰富的演练总指挥。两者集成,我们就能在真实生产环境中,精细化地设计一场又一场“交通演习”,让系统在故障面前不再手足无措。

岗位关联

掌握故障注入与服务网格集成,你将拥有可量化的系统韧性验证能力,成为稳定性的最后一道防线;这在云架构师、SRE 与 DevOps 岗位中是极其稀缺的核心价值。

目录
  1. 可视化演示
  2. 混沌工程理念
  3. 服务网格基础
  4. Chaos Mesh解析
  5. 集成架构设计
  6. 故障注入实验
  7. 流量控制策略
  8. 最佳实践方法
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

展示MapReduce框架中Map、Shuffle、Reduce三个阶段的并行数据处理过程,支持分片数和Reducer数量调节。

本节配有交互动效(进入视口后自动加载,约 3KB)。

Map阶段 输入数据按分片并行处理,每个Mapper独立执行map函数 Map输出键值对,按分区函数写入本地缓冲区 k1,v1 \u2192 map() \u2192 list(k2,v2) Map阶段将输入数据转换为中间键值对

混沌工程理念

演练部门第一条信条:故障是常态,而不是意外。城市里每天都有剐蹭、爆胎、临时管制,如果交通系统连这些日常波动都扛不住,一场暴雨就会让全城瘫痪。所以演练部门从不自我安慰“系统很稳定”,而是主动假设系统会出问题,用一次又一次的预演来确认它到底有多能扛。

这个理念在软件界有个响亮的起点:2011 年 Netflix 推出了 Chaos Monkey(混沌猴),它会随机“捣毁”生产环境中的实例,迫使工程师把系统构建得足够健壮。混沌工程由此诞生——它被定义为“对系统进行实验,以建立系统抵御生产环境混乱条件能力的信心”。

混沌工程有一套经典的四步实验法。第一步定义稳态:确定系统的正常行为指标,例如请求成功率大于 99.9%、P99 延迟小于 200ms;第二步提出假设:写下你的预期,例如“即使订单服务故障 30 秒,支付链路成功率也不低于 99%”;第三步注入故障:引入受控的故障变量;第四步验证偏差:对比实验前后的稳态指标,判断假设是否成立。故障注入正是第三步的核心执行手段,它把“万一出故障怎么办”从一句焦虑,变成了一次有数据、有结论的科学实验。

演练部门的老专家常说:“我们不是在搞破坏,我们是在帮城市提前考试。”混沌工程的一切破坏性操作,最终目的都是让系统在真实故障来临时能从容交出高分答卷。理解了这个理念,我们才能理解后续的工具与集成为什么这样设计。

服务网格基础

想象指挥中心里有一套完整的交通调度系统:中央大屏负责全局规划与控制策略(这就是控制面),而每个路口执勤的交警负责执行具体放行指令、记录车辆通行情况(这就是数据面)。服务网格(Service Mesh)正是这套架构的数字化翻版。

在 Istio 中,控制面组件 istiod 负责统一管理路由规则、安全策略与遥测配置,相当于指挥中心的大脑;数据面则由一组与业务容器“贴身”部署的 Envoy 边车代理构成,它们像交警一样站在每一个微服务实例旁边,拦截所有进出流量,并严格按指挥中心下发的规则执行。这种“大脑集中、执行分散”的设计,让流量治理从业务代码中彻底剥离出来。

服务网格提供了四类核心流量治理能力。路由控制:根据权重、Header 等条件将流量分发到不同服务版本;弹性保护:超时、重试、熔断、限流,让故障不至于级联扩散;可观测性:自动采集延迟、流量、错误、饱和度四类黄金指标;安全通信:mTLS 加密与细粒度授权。这些能力都通过 VirtualService、DestinationRule 等 CRD 资源以声明式方式配置,无须修改业务代码。

在交通指挥中心的术语里,VirtualService 就像一份“交通管制通告”,可以写明“对 10% 的车流增加 5 秒等待”。这正是 Istio 内置故障注入的入口:不需要任何外部工具,仅凭这份通告就能模拟延迟和错误。但如果想演练“整个路口断电”这类基础设施级故障,就需要呼叫 Chaos Mesh 了。

Chaos Mesh解析

演练部门的工具箱里,不能只放着“让车流变慢”一种道具。它还需要能模拟封路(切断网络)、路陷(磁盘故障)、车辆自燃(Pod 崩溃)等五花八门的灾难现场。Chaos Mesh 就是这个工具箱——一个基于 Kubernetes 的开源混沌工程平台,能在不侵入业务代码的前提下,向集群注入各种基础设施级故障。

Chaos Mesh 支持的故障类型覆盖了云原生应用的各个层面:Pod 故障(删除、停止、重启容器)、网络故障(延迟、丢包、带宽限制、DNS 异常)、磁盘故障(IO 延迟、读写错误)、压力故障(CPU、内存耗尽)以及时间故障(时钟偏移)。每一种故障都可以精确指定目标服务、影响比例和作用时长。

在架构上,Chaos Mesh 采用 Kubernetes Operator 模式。核心组件 chaos-controller-manager 负责监听用户提交的 Chaos CRD 资源并调度实验;chaos-daemon 以特权模式运行在每个节点上,直接执行底层故障动作;chaos-dashboard 则提供可视化实验编排与结果观察界面。这套设计与同类工具 Litmus 类似,但 Chaos Mesh 在故障类型丰富度和 Web 控制台上更胜一筹,尤其适合与 Istio 配合做分层注入。

混沌工程的终极价值,可以用一个简洁的公式衡量:

演练部门相信:把“恢复”练成本能,比祈祷“别出事”可靠得多。这正是 Chaos Mesh 存在的意义——在灾难真正来临之前,让每个工程师都拥有处理灾难的肌肉记忆。

A=MTBFMTBF+MTTR\displaystyle A = \frac{\text{MTBF}}{\text{MTBF} + \text{MTTR}}
可用性 A 等于“平均无故障时间”占“平均无故障时间 + 平均修复时间”之和的比例。混沌工程不能直接延长 MTBF,却能通过反复演练大幅缩短 MTTR——系统从故障中恢复得越快,可用性就越高。
  1. MTBF(平均无故障时间)系统连续正常运行的平均时长,比如某服务平均运行 1000 小时才发生一次故障。
    MTBF=累计运行时间故障次数\text{MTBF} = \frac{\text{累计运行时间}}{\text{故障次数}}
  2. MTTR(平均修复时间)从故障发生到系统恢复正常所需的平均时长,比如告警后 30 分钟完成恢复。
    MTTR=故障累计修复时间故障次数\text{MTTR} = \frac{\text{故障累计修复时间}}{\text{故障次数}}
  3. 可用性 A系统在长周期内实际可服务时间的比例,越接近 1 表示系统越稳定。
    A=MTBFMTBF+MTTRA = \frac{\text{MTBF}}{\text{MTBF} + \text{MTTR}}

集成架构设计

城市里的交通管理分两类:交警可以在信号灯层面指挥车流(控制流量怎么走),但无法阻止地下光缆被挖断。要演练“光缆被挖断”这种场景,必须由演练部门出动。服务网格与 Chaos Mesh 的集成,正是这两类能力的珠联璧合。

先说分工。Istio 的故障注入发生在 L7 应用层:它通过 VirtualService 对 HTTP 请求注入延迟或直接返回错误码,适合模拟“上游服务变慢、报错”等业务级故障。Chaos Mesh 则作用于 L3/L4 网络层与基础设施层:它可以注入真实的网络延迟、丢包、Pod 崩溃、磁盘 IO 故障,模拟“机房抖动、节点宕机、磁盘老化”等底层灾难。两者互不替代,而是共同构成一张完整的故障地图。

在部署拓扑上,两者可以共存于同一个 Kubernetes 集群,互不干扰。Chaos Mesh 通过 CRD 与自身组件独立运行,Istio 通过控制面管理数据面代理。集成时主要关注三点:第一,版本兼容性,确认 Chaos Mesh 与 Kubernetes、Istio 的版本在官方兼容矩阵内;第二,资源规划,chaos-daemon 需要以特权模式运行,须提前评估安全策略;第三,权限隔离,通过 RBAC 为不同团队划分实验权限,避免误操作影响生产链路。

如果说 Istio 是“看得见的交通管制”,Chaos Mesh 就是“看不见的地下管网爆破演练”。把两者放在一张作战地图上,我们才能在从网络到应用的每一层都验证系统的韧性边界。这项集成实践的落地细节,正是下一节故障注入实验要解决的问题。

故障注入实验

一场合格的交通演练,讲究“事前有方案、事中有记录、事后有复盘”。故障注入实验同样是严谨的工程活动,通常遵循五个步骤:确定基线、提出假设、设计注入、观测验证、恢复评估。

先看最常用的延迟注入。假设订单服务的正常响应时间是 50ms,我们怀疑当它变慢 500ms 时,用户服务会因超时而雪崩。于是设计实验:对 30% 的流量注入 500ms 额外延迟,观测整体平均延迟与错误率变化。如果用 Istio,只需在 VirtualService 中配置 fault.delay 字段;如果要在网络层模拟,则用 Chaos Mesh 的 NetworkChaos 资源。两种方式的参数都围绕“注入比例”与“注入强度”两个旋钮展开,而它们对整体指标的影响,可以用一个非常直观的公式描述:

这个公式的价值在于“可预测”:实验前就能算出理论值,实验后拿实测值对比,偏差越大,说明系统行为越超出预期,越值得深挖。演练的目的不是看热闹,而是用数据验证每一个关于系统韧性的假设。

Lˉ=L正常+p×D\displaystyle \bar{L} = L_{\text{正常}} + p \times D
整体平均延迟 = 正常延迟 + 注入比例 × 注入延迟。例如正常 50ms、注入比例 30%、注入延迟 500ms,则平均延迟 = 50 + 0.3 × 500 = 200ms。这个公式让故障注入实验有了“事前可预测、事后可对比”的标尺。
  1. 正常延迟 L_normal未注入故障时服务的平均响应时间,是实验的基线指标。
    L正常=总响应时间请求总数L_{\text{正常}} = \frac{\text{总响应时间}}{\text{请求总数}}
  2. 注入比例 p被注入故障的流量占全量流量的比例,取值范围 0 到 1,对应虚拟服务中的 percentage 配置。
    p=命中故障的请求数总请求数p = \frac{\text{命中故障的请求数}}{\text{总请求数}}
  3. 注入延迟 D每次命中故障时附加的额外延迟时长,例如 500ms,对应配置中的 fixedDelay。
    D=T故障响应−T正常响应D = T_{\text{故障响应}} - T_{\text{正常响应}}
  4. 平均延迟 L̄全量流量的加权平均响应时间,由正常部分与故障部分加权合成。
    Lˉ=(1−p)×L正常+p×(L正常+D)=L正常+p×D\bar{L} = (1-p) \times L_{\text{正常}} + p \times (L_{\text{正常}} + D) = L_{\text{正常}} + p \times D

流量控制策略

演练部门手里还有一本“应急预案库”,里面记录了各种故障发生时的应对策略:绕行路线、封路检修、限流放行。对应到服务网格,这本预案库就是一套流量控制策略。

权重路由是基础:把流量按比例分发到不同版本或不同路径,比如 90% 走正常版本、10% 走故障版本,用于观察故障影响并逐步扩大比例。熔断相当于“封路”:当下游连续错误超过阈值,主动切断对该下游的调用,让请求快速失败而不是无限等待,保护整个交通网络不被一个堵点拖垮。超时与重试是“重新导航”:设置合理的超时上限,超时后自动重试其他实例,避免请求在拥堵点无限排队。降级则是“启动公交预案”:核心服务不可用时,返回缓存数据或默认值,保证用户体验不彻底中断。

这些策略与故障注入实验天然联动。一次典型的演练流程是:先用权重路由把 1% 流量切到故障版本,观察指标;再逐步提高注入比例至 5%、10%;与此同时打开熔断与降级保护,验证系统在故障中的自愈能力;最后关闭注入、恢复全量流量,并观察系统是否顺利回到稳态。

预案库里最重要的一条原则是“有进有退”。演练不只是把故障注入进去就完事,更要验证恢复策略能否平顺地把交通秩序拉回正轨。故障注入负责“制造混乱”,流量控制负责“收拾残局”,两者配合才能形成完整的韧性闭环。

最佳实践方法

经验丰富的演练总指挥,从不把全部家当一次性押上牌桌。他的经验法则可以总结为四个关键词:小半径、渐进式、自动化、可度量。

第一,控制爆炸半径。新设计的实验先从边缘服务、低峰时段开始,注入比例从 1% 起步,确认无影响后再逐步扩大。绝不在没有监控和回滚预案的情况下,直接对核心链路发起全量注入。第二,渐进式推进。按照“开发环境 → 预发环境 → 金丝雀环境 → 生产环境”的顺序,每一级环境都先验证实验定义的正确性,再向更高环境迁移。第三,自动化编排。将高频、低风险的演练(如每周一次的延迟注入巡检)固化为定时任务,由 Chaos Mesh 的 Schedule 机制自动执行,让韧性验证成为持续性的常态。第四,效果度量。每轮演练都要记录故障注入前后 SLO、错误率、延迟变化,评估“系统韧性是否真的提高了”,而不是为了演练而演练。

在团队协作层面,建议为混沌实验建立评审机制:实验设计由 SRE 团队审核,涉及生产环境的实验必须设置“一键中止”开关,并在演练期间安排专人值守告警。Chaos Mesh 的 Dashboard 可以很好地支撑实验审计与结果归档。

演练部门的老专家有句口头禅:“今天主动演练的小故障,是明天避免大事故的保险。”混沌工程与其说是一项技术,不如说是一种组织习惯。当团队把故障注入与服务网格集成变成日常,系统的韧性便不再是一句口号,而是被一次次实验验证过的事实。

AI 应用场景

场景一:大促前全链路韧性巡检

阶段:自动化运维与稳定性保障

解决的问题:传统大促备战主要靠压测和代码 review,无法覆盖“依赖服务突然变慢、下游节点宕机”这类真实故障场景。通过 Chaos Mesh 与 Istio 集成,自动编排多轮分层故障注入,在大促前把链路薄弱点提前暴露出来。

具体案例:某电商平台在双 11 前,对下单链路执行了一轮“1% 延迟注入 + 2% 错误注入”的巡检,成功发现支付回调接口在 300ms 延迟下会触发超时雪崩,随后通过熔断阈值调优和重试退避策略完成修复。

场景二:微服务架构改造韧性对比

阶段:架构评估与风险分析

解决的问题:单体架构向服务网格化改造过程中,如何量化新旧架构的韧性差异?通过在同一套故障注入实验参数下分别对改造前后系统进行演练,得到可对比的延迟与错误率指标,为架构决策提供数据依据。

具体案例:某金融企业将核心账务服务改造为 Istio 网格后,使用 Chaos Mesh 分别对改造前后注入 500ms 网络延迟,实测改造后 P99 延迟降低 62%,成功率达到 99.95%,用数据支撑了架构演进决策。

场景三:故障自愈能力自动化验证

阶段:混沌工程平台化与自动化

解决的问题:K8s 的 Pod 自愈、多副本调度等能力是否真的可靠?人工验证成本高且难以覆盖边界情况。通过 Chaos Mesh 的定时调度能力,周期性注入 Pod 故障,自动验证自愈能力并产出巡检报告。

具体案例:某云厂商在其容器平台上编写“每周 Pod 故障自愈巡检”,自动注入 pod-kill 故障并断言 3 分钟内副本恢复、流量无损切换,将自愈验证从手工抽查升级为常态化自动作业。

Python 演示

python78 行
"""服务网格故障注入演练工具:生成配置并模拟流量影响"""import random  def istio_fault_config(app, ratio, delay_ms):    """生成 Istio VirtualService 延迟注入配置"""    return {        "hosts": [app],        "http": [{            "fault": {                "delay": {                    "percentage": {"value": ratio * 100},                    "fixedDelay": "%dms" % delay_ms                }            }        }]    }  def chaos_mesh_config(app, action, duration_s):    """生成 Chaos Mesh 网络故障实验配置"""    spec = {        "selector": {"app": app},        "mode": "one",        "duration": "%ds" % duration_s    }    if action == "delay":        spec["delay"] = {"latency": "500ms"}    elif action == "loss":        spec["loss"] = {"loss": "30"}    return spec  class TrafficSimulator:    """按注入比例模拟请求延迟,验证加权平均公式"""    def __init__(self, normal_ms=50):        self.normal_ms = normal_ms        self.total = 0        self.failures = 0        self.latency_sum = 0     def send(self, ratio, fault_ms=500, fail_rate=0.9):        """发送一次请求:命中故障则延迟并可能失败"""        self.total += 1        if random.random() < ratio:            self.latency_sum += self.normal_ms + fault_ms            if random.random() < fail_rate:                self.failures += 1        else:            self.latency_sum += self.normal_ms        return self.latency_sum / self.total     def report(self):        """输出平均延迟与错误率"""        return {            "avg_latency_ms": round(self.latency_sum / self.total, 2),            "error_rate": round(self.failures / self.total, 4)        }  def main():    print("=== 1. Istio 故障注入配置(注入比例10%) ===")    print(istio_fault_config("order-service", 0.1, 500))    print("\n=== 2. Chaos Mesh 网络延迟实验配置 ===")    print(chaos_mesh_config("order-service", "delay", 60))    print("\n=== 3. 模拟1000次请求(注入比例30%,延迟500ms) ===")    sim = TrafficSimulator(normal_ms=50)    for _ in range(1000):        sim.send(0.3, 500, fail_rate=0.9)    result = sim.report()    theory = 50 + 0.3 * 500    print("实测平均延迟: %.2fms" % result["avg_latency_ms"])    print("理论平均延迟: %.2fms(L = Ln + p x D)" % theory)    print("错误率: %.2f%%" % (result["error_rate"] * 100))  if __name__ == "__main__":    main()
目的:演示故障注入实验的两大核心工作——生成 Istio 与 Chaos Mesh 的故障注入配置,并模拟不同注入比例下整体平均延迟的变化,验证公式 L = Ln + p×D。
  1. "percentage": {"value": ratio * 100}把 0~1 的注入比例转成百分数,作为 VirtualService 的故障注入开关
  2. spec["delay"] = {"latency": "500ms"}为 Chaos Mesh 实验配置 500ms 网络延迟动作
  3. if random.random() < ratio:按注入比例 p 决定本次请求是否命中故障,模拟真实流量的随机性
  4. self.latency_sum += self.normal_ms + fault_ms命中故障的请求延迟 = 正常延迟 + 注入延迟 D
  5. for _ in range(1000): sim.send(0.3, 500, fail_rate=0.9)发起 1000 次请求,30% 命中故障,90% 的命中请求会报错
  6. theory = 50 + 0.3 * 500用公式直接算出理论平均延迟 200ms,与实测值对比验证模拟正确性

常见误区

误区混沌工程不就是写个脚本随机杀几个 Pod、制造点混乱看看效果吗?跟黑客攻击差不多,纯看运气,没什么科学讲究。

正解混沌工程是严谨的实验科学,讲究“稳态定义 → 假设提出 → 受控注入 → 结果验证”的完整闭环。每一次注入都有明确的目标服务、注入比例、持续时长和预期指标,并且配有监控与回滚预案,与随机破坏有本质区别。就像演练部门封堵某条路之前,早就写好了观察清单和恢复方案。

为何常见:Chaos Monkey 名字中的“Monkey“和”混沌”二字容易让人联想到随机与无序,从而忽略了其背后严密的实验方法论。

误区Istio 的 VirtualService 里就有 fault 字段,延迟和错误都能注入,再装 Chaos Mesh 就是重复建设,浪费资源。

正解两者层级不同、场景互补。Istio 只覆盖 L7 HTTP 层的延迟与中止,模拟“服务变慢、报错”;Chaos Mesh 覆盖 L3/L4 网络层以及 Pod、磁盘、压力等基础设施故障,模拟“网络抖动、节点宕机、磁盘老化”。真实故障往往是多层的,只有分层注入才能完整检验系统韧性。

为何常见:看到 Istio 官方文档中的 fault 字段就以为覆盖了全部故障注入场景,忽略了故障注入在基础设施层面还有更广阔的语义空间。

误区既然要测试系统韧性,那就 100% 注入故障,反正都是测试,比例越大越能看出系统的真实水平。

正解过大的注入比例会让系统瞬间整体不可用,观测数据完全失真,根本无法定位根因。正确做法是从 1%~5% 的小比例开始,观察指标变化后逐步递增;同时配合权重路由和熔断,确保系统始终处于“可控混乱”状态。

为何常见:把故障注入混同于压力测试,以为“量越大效果越好”,忽略了混沌工程的核心目标是验证假设而非压垮系统。

误区我们辛辛苦苦做了演练,结果系统直接挂了,说明系统太脆弱,这次实验白做了,还要被领导批评。

正解恰恰相反,演练中暴露问题正是混沌工程最大的价值。实验的目的不是证明系统完美,而是验证假设、发现盲区。只要在可控范围内发现了可修复的缺陷,这次演练就是成功的;真正失败的是“什么都没发现、什么都不改进”的走过场式演练。

为何常见:受“不出事就是成功”的惯性思维影响,把演练结果的好坏等同于系统表现的好坏,忽视了混沌工程“主动暴露问题”的本质目标。

面试题

Q1. 混沌工程实验中最重要的第一步是什么?

单选题 · easy

  • A.随机杀进程看结果
  • B.定义系统稳态指标← 正确答案
  • C.关闭全部监控系统
  • D.通知用户暂停使用

答案:B。混沌工程四步法的起点是定义稳态,即明确“系统正常时应该是什么样”,后续所有假设和偏差对比都以它为基准。随机杀进程、关监控、暂停使用都是错误做法,违背了受控实验的原则。

Q2. 服务网格中 istiod 组件的主要职责是什么?

单选题 · easy

  • A.转发业务流量报文
  • B.下发路由与治理配置← 正确答案
  • C.持久化存储业务数据
  • D.编译微服务源代码

答案:B。istiod 是 Istio 控制面核心,负责统一管理路由规则、安全策略等配置并下发给数据面 Envoy 代理,相当于指挥中心的大脑。流量转发由数据面完成,存储和编译与 istiod 职责无关。

Q3. 下列哪些属于 Chaos Mesh 支持的网络类故障?

多选题 · easy

  • A.网络延迟注入← 正确答案
  • B.网络丢包注入← 正确答案
  • C.网络分区隔离← 正确答案
  • D.网络地址劫持← 正确答案

答案:ABCD。网络延迟、丢包、分区、地址劫持都属于 Chaos Mesh 的网络故障家族(NetworkChaos)。题目考察的是“网络类”故障清单,以上四项均在此列,缺一不可。

Q4. 故障注入比例从多少起步比较安全?

单选题 · mid

  • A.100% 全量注入
  • B.50% 对半注入
  • C.1%~5% 小比例← 正确答案
  • D.0% 不进行任何注入

答案:C。最佳实践要求控制爆炸半径,从 1%~5% 的小比例起步,观察指标无异常后再递增。全量或对半注入可能让系统瞬间不可用且难以定位根因;完全不注入则失去了演练意义。

Q5. Istio 的 VirtualService 中 fault 字段支持哪两类故障注入?

单选题 · mid

  • A.延迟与中断错误← 正确答案
  • B.丢包与节点宕机
  • C.磁盘故障与进程终止
  • D.内存耗尽与网络断连

答案:A。Istio 的 fault 字段通过 delay 模拟请求延迟,通过 abort 模拟请求直接返回错误码,二者都属于 L7 HTTP 层故障。丢包、节点宕机、磁盘故障等属于 Chaos Mesh 的基础设施级注入能力。

Q6. 服务网格中熔断机制的通俗理解是?

单选题 · mid

  • A.永久关闭所有服务
  • B.快速失败保护下游← 正确答案
  • C.无限重试直到成功
  • D.提高请求并发上限

答案:B。熔断就像家中的电闸:当某个下游服务错误率超过阈值时,主动切断对它的调用,让请求快速失败而非无限等待,避免故障级联扩散。永久关闭或无限重试都不符合熔断的设计初衷。

Q7. 公式 L = Ln + p×D 中 D 表示什么?

单选题 · hard

  • A.请求总量的计算值
  • B.注入故障附加延迟← 正确答案
  • C.系统正常响应时间
  • D.服务副本扩充数量

答案:B。D 是每次命中故障时附加的额外延迟,即注入强度;p 是注入比例,Ln 是正常延迟。只要确定这三者,整体平均延迟就能在实验前被准确预测,这正是混沌实验“可量化”的底气所在。

Q8. chaos-daemon 组件在节点上以什么方式部署以执行故障动作?

单选题 · hard

  • A.以特权模式运行在节点上← 正确答案
  • B.以普通模式运行在集群之外
  • C.以只读模式挂载在业务容器内
  • D.以临时模式运行在 CI 流水线

答案:A。chaos-daemon 需要修改节点的网络规则、挂载文件系统等,因此必须以特权 DaemonSet 方式运行在每个节点上,这是它能执行 Pod 级与网络级故障的前提条件。

Q9. 下列属于服务网格流量治理能力的有?

多选题 · mid

  • A.权重路由与灰度发布← 正确答案
  • B.熔断降级保护机制← 正确答案
  • C.超时重试策略配置← 正确答案
  • D.数据库主从自动切换

答案:ABC。权重路由、熔断降级、超时重试都是服务网格在流量层面的核心治理能力。数据库主从自动切换属于数据存储层面的高可用机制,不属于服务网格的流量治理范畴。

Q10. 关于 Chaos Mesh 与 Istio 集成,说法正确的有哪些?

多选题 · hard

  • A.两者故障注入层次互补← 正确答案
  • B.协同演练覆盖更全面← 正确答案
  • C.集成后需统一管理权限← 正确答案
  • D.监控系统仍需保留← 正确答案

答案:ABCD。Istio 注入 L7 应用层故障,Chaos Mesh 注入 L3/L4 与基础设施故障,层次互补、协同覆盖更全面;集成时还须通过 RBAC 统一管理实验权限。而监控系统在任何时候都是刚需,它反而是演练效果验证的关键依赖,四项说法全部正确。