
24万次上传!《老友记》表情包把Linux挤爆了
有时候我逛社区,最爱点开的不是热帖,而是那些看起来不起眼的角落功能。你以为只是路边一块小告示牌,走近一看,后面可能连着一整条没标注的小路。这次Discourse翻车就很像这种感觉,一个1.6MB的《老友记》表情包,被反复使用了246173次,最后居然累计吃掉377G空间,直接把它依赖的Linux系统拖崩了。

这个表情包本身也挺有辨识度,来自《老友记》里瑞秋得知楼顶要办肥皂剧主题派对时欢呼的瞬间截图,演员是詹妮弗・安妮斯顿。问题不在图有多大,而在Discourse的“安全上传”机制。文件在不同安全场景之间流转时,系统会自动生成带随机SHA1值的新副本,所以哪怕内容完全一样,也会被当成新文件处理。
顺着这个方向看,你会发现这不是简单的“缓存没清”那么轻。Discourse其实早就注意到重复文件很占空间,所以做过优化,想通过硬链接把重复文件尽量只保留一份。但地图之外真正埋雷的是ext4文件系统,它对单个文件的硬链接数量有限制,最多65000个。24万多次重复上传,显然远远超过这个上限,原有方案走到这里就卡死了。

一旦撞上上限,事情就从省空间变成了疯狂补票。除了第一次完整备份之外,系统又额外执行了大约18.1万次完整文件备份下载,这才把服务器一步步压垮。这个事故最有意思的地方在于,它不是因为超复杂业务炸掉,而是被一个人人都觉得“没什么负担”的表情包拱翻了,像在平原上开车,结果陷进一块地图上根本没标出的泥地。

Discourse团队最后给出的修复思路,倒是很像开放世界里绕山开新路:当文件系统返回“链接数过多”的EMLINK错误时,系统先在本地复制一份文件,把这份副本设成新的“主文件”,然后继续基于它创建硬链接,直到再次碰到上限。这样一来,它不再赌某一种文件系统的边界,官方也表示新机制兼容所有文件系统,而且不需要用户额外配置。

如果你平时混技术社区或者自己搭论坛,这事的参考价值很高。它提醒大家,真正危险的往往不是大地图上的Boss,而是角落里那个被重复点击了二十多万次的小按钮。和很多“先上线再补洞”的社区工具相比,Discourse这次至少把问题链条讲清楚了,也给出了能落地的新方案。至于社区玩家会怎么记住这次事故,我看大概率就是一句话:詹妮弗・安妮斯顿现在不止能贡献表情包,还能顺手测一测服务器抗压。





















评论 0
期待听到你的声音
欢迎参与讨论,分享对这款游戏的评价。
暂无评论,欢迎发表评价。