复杂系统为何总在崩溃边缘?

How Complex Systems Fail

交通、医疗等关键系统天生就充满危险,所谓的“安全”并非来自消除隐患,而是依靠层层防御将事故挡在门外。灾难往往不是由单一故障引发,而是多个微小失误在特定时刻的致命叠加。人类操作员在系统中身兼生产与防御双重角色,他们的每一次决策都是在不确定性中的博弈。事后归咎于“根本原因”或指责人为失误,往往只是幸存者偏差下的误判。真正的安全是动态生成的,它依赖于操作者对系统边界的深刻理解和实时适应,而非死板的规则或完美的组件。

安全是系统的涌现属性,它并不存在于任何个人、设备或部门之中。
  1. tptacek

    我就像个坏掉的唱片,反复强调这份文档有多重要,而且除非你亲身经历过复杂系统真正崩溃的漫长过程,否则很难真正体会它的价值。

    这份文档最常被引用的潜台词或核心观点是:至少在复杂系统领域,"根本原因分析"纯属徒劳。比如分布式锁系统出了岔子,整个部署系统就陷入了一种亚稳态故障。自然而然地,"根本原因"似乎就是锁系统的韧性不足。但按定义,亚稳态故障是指诱发条件解决后故障依然持续的状态。现在你有了两个"根本原因":锁故障和部署系统故障的亚稳性。继续深挖,你还会找到更多。

    但在我看来,这篇文章最让人醍醐灌顶的一点是它进一步指出:在任何复杂系统中,各种随机故障其实时刻都在发生。"复杂系统始终处于降级模式运行"。组件层面的韧性固然好,但决定系统是否会彻底爆炸的,是统筹整个系统的整体流程的韧性。

    所有从业者的行动本质上都是赌博。这话我得刻在某个地方。

  2. anonymars

    "系统之所以能继续运行,是因为它包含了大量冗余,也因为人们能在众多缺陷存在的情况下让它运转。事故复盘几乎总是指出,该系统此前就有过一系列"准事故"(proto-accidents),差点酿成大祸。那些认为在显性事故发生前就应该识别出这些降级状态的论点,通常都基于对系统性能的幼稚认知。系统运行是动态的,其组件(组织、人员、技术)在不断失效并被替换。"

    这段话非常像 Admiral Cloudberg 对国家机场碰撞事件的总结:

    "没有任何人能审视一个复杂系统,并准确预测它究竟会如何失效。但只要有足够的数据,预测就是可能的,因为职业安全领域有一个众所周知的定律,即海因里希法则(Heinrich's Law),该法则指出每一起严重事故背后大约有 300 起"未遂事故";或者按该法则的最新版本说法,每一起致命事故伴随着约 3000 起未遂事故和约 30000 起"风险行为"[39]。从统计上看,在首起致命事故发生前,很可能已经发生了数百甚至数千起风险行为和未遂事故,这为我们提供了在生命逝去前识别风险的机会。"

    https://admiralcloudberg.medium.com/reaping-the-whirlwind-in...

  3. jedberg

    > 无故障运行需要拥有故障经验。

    这正是我们创建混沌工程(Chaos Engineering)的原因。通过不断强制引入故障,我们被迫始终构建能够抵御这些故障的系统,同时也获得了宝贵数据,让我们能明确不同系统在特定故障模式下的临界点究竟在哪里。

  4. feyman_r

    我之前可能在另一个帖子里分享过:John Gall 的书在这个话题上写得非常好:General Systemantics [https://en.wikipedia.org/wiki/Systemantics]

  5. ChrisMarshallNY

    每当我看到这篇[优秀的]论文,我总是被第一部分的第一句话深深触动:

    > 所有有趣的系统(例如交通、医疗、电力生成)本质上且不可避免地因其自身性质而具有危险性。

    (加粗为我所加)

    我不确定这是笔误,还是某种我这种没受过教育的大脑无法理解的写作惯例。

同日更多故事

2026-08-23