专业书籍精读 · SRE · 第 26 章

数据完整性

Site Reliability Engineering · Ch 26 · Google · 2016

EN →

这一章讲什么?

你手机里的照片、几年前的聊天记录、网盘里的合同——你默认它们「一直都在,而且还是原来那样」。这一章讲的就是这件被当成理所当然的事:怎么保证你打开的时候,东西还在、而且没被改坏。写这一章的是两位 Google 工程师,他们管的是 Gmail、Google 云端硬盘这种「丢一条都会上新闻」的系统。

先说个怪事

很多人觉得「我存了三份,还怕丢?」——可偏偏就是三份救不了你。你手滑删掉一个文件,那三份会在一秒之内齐刷刷跟着删掉,一份不剩。多存几份防的是「机器坏了」,防不了「人或程序做错了事」。书里那句话很直白:多几份副本,不等于捞得回来。

旧世界为什么难

数据坏掉的方式实在太多:用户手滑、运维敲错命令、程序 bug 批量删、硬盘悄悄变质、机房被水淹。更麻烦的是节奏也不一样——有的是「一下子全没」,你立刻就知道;有的是「一天漏一点」,等半年后发现,最早那批干净的存档都过期清掉了。想用一招通吃是不可能的,所以这一章的答案是:摆三道门

三道门分别是什么

第一道是回收站。删掉的东西先不真删,打个「已删除」的标记放着,过一阵子才清理干净。它挡的是最常见的那类事故——手滑、被盗号后被人清空。恢复起来几乎不要钱:把标记去掉就行。

第二道是「保险柜里的旧照片」。定期把数据完整地存一份,放到一个离得远、连不上、动不了的地方——Google 用的是磁带。正因为它和线上系统物理断开,你在线上闯的祸传不过去。但关键不在「存没存」,而在「上次真的把它拿出来用过一次吗」

第三道是「每天点货的管家」。另有一个程序不停地把数据对账:这首歌的档案还指得到那段音频吗?两边的账对得平吗?它挡不住任何一次事故,它的全部价值是让你在用户投诉之前先发现——因为发现得晚一天,保险柜里那份干净的存档就可能已经过期了。

它换掉了一个问法

这一章最有用的一句是:别再问「我们备份了吗」,要问「我们上一次真的完整恢复出来,是什么时候」。真实事故里,绝大多数团队的备份任务天天显示成功,只是从来没人试过把它装回去——真到那天,才发现装不回去。诚实说一句代价:三道门都要花真钱(多存一份是成本、天天点货要算力、演练恢复要占人),而且回收站还有个别扭之处——你以为删干净的东西,其实还在某处躺一阵子。

一句话记住

多几份副本防的是机器坏,防不了人和程序做错。真正保命的是三道门:回收站、离线备份、天天点货。判断一个团队靠不靠谱,只需要问一句:你上次真的恢复过一次吗?

想看三道防线的具体机制、选型对比表和真实事故数字? → 切到精读版