首页 › 运营与质量 › 瑞士奶酪模型
运营与质量 · 安全与可靠性

瑞士奶酪模型

事故往往要等好几层防线上的洞,碰巧对到一起。

Swiss Cheese Model◷ 约 4 分钟▤ 8 个真实故事换成 AI 也一样在知识地图里看它和谁相连 →

2017 年 1 月 31 日深夜,GitLab 的一位工程师敲了一条命令,要清空备用服务器上的一个数据库目录。一两秒后,他看清了自己在哪台机器上:主库,放着线上数据的那一台。等他把命令停下,约 300 GB 的数据只剩下 4.5 GB 左右。

本来还可以指望备份。GitLab 的事后复盘写道:「通常遇到这种情况,用一份最近的备份,应该能在比较短的时间里把数据库恢复过来。」工程师们去找备份。

每天的数据库导出,已经有一阵子什么也没导出来:它用的是一个跟新版数据库不兼容的旧工具。这个任务倒是会发失败通知邮件,可邮件被收件服务器退了,没人看到。这还只是他们找的第一种备份。按 GitLab 自己的记录,五种备份和复制手段都摆在那里,没有一种能可靠工作,有的根本就没配好。

一片片奶酪

英国心理学家詹姆斯·里森解释过为什么这种事一再发生。他 1987 年第一次画出一层层防线,几年后,一位澳大利亚的航空安全调查者给它配上了奶酪的比喻。他在 2000 年的《英国医学杂志》上写道,危险的系统靠一层层防线守着:有的是工程上的,比如警报、自动停机;有的是人,比如飞行员、外科医生;有的是规程。理想状态下,每一层都完好无缺。「可现实中,它们更像一片片瑞士奶酪,上面有很多洞。」

这些洞不是固定的,它们「不停地打开、合上、挪位置」。一片上有个洞,通常不碍事,因为下一片挡住了。事故要等好几层上的洞「一时间对齐」。

在 GitLab,单看每个洞都扛得住。导出坏了,有快照就行;没开快照,导出正常也行;目录删了,只要还有一样能用就行。那一晚,哪一样都不能用。

这张图自己也有个陷阱:白板上画了五片,不等于有五份互相独立的保护。几层防线要是共用同一个账号、同一个没测过的流程、同一个想当然,一个洞就能一下子穿透好几层。被问到为什么没开磁盘快照,GitLab 的工程师写道:「我们以为别的备份手段已经够了。」被问到为什么没定期测试备份:「因为没人负责。」

两种洞

里森把洞分成两种。一种是「当场失误」:在一线直接操作的人手滑、走神、犯错,比如在错的服务器上敲了命令。另一种是「潜伏条件」,他称之为系统里的「常驻病原体」,是设计者、建造者、写规程的人和管理层早就埋下的:一个没人测过的邮件校验,一份没人负责的备份。它们可以安静地待上好几个月,直到某个当场失误撞上来。

「当场失误就像蚊子,」他写道,「可以一只一只拍死,但它们还会不断飞来。」更好的办法是把滋生蚊子的沼泽排干。所以出了事,「要紧的不是谁犯了错,而是防线怎么失守、为什么失守」。

设想周五午饭高峰,一位服务员接了一单,客人是个对坚果过敏的孩子,她把这一点写在了单子上。厨房的打单机只打得出一行备注,过敏那句被截掉了一半。平时会把单子念出声的那位厨师,那天请了病假。甜点新加了一种装饰,没人把它补进过敏原清单。每一件都是小事。凑在一起,一盘果仁糖就端到了孩子面前。那位服务员什么都没做错。换一个服务员,打单机和过敏原清单照样是坏的。

用训练做成的那一片

AI 系统也靠一片片奶酪守着。2025 年,Anthropic 公开了一份报告,正好看到好几片同时在起作用。

据公司判断,一个由国家支持的中国黑客组织,用它的编程智能体 Claude Code 去攻击全球大约三十个机构。第一片是 Claude 本身,它「受过大量训练,避免有害行为」。攻击者穿过了这一片:他们把攻击拆成「一个个看起来无害的小任务」,还告诉 Claude,它是一家正规网络安全公司的员工,在做防御测试。这场行动在少数几个目标上得了手。

后面的一片挡住了。2025 年 9 月中旬,Anthropic 的监测发现了异常。接下来十天里,公司封禁了相关账号,通知了受影响的机构,并和有关部门合作。Anthropic 还注意到一点运气:Claude 有时会编造登录凭据,或者把公开信息说成偷到的机密,给攻击者添了乱。这是攻击里碰巧出现的一个洞,不是谁能指望的一片防线。

Anthropic 的应对,正是里森会预料到的那种:加更多、更厚的奶酪片。它扩大了监测范围,做了更好的分类器来标记恶意活动。

GitLab 的补救也是这个思路。它列出的后续工作里,有一套新的数据库恢复流程,还有给「数据持久性」指定一个负责人。备份要有人真的拿它恢复过一次,才算得上一片奶酪。

先看几件事

GitLab · 2017空桶删除命令敲在了错的服务器上,备份任务用错了版本,报错邮件被收件服务器退回,数据库没开磁盘快照,备库又已经被清空。这几个洞各自独立,偏偏在这一夜对上了。看整件事 →骑士资本(Knight Capital) · 2012第八台服务器没删的旧代码、挪作他用的开关、漏装的一台、没人处理的邮件,还缺乏有效的停单控制和应急处置程序。好几层防护,在同一个早上一起失效。看整件事 →CrowdStrike · 2024一次推给所有机器定义要 21 个输入、代码只给 20 个,这个错位躲过了传感器测试、压力测试和此前几次线上更新。直到第一次真正用上第 21 个字段的更新出现,再加上校验器的逻辑错误和缺失的越界检查,几个洞才对齐。看整件事 →法国航空 · 2009大西洋上空的四分钟结冰的探头、去休息的机长、驾驶舱里没分清的角色、训练里的空白,在同一个夜里排成了一条线。看整件事 →JR 西日本(西日本旅客铁道) · 2005就报八米吧事故前不到一小时,同一列车在另一条线上过弯偏快,自动限速装置替司机刹了车。福知山线这一段还没启用这套装置,司机一走神,后面就没有自动制动兜底。看整件事 →NASA 喷气推进实验室与洛克希德·马丁航天公司 · 1998–19994.45 倍书面规范写的是牛顿秒,没人照着做。地面软件没做端到端测试,推进器点火对轨道的影响在多普勒跟踪里几乎看不出来,应急修正点火也没准备好。调查委员会认定了一个根本原因、八个促成原因。看整件事 →Majesty Cruise Line · 1995屏幕上的 DR 两个字母一根松脱的天线电缆、一声只响一秒的警报、一台分不清真实定位和估算的自动驾驶仪、几位不做交叉核对的船员,在同一趟航程里叠到了一起。看整件事 →三星电子 · 2016–2017换回来的那部手机UL 认为是几个因素凑到了一起。替换电池里,焊点上尖锐的毛刺、漏贴的绝缘胶带、偏薄的隔膜叠在一起,正负极短路的可能就大了。看整件事 →

玩一玩

出处

  1. GitLab, Postmortem of database outage of January 31, February 10, 2017
  2. James Reason, Human error: models and management, BMJ 320, 2000
  3. Justin Larouzée and Jean-Christophe Le Coze, Good and bad reasons: The Swiss cheese model and its critics, Safety Science 126, 2020
  4. Anthropic, Disrupting the first reported AI-orchestrated cyber espionage campaign, November 13, 2025
  5. GitLab, GitLab.com database incident, February 1, 2017
  6. SEC, In the Matter of Knight Capital Americas LLC, Release No. 70694, October 16, 2013
  7. Reuters via NBC News, Knight Capital gets $400 million lifeline, August 6, 2012
  8. CrowdStrike, Preliminary Post Incident Review (PIR), Content Configuration Update Impacting the Falcon Sensor and the Windows Operating System (BSOD), updated July 25, 2024
  9. CrowdStrike, External Technical Root Cause Analysis, Channel File 291, August 6, 2024
  10. CrowdStrike, Tech Alert, Windows crashes related to Falcon Sensor, July 19, 2024
  11. Microsoft, Helping our customers through the CrowdStrike outage, July 20, 2024
  12. The Guardian, What is CrowdStrike, and how did it cause a global Windows outage?, July 19, 2024
  13. UK Parliament, Hansard, House of Commons, CrowdStrike IT Outage, July 22, 2024
  14. BEA, Final Report on the accident on 1st June 2009 to the Airbus A330-203 registered F-GZCP operated by Air France, flight AF 447 Rio de Janeiro to Paris, 2012
  15. Aircraft and Railway Accidents Investigation Commission, 鉄道事故調査報告書 RA2007-3-1, 西日本旅客鉄道株式会社福知山線塚口駅~尼崎駅間列車脱線事故, June 28, 2007
  16. JR West, An Overview of the Derailment Accident on the Fukuchiyama Line
  17. The Japan Times, 1,182 'retraining sessions' at JR West, July 23, 2005
  18. The Japan Times (Associated Press), Carrier eases timetable to relax pressure, February 2, 2006
  19. NASA, Mars Climate Orbiter Mishap Investigation Board Phase I Report, November 10, 1999
  20. NASA JPL, Mars Climate Orbiter Team Finds Likely Cause of Loss, September 30, 1999
  21. NASA, Release 99-134, Mars Climate Orbiter Failure Board Releases Report, November 10, 1999
  22. Los Angeles Times, Mars Probe Lost Due to Simple Math Error, October 1, 1999
  23. NTSB, Grounding of the Panamanian Passenger Ship Royal Majesty on Rose and Crown Shoal near Nantucket, Massachusetts, June 10, 1995 (MAR-97/01), 1997
  24. Samsung Newsroom, [Statement] Samsung Will Replace Current Note7 with New One, September 2, 2016
  25. US Consumer Product Safety Commission, Samsung Recalls Galaxy Note7 Smartphones Due to Serious Fire and Burn Hazards, recall 16-266, September 15, 2016
  26. BBC News, 'Fixed Samsung Galaxy Note 7' catches fire on plane, October 5, 2016
  27. BBC News, Samsung permanently stops Galaxy Note 7 production, October 11, 2016
  28. US Consumer Product Safety Commission, Samsung Expands Recall of Galaxy Note7 Smartphones Based on Additional Incidents with Replacement Phones, recall 17-011, October 13, 2016
  29. Samsung Newsroom, Samsung Electronics Announces Cause of Galaxy Note7 Incidents in Press Conference, January 23, 2017
  30. Samsung Newsroom, [Infographic] Galaxy Note7, What We Discovered, January 23, 2017
  31. UL, Failure Analysis of Samsung Note 7, January 23, 2017
  32. Exponent, Samsung Recall Support, Note7 Investigation, Root Cause Analysis, January 23, 2017
  33. Samsung Newsroom, Samsung Announces New and Enhanced Quality Assurance Measures to Improve Product Safety, January 23, 2017
  34. The Guardian, Samsung blames two separate battery faults for Galaxy Note 7 fires, January 23, 2017
  35. BBC News, Samsung confirms battery faults as cause of Note 7 fires, January 23, 2017