陆慎之到接力县外时,城门已经关了两日。
他没有带王府仪仗,只带了六名随员、两辆空车和一册拆成七栏的旧粮簿。车上没有粮,只有绳、纸、封泥和三把不同形制的秤。
守门军士见到他,先看了他的文书,又看了一眼城外病棚。
“陆先生,县令说不放外人进城。”
“我不是来进城的。”陆慎之下车,“我来看看城外的粮道为什么还没有断。”
军士不明白。
陆慎之也没有解释。他从城门前走过,先看水牌,再看棉布征购牌,最后看接力县拒收文书背后的三栏补记。
城门关闭,布商暂停供货,旧盐道浅渠因死羊污染停止供人饮用。
三个节点已经失效。
可城外的锅仍在冒烟,病棚仍有水,第四段的车仍在向第五段移动。
陆慎之没有先看那些冒烟的锅,而是让随员把三处节点的失效牌全部取来。
第一块牌写接力县拒收:城内余粮十五日,城外可接人数为零,东堤临时医棚可接一百二十人,水量三十七桶。
第二块牌写许掌柜暂停供货:原定十匹试购已交,后续一百一十匹暂缓,白沙两家布行报价上调,原因待核。
第三块牌写浅渠停饮:死羊一只,清渠未完成,牲畜和洗锅仍可用,人的饮水改由南坡旧井转车。
陆慎之逐项看完,问:“这三块牌是谁写的?”
“不同的人。”沈棠宁说,“县城由县账房,布行由商户复核人,浅渠由村民和迁民共同验。”
“所以三块牌的用词不一样,数字口径也不一样。”
“对。”
“那你怎么把它们放进同一张总表?”
沈棠宁指向牌背:“按影响,不按口气。拒收看可接人数,停供看未交数量,停饮看用途和替代水量。”
陆慎之把自己的随员叫来:“按中央总账的做法,只填‘三处受阻,需上调物资’。”
随员照写。
“再按他们的牌写。”
三个人分别抄了四个数字、两个区间和一项待核原因。
陆慎之把两张纸放在一起。
中央总账只有一句话,适合快速传令,却看不出哪处能替代、哪处不能替代;分段牌耗了半个时辰,却知道第三处浅渠不能供人喝,却仍能给牲畜用。
“若我只看到第一张,”他说,“会把南坡旧井的车调去接力县,救不了城外病棚。”
“因为总账把水当成一种东西。”
“若我只看第三张,又会以为所有水都能替代。”
“所以每项都要写用途。”
陆慎之沉默片刻,把“额外绕路三十七里”写在中央纸上,又把“保留病棚最低水量”写在分段牌旁。
“你们多花的不是抽象的两日,是车脚、病棚看守、牲畜损耗和后队争执。”
“中央调度节省的也不是抽象的半日。”沈棠宁说,“它可能省下传令,却把一处错的总数传遍所有节点。两种效率都要把代价写出来。”
“你算出什么了?”沈棠宁问。
“你们损失了两日。”
“还没到两日。”
“按现在的水量,今晚会到。”陆慎之把旧粮簿夹在臂下,“接力县原本承担的是四万人的两日转运,浅渠承担三段牲畜水和两段洗锅水,许掌柜的布车承担首批病棚隔断。三个节点一起停,后面五段的牌子只能用灰牌。”
“灰牌不是断。”
“是不能按原计划接收。”
“所以要重新算。”
陆慎之看着她,目光落到她手边那叠写满数字的木牌上。
“你们每一次重新算,都要找人、找纸、找见证。一个总仓、一枚总印、一个调度人,半个时辰就能改完。”
“然后所有人等着总调度人没有被抓、没有病倒、没有改错。”
陆慎之没有反驳。
他从车上取出一张白纸,在地上画了一个大圆,圆心写着“总仓”,周围写出十个点。
“若采用中央调度,接力县关门,只需将四万人的粮水改送到下一个县;许掌柜停供,只需调用第二家布行;浅渠污染,只需从总账抽一队水车。三道命令,半日内可以下达。”
沈棠宁看着那张图:“命令下达之后呢?”
“各节点执行。”
“若第二个县也不接,第二家布行要价翻倍,水车路上被军队扣下呢?”
陆慎之的手停在纸上。
“那就改第四道命令。”
“总调度人在什么地方?”
“总调度会有替补。”
“替补知道现场的四千一百七十二人里有六位并入老人、二十七名发热呕吐者和一辆不愿报姓名的旧堤车吗?”
“不必知道每一个人。”
“那他怎么决定给哪一队多一桶水?”
“按统一标准。”
“统一标准会把病棚的水、饮水和洗锅水算成同一种水。”
陆慎之看着她:“所以你宁愿每个人都知道一点,谁也不能调全局?”
“我宁愿让每个节点知道自己负责什么,并且留下别人能接手的记录。”
“这会慢。”
“会慢。”
“会有人把信息写错。”
“会。”
“会有人借公开账获利。”
“周成已经证明了。”
两人站在城门外,谁都没有先让步。
陆慎之把视线移到远处。
第一段的蓝牌已经改成黄牌,原定接收三百人的水点只剩一百七十人的余量;第二段的车队少了两辆,车夫在牌背面写明其中一辆车轴断裂,另一辆被征去拉病棚木料;第三段的病棚把四匹旧帆布裁成十八面小帘,虽然不如棉布耐用,却能把入口和出口分开。
没有一处漂亮。
也没有一处彻底停止。
陆慎之让随员把十段接力牌全部抄了一遍。
从第一段到第十段,原计划每日转移四千人,实际只走了两千八百六十七人;水量多耗了六百三十七桶,粮车绕路增加三十七里,病棚多出二十一名待核患者。
沈棠宁接过他的算纸:“你看见的是损失。”
“不,我也看见没有损失的部分。”陆慎之说,“第一段缺水后没有把人赶回西村,第二段没有因为布车停供而取消病棚,第四段车轴断裂后,第五段提前派人接了老人。若这是一个总仓,三处节点失效会先等总令;这里没有总令,反而继续动了。”
“所以你承认分布式有效?”
“我承认它在节点失效时不至于全线停。”
“这还不够?”
“对灾民来说,也许够。对国家来说,不够。”
陆慎之蹲下,用指甲在算纸边缘划了一道。
“国家不能接受两日损失。两日会让一个孩子死,让一支军队溃,让一座城在消息传到之前失守。”
“国家也不能接受一个总仓失火后,所有地方只剩一张空令。”
“所以要快。”
“也要能活过失效。”
陆慎之抬眼:“你把速度和韧性放在两边。”
“因为它们确实有冲突。”
“不是不能同时有。”
他站起来,走到一块灰牌前。
灰牌上写着:接力县拒收,今日不接人;城外可用水三十七桶;最近可搭医棚位置在东堤;粮车不得穿过病棚。
陆慎之看了很久。
“如果这块牌上再加一栏,写谁有权把灰牌改成黄牌呢?”
“需要城内外各一名见证、病棚记录人和下一段接收人共同确认。”
“四个人。”
“至少四个人。”
“四个人要是意见不同呢?”
“按最小可行量先供,争议写进牌后,不等争议解决才给水。”
陆慎之笑了一下。
“你们把争议也纳入调度。”
“因为争议不会消失。假装没有争议,才会让下一段准备错误。”
此时,一名骑手从东堤奔来。
“第三段的水车被拦了!”
赵守田立刻问:“谁拦?”
“不是军队,是旧盐道两村的人。他们说水车要先给本村的三百二十户,外来的病棚不能取。”
陆慎之看向沈棠宁:“这就是分布式的另一种风险。节点有自己的利益,命令不能强行穿过。”
“所以要把他们的水量和义务写出来。”沈棠宁拿起灰牌,“本村先留多少、车上剩多少、病棚承担多少车脚,都要让他们知道。若村子不愿承担,标成灰牌,后队绕行,不把他们的拒绝改成暗中截留。”
“绕行会再多十里。”
“写进损耗。”
“这就是你们的效率?”
“让事实变慢,也比让错误变快好。”
陆慎之没有跟去。
他站在原地看赵守田带着两名护水人、一个村民见证和一名迁民记录人走向第三段。半个时辰后,水车没有按原路进村,而是把两桶水留给村中老人和牲畜,剩下的沿东堤绕行;村民在牌背面签下“少供两桶,另欠一车脚”,没有人因此得到一枚功勋牌,也没有人被写成阻碍救援的叛徒。
陆慎之把这件事记在算纸上。
“多花半日,多走十里,少两桶。”
沈棠宁道:“但没有拔刀。”
“没有拔刀不能算效率。”
“能让明日继续走,就算。”
天黑之前,三个节点的失效都被写进了接力总表:接力县拒收,许掌柜暂停供货,浅渠改为非饮用水;七个节点仍运行,两个节点降为黄牌,一个节点暂时灰牌。
十段路线没有恢复原状。
可病棚的水没有断,三百八十七名老人和孩子被送过第二段,五辆车绕开病区后仍按牌交接。
陆慎之把那张中央圆图折起来,又把十段接力牌放到一起。
“你们这套东西,三处失效之后仍能跑。”他说。
“不是我的东西。”沈棠宁说,“是每个节点留下的东西。”
“我愿意为它作证。”
沈棠宁没有立即接话。
陆慎之继续道:“在上京,在三司,在任何需要解释粮道为何没有交给一个总调度人的地方,我可以说明这套分布式接力如何在失效时保住最低供给。”
“条件呢?”
“我要一座不公开的国家密仓。”
风从城墙上压下来,吹动灰牌的一角。
沈棠宁看着他:“不公开给谁?”
“不公开给所有人。”
“那谁知道?”
“皇帝、总调度人、密仓守令。”
“一共三个人。”
“足够。”
“若其中一个人死了,谁补位?”
“由剩下两人指定。”
“若两人意见不同?”
陆慎之没有回答。
沈棠宁把那张灰牌压平。
“你刚刚才看见三个节点失效后,公开接力还能继续。”她说,“现在又想把最重要的一批粮,放回三个人都看不见的地方。”
“密仓不是总仓。”
“秘密权力也不需要叫总仓,才能变成总仓。”
陆慎之看着她,神色没有退。
“没有秘密储备,下一次若所有节点一起失效,你们拿什么救?”
远处,病棚的灯一盏接一盏亮起来。
十段接力牌中,最后一块被新的手写上:明日余量待复核。
沈棠宁没有拒绝替他继续算,也没有答应密仓。
她只说:“把密仓的位置、开仓条件、封存期限和失效后的替代办法写出来。秘密不是理由,能不能被纠错才是。”
陆慎之看着她,第一次没有立刻反驳。
他把中央圆图撕成两半,一半收回袖中,另一半摊在十段接力牌旁。
三处节点失效,七处仍在运行。
这不是他熟悉的效率。
却是另一种活下来的效率。