一、先把那个晚上原样写下来
8 月 5 日晚上十一点二十三分,我坐在书房里那台用了六年的 ThinkPad 前面,屏幕上的进度条卡在 87%,右下角的时间显示 23:23,桌面上一杯凉透的茶,杯壁上还有我三点钟咬过的饼干屑。运维群里的老周发来一句:「934 那条重建任务又挂了。」我没有回他,我先去看的是日志——因为日志比人诚实。
日志很无聊,也很残酷:第一次重建跑到 41% 的时候,因为一个老分区的元数据校验失败,整条任务回滚;第二次我把校验阈值放宽到 0.92,跑到 78%,卡在当时还在被占用的三号索引池上;第三次是凌晨一点零九分,我干脆把索引池全部下线、断掉所有只读连接,重建才在两点三十八分跑完。总共重试 934 次——这个数字我记下了,因为它正好成了公告里那串「934」的来源,也成了我今晚写这篇文章的火气来源。
二、公告和过程的距离
第二天上午十点,站点发了公告,只有一句话的意思:17库恢复正常使用934。我把这句念了两遍,然后把它和我的日志并排放着看。我在做转载核查的时候翻到过 澳门凤凰网正版图库 的归档页面,那类页面的写法是「恢复时间、影响范围、残留问题」三行说清;而我们这次的公告,一个数字替代了全部说明。934 被摆上台面,像是勋章,可它明明是 934 次没跑通。
这件事让我不舒服的地方不在于恢复得慢,恢复慢是技术问题,能解释。让我不舒服的是把失败次数包装成进度数字的做法——这跟把车票上的拥挤程度写成「客流热度」是同一种修辞。
三、恢复之后我做的三件事
第一件是把三号索引池重新挂载,然后逐个目录核对条目数;第二件是让同事小陈用他的手机,从冷启动开始完整走一遍流程——他打开 打开图库照片 那个入口,翻了 16 个相册,中途退出两次再进,没报错;第三件是我自己拿了两台设备同时进,看并发下的响应,结果发现缩略图加载比恢复前慢了大约 0.4 秒,这个延迟到现在还没完全压下去,我把它记在了待办的第一行。
小陈当时说了一句话,我记在本子上:「能开就行,用户不看日志。」这句话没错,但它恰恰是我写这篇笔记的理由——用户不看,所以我们才更不能只丢给他们一个 934。
四、把「恢复正常」这四个字拆开看
正常是一个相对词,它需要一个参照物。参照物是恢复前那台彻底打不开的服务,那么现在确实是正常的;参照物是去年秋天那次零故障的版本,那么现在只是勉强能用。我们在公告里没有写参照物,于是「正常」就成了一句谁都能读、但谁读到的都不一样的句子。我在做交叉核对时习惯性去看 qq浏览器在线版进入口 这类第三方入口的挂载情况,发现它们的抓取频率在恢复后两小时才跟上——也就是说,对我们内部而言的「恢复」,对外部世界来说迟到了整整两小时。这两小时里,用户看到的是空白。
再拆一层:恢复的是数据,还是访问路径?数据在 02:38 就已经齐了,路径的缓存失效却拖到了 04:50,中间那两小时十二分钟是最尴尬的阶段——库是好的,门是锁着的。
五、几条具体的、可以照做的核查步骤
我这个人写东西喜欢留一份能操作的清单,哪怕是吐槽。以下是我这次实际跑过的顺序,写给可能也要处理类似恢复的人:
- 先看元数据校验的失败点,别急着放宽阈值,阈值放宽只是把问题往后推了 37 个百分点(我第二次就是栽在这里)。
- 把所有只读连接真的断掉,不是标记为可回收。我第三次之所以成功,唯一的原因就是这一步做绝了。
- 恢复后逐目录核对条目数,用 打开49图库查资料 的检索路径做抽样,抽 50 条比全量扫描快得多,也够用。
- 对外入口的缓存要单独刷,别指望它自己跟上;那两小时的空白就是这么来的。
- 公告里写清楚第一次失败的原因,哪怕难看。这是唯一能挽回可信度的办法。
说起入口,恢复那晚还有个小插曲:我试着用浏览器直接访问 qq浏览器网页版进入链接 去交叉验证页面可达性,结果因为本地 DNS 还缓存着旧地址,一直跳到错误页,直到我手动清了缓存才看到真实状态。这件事提醒我,核查时一定要区分「服务端的问题」和「你本机的问题」,否则会浪费掉一整轮排查。
六、图片去哪了——一个我必须回答的问题
恢复之后有两百多条用户反馈,问得最多的不是「为什么坏了」,而是「我之前保存的图去哪了」。这个问题我在 四九图库保存的图片去哪了 那一页里其实整理过一部分,但这次的情况不太一样:不是保存失败,而是保存成功、索引丢了,文件还在磁盘上,只是点不进去。我用 grep 在旧索引的备份里捞回了 11 个用户的两百多张图的路径,手工补挂回去。补挂那两个小时里我一直在想,如果有一次失败的记录,这事本可以不用人工做。
所以我在待办列表里加了一条看起来很不技术、但很重要的东西:任何一次重建,必须自动落一份「失败快照」,写明时间、失败点、影响条目。它不是给用户看的,是给下一个凌晨两点四十的我留的。
七、把功能和说明放在一起
我承认我对公告的愤怒有点近乎职业病了。但如果你翻过 正版49图库资料库免费打开49图库app功能介绍 这种把功能逐条写明的页面,再回头看我们那句「已恢复正常使用」,落差是很明显的——前者在解释自己能做什么,后者只声明自己不再坏了。用户要的往往是前者。
最后补一句跟数据核对有关的:恢复期间我顺手用 十二生肖49码精准表 里那套编号做了一次抽样对照,验证条目编号有没有在重建中错位。测了 120 条,错位 0 条,这是那两天里唯一让我觉得松口气的结果。至少数据本身是干净的,脏的是我们说话的方式。
八、写在最后
现在是 8 月 6 日凌晨,我把这篇笔记写完了。窗外的天还没亮,茶还是那杯凉的。我不打算在结尾说「一切都会好起来」这种话,我只想把这个请求留在这里:下次恢复,请把 934 次里第一次失败的那一行日志也贴出来。一个服务敢把伤疤露出来,比它贴一百次「正常」都更有说服力。