Facebook、WP 全球宕机:那一晚,我的脚本也“失联”了

Facebook、WP 全球宕机那晚,我的爬虫脚本集体报错 503。我盯着日志里刷屏的“Connection refused”,第一反应不是慌,而是抓起手机看健身房的蛋白粉补剂到货通知。这要搁一年前,我肯定得在办公室摔键盘,现在我只想确认晚饭的蛋白质够不够 40 克。

去年这时候,我还在为团队里三个人的社保基数算得焦头烂额。服务器宕机?那意味着客户要投诉、助理要慌张、我要在深夜打电话安抚甲方,然后逼着技术连夜改重试机制。现在呢,就我自己。脚本失联就失联吧,反正客户就我一个,甲方也是我。我甚至有点庆幸,这次全球级别的故障,正好测试一下我新写的异常处理模块到底有多“健壮”——我在每个请求外面都套了三级重试加随机休眠,还专门为 503 状态码写了降级逻辑,去读本地缓存的上一次数据快照。

健壮性。这个词一年前我根本不在乎。那时候只追求“快”,爬虫要并发数高,采集要毫秒级响应,用 asyncio 把事件循环塞满,动不动就触发目标站点的频率限制,然后花更多时间去折腾代理 IP 池,拆 User-Agent。看起来数据流汹涌澎湃,实际上系统脆弱得像用胶水粘起来的玻璃器皿,任何风吹草动——对方改个 DOM 结构、加个前端渲染、甚至像今晚这样的基础设施瘫痪——整个流程就崩给你看。崩了还不是最糟的,最糟的是你身后有一整个团队等着你决策,有 payroll 要发,那种焦虑是物理性的,卡在喉咙里。

现在我的焦虑很具体:今天的深蹲重量没上去,是不是碳水吃少了?代码里那个用 requests.Session() 做的连接池,keep-alive 参数设置得是不是最优?全球服务中断这种黑天鹅事件,正好检验一下我的“慢设计”。我不再追求一秒发十次请求,我让脚本慢下来,在每次请求之间植入符合人类浏览节奏的随机延迟,把解析逻辑写得冗余但清晰,日志详细到每一个步骤的耗时和状态。看起来效率低了,但一个月运行下来,总采集成功率反而从以前的 85% 飙升到 99.8%。因为我不再和网站的防御机制对抗,我在模拟一个最有耐心的、永不疲倦的用户。

少即是多,慢即是快。这话现在嚼着真有味。以前堆人、堆功能、堆并发,觉得那是“多”和“快”,结果把自己拖进无休止的交付和维护深渊。现在一个人,一套精心打磨的脚本,一个清晰的饮食训练计划,反而感觉掌控力又回来了。Facebook 宕机就宕机吧,我的脚本安静地退到降级方案,等我吃完那盘鸡胸肉沙拉,它应该已经自己恢复并补采完缺失时段的数据了。这种确定感,比当年看着团队加班赶工却不知道明天会不会又有幺蛾子,实在要好太多。

身体是第一生产力,代码的健壮性是第二生产力。今晚的失联事件,不过是对这两条新原则的一次压力测试。测试结果看来,及格。

© 版权声明
THE END
喜欢就支持一下吧
点赞67 分享