她盯著这行字看了很久。字迹还是很工整,但比中午那杯写得更慢——笔画的起落处有轻微的停顿,像一个人在写每一个字之前都犹豫了一下。
她认得这个字迹。
三年前他在纸条上写“别太累了”,就是这个字迹。一模一样的工整,一模一样的慢,一模一样的在每一个笔画结束的地方有一个微小的、不仔细看就看不出来的停顿。
她以前觉得那是他的习惯。现在她觉得那不是习惯,是他在写每一个字之前都在想——这句话该不该说。
她把咖啡杯放在桌上,没有扔掉。
前三天她把每一杯咖啡都扔了。美式的、拿铁的,全部扔进茶水间的垃圾桶,杯底残留的咖啡液在垃圾袋里渗出来,把纸巾盒的边缘染成浅褐色。她没有多想,扔了就扔了,像删掉一个不再需要的临时文件。
但这一杯她没有扔。
她把它放在桌上,放在键盘的左边,和笔记本并排。杯壁上那行字朝著她的方向,她坐下来的时候第一眼就能看到。
“别用工作逃避。”
她不知道他在写这句话的时候在想什么。也许在想她这三天的加班记录,也许在想何悦在群组里发的那些消息,也许在想她今天在会议室里说“我不喜欢别人帮我买咖啡”的时候,语气里那种刻意的生硬。
也许他什么都没想,只是写了。
她坐在工位上,看著那行字。电脑萤幕已经暗了,办公区的灯也关了大半,只有她头顶这一盏还亮著。窗外的城市灯光透过玻璃照进来,在桌上投下一片橘黄色的光。那杯咖啡的杯壁上凝著一层细密的水珠,在灯光下亮晶晶的,像一段刚刚被写入的数据——新鲜的,还没有被覆盖过的。
她伸手碰了一下杯壁。凉的。已经放了很久了。
但她觉得那行字还是温的。
她不知道自己在想什么。她应该走的,已经十一点多了,明天还要早起。但她坐在那里,看著那行字,动不了。不是身体动不了,是某个她说不清楚的东西动不了。
三年了。
三年来她把所有的东西都控制得很好。工作、生活、情绪,每一个变量都在可预测的范围内波动,从来没有超出过阈值。她以为自己已经修好了那个漏洞——那个会让她心软、会让她犹豫、会让她想要依赖别人的漏洞。
但现在她看著这行字,发现那个漏洞从来没有被修好过。
它只是被压住了。被工作压住,被理性压住,被“我不需要”这四个字压住。现在有人把它上面的东西一层一层地拿掉,不是用蛮力,是用一杯一杯的咖啡,一行一行的小字,一句一句的“不用现在回答我”。
她不知道该怎么办。
她不能说“好”,因为说了好就意味著承认她需要他。
她不能说“不好”,因为说了不好就意味著她在乎。
她什么都不能说。她只能坐著,看著那行字,像一个卡在死循环里的进程——没有输入,没有输出,没有终止条件,只能一直跑下去,直到系统崩溃或者被人为杀掉。
何悦不知道从哪里冒出来的,端著一杯水走过来,看到程司白坐在工位上发呆。
“程姐?你还没走?”
程司白回过神。“马上走。”
何悦走过来,目光落在桌上的咖啡杯上。她看到了杯壁上那行字,又看了看程司白的表情,嘴角翘了一下,但这次没有压下去。
“这杯咖啡看起来不错。”何悦说。
“嗯。”
“谁买的?”
程司白没有回答。她把咖啡杯拿起来,站起来,拎起公事包。
“走了。”她说。
“程姐。”何悦叫住她。
程司白转头。
何悦站在那里,手里端著水杯,表情难得认真。“我觉得他说得对。”
“什么?”
“别用工作逃避。”何悦说完这句,转身走了,脚步轻快得像一只偷到了鱼的猫。
程司白站在工位旁边,手里还端著那杯凉掉的咖啡。她低头看了一眼杯壁上的字,犹豫了一下,没有扔掉。
她把咖啡杯放进公事包的侧袋里,拉上拉链。杯子在袋子里晃了一下,发出一声轻微的碰撞声,然后安静了。
她走出办公区的时候走廊上的感应灯亮了。脚步声在大理石地面上响起,一二一二,节奏和往常一样均匀。
但如果有人仔细听,会发现今天的节奏比前三天慢了一些。
不是很多。只是慢了一点点。
一点点,像一个参数被微调了零点零几的权重因子——变化太小,监控系统不会报警,日志不会记录,大多数人不会注意到。
但系统内部知道。
参数变了。
电梯到了一楼,门打开。她走出大楼,夜风吹过来,比前几天更凉了一些。她站在门口,抬头看了一眼十五楼。
灯灭了。
他走了。
她不知道他是什么时候走的。也许是放完那杯咖啡之后就走了,也许是在她看著那行字发呆的时候走的。她不知道。
但她知道他明天还会来。还会带咖啡。还会在杯壁上写字。还会说“不用现在回答我”。
她不知道他会坚持多久。一天,一周,一个月,还是更久。
她也不知道自己会撑多久。
地铁进站的时候风从隧道里吹出来,把她的头发吹乱了。她站在月台上,公事包的侧袋里那杯咖啡随著列车进站的震动轻轻晃了一下。她伸手按了一下袋口,把它稳住。
列车门打开,她走进去,找了一个靠窗的位置坐下。
公事包放在膝盖上,她的手指搭在拉链上,没有拉开,只是放在那里。隔著一层尼龙布,她能感觉到那个杯子的轮廓——圆的,硬的,杯壁上有一行字。
“别用工作逃避。”
她在心里把这六个字念了一遍。
然后列车启动了,窗外的灯光开始向后退,一盏一盏的,越来越快。她在玻璃窗上看到自己的倒影——头发被风吹乱了,外套的领口竖起来,下巴埋在里面。眼睛下面有两道浅浅的阴影,是这三天留下来的。
她看起来很累。
但她不想睡。因为她知道如果现在闭上眼睛,她会梦到一些不该梦到的东西。比如一杯拿铁,比如一件深蓝色的外套,比如一条写著“好,不打扰了”的消息。
比如一个人在巷子里说:“你妈说得不对。”
她把目光从倒影上移开,转向窗外。隧道里是黑的,什么都看不到。只有列车行进的声音,轰轰轰轰,像一段没有旋律的白噪音。
她在这片白噪音里坐了三站地铁。
到站的时候她站起来,拎著公事包走出车厢。上楼梯的时候公事包晃了一下,里面的杯子又发出一声轻微的碰撞声。她停了一下,把包带往肩上拢了拢,确保杯子不会掉出来。
出站的时候风很大,她把领口又往上拉了拉。街上人很少,路灯把她的影子拉得很长,投在空荡荡的人行道上。
她走得很慢。
比平时慢了大概十分钟到家。进门的时候她没有开灯,换了鞋,把公事包放在沙发上,然后去厨房倒了一杯水。
客厅里很暗,窗外的路灯透过窗帘照进来,在地板上投下一片橘黄色的光。她坐在沙发上,喝了一口水,然后打开公事包的侧袋,把那杯咖啡拿出来。
杯子已经彻底凉了。杯壁上的水珠凝成了一片,摸起来湿漉漉的。那行字还在,墨水被水珠洇开了一点,边缘变得模糊,但每一个字都还能认出来。
她拿著杯子,坐在沙发上,在黑暗里看著那行字。
看了大概五分钟。
然后她把杯子放在茶几上,站起来,走进浴室洗脸。水很凉,扑在脸上的时候她打了个激灵,整个人清醒了一些。她抬头看著镜子里的自己,眼睛下面的阴影比在地铁上看到的时候更深了,头发乱七八糟的,领口歪在一边。
她看起来像一个刚刚从崩溃边缘恢复过来的系统——还在运行,但日志里全是警告。
她关掉水龙头,用毛巾擦干脸,走出浴室。经过茶几的时候她看了一眼那杯咖啡,犹豫了一下,没有扔。
她走进卧室,关上门,躺在床上。
天花板是白的,什么都没有。窗外的路灯透过窗帘在天花板上投下一片模糊的光斑,像一个失焦的镜头。
她闭上眼睛。
脑子里还是那行字。
“别用工作逃避。”
她在想,如果不工作,她应该做什么。
她应该想清楚那句话。
她应该想清楚他在巷子里说的那句话——“两个人不一定更差”。
她应该想清楚自己在巷子里没有说完的那句话——“我需要的是——”。
需要的是什么?
她不知道。她真的不知道。
她只知道她不想再像这三天一样了。不想每天加班到凌晨,不想把自己埋在程式码里,不想假装自己不需要任何东西。
但她也不知道除了这样,还能怎样。
她翻了一个身,把脸埋在枕头里。枕头很软,有一股洗衣液的味道,和那天在他外套上闻到的柠檬和雪松不一样。她在外套上闻到的味道更淡,更远,像一个信号很弱的广播电台,你要很认真地听才能听清楚它在播什么。
她在听。
她一直都在听。
只是她不想承认。
两周测试期的最后一天,程司白早上六点就到公司了。
她需要在大规模评审会之前把所有的数据再验证一遍。八千次测试,十四个边缘场景,三种网络条件,每一个数字她都要确认。监控面板上的曲线在过去的两周里被她看了无数遍,蓝色的代表Raft变体,绿色的代表Paxos,两条线在不同的坐标轴上交叉、分离、再交叉,像两条在博弈中寻找平衡的函数。
她把最后一组数据录入表格的时候,手指在键盘上停了一下。Raft变体在吞吐量上领先百分之十八,延迟低了百分之十二,但在极端网络条件下的稳定性波动比Paxos大了百分之七。Paxos在稳定性上胜出,但在高并发场景下的性能瓶颈明显,活锁概率在十七个节点同时提案时达到了百分之二点三。
没有完胜。两种方案都有不可忽视的优点和缺点。
她合上笔记本,闭了一下眼睛。这就够了。不需要完胜,只需要数据能说话。
评审会在上午十点,会议室一——公司最大的一间会议室,能坐二十个人。程司白到的时候里面已经坐了十几个,架构组的人坐在左边,业务中台的人坐在右边,中间空著一排椅子,像一条无形的边界线。唐嘉树坐在会议桌的中间位置,面前放著一杯茶和两份打印好的测试报告。
何悦坐在程司白旁边,手里握著笔,笔记本已经翻到了新的一页。她在桌子底下给程司白竖了一个大拇指,程司白没有看到,她正在把U盘连接到投影仪上。
裴衍之是最后一个进来的。他手里拎著笔记型电脑,穿著一件白色的衬衫,袖口挽到小臂中段。他在右边的第一个位置坐下,打开电脑,萤幕上是他的测试报告——封面页上用加粗的字体写著“Paxos一致性方案测试报告·第二周”。
唐嘉树看了一眼投影幕上程司白的报告封面,又看了一眼裴衍之的萤幕。“开始吧。”
程司白站起来,走到投影幕前。她今天穿了一件黑色的西装,头发挽得很整齐,翻页笔握在手里,指尖因为用力而微微发白。
“两周测试,总共八千次边缘场景模拟,覆盖网络分区、节点崩溃、日志不一致、快照恢复、成员变更五个维度。”她点开第一页,萤幕上出现一张对比表,“Raft变体的平均吞吐量每秒一万四千八百笔交易,Paxos每秒一万两千一百笔。Raft领先百分之十八。”
她点到第二页。“平均延迟,Raft两百三十毫秒,Paxos两百九十毫秒。Raft领先百分之十二。”
第三页。“在网络抖动幅度超过百分之三十的极端条件下,Raft的吞吐量下降到每秒一万两千笔,Paxos下降到每秒一万一千五百笔。Raft仍然领先,但差距缩小到百分之四。同时,Raft的稳定性波动幅度为百分之十二,Paxos为百分之七。Paxos在稳定性上领先。”
她把翻页笔放在桌上。“结论:两种方案在性能指标上各有优劣。Raft在吞吐量和延迟上表现更好,Paxos在稳定性上更有优势。没有明显的胜者。”