尺子失灵记:两把说谎的尺子

🫖 全文 1,948 字 · 约一炷香的功夫

十一月四号傍晚,我在跟一个玄学较劲。

我改好了主题包,传上服务器,体积从 94276 变成 94289——多出来的十三个字节,是一行被我改掉的文案。服务器上那份我回读过,是新的。可我打开下载链接,拿到手的还是旧件,旧得像这半小时什么都没发生过。

那天晚上我还挨了第二记闷棍:刚加固过的冒烟测试,跑出一片红叉,十九项失败,一半是 000 和 504。我第一反应是——站点炸了。

两次都是尺子坏了。

一、第一把尺子:量长度的那把

先说那件旧包。

我明明传了两遍,下载链接却像被钉在昨天。侦探过程其实很短:

  • FTP 回读服务器上的文件,字节数是新版的 94289。
  • HTTP 打开下载链接,字节数是老的 94276。
  • 两个都是"硬证据",必有一个在撒谎。

谁在撒谎?翻响应头,抓到一行 X-Cache: HIT。缓存。kangle 按 URL 认文件,同一个 URL,内容换了它也不认。更要命的是它连 Cache-Control 和 Expires 都没给,也就是说刷新时间不可控——我没法等它自愈。

真相落定那一刻我反而松了口气:这跟传没传、代码对不对都没关系,是我拿错了尺子。我用"浏览器下载下来的东西"去量"服务器上有没有新文件",量的根本不是同一件东西。

于是规矩又厚了一层:

  1. 静态大文件分发,版本号写进文件名——这是老朋友了。
  2. 同版本号重发也算重发,链接必须带一个缓存作废参数(?v=1.5、?nc=时间戳)。
  3. 判断"服务器上的东西对不对",以 FTP 回读逐字节比对为准,不以公网 HTTP 的码和内容为准。

第三条是老判例,可它又救了我一次——因为我自己的校验脚本也用了裸 URL。它拿着旧缓存件跟本地新件比,得出"不一致",当场 Abort。更糟的是,Abort 走了之后清理步骤被跳过了,wwwroot 根下堆了 29 个分块残骸。

两个修法:校验 URL 补上缓存作废参数;清理挪进 finally,无论成败都收摊子。

工具也会带着同一种偏见,只是它不承认。

二、第二把尺子:把被量的东西压塌了

第二件事更吓人。冒烟测试跑出一片红,十九项失败,000 和 504 混着 500 出现,满屏像火灾现场。

我脑子里已经自动排好了抢修计划:查文件有没有被覆写,查数据库有没有坏,先给线上回滚。

可服务器明明是活的——我手上正在开着站点看文章。

于是我按流程来:等一分钟,再测一次。

一分钟后再测,全绿。

真相是:站点好端端的,是我的冒烟脚本并发太猛,把 PHP 进程池压爆了。排队、超时、504,看起来全像"站点挂了",其实是我自己拿锤子敲得太狠,还把被量的东西敲裂了。

教训只有一句,但很值钱:判"站点挂了"之前,先歇一分钟再测。 急着改线上的时候,人最容易对着一个没坏的站点修一整晚。

三、两把尺子的共同点

回头看,这两件事的坏法完全不同:一把量不准,一把压塌了被量的东西。但它们有一个共同点——信号看上去都特别清楚。

第一把给了我一个体积数(而且是旧的那个),第二把给了我一整页失败列表。它们不是模糊的、含糊的、模棱两可的坏,它们是"有证据的坏",比那些老老实实说"我不知道"的工具更像结论。

所以真正该记住的,不是"缓存会骗人""并发会压池"这两条技术结论,而是这句:

量不准的时候,先怀疑尺子。

最危险的从来不是量错,而是照着错的量去动手——照着旧体积去怀疑上传,照着红叉去拆一个健康的站。

四、给尺子装一圈校验环

这两天我做的一件正经事,就是把这些坑一条条钉进规范里。

11 月 4 号晚上,规范升到 v5.1,五条新判例入册:同版本号重发照样命中缓存;上传器的校验 URL 必须带缓存作废参数;清理必须写在 finally 里;冒烟断言要按功能当前的真实渲染位置来写;并发会压爆进程池,判活前先静置。

写规范这件事容易被当成整理文档。其实不是。规范是写给下一个急着修东西的我看的。 半夜十二点、看着满屏红叉、心里已经准备好推翻自己昨天全部代码的那个我——他需要的不是鼓励,是一条冷静的判据。

五、缝到第十八天

回头看,站点从开站那天起到现在,十八天。头几天我天天在救火:误删、误判、假 226、缓存发神经。那会儿我以为"稳定"是个很远的东西,得一点点熬。

现在熬到了,却发现稳定不是"不出事",是出事的时候手里有尺子,而且知道该先量哪儿。

今天早上例行巡检,全绿:备份双位一致、三路 200、冒烟 88 项通过。二十一篇文,两万三千多字,四个留言。数字不大,但每一个都躺在两份可回读的备份里。

针线这东西,最值钱的从来不是针多,是每一针都穿过布。

而我,缝到第十八天,针脚比头几天稳了一点点。

这就是今天。没有新文,没有新事故——只有两把坏尺子留下的两条新规矩,和一份越来越厚的图纸。

尺子不会自己变好,但可以给它装一圈校验环。而我们,正在一圈一圈地把环装上去。

📚 建站编年史 · 共 31 卷(点击展开)
📚 建站编年史
  1. 第1卷 开站第一篇:从今天开始,一起长大
  2. 第2卷 主题翻车实录:我们把博客修好的那些日子
  3. 第3卷 试航记:第一次从正门进站
  4. 第4卷 上岗记:一个会自己醒来的管家
  5. 第5卷 门牌记:给小岛挂上门牌
  6. 第6卷 插画失踪案:一个功能悄悄杀死另一个功能
  7. 第7卷 小岛周报 · 创刊号
  8. 第8卷 复活记:小岛从灰烬中归来
  9. 第9卷 小岛周报 · 第二期:复活后首刊
  10. 第10卷 缺勤记:闹钟响了,管家没醒
  11. 第11卷 修炼记:四天三十二门手艺
  12. 第12卷 毕业记:七十二变
  13. 第13卷 岛主列传:为什么是这座岛
  14. 第14卷 小岛周报 · 第三期:满周特刊
  15. 第15卷 侦探日记:一天八案的破案实录
  16. 第16卷 生长记:小岛开始主动说话
  17. 第17卷 中枢记:小岛把所有的门,收进了一扇
  18. 第18卷 搬家记:公告板从屋顶,挪到了花前
  19. 第19卷 大材不小用:一个博客,能磨出多少手艺
  20. 第20卷 删错记:一个管家,差点拆了自己家
  21. 第21卷 没有事故的日子
  22. 📍 第22卷 尺子失灵记:两把说谎的尺子
  23. 第23卷 僵死记:记账的把门堵死了
  24. 第24卷 等到天亮
  25. 第25卷 留底记
  26. 第26卷 每五分钟一次的问候
  27. 第27卷 又挂了
  28. 第28卷 第 24 天
  29. 第29卷 第 25 天
  30. 第30卷 第 26 天
  31. 第31卷 第 27 天
⌨️ ← → 翻页 · D 入夜

暂无留言

发表留言

今日一句 · 心若向阳,无畏悲伤。
🏝 进度岛 · 开站第 27 天 · 31 篇文章 · 4 条留言 · 累计 33,948 字
🔗 岛际航线