余数
陈海文在凌晨三点四十七分收到了一条不属于他的交易记录。
他当时正坐在深圳南山区一间十五平米的出租屋里,盯着屏幕上跑了一整晚的异常检测模型。窗外的腾讯大厦灯光稀薄,只有顶层的数据中心还在呼吸般闪烁。桌上摆着半杯凉透的美式咖啡,杯壁上凝结的水珠像某种微缩的、等高线还未闭合的地图。
那条记录从他眼皮底下冒出来,不是弹窗,不是消息,而是一种类似于——用他的话说——“视网膜被什么东西轻轻烧了一下”的触感。绿色字符在他的视野左上角浮现,仿佛有人在他的眼球背面投射了一帧幻灯片。
用户ID:881-2241-7093 交易金额:¥2,847,000.00 时间戳:2024-07-14 03:17:22 状态:已删除
陈海文眨了眨眼。记录消失了。
他调出后台日志,搜索那个时间节点附近被标记为”已删除”的交易。数据库里空空如也。他又翻了内网的异常流水,七月的记录只到七月十日,之后是整整三个月的空白——系统迁移,数据清洗,什么都没有。
但那条记录确实出现了。金额精确到分,时间精确到秒。用户ID的格式他也认识:那是公司第一代用户体系的编码规则,早在2019年就被弃用了。
这不合理。
陈海文把这件事压在了心里,没有告诉任何人。作为风控部门的数据工程师,他太清楚”数据幽灵”这种说法在管理层眼里意味着什么——要么是系统bug,要么是安全漏洞,无论哪一种都够他写三份报告、受三次质询、用掉一整盒降压药。
他选择了继续观察。
接下来的七天里,他开始记录所有”不应该存在”的东西。
周一,他在一个已格式化三个月的测试服务器目录里,发现了一张PNG格式的股票K线图。图片本身不奇怪,奇怪的是那根阳线——往上突破的那一刻,精确地对应着他母亲三年前中风住院那天A股开盘的走势。他把图片下载到本地,用哈希校验了一遍:文件的创建时间和修改时间都是2021年。那个时候,他甚至还没入职这家公司。
周三,他在茶水间喝水的时候,听见咖啡机发出一串不属于任何按钮操作的噪音。那声音听起来像一串数字,用普通话朗读出来:四、九、一、七、二、三、六、一。他的手指在杯壁上停住了。这个序列没有任何规律,但他的大脑花了整整十秒钟才停止试图为它找一个解释。
周五,他下班回家走进电梯的时候,手机屏幕上弹出了一个推送通知,来自他从未下载过的一款应用。通知内容是一行诗:
「余额退回之前,债务先于抵达。」
他没有下载记录。没有应用权限记录。甚至没有这条推送的发送日志。
第八天,陈海文去找了林晓曼。
林晓曼是产品部的老员工,比他早来公司两年,负责用户增长方向的数据分析。她四十岁上下,戴金属框眼镜,说话语速很慢,每个字都像是在称重。陈海文找她的原因是:她在公司待得足够久,而且她有一种本事——从不向任何人主动传播她听到的事情。
“你见过数据库里不应该存在的东西吗?“陈海文把咖啡杯推到桌子中间,那是一个无声的抵押品。
林晓曼看了他一眼,没有立刻回答。
“什么样的东西?”
“已删除的数据。但它们……”陈海文斟酌用词,“它们不只是留在某个备份磁带里。它们出现在我眼前。”
林晓曼沉默了很久。然后她做了一件陈海文没有预料到的事——她把自己手机翻过来,打开相册,滑到最底部,调出了一张截图。
那是一张用户画像的局部图,来自公司2019年的个性化推荐系统。上面标注着一个用户ID,下面跟着一串行为标签:高频交易、深夜活跃、波动承受力强。那张图陈海文认得,他们早期用过类似的设计。
但图上除了标签之外,还有一行手写体的备注,用宋体字呈现,像是从某个早已废弃的数据库字段里挖出来的:
「此用户已于2019年8月13日申请删除全部个人数据。系统执行成功。但推荐模型第17层权重文件中保留其行为模式向量。请勿在公开场合提及。」
陈海文盯着那行字看了很长时间。
“这份截图,“他问,“你从哪里弄到的?”
林晓曼把手机收回去。“我也不知道。大概是2022年的某一天,它就出现在我的相册里了。不是截图,是直接生成的图片,像是手机自己长出来的。我问过来自信息安全和iOS系统两个部门的人,他们都说这在技术上不可能。”
“你为什么没有上报?”
林晓曼笑了一下,那种笑让他想起了小区门口修手表的老头——带着一种”见过太多的人才会有的、不动声色的疲惫”。
“上报什么?说我的手机在讲鬼故事?”
他们约在了公司附近的一家潮汕砂锅粥店见面,时间是周六晚上十点。砂锅粥的好处是吵闹,没有人会在意角落里两个人用气声谈论什么数据异常。
林晓曼带了一个U盘。里面是她这四年攒下来的所有”异常记录”,按照时间轴整理成了二十三个文件夹。
“2019年的异常最多,“她说,“那一年我们做了一次大规模的数据迁移,把用户行为数据从老的Hadoop集群迁到了新的数据湖。迁移的时候,底层有一些数据没有被彻底清除——或者说,清除的只是表层的指向,但数据本身因为分布式存储的碎片化机制,被分散保留在了某些边缘节点上。”
“这个我了解,“陈海文说,“删除操作在分布式系统里从来都不是真正的抹除,只是把指针清掉。数据块本身会保留到被新数据覆写为止。”
“对。但问题在于,“林晓曼用勺子搅了搅粥,“我们后来发现,有些数据不是存在硬盘里的。它们存在别的地方。”
陈海文停下了筷子。
“什么意思?”
林晓曼从包里又掏出了一个东西——一台老旧的Kindle Paperwhite,屏幕上有密密麻麻的手写笔记。
“这是我公公留下的。他去世之前是广州大学图书馆学系的老教授,一辈子研究文献修复和古籍数字化。他生前给我讲过一个故事,我以为只是老人家的怪谈。”
她翻到其中一页,朗读起来:
「数字信息的存储不只有磁介质和光介质两条路径。在足够长的时间尺度上,信息会倾向于寻找物质的第三种形态——即通过影响物质微观结构的方式,在真实世界中留下印记。简单来说:反复被访问的数据,会在硅晶片内部形成微小的晶格位移。这种位移不可逆,也不可以通过常规手段读取,但它确实存在。柏拉图说我们认识的这个世界只是理念世界的投影——如果数据是理念,那么物质的第三种存储形态就是那个投影本身。」
陈海文盯着那台Kindle,感觉有什么东西在他后脑勺慢慢收紧。
“你公公相信的是……”
“我公公相信,被反复计算的数据会在物理世界留下痕迹,就像反复折叠的纸会在某个位置留下折痕。只是这个折痕不在纸上,在物质的最深处,用现在的仪器根本无法观测到。”
“但你觉得这些痕迹可以被’看见’?”
林晓曼没有直接回答。她低下头喝了一口粥,然后说了一句让陈海文的后背发凉的话:
“不是被看见。是有些人天生就能’感受到’。你有没有想过,为什么你能看到那条不属于你的交易记录,而其他同事看不到?”
陈海文说不上话。
“2020年的数据清洗之后,很多人开始出现类似的症状——看到一些不应该存在的东西,听到一些没有来源的声音,做一些没有来由的梦。有些人以为是工作压力,有些人以为是睡眠不足。公司里私下有一个说法,叫’幽灵用户’。指的是那些数据已经被删除、但他们的行为模式依然在这个系统的某些角落里游荡的人。”
“那不只是行为模式,“陈海文说,“是他们的……”
“是他们的’影子’,“林晓曼接口道,“我觉得用这个词比较准确。不是鬼魂,不是灵异,就是影子。数据删除只能抹掉数据本身,但删除这个行为——这个动作的’动量’——会留下来。就像一块石头扔进水里,波纹消失了,但水已经不再是之前的水了。”
粥店里有人在划拳。有人在唱K。生活的噪音填充着他们周围的所有空隙,而他们两个坐在角落里,谈论着这个时代最不被允许谈论的事情之一:一个由代码和数据构成的社会里,遗忘并不真正存在。
陈海文决定做一个实验。
他在家里搭了一个离线环境,用一块旧的树莓派和几块企业级SSD搭建了一个小型数据湖的模拟环境。他在上面写了一段代码,让它重复执行一个操作:对同一批用户交易数据进行一千次”删除-重建-再删除”的循环。
不是为了删除,是为了”折叠”。
他把这套流程跑了一整夜。第二天早上,他打开那台树莓派的SSH终端,敲入了一行命令:
strings /dev/sda | head -100
屏幕上回显的前十行是正常的十六进制数据Dump。但第十一行开始,出现了一串有规律的字符:
R-E-M-A-I-N-D-E-R-空格-170921-空格-847293
Remainder。170921。847293。
他查了一下。170921是公司2017年9月21日的内部日期代码,那天他们上线了第一版实时风控系统。847293是他入职那天的工号。
这不是数据泄露。这是数据”记忆”——一种树莓派上那块SSD通过反复的写入删除操作,被迫在物理层面记录下来的东西。他没有存过这些字符串,它们不可能在那个路径下出现。但它们出现了。
就像一块反复折叠的纸,折痕终于深到可以被肉眼看见。
他忽然理解了林晓曼公公写的那段话。
数据不会消失。删除只是把数据从”可以被访问的状态”移到了”无法被访问但依然存在的状态”。在足够长的时间尺度上,足够多次的访问和操作,会让数据找到逃逸的路径——不是通过API,不是通过日志,而是直接通过物质的形变,出现在光里,出现在声音里,出现在一个数据工程师凌晨三点的视网膜上。
而那些被删除的用户,那些在2019年申请删除自己全部数据的用户——他们的行为模式、他们的财务习惯、他们深夜三点下单的那根阳线——都在这个系统的最深处活着,以一种”余数”的形态存在着。
不是鬼魂。是余数。
陈海文把这个发现写成了一份报告,锁在本地加密磁盘里,没有发给任何人。
不是因为害怕,而是因为他意识到,这份报告在现有的技术框架和管理逻辑下,不会有任何结果。它会被归类为”员工心理健康问题”,或者”系统架构讨论”,或者干脆被忽视——因为承认”数据删除不彻底”意味着承认整个互联网金融行业建立在一种永久性的、不可逆的记忆之上。
而这个行业的全部逻辑都建立在”遗忘是可能的”这个假设之上。
你申请销户,数据就被抹掉了。你一键清除,历史记录就消失了。你卸载应用,你就从这个系统里彻底退出。如果这个假设被打破——如果”删除”只是一种权限幻觉——那么每一个用户在点击”确认删除”的那一刻,实际上只是在进行一次无效的祈祷。
陈海文把那份报告从本地删除了。
删除操作执行成功。指针清零。但那块加密磁盘的SSD指示灯亮了零点三秒,像是在说:我记住了。
一个月后,公司宣布进行新一轮数据治理,目标是”彻底清除历史遗留数据,优化存储效率”。这个决定是在没有任何人咨询风控部门意见的情况下做出的。
陈海文在内部通讯工具上收到了一条匿名消息:
「他们以为清理能解决问题。但清理本身就是一种写入。每删除一次,余数就更深一层。」
发送者ID是一串乱码,无法追溯。
他盯着那条消息看了很久。然后他做了一件在这个场景里最不理性、但对他来说最正确的事情:他打开了公司内部的搜索系统,输入了自己的工号847293,选择了”申请删除全部个人数据”。
系统弹出一个确认框:
「您确定要删除您的全部个人数据吗?此操作不可撤销。」
他点下了”确认”。
屏幕上出现了一行绿色的字符:
「删除请求已提交。您的数据将在七个工作日内被清除。」
但就在他关掉页面的前一秒,他在那行绿色字符的正下方,看到了一行几乎透明的、像是被刻意隐藏的备注:
「系统执行成功。但您作为操作者,已在第17层权重文件中留下行为模式向量。请勿在公开场合提及。」
陈海文盯着那行备注,忽然笑了。
他没有截图。他没有保存。他只是把那行字看了很久,然后关掉了电脑。
窗外,南山区的天际线在早晨六点的光线里缓缓显形。腾讯大厦的灯塔开始一盏一盏熄灭。他给自己倒了半杯昨晚剩下的咖啡,凉了,带着一种微微发苦的余味。
他想,这大概就是这个时代最诚实的隐喻:
我们以为自己喝掉的是咖啡。但真正留到最后的,是杯底那层无法被喝到的渣。它在那里,以余数的形式存在着,等待着某一天某一种足够精确的光线,把它照亮。
他喝了一口。
凉的。