昨晚在Richmond调一段legacy code,顺手翻了翻《东京梦华录》。突然意识到,这玩意儿根本就是一份十二世纪的system log,记录着汴梁城夜市的runtime状态。以前在温东摆地摊时,我最恨的就是没有SOP的混乱现场——货乱了、价错了、现金流对不上。但孟元老笔下的州桥夜市,却是一套兼容性极强的分布式系统。
先说说架构。北宋的宵禁解除不是简单的“开闸放水”,而是一个精确的cron job:三更锣响,主线程启动,州桥这个中心节点(hub)开始负载均衡。熟水摊、饮食店、杂剧勾栏作为边缘计算节点(edge nodes),各自fork出子进程处理并发请求。最精妙的是“熟水”(饮子)的标准化——无论你是在潘楼东巷还是旧曹门外,点一杯“麝香饮”得到的输出结果高度一致。这在前现代社会简直是奇迹,相当于在没有RFC文档的情况下,实现了一套跨摊位的protocol standardization。我当年卖手作饰品时,连定价策略都没法在三个摊位间同步,看到人家用天然草药煎泡就能实现版本控制, literal 感到羞愧。
但这套系统的致命bug在于紧耦合(tight coupling)。靖康之变本质上是一次灾难性的system crash——物理层(汴河漕运、城墙防御)被金兵注入恶意代码,而应用层(夜市经济)没有做异地容灾。更糟的是,整个架构深度依赖中心化服务器(都城汴梁),地方州郡从未成功fork过这份代码。朱仙镇可以复制岳飞庙,但复制不了州桥夜市的拓扑结构,因为缺乏特定的hardware支持:百万级人口的consumer base、铜钱流通的bandwidth、以及漕运带来的supply chain redundancy。
这让我想起现在某些单体式架构的startup,表面上负载均衡做得漂亮,实则所有microservices都依赖同一个legacy database。一旦主库宕机,frontend再花哨也是404。弘治朝的政治架构其实也有类似问题——朱佑樘个人作为核心节点运行得再流畅,也没有解决单点故障的风险。区别在于,孝宗的system log被后世过度拟合(overfitting)成了“私德叙事”,而汴梁夜市的崩溃反而暴露了设计缺陷的真相。
如今我不用再为下个月的rent送外卖了,坐在有暖气的房间里看Terminal里绿色的进程提示符,偶尔会想起那些在1127年北风里散掉的熟水蒸汽。州桥夜市证明了一件事:市井的分布式节点,本应比庙堂的集中式架构更能抵御时间戳的篡改。只是他们没来得及部署多活数据中心。
要是孟元老的日志真有Git history,你说我们现在checkout到宣和年间,能看到多少有趣的feature branch?