TOPIC 25 · PHASE D

级联失效与系统性风险CASCADING FAILURE & SYSTEMIC RISK

效率与韧性之间有一个确切的汇率(There is an exact exchange rate between efficiency and resilience)

2026-08-11 · 网络

事后报告总能找到第一块倒下的骨牌。但决定波及范围的从来不是它——是它倒下之后,它原来扛的那份负担落到了谁头上。

2003 年 8 月 14 日下午,美国俄亥俄州一条高压输电线碰到了长得过高的树,跳闸了。四个小时后,美国东北部八个州加上加拿大安大略省,约五千万人没了电。

这里有个容易滑过去的问题:一棵树能压垮一张覆盖八个州的电网吗?当然不能。压垮它的是电网自己。那条线跳闸之后,它原来输送的电流不会凭空消失——它必须走别的线路。别的线路因此超载,为保护自己也跳闸,再把负担传给下一批。整个过程里没有一个设备发生故障,每一台都在严格按设计动作。

上一期讲传染,传的是状态:你被感染了,所以我也可能被感染。本期讲级联,传的是负担:你倒了,所以我要多扛你那一份。这个区别不是措辞上的。传染有基本再生数(basic reproduction number,写作 R₀,指一个感染者平均传给几个人)和阈值,压住接触就能压住传播;级联里根本没有"接触"这回事,它沿着容量的裂缝走,而且节点变少本身就是它的传播方式。第 18 期讲自组织临界,回答的是"为什么大事件不需要大原因";本期回答另一个问题:从第一块骨牌到最后一块,中间那条路是怎么铺出来的。

01级联传的不是病,是负担(Load Redistribution)

2002 年,Adilson Motter 和黎作武(Ying-Cheng Lai)写了一个极简的模型,把上面那段话变成了可以跑的规则。

先给网络里每个节点定义两个数。一个是负载——有多少东西正在经过它。他们用的是介数(betweenness,把所有节点两两之间的最短路径都算一遍,看有多少条从这个节点穿过)→ 参考 · 网络中心性指标。另一个是容量:它最多能扛多少。容量不是随便给的,而是按初始负载的固定倍数给——写成 C =(1+α)× 初始负载。这个 α 就是余量:α=0.2 意味着每个节点比它平时的活儿多留了两成的富余。

规则只有一条:负载超过容量的节点失效,它的负载按最短路径重新分配给其它节点;然后再看有没有新的节点超限。循环,直到没有新的失效为止。

每个节点容量上限 8 · 圆里的数字 = 当前负载 ① 正常运行 14 5 5 5 5 中心节点容量 20,也没超 ② 中心失效,负担转移 9 9 6 6 上面两个 9 > 8,超限 ③ 第二波 11 11 剩下两个也超了 从头到尾没有一个节点「坏掉」— 每一个都是负载超过容量后按设计退出 如果余量从两成提到六成(容量 8 → 12),这场级联在第 ② 帧就停住了
负载重分配。触发只有一次,后面每一步都是前一步的输出。

Motter 和黎作武跑出来的结果里,有一条特别值得记住:在节点连接数很不均匀的网络里(少数枢纽扛着绝大部分流量),单独拿掉一个高负载节点,就足以引发波及全网的级联;而在连接数比较均匀的网络里,同样的操作基本什么也不会发生。

这一条正好接上第 23 期。上一次我们说枢纽的存在让网络"抗随机故障、怕定点攻击"——那是从连通性看的。现在从负载看,同一个枢纽有了第二重身份:它是全网负担的集散地,所以它的退出不只是断了几条路,是把一大笔活儿一次性推给了邻居。枢纽在随机故障下是优点,在负载重分配下是引信。

🎯 决策线

别只问"哪个部件最可能先坏",问"它坏了之后,它扛的那份去哪儿"。给每个关键部件写一行:它下线后负载转给谁、那几个接手方当前用了多少容量。写不出这一行,你手上的冗余就只是名义上的——你只证明了备份存在,没证明备份接得住。

🌀 经济与制度 · 2007 年 8 月的"量化地震" 2007 年 8 月 7 日到 9 日,一批彼此毫无往来的量化对冲基金在三天里同时巨亏,10 日又几乎同幅反弹。Khandani 和 Lo 的复盘指出,最可能的机制是某家大型基金被迫快速平掉股票仓位——而它持有的东西,别人也持有。这里没有任何"消息"在传播,传播的是被迫卖出所产生的价格压力,也就是负担本身。由此推出一条不显然的结论:「我不认识他们、和他们没有任何业务往来」完全不构成隔离——在级联里,共享持仓就是一条连线。

EN The Motter–Lai model: give each node a load (its betweenness) and a capacity of (1+α) times that load. Overloaded nodes fail and hand their load to others, which may overload in turn. In heterogeneous networks, removing one high-load hub can bring down the whole system; in homogeneous ones it does almost nothing. A hub is an asset under random failure and a fuse under load redistribution.

02余量的汇率(The Exchange Rate of Slack)

上面那个 α 看着像个技术参数,其实它就是"效率与韧性"这句口号的量化版本。α 小 = 每台设备都在满负荷干活 = 效率高;α 大 = 到处闲着 = 浪费。所以问题从来不是"要不要余量",而是余量的汇率是多少——多买一成余量,买到了多少韧性?

答案是:这个汇率极不均匀

电力行业有一条几十年的老规矩叫 N-1 准则:系统里任意一个元件退出,剩下的必须还能安全运行。听起来很稳妥,而 2003 年那次事故里,出事之前系统是通过 N-1 校核的。问题在于级联的第二步、第三步不在 N-1 的定义域里——它保证的是"少一个还行",而级联问的是"少一个之后又少一个,再又少一个"。你没法靠加强 N-1 来覆盖 N-2、N-3,因为需要考虑的组合数会爆炸。

更要命的是余量和级联规模之间的关系不是一条斜线。在很宽的一段 α 区间里,级联要么几乎不发生、要么横扫全网,中间的过渡带很窄。这意味着:你可能一直在削余量而毫无感觉,直到某一次削过了那个位置,后果就不是"稍微差一点",而是换了一个量级。

排队论给出了同一件事最干净的一个版本。设想一个窗口,活儿随机到达。窗口的忙碌比例记作 ρ(利用率),那么排队里平均积压的活儿数量是 ρ/(1−ρ)。代进去看:ρ=0.5 时积压 1 件,ρ=0.9 时积压 9 件,ρ=0.95 时积压 19 件。从五成用到九成,效率涨了 80%,积压涨了 9 倍;从九成再挪到九成半,效率只涨了 5%,积压又翻了一倍。这不是经验规律,是那个公式本身——分母里的 (1−ρ) 在往零走。

余量买到的韧性:几乎全在一小段里 余量 α → 级联后存活比例 αc 再加余量,几乎白花 这一段加了也不管用 利用率买到的效率:越往后越贵 利用率 ρ → 平均积压 ρ/(1−ρ) 0.5 → 1 件 0.9 → 9 件 0.95 → 19 件 两张图讲同一件事:从「效率」换到「韧性」的汇率不是常数,它在临界点附近整个翻过来
左图是级联模型跑出来的形状,右图是排队论里的恒等式。共同点:中间那一小段决定一切。
🎯 决策线

把系统的目标利用率写成一个明确的数字,并在旁边写清为它付的价(多长的排队、多少闲置产能、多少库存)。然后停掉两个动作:停掉把"利用率再提高几个点"当成无条件的好事——在 0.9 以上,每提一个点买到的是成倍的积压;也停掉用"我们通过了 N-1 校核"回答韧性问题——N-1 从定义上就不覆盖级联的第二步。

🌀 工程与技术史 · 被压掉的"余裕时分" 日本铁路的运行图里有一项专门的设计叫余裕时分,即在每段行程里预留几十秒的富余,好让一次小晚点不被下游继承。2005 年 4 月 25 日 JR 福知山线在尼崎脱轨,107 人死亡;调查指出当时的时刻表把这份富余压得极薄,同时公司用严厉的惩罚性再教育对待晚点,司机为追回约 80 秒的延误而超速过弯。把本节的机制套上去可以推出一条不太受欢迎的结论:余量被削掉之后并没有消失,它被转成了操作者身上的压力。于是"我们的准点率提高了"和"我们变脆了"可以是同一句话的两半。

EN α is the quantified form of the efficiency-versus-resilience slogan, and its exchange rate is wildly uneven. The N-1 criterion — survive the loss of any single element — was satisfied before the 2003 blackout, because cascades live in the N-2, N-3 region that N-1 does not define. Queueing theory gives the cleanest version: average backlog is ρ/(1−ρ), so 0.5 → 1, 0.9 → 9, 0.95 → 19. The last five points of utilisation cost as much as the first ninety.

03两张网叠在一起,比任何一张都脆(Interdependent Networks)

2003 年 9 月 28 日凌晨,瑞士一条输电线因为树木闪络跳闸,几分钟内意大利与欧洲主网解列,全国约五千六百万人停电。这次事故有一个细节让物理学家很在意:电站停了,通信节点跟着断电停机;而通信节点停机之后,依赖它们做遥控和调度的电力设施也失去了控制。

2010 年,Buldyrev、Parshani、Paul、Stanley 和 Havlin 在《自然》上把这个结构做成了模型。设两张网:电网 A 和通信网 B。B 的每个节点需要 A 里的某个节点供电,A 的每个节点需要 B 里的某个节点提供控制。再加一条在网络科学里很常规的假设:一个节点只有留在自己这张网的最大连通块里才算能用(掉出主体的孤岛不算数)→ 参考 · 渗流模型

然后拿掉 A 里的几个节点,看会发生什么。

竖直虚线 = 互为前提(上面的要电,下面的要控制) 通信网 电 网 ① 完好 两张网各自连通 ② 拿掉电网一个点 橙色 = 被拿掉的电网节点 绛色 = 断电后跟着停的通信节点 ③ 孤岛被逐层剥掉 掉出主簇的先失效 它的依赖对象再跟着失效 来回震荡直到没有新的失效为止 — 拿掉 1 个点,最终少了 4 个 在单独一张网上做同样的事,只会少 1 个
递归剥离。每一轮的输入都是上一轮的输出,两张网轮流把对方削薄。

这个来回震荡的过程会产生两个反直觉的后果。

第一,相变的形状变了。单独一张网被随机拿掉节点时,最大连通块是连续缩小的:你拿掉一点,它小一点,到某个比例才彻底散架,而且散架之前会有明显的萎缩。两张互相依赖的网不是这样——它在某个比例之前几乎完好,越过之后一步塌到底。中间没有那段"逐渐变差"的缓冲。

同样是「随机拿掉节点」,两条曲线的形状完全不同 保留下来的节点比例 p → 还能用的部分 单独一张网:连续变小 两张互相依赖的网:一步到底 单层阈值 耦合后的阈值 耦合把阈值往右推(更早崩),并且把「缓慢变差」这一段整个删掉了
连续 vs 突变。右边这条曲线的可怕之处不在它更早崩,在于崩之前它看起来一切正常。

第二,枢纽的作用整个反过来。第 22、23 期讲过,单独一张网里连接数分布越不均匀(枢纽越突出),对随机故障就越耐受。而在相互依赖的两张网里,同一个性质变成了缺点:连接数不均匀意味着有大量只连一两条边的小节点,它们最容易掉出主簇,一掉出去就把对面的依赖对象一起拖下水,于是递归剥离启动得更快。"有枢纽 = 抗随机故障"这条在耦合之后不成立。

推论很直接:冗余不能跨网叠加。两个各自可用性 99.9% 的系统,如果互为对方的前提,你不能把它们乘起来当作两道独立的防线——它们在结构上是同一个系统,只是记在两本账上。

🎯 决策线

既然耦合系统的崩溃是突变式的,"当前健康度"这类指标就不构成预警——它在崩之前一路正常。改测离阈值多远:有多少对组件互为前提、单个组件被多少条依赖压着、去掉任意一个之后还剩几个连通的孤岛。这几个数会在崩溃之前变化,而可用率不会。

🌀 生物 · 传粉网络的共灭绝 植物与传粉者构成的正是一张两层的互相依赖网。Memmott、Waser 和 Price 2004 年的模拟显示:随机移除传粉者时植物群落相当耐受,而从连接最多的传粉者开始移除,植物的次生灭绝会陡然加速。把本节的机制套上去可以推出一条对保育政策不利的结论:红色名录逐个物种评估濒危等级,做的是单层网上的计算——"每个物种单独看都不算濒危"和"整个网络一击即溃"在数学上完全兼容,前者不能用来否定后者。

EN Buldyrev et al. (Nature, 2010) modelled a power grid and a communication network that each require the other. Removing nodes triggers recursive pruning: nodes that fall out of their own giant component fail, which kills their dependants, which fragments the other layer further. Two consequences invert earlier lessons — the percolation transition becomes abrupt rather than continuous, and a broad degree distribution now makes the coupled system more fragile, not less. Redundancy does not multiply across mutually dependent layers.

04正常事故:安全装置本身也是零件(Normal Accidents)

前面两节都是从网络算出来的。1984 年,社会学家 Charles Perrow 从另一头——一批真实事故的调查报告——走到了几乎相同的地方,而且他的版本更好用,因为它只需要两个维度。

第一个维度叫交互复杂性(interactive complexity):系统的零件之间,除了设计者规划好的那条流水线之外,还有多少条没被规划的路径?管道贴着管道走,一根漏了会烤到另一根;两个子系统共用一个电源;一个传感器同时喂给三处逻辑。交互复杂 = 你没法在图纸上把因果链数清楚。

第二个维度叫耦合紧密度(coupling):出事之后,你还有多少时间和多少余地。紧耦合的意思是过程不能暂停、顺序不能调换、替代方案必须事先备好——反应堆里的几秒钟,或者结算系统里的当日闭市。

交互复杂性 →  线性、看得清      交错、看不清 耦合 → 松(能停)  紧(停不下来) 紧耦合 + 交互复杂 核电站 · 化工厂 · 航空器 现代金融清算 Perrow:这一格里的事故不是 异常,是系统的正常产物 紧耦合 + 线性 水坝 · 铁路 · 输电网 因果看得清,所以 集中控制管用 松耦合 + 线性 流水线制造 · 邮政 出了事有时间收拾 松耦合 + 交互复杂 大学 · 研发机构 · 矿业 乱,但乱得起—— 有余地慢慢试 加装安全装置,是把系统往右推(多了新零件、新交互)— 却不一定往下推
Perrow 的二维图。他的主张不是"这些系统很危险",是右上角那一格里事故属于系统的正常输出。

Perrow 的主张是:同时高在这两个维度上的系统,事故是"正常的"——不是有人失职的产物,是系统结构的正常输出。他分析的样板是 1979 年的三哩岛(Three Mile Island)核电站事故。当时一个泄压阀卡在打开的位置,冷却水一直流失;而控制室里那盏指示灯显示的是"发给阀门的关闭指令",不是阀门的实际位置。操作员据此认定阀门已关,于是把紧急注水关小了——这个动作在他们掌握的信息里是正确的。

由此得到本期最不直觉的一条:加装安全装置不必然让系统更安全,因为安全装置本身也是零件。它有自己的失效模式,它和别的零件之间会产生新的交互路径,它还会给操作员多一层需要解读的信息。用上面那张图说:加安全装置把系统往推(交互复杂性上升),但并不必然把它往推(耦合并没有变松)。三哩岛那盏灯就是这么来的——它是安全设计的一部分。

把 Perrow 的两个维度和前两节对上,会发现它们讲的是同一件事的两面:交互复杂性 = 你不知道负担会流向哪儿(第一节的重分配路径不可见);紧耦合 = 你来不及在两步之间插手(第三节的突变没有缓冲带)。

🎯 决策线

加一层防护之前,先数一数它引入了几条新的交互路径:它读谁的数据、它和谁共用电源/网络/凭证、它误报时会触发什么。如果数不清,这层防护是在往右推。真正能往下推(松开耦合)的只有一类东西:可切断的接缝——分区、断路器、降级模式。而且要演练"断开",不能只演练"恢复";绝大多数团队从没在生产环境真的切断过一次,于是接缝存在与否从未被验证。

🌀 文学与艺术 · 契诃夫的枪 契诃夫 1889 年在给友人的信里写下那条著名的编剧律:舞台上不该出现一把不会被打响的枪。通常大家把它读成审美要求——叙事经济,别留闲笔。本节的机制给它一个反向的读法:在紧耦合、交互复杂的系统里,这条律是自动成立的,不是审美要求。任何装上去的东西都会进入交互,包括你只为"以防万一"装的那些。于是"备而不用"在这类系统里并不存在——它要么被用到,要么以你没预料的方式参与进因果链。

EN Perrow's two axes: interactive complexity (unplanned paths between parts) and tight coupling (no time or slack once something goes wrong). Systems high on both produce accidents as normal output, not as deviance. At Three Mile Island the control-room lamp showed the command sent to a relief valve, not the valve's position — a safety feature that became part of the causal chain. Adding protection moves a system right on the complexity axis without necessarily moving it down on the coupling axis.

05这套说法在哪儿不成立(Where This Breaks Down)

本期用了三套工具,每一套都有一处经常被跳过的前提。

一、拓扑不等于物理。第一节那个模型假设负载沿最短路径走。电流不这么走——它按基尔霍夫定律在所有可行路径上按阻抗分流,所以一条线跳闸之后,负担未必落在它的邻居身上,可能落在几百公里外某条阻抗合适的线路上。Hines、Cotilla-Sanchez 和 Blumsack 2010 年拿真实电网数据比对过:用介数这类纯拓扑指标排出来的"关键节点"清单,对实际脆弱性的预测能力相当有限。结论是:网络模型给的是级联的形状,不是你系统里的名单照着拓扑排名去加固,可能加固错了地方。

二、"耦合让网络更脆"这个说法,对耦合怎么连极其敏感。Buldyrev 那篇假设的是随机的一一依赖。后续工作(Parshani、Buldyrev、Havlin 等)发现,如果让高连接数的节点依赖高连接数的节点,或者依赖关系是地理上局部的,脆性会大幅下降,那个一步到底的突变甚至可以退回连续的形状。所以正确的说法不是"相互依赖 = 更脆",是"随机的相互依赖更脆"。这条差别有直接的工程含义:耦合本身不是罪,乱耦合才是。

三、Perrow 的理论很难被证伪。任何一起事故发生之后,你总能给它贴上"交互复杂 + 紧耦合"的标签。真正的反例来自另一派:高可靠性组织(high reliability organization,缩写 HRO)学派拿航母甲板作业、空中交通管制这类同样紧耦合、同样交互复杂却事故率极低的系统当证据,主张组织实践可以抵消结构。Scott Sagan 1993 年用冷战核武器的事故史来裁决两派,结论偏向 Perrow,但整场争论到今天也没有一个判决性的实验——它是靠一批批历史案例慢慢磨的,不是能一次性判定的命题。用 Perrow 时要意识到:你在用一个解释框架,不是一个预测模型。

四、级联规模的分布,尾部数据太少。北美停电记录确实能拟合出重尾的分布,这常被拿来说明电网处在自组织临界状态→ 参考 · 沙堆模型。但真正的大停电几十年才几次,尾部的样本量薄到无法把幂律和别的重尾分布区分开——第 19 期讲过这个坑→ 参考 · 幂律的识别与误判。所以"级联服从幂律"这句话可以当作一个有用的默认假设,不能当作已经确立的事实。

🎯 决策线

汇报任何级联/系统性风险分析时,把两样东西和结论放在一起:它的耦合假设(谁依赖谁,是随机耦合还是结构化耦合)和它在事故发生之前给出过的、可以被推翻的数字。只有事后解释力的模型,解释下一次也一样顺畅——那正是它没在提供信息的证据。

🌀 西方科学哲学 · 迪昂-蒯因论题 迪昂(Duhem)和蒯因(Quine)指出:一个假说从来不单独面对经验,它总是和一大堆辅助假设捆在一起接受检验;预测失败时,你永远可以改某个辅助假设来保住核心。级联模型是这个论题的教科书场景——预测落空,你可以说耦合系数估错了、可以说负载函数选错了,核心机制毫发无损。因此判据不能是"这个模型解释得了这次事故吗"(总能),只能是"它在事故之前给过一个具体的、会被推翻的数字吗"。这也是上面那条决策线为什么要把那个数字单列出来。

EN Four limits. Topological models route load along shortest paths; real power flows obey Kirchhoff's laws, and betweenness-based rankings predict grid vulnerability poorly (Hines et al. 2010). The fragility of interdependent networks depends sharply on how the coupling is wired — assortative or geographically localised dependency restores much of the robustness. Perrow's framework is an explanatory scheme, not a predictive model, and the high-reliability-organization school supplies real counter-cases. And the heavy-tail claim for blackout sizes rests on a tail with very few samples.

🎒 场景 · BigCat

  1. 工程与系统设计反复发生的情境:每隔一阵做一次依赖梳理,画出来的是「我依赖谁」这一张单向表,评审通过,收工。第三节的机制说明这张表在结构上看不见真正的问题:会同时把两边拖下水的,是互为对方前提的那一对——监控系统用的存储,正是被监控的服务在用的;发布系统的鉴权,走的是它自己刚发布的那个服务。可改的东西:给依赖表加一列「对方是否(哪怕间接)也依赖我」,这一列为是的,必须有一条不经过对方的降级路径。停掉的动作:停掉把「依赖已梳理」当作韧性证据——单向表在数学上不可能发现环。
  2. 育儿反复发生的情境:孩子在某件事上出了状况(成绩掉了、不想去某个课),家里的应对是围着这件事加码——补课、谈话、加监督,而且往往是同时上。第四节的机制正对着这个动作:每加一项都是一个新零件,都会和原来的东西产生新的交互——补课占掉的是睡眠或自由玩耍,睡眠影响情绪,情绪又落回那件事上。可改的东西:加干预之前先问一句「这一项占用的是哪一段时间,那段时间原来在干什么」;并且一次只加一项,留两周观察。停掉的动作:停掉同时启动三项措施——同时启动,你既不知道哪一项在起作用,也不知道哪一项在制造新的耦合。
  3. 修行与心性反复发生的情境:定了一套日课(静坐、诵读、锻炼),只要有一天断了,整套就一起停掉,过一阵再「从头开始」。这不是意志力问题,是紧耦合:几件事被绑成一个「全做完才算数」的单元,任一项失败就把失败传给全体,而且没有中间状态。可改的东西:给日课写一个明确的降级模式——每一项都定一个「最低限度版」(五分钟也算),并规定断的那天执行最低版,而不是跳过。停掉的动作:停掉「重新开始」这个说法本身,它就是把一次局部失败升级成全局重置的那个开关。

🌀 越界 · 跨学科的联想(Crossings)

深入思考(Going Deeper)

既然余量的汇率在临界点附近才陡,能不能干脆把系统调到临界点右边一点点,既省钱又安全?

问题在于你不知道 αc 在哪儿,而且它会漂。αc 由拓扑和负载分布共同决定,网络加了几条边、流量结构变了,它就动了。真正的操作含义不是"贴着阈值走",而是"别让阈值成为一个你没在测量的量"——至少要知道最近一次变更把它往哪个方向推了。

把系统模块化、加隔断,是不是就等于降低了级联风险?

降低了扩散范围,但通常也降低了互相支援的能力。电网分区之后,一个区出问题不会拖垮别区,可它也拿不到别区的备用容量,于是本区内的停电概率上升。这是一笔真实的交换,不是免费午餐。判据是:你更在意"事故的频率"还是"最大一次事故的规模"——模块化拿前者换后者。

金融监管里的"压力测试"能发现级联吗?

取决于它测的是什么。给每家机构单独施加一个冲击、看它扛不扛得住,测的是 N-1;而级联要求把一家的被迫卖出当作另一家的价格输入再跑一轮。后者(有时叫"二轮效应"或宏观审慎压力测试)在技术上要难得多,因为它需要各家的持仓明细,而那正是各家最不愿意交出来的东西。所以这里的瓶颈往往不是模型,是数据的产权。

如果每一步都是局部理性的最优反应,责任还落在谁身上?

本期的机制取消的是"某一步造成了整体规模"这个推理,不取消每一步自身的责任。更准确的说法是:责任的位置从"触发的那一步"移到了"决定耦合与余量的那些决策"——谁把利用率定在 0.95,谁批准了那条把两个系统绑在一起的依赖。这些决策通常发生在事故前很久,也通常没有留下事故报告。

延伸阅读(Further Reading)