TGViewer
开发者工具箱|编程·开发工具·资源 开发者工具箱|编程·开发工具·资源 @devtoolboxhub · 570 subscribers
Post #1266 4
故障工程学第一课:为什么故障是常态

《Node.js 内部原理》系列原班人马新系列上线。上一系列回答「系统如何工作」,这一系列回答「系统在停止工作时如何生存」。第一集纯谈思维方式,先搞懂这个,后续所有模式都会显得顺理成章。

核心转变:程序员认为「我的代码正确,系统就会正常工作」;工程师认为「我的代码可能完全正确,但代码周围的一切仍然可能出故障」。数据库、网络、云服务商、RAM、CPU,甚至明天部署代码的人——没有什么是保证可靠的。

用飞机冗余类比:飞机在空中可能引擎停转、传感器失灵、GPS丢失、液压系统故障……但不会立即坠毁,因为飞机在设计时就假定故障会发生,而非希望它不发生。后端系统需要相同心态。

拆解一个最简 Node.js + MySQL API:数据库会挂吗?Redis会挂吗?网络会断吗?服务器会OOM吗?CPU会过载吗?云服务商宕机?开发者部署bug?用户输入垃圾数据?外部API变慢?——每个问题答案都是「是」。

高级工程师构建登录功能时,会连锁追问:MySQL挂了怎么办?Redis不可用?JWT验证失败?邮件服务缓慢?两个登录请求同时到达?服务器重启时正在登录?这种习惯区分了能存活于生产环境的系统和只能活在笔记本上的系统。

分布式系统黄金法则:任何可能出故障的事物最终都会出故障。你的工作不是让故障不可能发生,而是确保当故障发生时,系统能察觉、优雅处理并恢复。程序员眼中的「工作」:我的功能能运行。工程师眼中的「工作」:即使周围出问题了,我的功能也能运行。

真实案例:Netflix大部分运行在AWS上。AWS本身会发生宕机、服务器死亡、可用区故障。Netflix没有寄希望于AWS永不故障,而是构建了Chaos Monkey——在正常上班时间故意在生产环境杀掉自己的服务器。这样就能在非紧急情况下发现弱点并修复。

即使是飞机,也存在即便所有备份系统都正常运作也无法恢复的极端灾难。工程的目标从来不是零故障,而是把灾难性边缘推得尽可能远,让绝大多数故障被快速检测、处理和恢复。

总结四问:你会快速发现它吗?(检测)你会控制它吗?(处理)你会快速恢复吗?(恢复)你能构建系统让这三件事自动快速完成,而无需人在凌晨3点醒来吗?(韧性模式)


下集预告:故障类型——硬件、软件、网络、数据库、第三方、人为错误和资源耗尽,每个都有真实的生产案例。

#开发者 #工具 #故障工程 #分布式系统 #Nodejs #Netflix #混沌工程 #韧性 #工程思维
@DevToolboxHub
More from @devtoolboxhub
  1. Oct 1, 2026代码评审评论为何比本意更刺耳 一条评审评论大约四十秒写完,通常夹在两件事之间,写的人清楚自己的语气。读的人刚在这份代码上花了三天,正想收尾,而且听不到你的声音,于是自己补上一种语气…
  2. Oct 1, 2026用 Hindsight 给客服 Agent 加上持久记忆 大多数客服 Agent 只擅长回答眼前这条消息。真正难的是同一个客户一周后再来,Agent 完全不知道之前发生过什么。作者…
  3. Sep 30, 2026AMSI 绕过技术 2026 开发者指南 AMSI(Antivirus Malware Scan Interface)是 Windows 的恶意脚本扫描接口,覆盖 PowerShe…
  4. Sep 30, 2026AI Agent 为什么记不住事 和 AI Agent 协作时最容易注意到的一点是:它们很擅长回答问题,却不擅长记住昨天发生过什么。你可以和它长聊一轮,做出一堆决定、说明偏好、一起…
  5. Sep 30, 2026wpipe:面向 Python 开发者的轻量编排库 wpipe 是一个纯 Python 可嵌入的编排库,目标是让数据管道的开发回到「编辑—运行—调试」的快速循环,而不必为验证业务逻…
  6. Sep 29, 20262,916 个 AI 网站 8 月流量:转录与图生 3D 起飞 Anjin Radar 追踪了 2,916 个 AI 网站的月度访问量,数据截至 2026 年 9 月 28 日。访…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →