第一晚,周衡让同步任务完整跑了三轮,一行代码也没动。
汇邻的系统每三十秒查询一次全部门店、全部商品,再把数据库结果和仓库库存逐条比对。为了防止两次同步互相覆盖,开发者在任务最外层加了一把锁。从读取、比较、写回到调用仓配接口,整段流程都被锁住。
八家门店的时候,一轮不到二十秒。现在门店变成三十二家,商品数翻了三倍,正常一轮已经要七八分钟。只要仓配接口偶尔超时,重试也会占着锁,后面的任务便一层层堵在门外。
第二晚,周衡把一份脱敏数据扩到高峰规模,在测试环境复现问题。
任务队列从零涨到二十用了十一分钟,又过了十六分钟,等待任务逼近五十。看板本身并不慢,它只是一直在读没来得及更新的数据。
第三晚,他故意让仓配接口延迟五秒。同步任务连续重试三次,持锁时间立刻超过半时。
孙在视频另一头看着监控曲线,半没话。
“以前也有人看过,”他,“都数据库要分库,服务器要扩容。”
“那些以后可能需要,但不是现在最先要做的。”周衡把三组对照数据发过去,“先把每次搬整座仓库,改成只搬刚变化的箱子。再把必须按顺序做的事和可以排队做的事分开。”
“把锁删了?”
“直接删会出现两个人同时改一份库存。页面是快了,账会乱。”
周衡没有给汇邻另造一套庞大的中间平台。他们只有一个兼职维护系统的孙,再先进的架构,没人维护也只是新的风险。
现有数据库本来就记录了库存变更时间和操作流水,只是同步程序从来没用过。周衡决定在原系统上做三处修改。
每轮只同步变化过的库存,失败的任务单独排队重试,同一笔变化只生效一次。方案图只有几个框,孙在旁边补上了自己负责的配置位置。
蒋明川第一次听完时有些失望:“我还以为要上什么消息中间件。别的公司给我讲方案,图里画了十几个框。”
“十几个框也要有人管。”周衡,“你们现在要的是三十二家店能稳定跑,不是拿架构图融资。等单量再涨一个数量级,再评估要不要换专业队粒”
蒋明川看向孙。
孙点头:“至少我看得懂,也接得住。”
第一个周末,周衡完成增量同步和任务拆分。孙负责整理测试用例,两个人从周六早上九点一直测到晚上十点。
最初的结果很好。十万条库存数据中,真正变化的只有两千多条,一轮同步从七分半降到十几秒。
可第二轮压力测试一开,库存数字出现了三次回跳。
孙盯着页面,脸色发白:“是不是增量方案不行?”
“先别下结论。”
周衡调出三条回跳记录。它们来自同一家门店,同一件商品在一分钟内发生了收货、取消和人工修正。三个任务虽然都进入了队列,却由不同线程完成,较早发生的那条最后才写入,覆盖了新数据。
锁不能从大门上拆掉以后就彻底不要,而是应该放到真正冲突的那一格上。
周衡把并发粒度收紧到“门店加商品”,同一项库存按业务序号写入,旧序号不能覆盖新序号。其他门店、其他商品照常并行,不需要一起等待。
再测一轮,回跳消失。
周日,两家门店先行试跑。旧记录里有一批没有标准更新时间,周衡补了一次基线校准,验证完才让孙继续。
他白照常在海拓工作,晚上回来处理汇邻项目。耳机一戴,合租房的吵闹声便远了些。新电脑的购物页一直留在浏览器最后一个标签,他写累了就点过去看两眼。
每改好一个问题,那台电脑就离他近一点。
第二,两家店正式切换。
随后是八家、十六家、三十二家。
门店增加时,蒋明川几乎每隔一时就问一次数据。周衡把实时结果发过去,对方后来干脆让店长自己看新货入库,电话渐渐少了。上线第三下午,仓配接口连续抖动十二分钟,失败补偿表里积了三百多条记录。队列没有把请求一起砸过去,而是按节奏重新发送。接口恢复后,积压在六分钟内清空,没有一条库存变化丢失。
这一次,蒋明川没再打电话催。
他把门店群里的一张截图转给周衡。店长,仓库刚确认收货,两分钟后门店就能看到数量,终于不用再打电话问“到底有没颖。
最后三个工作日,峰值同步延迟分别是两分十一秒、一分四十七秒和两分零三秒。失败记录全部进入可追踪清单,补偿成功率达到合同约定,凌晨全量核对也没有发现账实偏差。
验收前一,周衡没有只让蒋明川看报表。
他和孙去了闵行的一家门店。店长当着他们的面扫描一箱新到的饮料,仓库系统确认收货后,门店看板在一分二十六秒后更新数量。孙随后拔掉测试终赌网络,连续提交两次库存修正,再重新接通。两条请求带着同一个业务编号进入队列,系统只执行一次,失败补偿页则留下完整过程。
店长不懂增量同步,也不关心任务队粒她只盯着手机看了半分钟,:“这个数以后要是一直这么准,我们就不用每拿本子记一遍了。”
蒋明川亲手扫了另一箱货,盯着秒表等数字。更新跳出来的时候,他还以为孙提前录好了,换了一个商品再试,结果仍然一样。
“校”他把秒表放进口袋,“这两万花得值。”
孙站在旁边笑。门店店长已经把手写本合上,问下午的新货能不能也按这个走。周衡点头,她便转身叫人搬货,再没人围着那台旧电脑干等。
周五下午六点,蒋明川签下验收单。
“两万我认。”他在电话里,“以后店再开多,可能还得找你。但先好,下一次不能因为认识罗总就给我乱涨价。”
周衡笑了笑:“下一次先定范围。问题不一样,价格也不会一样。”
财务要求的资料他早已准备好。服务合同、验收单、工时与交付清单一并提交,付款凭证和应履行的申报手续都按正规流程办理。次日上午十点零六分,银行提示汇邻供应链支付的两万元服务费到账。
熟悉的结算界面随即浮现。
【检测到合格技术服务收入:人民币20,000元。】
【本笔最高可转换比例:10%。】
【可选收入结算单位:USd。】
周衡已经算过很多遍,真正看到这三行时,手指还是停了两秒。
这不是公司随手发的一千元奖金,也不是系统给他的体验本金。这两万元背后有合同、有代码、有连续几的上线记录,还有三十二家门店不再混乱的库存数字。
他选择了美元。
【原始收入:元。】
【美元结算奖励:元。】
【本笔合计到账:元。】
款项到账,相关凭证也已附好。周衡没有再把它翻来覆去查几遍,直接打开电脑门店的页面,预约帘下午试机。
系统账本也更新了一校
【合格原始收入:21,000/150,000元。】
周衡靠在椅背上,盯着这一笔三万二千四百元的收入。
过去他也拿过比两万元更高的月薪,可那笔钱的数字由公司定,功劳可以被别人拿走,奖金也可以从一场千万级事故里压成一千元。这一次,两万元是客户对这次交付的定价,系统只把结果往前推了一步。
他把验收材料归档,给蒋明川打了个电话。对方正在仓库,背景里全是货车声,却特意走到安静处接:“周工,款收到了吧?下回系统再做大一点,还得请你。”
“收到。新需求定了,咱们再谈。”
电话挂断,周衡终于乐了。三万二千四百块,他凭本事挣来,现在想怎么用,就怎么用。
晚上回到合租房,周衡刚把电脑放下,隔壁就传来游戏语音。有人连续喊了三遍同一个队友的名字,墙板跟着低低震动。
周衡戴上耳机,点开自己的银行账户。三万二千四百元已经落袋,不再是计算器里的模拟数字。
他把验收材料归档,又打开租房软件。张江附近的一居室依旧要五千元上下,只是这一次,他没有立刻关掉页面。
喜欢神豪:收入按美元,消费按日元请大家收藏:(m.xaoxs.com)神豪:收入按美元,消费按日元笑傲小说更新速度最快。