第640章 第 640 章

他的系统垮过一次。是在分手之后的第八个月,凌晨三点,他一个人在租来的办公室里改一个项目的架构方案。改到一半的时候需要写一段关于共识机制的说明,他打开文档,手指放在键盘上,打了“共”字。然后停了。他看著那个字,看了大概十秒。十秒之后他把文档关了,没有保存。他靠在椅背上,看著天花板上那盏日光灯。灯管有点旧了,光线不均匀,中间亮两边暗。他盯著那盏灯,觉得自己就像那根灯管——看起来还在亮,但里面已经坏了。有一段灯丝断了,电流过不去,光线不均匀,随时会彻底灭掉。他没有灭。他坐起来,重新打开文档,打了“一致性协议”四个字。然后继续写。写完的时候天亮了,他把文档发给客户,关掉电脑,躺在办公室的沙发上。沙发很旧,弹簧塌了,躺上去的时候整个人陷进去,像被什么东西接住了。他闭上眼睛,睡了四个小时。没有做梦。或者做了,但他不记得了。

公司被收购的时候他二十九岁。收购方是一家大公司,技术总监看了他的程式码之后说了一句话:“你这个人写代码很有结构感,但缺乏野心。你明明可以做得更好,为什么总是在安全区里打转?”他没有回答。他不能回答。他总不能说——因为我走出安全区的时候,被一个人说太感性了。因为我靠近别人的时候,被推开了。因为我以为自己可以做得更好的时候,被证明了不够好。他说不出口。这些话在他嗓子底下压了两年,压成了一个硬块,吞不下去也吐不出来。他只是点了点头,说“我会改进的”。技术总监看了他一眼,没有再问。

回归职场之后他进了现在这家公司。业务中台,应用层,不碰架构,不碰底层,不碰那些需要共识算法的东西。他把自己放在一个安全的、可控的、不会触发任何异常的位置上。每天早上九点到公司,晚上九点离开,写代码,开会,修Bug。周末有时候加班,有时候不加班。不加班的周末他会去跑步,沿著公司旁边那条河,从这座桥跑到下一座桥,再跑回来。五公里,三十分钟,配速稳定,心率稳定,一切都稳定。他把自己活成了一个单节点系统——独立运行,不依赖任何外部资源,不与任何其他节点交换信息。优点是稳定,缺点是孤独。但他觉得孤独也没什么不好。孤独至少不会被拒绝。孤独至少不会在凌晨三点醒来的时候,发现自己在翻一个不会再有新消息的对话框。孤独至少不需要绕过那八个字母。因为在你的系统里,根本没有那八个字母。

然后她来了。

项目评审通知发到他邮箱的时候,他正在改一个业务逻辑的程式码。邮件的标题是“业务中台架构升级项目评审会通知”,发件人是唐嘉树。他点开邮件,往下拉,看到参会人员名单里有一个名字。程司白。三个字。他盯著这三个字看了大概五秒。这五秒里他的系统在崩溃——日志爆炸,记忆体泄漏,所有的进程都在报错。然后他关掉邮件,打开方案文档,开始改。他改了三天,每天改到凌晨两点。他把每一个可能被质疑的细节都补上了证明和数据,附录加了七页,测试报告写了一万两千字。他告诉自己这是因为他想要方案通过。但他知道不是。他是不想让她觉得,这两年他一点进步都没有。

评审会那天他穿了那件浅蓝色的衬衫。不是刻意选的,是衣柜里只剩这件干净的了。他在镜子前面站了一会儿,把领口的扣子扣到最上面一颗,想了想,又解开了一颗。到了会议室的时候她已经在了。坐在靠窗的位置,面前摊著笔记本,旁边放著一台笔记型电脑。她的头发挽得很整齐,西装外套的袖口拽到手腕,露出一小截细细的骨头。她没有看他。她在看他的方案文档,手指按在页面边缘,拇指来回摩挲著纸张的表面。那是她的习惯——紧张的时候会这样。他知道。

他演示方案的时候声音很稳。每一个字都说得很清楚,清楚得像在念一份他准备了很久的台词。但他没有准备台词,他准备的是方案。方案他改了三天,每一个细节都烂熟于心。他可以不用看文档,从第一章讲到第十章,从架构设计讲到部署方案。他讲到最后一页的时候,她说“我有问题”。声音不大,但很清晰。他转头看著她,她的目光越过会议桌上散落的笔记型电脑和矿泉水瓶,直直落在他脸上。他在那一瞬间想起了很多事情。想起她说“裴衍之,你知道吗,这是我进公司以来最开心的一天”,想起她说“你的代码写得很好”,想起她说“晚安”。想起她说“我们不合适”。他把这些事情压回去了,压到嗓子底下那个硬块的旁边。然后说“请说”。

会议结束之后他在电梯里碰到了她。不是刻意的,是去电梯的路上他一直在想该走楼梯还是等下一班,想著想著就走到了电梯门口。门开了,她在里面。他走进去的瞬间闻到了她身上的味道——洗衣液,干净的,凉的,和三年前一模一样。电梯门关上,开始下降。两个人都没有说话。电梯里只有机械运转的声音,低沉的,均匀的,像一段没有感情的白噪音。然后她开口了。

“好久不见。”

他沉默了三秒。这三秒里他在做一件事——把嗓子底下那个硬块往下压。压到更深的地方,压到不会被任何人看到的地方。压好之后他说:“好久不见。”声音比他预期中平静,平静得像在确认一个无关紧要的事实。电梯到了一楼,她走出去,脚步声在大理石地面上响起,一二一二,节奏均匀。他站在电梯里,手指按在开门键上,看著她的背影消失在走廊尽头。他松开按键,电梯门缓缓关上。他靠在电梯的墙上,闭了一下眼睛。嗓子底下那个硬块碎了一点点。只有一点点,很小,小到如果不是他一直在压著它,根本不会注意到。但它碎了。那里面有一些东西流出来,流到喉咙里,咸的,涩的,像眼泪的味道。但他没有哭。他已经很久没有哭了。上一次哭是分手那天,他在客厅里坐了一整夜,天亮的时候发现脸上湿了,他用手背擦了一下,然后去洗脸。洗脸的时候水很凉,凉到他觉得自己可能根本没有哭过。只是水龙头的水溅到脸上了。只是这样。

后来他们开始合作。每天开会,讨论方案,交换数据。她还是那样,说话的时候不看他,写笔记的时候字迹工整得像打印体,喝咖啡的时候只喝美式不加糖不加奶。她也变了一些。头发比以前短了一点,说话的时候语速更快了,技术能力比三年前强了很多。她做了很多他做不到的事情——重构了序列化模块,优化了动态超时窗口,把Raft变体的吞吐量提升了百分之二十。他看著她做的这些事情,心里有一个声音在说:你看,她一个人也可以。她不需要你。她把这个声音压下去了,压到嗓子底下那个硬块的旁边。硬块变大了。

他开始给她带咖啡。第一天是美式,放在她桌上,没有留名字。第二天她没有喝,他看到了,那杯咖啡在她桌角放了一整天,凉透了,杯壁上凝著一层水珠。第三天他换了拿铁,加了两份浓缩。他知道她不太喝拿铁,但他记得她以前试过一次,说太甜了。他加了两份浓缩,想让它不那么甜。她喝了。他看到的时候觉得自己的心跳漏了一拍,然后他把它压下去了。他把所有的东西都压下去了——想问她好不好喝,想问她今天几点走的,想问她有没有吃早饭。他把这些问题压成一行字,写在杯壁上:“别用工作逃避。”写完之后他觉得自己很蠢。她不会因为一行字就不逃避了。她逃避了三年,从他们分手的那天就在逃避。她逃避依赖,逃避脆弱,逃避需要别人。他也在逃避。他逃避靠近她,逃避告诉她他还在,逃避承认自己从来没有走开过。两个人在同一条路上朝著相反的方向跑,跑得越快,离得越远。但他不想跑了。他停下来了。站在那条路上,等她停下来。他不知道她会不会停。他只是站在那里。像一个超时重传的请求——不知道对方会不会收到,不知道对方会不会回复,但他还是发出去了。然后等待。超时,重发。再等待。再超时,再重发。

那天晚上她在巷子里打电话。他站在巷口,手里夹著一根烟。他已经戒了两年了,但那天他又买了一包。不是因为想抽,是因为需要手里拿著点什么,才能站在那里不走开。他听到了她说的话。每一个字都听得很清楚。她说“我一个人很好”,说“我不想因为害怕一个人就随便找一个人”,说“我不想像你一样”。她的声音在巷子里显得很孤单,像一个没有其他节点的网络——只有她自己,没有心跳,没有确认,没有共识。他把烟摁灭了,走进巷子。她转头看到他的时候,眼睛里有光。不是那种碎的、散的、到处都是的光,是那种被压在水面下的、挣扎的、想要浮上来的光。她说“你偷听”。他说“我不是故意的”。这是实话。他不是故意的。他只是站在那里,听到了一个他等了三年才听到的东西——她不是不想靠近,她是不敢。她不是不需要,她是不敢需要。她不是不喜欢他,她是不敢喜欢任何一个人。因为她怕被剩下。他站在巷子里,看著她的眼睛,说了一句话。那句话在他嗓子底下压了三年,压成了一个硬块,硬到他以为永远都说不出来了。但他说出来了。

“你妈说得不对。一个人也可以很好,但两个人不一定更差。”

她没有回答。她走了。脚步声在巷子里响起,一二一二,节奏和往常一样均匀。但他听到了那个节奏底下的东西——不是拒绝,是犹豫。一个从来不允许自己犹豫的人,犹豫了。他站在巷子里,看著她的背影消失在巷口。风吹过来,十一月的风,冷的。他把手插进口袋里,摸到了那包烟。他拿出来看了看,捏扁了,扔进垃圾桶。然后他拿出手机,打开跟她的对话框。对话框里还是那条他发了很久的消息——“不是要证明自己。是我怕你的方案出问题,你又会像三年前一样,把所有责任扛在自己身上。”她没有回。他打了几个字:“烟扔了。”看了两秒,删掉了。又打了几个字:“你刚才没说完的话——”没有打完。他把手机放回口袋,走出巷子。抬头的时候看到十五楼的灯还亮著。她回去了。他也该回去了。不是因为工作,是因为她在那里。

后来的事情他记得不太清楚了。不是因为不重要,是因为太多了。多到像日志文件里的那些记录,每一条都很重要,但你没有办法一条一条地记住。你只能记住那个模式——她在会议室里说“谢谢”的时候声音里有一个微小的停顿,她在走廊上走过他身边的时候脚步会慢一点点,她在电梯里靠在他肩膀上的时候呼吸会变得均匀。这些模式他花了三年才读懂。三年里他学会了很多事情。学会了不打扰,学会了不追问,学会了把所有的东西压在嗓子底下。学会了用理性代替感性,用克制代替靠近,用安全区代替那条她不敢走的路。他以为这就是她想要的。一个够理性的人,一个不会让她觉得危险的人,一个不会让她害怕被剩下的人。他把自己变成了这样的人。

但她说:“我不确定我喜欢理性的你。”

说这话的时候他们在团建的基地,阳光透过树叶照下来,在她身上投出一片一片的光斑。她看著他,眼睛里有那种被压在水面下的光。不是碎的,是整的。不是散的,是聚的。不是要沉下去的,是要浮上来的。她在那一刻选择了不压。他看著她的眼睛,觉得嗓子底下那个硬块又碎了一点。这一次碎得比之前多,多的那些东西流出来,不是咸的,不是涩的,是另一种味道。是她在巷子里说“我不想像你一样”的时候有的那种,是她在会议室里说“谢谢你”的时候有的那种,是她在电梯里说“我留下”的时候有的那种。是甜的。他等了三年才等到这个味道。

她在电梯里说“我申请成为节点”的时候,他觉得自己的系统重启了。所有的进程都被杀掉了,所有的缓存都被清空了,所有的日志都被轮转了。然后一个新的进程启动了,只有一个,很轻,很小,占用很少的资源。它不做别的事情,只发送心跳。滴答,滴答,滴答。每一个滴答都在说一句话。那句话不是“我喜欢你”,不是“我需要你”,不是“请你不要走”。那句话是“我在”。程司白,你说我不够理性。但你不知道,我的理性,都是你教会的。你教会我克制,教会我体面,教会我不打扰。你教会我一个人也可以很好。但你没有教会我一件事——你没有教会我怎么忘记你。所以我没有忘记。我把你放在记忆体里一个不会被覆盖的位址,把指针指向那里,然后告诉系统:这个位址正在使用,不要分配给其他进程。系统接受了。三年来,那个位址一直为你保留著。数据没有丢失,没有损坏,没有被覆盖。它在等一个读取请求。等了三年。现在请求来了。读取成功。数据完整。一致性确认。共识达成。

辞职的决定是程司白先提出来的。那天晚上两个人坐在客厅里,各自对著电脑。她在看一篇关于分布式存储的论文,他在改一个开源项目的代码。窗外在下雨,雨声很大,噼噼啪啪地打在空调外机上,像一段没有规律的随机信号。她突然合上论文,转头看著他。

“裴衍之,我们开家公司吧。”

他的手指在键盘上停了。不是因为惊讶,是因为他在等这句话。等了多久他不知道,也许从她说“我留下”的时候就在等,也许更早,早到她还没有意识到自己会留下的时候。他把电脑合上,转头看著她。客厅里只开了一盏落地灯,光线是暖黄色的,照在她脸上,把她下巴的线条照得很柔和。她的头发比两年前长了一些,披在肩膀上,发尾有一点点自然卷。她没有挽头发了。不知道从什么时候开始,她不再把头发挽得整整齐齐。她让它乱著,散著,被风吹到脸上也不去拨。她变得没那么整齐了。但他觉得她更好看了。

“叫什么名字?”他问。

程司白想了很久。久到雨声从大到小,从小到几乎听不见。窗外的路灯透过雨幕照进来,在地板上投下一片模糊的光斑。她看著那片光斑,想起两年前她在这间客厅里坐著,手里拿著一个写著“别用工作逃避”的咖啡杯。那时候她不知道自己在逃避什么。现在她知道了。她逃避的不是工作,是那种不需要证明就能得到的东西。是信任,是连接,是有人会一直在的确定性。她逃避了三年,然后花了一年学会接受,又花了一年学会给出。现在她想把这种东西放进一家公司里。不是放在产品里,不是放在技术栈里,是放在公司的名字里。

“共识实验室。”她说。

裴衍之看著她。落地灯的光照在她眼睛里,把那里面那种稳定的、持续的、不间断的光照得很清楚。那种光从两年前就开始了,从她说“我留下”的时候开始,从她说“谢谢你”的时候开始,从她在巷子里差一点把那句话说完的时候开始。它一直在。只是以前她把它压在水面下,压到看不见,压到她自己都以为没有了。现在它浮上来了。

“好。”他说。

公司注册的手续办了两个月。办公场地选在离家不远的一个创意园区里,一栋两层的小楼,门口有一棵桂花树。程司白签租房合同的时候站在那棵树下看了很久,裴衍之问她看什么,她说这棵树秋天会开花,很香。他没有问她怎么知道的,因为他知道——她来看场地的时候就已经在想了。想秋天坐在树下写程式码的时候,风吹过来,桂花落在键盘上,她会停下来把花瓣捡走,然后继续写。她在想这些事情的时候,嘴角会有一点点上扬的弧度。很小,小到如果不是他在认真看,根本不会注意到。但他注意到了。他一直都能注意到。

装修的时候何悦来帮忙。她现在是公司的第三个员工,职位写的是“测试工程师”,但实际上她什么都做——跑测试、写文档、订办公用品、给所有人泡咖啡。陆维安是第四个员工,职位写的是“后端工程师”,但他大部分时间在帮何悦搬东西、装桌椅、调整显示器的高度。何悦说你一个后端工程师整天干体力活像话吗,陆维安说你一个测试工程师整天指挥别人干体力活像话吗。两个人吵了一整个下午,把所有的桌椅都装好了。程司白站在二楼的窗户前面,看著楼下那棵桂花树,听著身后何悦和陆维安的争吵声,觉得这家公司可能撑不过第一年。她笑了。不是嘴角动一下的那种,是真的笑。从眼睛里出来的笑,从那个不再需要压制任何东西的地方出来的笑。

公司成立那天是个晴天。秋天的阳光很好,照在门口那棵桂花树上,照在二楼窗户上,照在新装好的招牌上。招牌是白色的底,黑色的字,很简单,简单得像一段没有多余代码的程式——“共识实验室”。下面有一行小字:“Distributed Systems Lab”。没有口号,没有标语,没有“让世界更美好”之类的话。就是一个名字。一个她想了很久的名字。

何悦在门口挂了一串气球,说是庆祝用的。陆维安说你挂气球干什么,又不是开派对。何悦说公司成立当然要开派对,你懂不懂。陆维安说我不懂,你去问程姐。何悦转头看程司白,程司白说气球挺好的,留著吧。何悦得意地看了陆维安一眼。陆维安说行吧,然后去买了更多的气球。门口挂满了,走廊上也挂满了,连二楼的栏杆上都系了一串。程司白站在一楼大厅里,抬头看著那些气球——红的,黄的,蓝的,绿的,飘在白色的天花板下面,像一群没有固定地址的数据包,在网络里漫游,等待被路由到正确的目的地。她不知道自己的目的地是哪里。她只知道她到了。

何悦拍了一张照片发在群组里,配文是“共识实验室今天正式开张”。唐嘉树在下面回了一句:“恭喜。需要顾问的话找我,收费不高。”何悦说唐总你来我们请你吃饭,唐嘉树说吃饭就不用了,把你们的程式码给我看看就行。何悦说那还是吃饭吧。唐嘉树发了一个笑哭的表情。

下午的时候所有人都走了。何悦和陆维安去采购办公用品,装修师傅来收了尾,快递员送来了最后一批显示器。一楼大厅里只剩两个人。程司白站在窗前,看著门口那棵桂花树。阳光从树叶的缝隙里照下来,在地面上投出一片一片的光斑,像一张被分割了的网。她站在网的边缘,没有走进去。裴衍之从后面走过来,站在她旁边。两个人并排站著,肩膀轻轻挨在一起。隔著两层布料,她能感觉到他的体温。不是那种烫的、灼人的热,是那种温的、恒定的、让人想一直靠著的那种暖。

“裴衍之。”

“嗯。”

“我们从分布式系统,变成分布式人生了。”

她说这句话的时候没有转头,声音很轻,轻到像是在自言自语。但裴衍之听到了。他一直都能听到。他听到了她声音里那个东西——不是感叹,不是庆祝,是一种确认。像一个节点在确认另一个节点的状态——我们从独立运行变成协同工作了。我们的日志会合并,我们的时钟会同步,我们的故障会一起处理。我们不再是一个人的系统了。

“那我们的共识算法,还有效吗?”他问。声音也很轻,轻到像是在问一个他已经知道答案的问题。但他还是想听她说出来。就像一个已经收到ACK的节点,还是会定期发送心跳——不是因为不信任,是因为确认本身就是一种信任。

程司白转头看著他。阳光照在她脸上,把她眼睛里那种稳定的、持续的、不间断的光照得很清楚。那种光从两年前开始,从她说“我留下”的时候开始,从她说“谢谢你”的时候开始,从她在巷子里差一点把那句话说完的时候开始。它一直在。现在它在一家叫“共识实验室”的公司里,在一棵桂花树下,在一个秋天的午后。

“有效。”她说。声音比刚才重了一些,重到像一个被确认了的状态——不需要再证明,不需要再测试,不需要再等待逾时重传。就是一个简单的状态。已连接。“而且,不需要再证明了。”

裴衍之看著她。阳光从树叶的缝隙里照下来,在她脸上投下一片光斑,亮亮的,圆圆的,像一个确认信号。他伸出手,握住了她的手。她的手还是凉的,他的手还是暖的。两年过去了,这个温差没有变过。也许永远不会变。也许这就是他们的协议——一个发送心跳,一个接收确认。一个在凉的频率上,一个在暖的频率上。但通道是开的,数据在传输,共识在维持。不需要加速,不需要优化,不需要提升吞吐量。只需要保持这个频率,不快不慢,每一个滴答都和上一个滴答间隔相同的时间。

“程司白,欢迎来到共识实验室。”他说这句话的时候,嘴角扬起来了。不是那种克制的、理性的、成年人的微笑,是那种从心底里涌上来的、压不住的、想要跟她一起分享的笑。他笑得不好看,眼睛瞇成了一条缝,眼角挤出了细细的纹路,鼻子皱了一下,嘴角歪向一边。但他没有停下来。

程司白看著他笑,她也笑了。两个人站在新公司的门口,手牵著手,对著彼此笑。秋天的阳光照在他们身上,照在白色的招牌上,照在门口那串五颜六色的气球上。风吹过来,桂花树的叶子沙沙地响,有几朵细小的桂花落下来,落在她的头发上,落在他的肩膀上。她没有去拨,他也没有。他们就让那些花落在那里,黄色的,小小的,像一段被写入日志的数据——时间戳是今天,内容是:共识达成,系统正常,一切稳定。

她看著他的眼睛。那双深棕色的眼睛在阳光下很亮,亮得像萤幕上一个稳定的信号——没有波动,没有异常,一切正常。她在那双眼睛里看到了自己的倒影——头发散著,被风吹乱了,肩膀上落著几朵桂花,嘴角上扬著。她在笑。她一直在笑。从两年前的那个电梯里就开始了,只是她当时没有发现。或者发现了,但不敢确认。现在她确认了。确认自己会笑,确认自己值得笑,确认有一个人会让她笑。不需要理由,不需要条件,不需要任何可以被证明的东西。就是一种状态。一种她花了很长时间才敢进入的状态。

“裴衍之。”她说。

“嗯。”

“欢迎回家。”

她说这句话的时候,手指在他掌心里紧了一下。不是用力,是确认——你在,我也在。我们在一个系统里,在同一个时钟下,在同一个共识算法上。我们从分布式系统,变成分布式人生了。人生也是分布式的——没有中心节点,没有全局时钟,没有完美的共识。但你可以选择跟谁连接,选择跟谁同步,选择跟谁一起处理那些故障、那些裂痕、那些不一致的状态。你选择了一个人,不是因为他不会让系统崩溃,是因为崩溃的时候他会跟你一起排查。你选择了一个人,不是因为他不会犯错,是因为他会承认错误然后修复。你选择了一个人,不是因为他永远不会离开,是因为他每一次心跳都在说——我在。你也在。

程司白站在新公司的门口,手被裴衍之握著,肩膀挨著裴衍之的肩膀。阳光很好,桂花很香,风很轻。她不知道这家公司能做多久,不知道产品会不会成功,不知道市场会不会接受。她只知道一件事——不管发生什么故障,有人会和她一起排查。不管出现什么Bug,有人会和她一起修复。不管系统崩溃多少次,有人会和她一起重启。不需要保证,不需要证明,不需要任何可以被验证的依据。就是一种选择。她选择了。在两年前的电梯里,在一年前的咖啡馆里,在今天这棵桂花树下。她选择了连接,选择了同步,选择了成为一个分布式系统里的一个节点。不是独立的,不是孤岛的,不是不需要任何人的。是连接的,是同步的,是愿意交换心跳的。是分布式的。是人生的。

她把头靠在裴衍之的肩膀上。头发蹭著他的脖子,有点痒。他没有躲。他只是微微侧了一下头,让她的头发不会戳到眼睛。两个人的肩膀靠在一起,手臂贴著手臂,手扣著手。阳光从头顶照下来,在两个人身上投下一圈一圈的光晕。那些光晕是金色的,暖的,像一个稳定的信号——系统正常,连接稳定,共识达成。不需要再证明,不需要再测试,不需要再等待逾时重传。就是一个简单的状态。已连接。

程司白闭上眼睛。阳光透过眼皮照进来,金色的,温暖的,像一个心跳信号。滴答,滴答,滴答。她在心里跟著那个节奏数了一会儿,然后不数了。因为她知道,不管她数不数,它都在那里。稳定的,可靠的,不会崩溃的。就像他。一直都在。

就像他们。从三年前就开始了。只是花了很长时间才确认这个事实。现在确认了。写入日志,同步到所有节点,永久储存。时间戳:今天。内容:共识达成。状态:已连接。备注:不需要再证明了。

< 上一章 目录 下一章 >
×
宿山行
连载中帝谛 /