在消防队里,最管用的训练不是等火灾发生了再去救,而是定期制造“可控的火情”:在废弃楼房里点燃火盆、释放烟雾弹、拉响全楼警报,让队员在逼真但安全的场景中反复练习扑救与疏散。没有哪支队伍靠临场发挥赢得大火,真正可靠的队伍都是“演习”喂出来的。AI系统的韧性也一样——一个平时看起来坚不可摧的服务,可能因为一次网络抖动、一块GPU掉卡、一次内存泄漏就彻底雪崩。与其等故障在深夜出事时暴露,不如主动制造故障,观察系统在“受伤”时能不能扛住、能不能自我修复。这就是混沌工程(Chaos Engineering):在可控条件下向系统注入精心设计的故障,用量化指标回答三个问题——系统是否感知?是否降级?能否恢复?这就像给AI服务定期做“消防演习”。
对AI从业者而言,混沌工程是性能测试体系的终极试炼——它让你从“看起来能用”走到“坏了也能扛”,是MLOps与SRE岗位不可替代的硬核技能。
可视化演示
动态展示混沌工程实验五步流程、四层故障注入类型、主流工具对比以及传统测试与混沌工程范式差异。
本节配有交互动效(进入视口后自动加载,约 3KB)。
混沌工程内涵
消防队最核心的训练不是“等火来了再救”,而是每隔一段时间就主动放一把“小火”:在废弃楼房中点燃火盆、释放烟雾,让消防员在可控场景中感受火势蔓延的速度、练习不同位置的扑救动作。这种演习让队伍在真正的火灾面前保持冷静。混沌工程之于分布式系统,就是这场演习。
2010年,Netflix工程师发明了“混沌猴子”(Chaos Monkey)——一个会在生产环境中随机杀死虚拟机的工具,逼迫团队把系统设计得足够健壮。后来这演变为系统的混沌工程学科:在可控的前提下,向系统注入真实故障,观察它如何表现、能否自我修复,从而建立对系统抵抗混乱环境的信心。
一套完整的混沌实验包含三个要素:一是明确系统稳态,即正常时延迟、错误率、吞吐量的基线;二是注入真实故障,如网络延迟、进程崩溃、GPU掉卡;三是验证“系统在故障下仍满足SLO”的假说。它与传统故障注入测试的根本区别在于:故障注入只是一个动作,混沌工程是“假设—注入—观测—改进”的完整闭环。评判系统韧性的经典量化指标是可用性:
消防演习的目的从来不是“没有火灾”,而是缩短火灾的扑救时间、延长整座城市的安全周期。混沌工程同样如此:它不能保证AI服务永远不故障,但能让“健康运行时间”更长、“故障修复时间”更短——这正是可用性公式的朴素含义。
- MTBF(平均无故障时间)系统从上一次恢复后到下一次故障前的平均正常运行时长,单位通常为小时。
- MTTR(平均修复时间)从故障发生到系统恢复所花费的平均时长,体现故障处理速度。
- 组装可用性公式将两者代入公式,得到可用性比例。例如 MTBF=720 小时、MTTR=1 小时,则可用性为 720/(720+1)≈99.86%。
故障注入类型
消防队的训练绝不会只练一种“火”。厨房油锅起火用水浇反而会炸,电气火灾要用干粉灭火器,森林火灾需要砍隔离带——不同火情有完全不同的打法。混沌工程的第一步,就是准备一份详尽的“火情类型手册”。
AI服务的故障类型同样多种多样。性能混沌实验中最常见的四类故障注入是:网络延迟、CPU争抢、GPU故障、磁盘IO故障。网络延迟让请求排队阻塞,CPU争抢让推理线程调度变慢,GPU故障让模型推理直接失败,磁盘IO故障让日志和模型加载陷入停顿。每种故障影响的环节不同,注入手段也完全不同。
网络延迟通过 Linux tc 工具的 netem 模块注入,比如 tc qdisc add dev eth0 root netem delay 200ms,可以精确模拟 200 毫秒的链路抖动;CPU争抢使用 stress-ng 将指定数量的 CPU 核心占满,观察服务在多租户争抢下的调度延迟;GPU故障在 Kubernetes 中销毁 GPU 资源,或通过驱动注入显存耗尽、ECC错误模拟硬件退化;磁盘IO故障用 dm-flakey 制造随机IO错误,检验存储层和日志链路是否扛得住。故障注入后,排队论中的利特尔定律可以解释系统为何雪崩:
消防员培训手册里有几十种火情预案,每一种都对应特定的灭火器材和战术。混沌工程师也要像熟悉灭火器一样熟悉故障注入工具箱——选错故障类型,就像用高压水枪去灭油锅火,不仅无效,还会把系统推向更危险的境地。
- λ(请求到达速率)每秒钟进入系统的新请求数量,比如每秒 100 个。
- W(请求停留时间)每个请求从进入系统到处理完成(或超时退出)所花费的平均时间。
- L(系统内积压请求数)将两者相乘,得到系统内部正在排队和处理中的请求总数。当注入网络延迟使 W 从 0.05 秒升到 0.5 秒,L 就从 5 飙升至 50,轻松打爆连接池上限。
实验设计流程
一场消防演习不是随便喊一声“着火了”就开始的。策划团队会提前确定演习目标、疏散路线、报警触发方式,甚至连扮演伤员的假人摆在哪一层都要规划。真正的“混乱”发生在预案之内,而不是预案之外。
混沌实验同样讲究精密设计。行业公认的流程包含四个步骤:定义稳态、提出假说、控制爆炸半径、评审放行。稳态是系统的“正常体温”,假说回答“我认为即使出了某某故障,系统仍能如何如何”,爆炸半径则决定了这次实验最多影响多大的流量和范围。
例如为AI推理服务设计网络延迟实验:稳态指标定义为 P99 延迟低于 200ms、错误率低于 0.1%;假说为“当注入 100ms 网络延迟时,服务会自动切换到备用链路,P99 延迟仍低于 300ms”;爆炸半径通过配置只影响 1% 的流量,避免拖垮核心业务;最后交给运维、研发、产品三方评审,一致同意后才放行。实验全程持续对照稳态指标,一旦越界立即触发自动熔断、终止故障注入。错误率是其中最直观的量化指标:
在消防演习中,总有一位“安全官”拿着对讲机守在控制台前,盯着楼内烟雾浓度,一旦超过人体耐受线就立刻叫停全员撤离。混沌实验中的稳态指标与熔断机制,就是这个安全官的数字化化身——它保证我们永远不会把“演习”变成真正的灾难。
- F(失败请求数)观测窗口内返回超时、5xx 错误或推理失败的请求数量。
- N(总请求数)同一时间窗口内所有请求的总量,包括成功与失败。
- 计算错误率用失败数除以总数并扩大为百分比。比如 10 个失败、990 个成功,则 E=1%。当 E 超过预设阈值(如 5%),系统判定为“稳态被破坏”,自动终止实验。
观测指标体系
消防演习结束后,队长手里会拿着一份详细的数据表:从警报响起到第一辆消防车出门用了3分钟,水带铺设花了90秒,楼内300人疏散用时4分20秒。没有这些数据,下一次演习就不知道改进哪里。混沌工程也一样,观测指标是实验的眼睛。
围绕AI服务的性能混沌实验,核心观测四类指标:延迟与吞吐、错误率、资源饱和度、SLO达标率。延迟和吞吐回答“系统快不快、接得住吗”;错误率回答“请求能成功吗”;资源饱和度回答“CPU、GPU、内存还有没有余量”;SLO达标率回答“对外承诺的服务等级是否守住”。
延迟指标通常看 P50 与 P99,P99 代表最差的那 1% 请求的延迟,是用户体验的底线;吞吐指标看 QPS/TPS,衡量系统每秒能处理多少请求。资源饱和度监控 GPU 利用率、显存占用率、CPU 水位和磁盘 IOPS——GPU 显存耗尽尤其常见于大模型推理,注入显存压力后要密切观察是否触发 OOM。SLO达标率是混沌实验中的“红线指标”,计算方式为:
消防演习的复盘会上,最忌讳指挥官说“我觉得还行”——一切结论都必须拿数据说话。混沌工程的观测指标就是这份“复盘数据表”,它把模糊的感受变成精确的数字,让每次实验后的改进都有据可依。
- C_ok(满足SLO的请求数)响应时间、错误率等指标符合服务等级约定(SLO)的请求个数,比如 P99 延迟低于 200ms。
- C_total(总请求数)观测窗口内所有请求的总量。
- 计算达标率两者相除并乘以 100%。例如 1000 个请求中 970 个满足延迟约束,达标率为 97%,若 SLO 要求 99%,则判定为违反——混沌实验随即标记为失败,触发改进流程。
降级阈值设定
消防系统有火警分级:一星火警由就近安保用灭火器处置,二星火警调动消防站,三星火警启动城市级应急联动。如果任何小火星都触发最高级别警报,消防资源会被空耗;如果大火只按一星处理,后果不堪设想。降级阈值就是系统的“火警分级线”。
AI服务在故障注入下不会立刻崩溃,但服务质量可能会快速劣化。问题是什么时候判定“服务已降级”并触发保护动作?这需要设置明确的降级阈值。例如:当 GPU 利用率持续 30 秒超过 85%,或 P99 延迟超过 300ms,系统自动将非核心请求切换到简化模型(如从大模型降级到小模型),优先保住核心用户体验。
阈值不能拍脑袋定,必须基于正常运行的统计数据。最常用的方法是:采集系统正常状态下的延迟数据,计算平均值 μ 和标准差 σ,然后设定降级阈值 T=μ+3σ。为什么是 3σ?正态分布下,正常数据落在 μ±3σ 范围内的概率约为 99.7%,这意味着一旦某个观测值超过 μ+3σ,几乎不可能是正常波动,而是真实异常——既避免了误报,也不会漏检。
火警分级表是消防部门在无数次火灾数据中总结出的经验曲线,降级阈值也是混沌实验数据的结晶。定得太低,用户会被频繁降级打扰;定得太高,小故障会趁虚而入酿成大祸。μ+3σ 就是那份经过统计校准的“火警分级表”。
- μ(延迟均值)正常状态下请求延迟的平均值,例如 80ms,来自监控系统的历史数据。
- σ(延迟标准差)反映延迟波动的离散程度,例如 20ms,波动越大越容易误触发。
- 计算降级阈值将均值与三倍标准差相加,得到 160ms。当实际延迟超过该值时,系统判定为“异常态”,自动触发降级或熔断。阈值需周期性重新校准,因为业务量增加后 μ 和 σ 都会变化。
自动恢复验证
现代建筑最强大的不是消防车来得快,而是建筑自身的“自愈能力”:喷淋系统在火苗蹿起的第一秒自动喷水,防火卷帘自动落下隔断火势,正压送风系统阻止浓烟蔓延。这些自动装置在无人操作的情况下完成了 90% 的应急处置。混沌工程的最后一环,就是验证AI系统是否具备这种自愈能力。
故障注入实验中,系统在故障期间的表现只是前半场;后半场是移除故障后,系统能否自动恢复到健康状态——指标回到基线、降级流量自动切回、临时缓存成功预热、Pod 完成重启。这称之为自动恢复验证,它是混沌实验闭环的“验收环节”。
常见的自愈机制有四个层次:进程层,监控工具自动重启崩溃的推理进程;容器层,K8s 的 Liveness 探针发现 Pod 不健康后自动重建;流量层,熔断器打开一段时间后进入半开状态,试探性地放流量,恢复后再关闭熔断;依赖层,主路径故障时自动切换到本地缓存或备用模型。验证自愈能力的核心指标是 RTO(恢复时间目标),即从故障发生到系统恢复允许的最大时长:
建筑里的自动喷淋系统每季度都要做一次喷水测试,模拟高温触发喷嘴,确认水泵和管道完好——而不是等到真着火才发现某个阀门锈死。混沌工程对自动恢复的常态化验证,就是AI系统这座大楼的“喷淋测试”。
- T_fault_start(故障发生时刻)故障注入正式开始、系统开始劣化的时间点。
- T_recovered(恢复完成时刻)系统观测指标重新回到稳态阈值以内的时间点,例如 P99 延迟回落至 200ms 以下。
- 计算恢复耗时用恢复时刻减去故障发生时刻,得到实际恢复时间。将实测值与目标 RTO(如 5 分钟)比较:实测小于目标,说明自愈链路合格;实测远超目标,则说明探针、调度或预热环节存在缺口。
工程实践落地
消防演习如果只在“119消防日”摆摆样子,队伍永远练不出真功夫。真正安全的企业会把消防演练嵌入新员工入职、季度安全会议、设备更新验收等所有日常节点,让安全意识成为组织本能。混沌工程落地亦然——它不是一次性的“大扫除”,而是一套常态化的“安全文化”。
把混沌工程真正落地到研发运维流程中,需要三根支柱:平台工具、流程制度、团队协作。平台工具负责故障注入与实验编排;流程制度把混沌实验嵌入 CI/CD 发布流水线,每次模型更新或配置变更后自动执行冒烟级故障测试;团队协作则通过跨职能的韧性小组(Chaos Guild)推动复盘和改进。
云原生时代常用的开源工具有 Chaos Mesh(Kubernetes 故障注入)、Litmus Chaos(云原生实验框架),商业方案有 AWS Fault Injection Simulator 等。一个成熟的混沌实验平台通常包含四个模块:故障场景库、注入调度器、实时观测看板、自动熔断器。最佳实践是:首次实验从非生产环境、1% 流量的最小爆炸半径做起;每次实验必须记录“前提—操作—预期—结果—改进”五段式报告;将实验结论沉淀为代码或配置修改,形成 SLO 驱动的韧性闭环。用实验通过率量化进展:
消防队有句老话:“演练多流汗,战时少流血。”混沌工程同样信奉这个道理:把故障演练变成每个迭代的例行工序,让每一次故障都成为滋养系统韧性的养分——这才是它从“一团乱麻”走向“庖丁解牛”的真正路径。
- E_passed(通过实验数)故障注入结束后,系统各项指标回落到稳态、且结果符合实验假说的实验数量。
- E_total(实验总数)统计周期内执行的混沌实验总次数,包括通过和未通过的。
- 计算通过率两者相除并乘以 100%。例如本月运行 20 次实验,16 次符合预期,则 M=80%。持续追踪该指标:通过率稳定在 90% 以上,表明系统主要薄弱点已被排查并修复;若长期低于 70%,说明实验设计或系统稳定性存在系统性问题。
AI 应用场景
大模型推理服务的GPU故障演练
阶段:性能测试 / 韧性验证
解决的问题:大模型推理服务高度依赖 GPU,驱动异常或显存耗尽会直接导致推理失败或无限超时。传统方式只能等故障自然发生后被动响应,无法提前验证降级链路。通过混沌实验定期注入 GPU 故障,可以让服务“提前学习”如何优雅降级、自动切换节点。
具体案例:某AI平台每季度对 LLM 在线推理服务执行“GPU掉卡演习”,使用 Chaos Mesh 随机销毁一个 GPU 资源,验证服务发现组件能否自动摘除故障节点、将流量切换到备用 GPU 节点,并记录从注入到完全恢复的耗时。
电商大促前的全链路延迟演练
阶段:发布前容量规划 / 稳定性测试
解决的问题:大促前常规压测只模拟高流量,不注入故障,无法暴露雪崩风险——比如缓存击穿、连接池打满、降级开关失效。混沌工程在压测基础上叠加网络延迟故障,验证降级开关能否在 SLO 即将跌破时自动触发,确保核心交易链路不被推荐等非核心链路拖垮。
具体案例:某电商在双11前对“推荐服务→模型推理→MySQL”整条链路注入 200ms 网络延迟,验证降级开关能否自动将推荐流量切到缓存热榜,保证商品详情、下单等核心接口 P99 延迟不超 800ms。
AI平台的CI/CD混沌冒烟
阶段:持续交付 / 发布门禁
解决的问题:模型每次更新后都可能有未知的故障模式,人工验证无法覆盖 GPU 掉卡、显存泄漏、依赖服务超时等异常场景。将混沌实验嵌入 CI/CD 流水线,可以让每次发布自动执行冒烟级故障注入,早期发现问题。
具体案例:某云厂商AI平台在模型发布后,自动对 canary 实例注入 5% 错误率故障,验证监控告警、自动回滚、版本切换等发布链路是否在分钟内生效,通过后才放量全量。
Python 演示
"""混沌工程最小演示:向AI服务注入网络延迟,观测错误率,验证恢复。运行: python chaos_demo.py"""import time class AIService: """模拟AI推理服务,支持延迟注入与结果统计""" def __init__(self, name, base_latency=0.02): self.name = name self.base_latency = base_latency self.latency = base_latency self.success_count = 0 self.fail_count = 0 def request(self): time.sleep(self.latency) if self.latency > 0.2: self.fail_count += 1 return "timeout" self.success_count += 1 return "ok" def error_rate(self): total = self.success_count + self.fail_count return self.fail_count / total if total else 0.0 class ChaosOrchestrator: """混沌实验编排器:注入故障、采集指标、触发恢复""" def __init__(self, service): self.service = service self.fault_types = ["network_latency", "gpu_fault"] def inject(self, fault_type, **kwargs): if fault_type == "network_latency": self.service.latency = kwargs.get("latency", 0.5) print("[注入] 网络延迟 ->", round(self.service.latency * 1000), "ms") elif fault_type == "gpu_fault": self.service.latency = kwargs.get("latency", 1.0) print("[注入] GPU故障 -> 延迟飙升到", round(self.service.latency * 1000), "ms") elif fault_type == "recover": self.service.latency = self.service.base_latency print("[恢复] 故障解除 -> 延迟回落至", round(self.service.latency * 1000), "ms") else: raise ValueError("Unknown fault type: " + fault_type) def run(self, fault_type, latency=0.5, samples=5): def _run_phase(): self.service.success_count = 0 self.service.fail_count = 0 for _ in range(samples): self.service.request() return self.service.error_rate() print("=== 混沌实验开始 ===") base = _run_phase() print("基线错误率:", round(base * 100, 1), "%") self.inject(fault_type, latency=latency) chaos = _run_phase() print("故障期错误率:", round(chaos * 100, 1), "%") self.inject("recover") recovered = _run_phase() print("恢复后错误率:", round(recovered * 100, 1), "%") return {"baseline": base, "chaos": chaos, "recover": recovered} if __name__ == "__main__": svc = AIService("sentiment-api", base_latency=0.02) orchestrator = ChaosOrchestrator(svc) result = orchestrator.run("network_latency", latency=0.5, samples=5) print("实验结果:", result)
self.latency = base_latency初始延迟等于基线延迟,服务处于“稳态”。time.sleep(self.latency)用真实休眠模拟请求耗时,让演示可以感知延迟变化。if self.latency > 0.2:超过 200ms 的请求视为超时,这是模拟的 SLO 红线。return self.fail_count / total if total else 0.0计算错误率,除零保护避免初始崩溃。self.fault_types = ["network_latency", "gpu_fault"]故障场景库,支持扩展新的故障类型。self.service.latency = kwargs.get("latency", 0.5)注入故障:把服务延迟改为目标值。self.service.latency = self.service.base_latency恢复故障:将延迟重置回基线。def _run_phase():每个阶段独立统计,防止累计误差干扰实验结果。orchestrator.run("network_latency", latency=0.5, samples=5)一键执行完整实验闭环。
常见误区
误区混沌工程不就是故意搞破坏吗?随机关掉几台服务器、断开网络,看系统会不会崩,越乱越能发现问题。
正解混沌工程不是“随机破坏”,而是“受控实验”。每一次故障注入之前,都要明确稳态指标、提出可验证的假说、限定爆炸半径,并准备好自动熔断的应急开关。随机关服务器只能证明“系统会崩”,而精心设计的混沌实验能回答“在什么条件下,系统仍然可靠”——就像消防演习不是随便放火,而是按预案模拟特定的火情。
为何常见:“Chaos“这个词本身带有”混乱”的暗示,加上不少演示视频都是直接 kill Pod,让初学者误以为混沌就是乱来。
误区我只是做AI模型训练的,混沌工程是运维团队的事,模型推理又快又准就够了,网络延迟跟我没关系。
正解AI服务的可靠性由模型代码、推理框架、GPU资源、网络链路共同构成。GPU 掉卡会让推理直接失败,网络抖动会让在线服务超时,CPU 争抢会让模型吞吐骤降——这些都需要混沌实验来验证。MLOps工程师恰恰需要混沌工程来发现“模型明明很准,线上却总是超时”的真相。
为何常见:模型效果评价往往聚焦准确率、召回率等离线指标,让人忽略了线上推理环节的工程性风险。
误区我给服务注入了网络延迟故障,页面没有打不开,服务也没有宕机,说明实验通过了。
正解混沌实验的通过标准是“行为符合假说且指标在预期范围内”。系统没崩但 P99 延迟从 100ms 飙到 3 秒、错误率暴涨到 20%,这不算通过,而是暴露了韧性缺陷。评价实验要通过量化指标——SLO 达标率、错误率、延迟分布——而非“没挂”这种二元判断。
为何常见:日常用“能不能打开网页”这种粗粒度感受来判断系统状态,缺乏对延迟和错误率的敏感性。
误区我把故障停了,看到系统恢复了,自动恢复验证就算做完了,可以收工了。
正解自动恢复验证的重点不只是“恢复了”,而是“恢复质量”:恢复耗时是否满足 RTO?恢复过程中流量是否平滑切换、没有抖动?恢复后缓存是否过热、是否出现冷却冲击?如果不验证这些,真实故障中“恢复动作”本身可能变成二次故障源——比如所有 Pod 同时重启,把数据库连接池瞬间打爆。
为何常见:自愈链路涉及探针检测、节点摘除、流量切换、缓存预热等一串动作,人们容易只看到“最终状态OK”,而忽视过程的曲折。
面试题
Q1. 混沌工程的核心思想最接近于下列哪种行为?
- A.消防演习式的主动演练← 正确答案
- B.保险理赔式的被动兜底
- C.健身房式的日常强化
- D.天气预报式的提前感知
答案:A。混沌工程借鉴消防演习理念,在可控条件下主动注入故障、验证系统韧性。保险理赔是被动响应,健身是提升固有实力,天气预报是预测而非干预,都与“主动制造可控故障”的本质不符。
Q2. 下列哪项属于AI服务典型的性能混沌故障注入?
- A.GPU显存耗尽模拟← 正确答案
- B.前端页面样式调整
- C.数据库添加索引
- D.日志文件压缩处理
答案:A。GPU 显存耗尽是大模型推理服务最常见的故障模式之一。前端样式调整、数据库加索引属于常规开发优化,日志压缩处理也不是故障注入类型。
Q3. 混沌实验中“爆炸半径”术语的含义是?
- A.故障可能影响的流量范围← 正确答案
- B.故障注入工具的运行时长
- C.系统架构中节点数量
- D.实验团队的人数规模
答案:A。爆炸半径指一次混沌实验可能影响的生产流量比例或服务范围。控制爆炸半径是为了把“演习”限制在安全边界内,与工具时长、节点数量、团队规模无关。
Q4. 稳态指标在混沌工程实验中的主要作用是?
- A.提供系统健康的比较基线← 正确答案
- B.替代故障注入的启动条件
- C.减少实验任务的执行时间
- D.提高系统资源的利用率
答案:A。稳态指标是实验前定义的“正常状态”,如延迟、错误率、吞吐量的基线。实验过程中持续对照稳态指标,一旦越界就判定异常并触发熔断,而不是用故障注入替代启动、压缩时间或提升资源利用率。
Q5. 某AI服务正常延迟均值100ms、标准差20ms,按μ+3σ设置的降级阈值是?
- A.160ms← 正确答案
- B.100ms
- C.120ms
- D.200ms
答案:A。按公式 T = μ + 3σ 计算:100 + 3×20 = 160ms。超过该值可判定为真实异常而非正常波动,从而触发降级或熔断。
Q6. 混沌实验中故障注入后错误率升至15%,但服务未宕机,正确结论是?
- A.实验不符合预设假说← 正确答案
- B.系统表现完全正常
- C.本次实验顺利通过
- D.需要继续加大注入力度
答案:A。实验是否通过要看结果是否符合实验前提出的假说和稳态指标。错误率升至 15% 已远超常见 SLO 阈值(如 0.1%),说明系统韧性存在缺口,而非“没宕机就算通过”。
Q7. 关于RTO(恢复时间目标),下列描述准确的是?
- A.故障发生到恢复的最长可接受时间← 正确答案
- B.故障发生到系统崩溃经历的时长
- C.两次故障之间的平均正常运行时长
- D.故障注入命令执行完成的耗时
答案:A。RTO(Recovery Time Objective)是业务中断后必须完成恢复的最大可接受时间。B 是故障持续到崩溃的时长,C 是 MTBF,D 是工具执行耗时,均与 RTO 定义不符。
Q8. 下列属于性能混沌故障注入类型的有?
- A.网络延迟注入← 正确答案
- B.CPU资源争抢← 正确答案
- C.GPU显存耗尽← 正确答案
- D.数据库索引优化
答案:ABC。网络延迟、CPU 争抢、GPU 显存耗尽都是性能混沌实验的典型故障类型;数据库索引优化属于性能调优手段,不属于故障注入。
Q9. 一个规范的混沌实验必须包含哪些步骤?
- A.定义系统稳态指标← 正确答案
- B.提出可验证的假说← 正确答案
- C.控制实验爆炸半径← 正确答案
- D.提前关闭监控告警
答案:ABC。定义稳态、提出假说、控制爆炸半径是实验设计的核心三步。关闭监控是错误做法——实验全程需要监控来触发熔断和复盘,监控数据是判断实验是否越界的依据。
Q10. 关于混沌工程的自动恢复验证,正确的做法有?
- A.验证恢复耗时是否满足RTO目标← 正确答案
- B.确认恢复后指标回到稳态基线← 正确答案
- C.检查降级流量是否平滑切回← 正确答案
- D.故障消除后立即判定恢复完成
答案:ABC。自动恢复验证要覆盖恢复时间(RTO)、恢复后的指标基线、以及流量切换的平滑性。故障消除只是“开始恢复”的信号,不能立即判定完成,还必须观察缓存预热、连接池重建等后续过程。