‹ 天枢—执棋者14/28 章 · 3628 字

第14章 第014章 更优架构

招标答疑会散场后的那个周末,云州赶上了下半年第一场像样的秋风。昨夜风大,楼下车棚里那排电动车的防雨帘拍打铁架拍了一整宿。周六早上林默醒来,阳台的地砖上铺了一层细碎的杨树叶子,边角还带着夜露,撚起来是凉的。夏天就这么过去了,没什么仪式感。

出租屋一室一厅,家具是房东留下的老样式,唯一称得上他自己的东西,是书桌上方那盏暖黄灯泡。灯是他挑的,瓦数不高,亮度正好只照亮桌面那一圈。在这张桌上熬了半年多,他已经把朝向调得很熟:显示器正对着墙,左侧留出键盘和茶杯的位置,右侧塞一块鼠标垫,垫子边缘卷了角,压着一支没用完的原子笔。外置硬盘接着主机,指示灯在昏暗里一明一灭,节奏很稳。

他坐下第一件事是把这几天积攒的东西理出来。手机连上电脑,导出一沓行业群截屏,按日期命名归档——包括赵总监半年前在某政企交流群里那句「这次我们走的可是总部直通车「,当时群里没人接茬,三分钟后话题滑到了中午吃什么。他截了,理由说不上来,只是多年运维养成的手感:先收着,反正不占地儿。

其次是从招标PDF里标黄的七处弹性条款。他重新过了一遍原文,逐条把页码、行号、上下文各摘两行,誊成一张对照表,编号一到七。第三份材料最厚——锐科近三年公开渠道可查的中标记录,一共十一个项目,每一个都附了公示链接和金额区间。三样东西打包,全部推进给天枢。

「跑一场长推演。「他说,「把这家公司接下来能对我出的牌,尽量穷尽。推演资源今晚不设限——平时掐着用,今天反正是周末。「指令递出去,硬盘的指示灯闪得密了起来。

他没有盯着进度发呆的习惯。转身去厨房烧了一壶水,把早上那杯彻底凉透的浓茶倒了,涮干净杯子扣在沥水架上;再回来的时候,顺手把冰箱顶上积的灰抹了一把。这些都是等推演时该干的杂事,手上有活儿,脑子反而松。

松完了,他抽出一张A4纸,趴在桌上开始画模块草图。三大块怎么拆,接口走哪条线,数据流向哪去——铅笔一道一道往下写,写到一半,后颈那阵熟悉的震颤稳定下来,推演收敛了。

左耳后上方那段结论顺着共振推送到意识前端。【四类牌。】天枢的声音不高,语气是念报表式的平,【资质口径上做文章,往「相匹配「这种软处捅;托关系压评分,走场外的路子;比武现场跟你拼硬件参数,真刀真枪;中标之后在覆核验收环节慢慢挑刺,钝刀磨人。单打组合都有可能,但概率分布并不均匀。】

林默捏着铅笔等下文。【占比最高的是三加二的组合拳——参数上正面赢你,评分面上再压一手。这个人要的不是赢,是要当众赢给你看。答疑会上他说「小公司理解不了也很正常「的时候,下巴擡了至少十度,眼角那个角度你自己记得。享受居高临下的人,不屑于躲在暗处收钱,他要全场鼓掌。】

林默点点头,铅笔尖在纸上顿出一个黑点。这个判断和他自己的观察对上了。但有一层天枢没提,他补了一句:「采购科那句「评标尺度要严「,你怎么归?「

【归入二类的辅助动作。】天枢答得不快,像是也在掂量,【也可能是三类的配套——先吓唬,让你临场缩手,缩了手,参数对拼时就少一分底气。】

「也就是说,牌未必只打一张。「【对。所以防御不能做成单点的。】

「嗯。「林默把草图翻过来,在背面写下三个词:参数、口径、关系。每个词后面画一条横线,「那就把架子搭成这样——他哪个方向出手,都占不到便宜。参数我跟他拼技术,口径我提前焊死解释空间,关系那一手,压不动一家把活儿全做扎实的乙方。他要在台面上拼,我就让他拼个痛快。「

空房间里这句话落下去,没人反驳。冰箱压缩机这时启动了,嗡的一声,响了几秒又归于平静。

动手的第一步,换底座。招标文档的技术要求里夹着一整节信创目录清单,这是明面上的硬门槛。多数乙方的做法是迁移阶段再来「适配「——先顺着熟悉的进口栈把系统写通,回头再一件一件换国产件,改到哪儿算哪儿。这个流程有个致命弱点:适配永远排在交付压力之后,最后多半演变成草草打补丁。林默反着来。国产分布式数据库和国产中间件,从第一行代码起就是底座本身,不存在二次替换这个环节。

麻烦当然有,而且都是些不起眼的小坑。国产库的分页语法跟旧栈差了半个方言层级,第一条SQL跑过去就报错,错误码指向的行列和实际问题隔了三层。隐式类型转换更阴险,几个字段静默降精度,聚合数字歪了一点二个百分点,他不排查要对半天报表才察觉苗头不对。中间件那边,连接池的心跳默认间隔跟老版本不一样,服务挂了一个连接却迟迟不报,假死拖到半小时后才集中爆发,日志里一段空白像被人用橡皮擦过。

这些坑他都踩了一遍,踩过的每一个都在代码旁边写了注释,注明现象、原因和规避写法。将来这套东西若真交出去验收,注释本身就是一份现成的施工说明。

底座跑通,接第二块:弹性扩容。招标原文写得客气——「高峰期具备横向扩展能力「。行内的通行解法就一个字:堆。采购清单上列十台八台服务器,价格带进去一算,扩容成本漂亮地撑起整个报价大头。至于真到了业务峰值的日常态,那批机器闲着吃电,没人心疼——电费是甲方的。

林默不打算堆机器。他的思路落在调度逻辑上:请求进来先分类,热点请求就近打给低延迟节点,冷请求直接沉进廉价存储。重量的分层做清楚了,同样的机器就能扛住更高的峰值——弹性不是靠添设备添出来的,是靠把轻重分明白调出来的。

第一版切片算法写成那天晚上,他跑了本地压测。结果不大好看。曲在线有一个奇怪的凹陷:每当负载越过某个量级,整体吞吐反而往下掉一小截,恢复,再掉。他把录像回放了三遍才定位到病灶——冷热边界判定用的条件太粗,按URL前缀一刀切,而真实的访问热区根本不理会URL的组织结构,同一前缀底下冷热混着住。

问题看清了,答案反而是顺藤摸出来的:判定条件从静态的前缀规则换成动态信号——他做了一个五秒滑动的窗口,实时监测QPS的变化斜率,斜率陡增的区域就地划成热区。改完重跑,那条曲线顺了下来,凹陷消失了,吞吐顺着负载爬升一路走到顶。

他在椅子上往后挪了半寸,把这两个改动各写了一行注释存盘,顺手把那个废弃的前缀方案也留在原地没删——留着,方便日后有人问起为什么不用更「直观「的路子时,拿出来对比着讲。

早年他也干过类似的事。那时把一份笨重的老方案拆成了轻量切片,合伙人听完汇报皱眉:「这玩意儿看着不够气派。「一句话否了。如今这事没人否他,他只按对错写字。

第三块,双活容灾。按传统路数,同城双活等于再建一个机房,选址勘探专线样样是大开销。林默把这条路跳了过去——政务云本身早已铺开了若干异地节点,他要做的只是在现有基础设施之上搭一层逻辑双活:数据异步双写,探活心跳,主节点一旦失联,流量在极短时间内切到备端。

这一步他做得格外仔细。先把那几个异地节点的SLA文档找出来,一行一行核过去——端到端往返延迟的承诺值、抖动上限、维护窗口的安排——逐项确认在承受范围以内,才敢把「逻辑双活「四个字写死进方案。道理不复杂:假如这一环偷懒没查透,真出了事故就是两头都不认帐的局面,锅砸在自己手里。

仿真演练在深夜跑了一次。他在本地脚本里人为掐断主节点,观察备端接管的全过程。计时器停在八十四毫秒上,切换完成的提示符弹出来,全程没有丢一条会话。他把这组数字截屏存了,标注时间,然后关掉演示进程。

最后一块,是整套架构里他最得意的地方。那条埋在招标附件里的「安全能力与等保要求相匹配「,锐科的刀柄。三个字的伸缩全凭评标桌上一句话,今天说你匹配,明天一样可以说你不匹配——除非,这三个字被人提前钉死成一个不可挪动的死数。

他写了一个合规自检模块。等保2.0的条款被他拆出来分解成一百二十八条可勾选的硬指针,从身份鉴别粒度到日志留存时限,一项一项落到字段。这套模块的使用方法极其朴素:把任何一段招标文本喂进去,它自动比对每一条硬指针,达标的亮绿,差一口气的标黄,表述模糊无法判定的直接标红,末尾附一份建议清单。

跑通的第一次测试,他喂的就是那份招标文档。屏幕上跳出比对结果的瞬间,第七条附件三那一行被人红得醒目:

【模糊表述】「相匹配「——无量化边界。建议补充:响应时限数值/覆盖范围清单/处置时效单位。

他伸手抓过来搁在手边的一个文档夹,把这页自检报告打印出来——家里那台老喷墨打出来的东西墨色偏浅,边距也不齐,但内容扎扎实实。回形针别在首页右上角,文档夹封面他写了五个字:应对件·其一。

至此四块齐活。三块主功能加一个自检模块,总体规格高出招标要求一截,全是巧劲,没有一处炫技堆料。

天枢从头看到尾,这一晚上的话说得不多,多数时候只是保持一种轻微的低频陪伴。直到最后一行注释落定,那阵震颤才明显活跃了一下,带着一点罕见的热乎劲儿:【老实说,这些东西让人递刀递出来,可惜了。你这份活儿的量级,配Lv1是屈才。】

林默指尖在桌沿轻敲了两下。他听懂了潜台词,也没回避:「Lv2的事,你我心里都记着数呢。先用现在这套。什么时候解,你说了不算,我说了也算不上——时机说了才算。「

【你这态度倒是一以贯之。】

☰目录
天枢—执棋者 第14章 第014章 更优架构 - 墨韵小说