晚上十一点二十八分,周衡把旧适配器从测试链路里摘了下来。
容器没有删除,日志和配置也没有改。他先固定镜像编号、测试凭据版本和十条失败事件的队列位置,再让丁卓导出网络记录。连接成功与事件拒收必须同时留下,不能等修好以后只保留一张绿色页面。
澜桥的生产环境没有受到影响。
旧适配器用的是隔离队列和测试密钥,刻度云也只连向测试地址。现在停掉它,损失的是剩余十个多时,不是数万张真实票。
客户业务负责人又问了一次:“第二版签名能不能先在生产网关旁边试?只读,不改订单。”
“签名请求本身也会占用网关接口,还可能推进事件游标。”周衡,“兼容层没通过回放以前,不进生产。只读不等于没有副作用。”
对方没有再催开放权限,只要求每时收到一次状态。
周衡把第一条状态写得很短:旧适配器失效;生产未接入;改用最兼容方案;下一次更新时间零点三十分。
不是“正在紧急修复”,也没有写预计几分钟恢复。
周衡放弃修补旧包,直接写一个只覆盖本次试点的兼容层。旧适配器带着十几个用不上的功能,真正需要的是四个字段和可靠的确认过程。
“厂商要是明才回呢?”丁卓问。
“那我们先把能交的做出来。”
十一点四十七分,澜桥发来签名明的正式版本。
第二版在客户端标识和时间戳之外,增加了随机数、请求路径、正文摘要和一次性序号。五项内容要按固定顺序拼接,路径必须保留查询参数,网关收到请求后还会检查时间偏差与序号是否重复。
丁卓核对客户样例,周衡负责请求与确认。两个人把任务拆开,新接口的数据很快进入同一套测试流程。
零点零六分,新兼容层发出第一条请求。
网关返回签名错误。
不是版本不支持,而是摘要不一致。周衡把本地参与签名的五段内容逐项打印成不可还原密钥的校验记录,与客户示例对照。前四段一致,最后的请求路径少了一个经过编码的队列参数。
旧明只签路径主体,第二版要连排序后的查询项一起签。程序实际访问的地址正确,签名使用的却是编码前字符串。
周衡没有增加一个“签名失败就忽略查询项”的兼容开关。他把路径规范化集中到同一处,让发出的地址和参与签名的地址由一个对象生成,再补上空参数、中文队列名和参数换序三组测试。
零点二十九分,第一批十条事件进入刻度云。
来源系统、事件类型、发生时间和状态都能识别,页面终于出现数字。澜桥业务负责人发来一句“是不是可以了”,周衡只回复第一项通过,确认与失败恢复仍在测试。
丁卓故意重放同一批数据。
网关拒绝了复用的随机数,符合文档要求。换用新随机数重新拉取,刻度云保留第一次接收序号,没有生成第二组事件。兼容层收到确认后把测试游标从零推进到十,再次启动时从十一开始。
接着,他在刻度云返回确认前切断网络。
兼容层没有先向网关报成功,十条事件仍留在未确认区。网络恢复后,它用新签名重新发送;刻度云依据事件编号识别重复,返回原确认结果,网关游标这才继续推进。
这些步骤比把两千四百条一次灌进去慢得多,却是在确认重试不会把事件吞掉。
凌晨一点,按前夜排期时定下的规则,两个人交换检查。
丁卓审周衡的签名与确认逻辑,周衡审丁卓的回放脚本。交叉检查刚开始,丁卓便发现兼容层把网关时间戳直接当成上海时间。样本里前几十条都是本地时区,看不出问题;接口明却允许带偏移量,展会临时系统也可能使用统一协调时间。
如果不改,页面仍会有数据,跨时区来源的先后顺序却可能错八个时。
周衡把原始时间、偏移量和刻度云接收时间分别保存,不在适配层里提前覆盖。回放报告必须能看到客户原值,也能按统一时间排序。
一点二十二分,第一轮代码冻结。
周衡离开屏幕休息四十分钟,丁卓继续跑已有用例,但不在这段时间合并任何修改。两个人没有因为倒计时缩短,就把原定的强制休息从记录里抹掉。
一点四十七分,回放在第三百九十一条停住。
那条测试事件没有状态值。旧适配器会把空值写成“正常”,新兼容层则按最原则拒绝替客户判断,把原始事件保留在隔离区,并返回字段缺失。
澜桥技术负责人确认,网关在出票任务刚创建时确实可能没有最终状态。把它当正常会掩盖待处理订单,直接丢弃又会让时间线缺一段。
双方在工单里确定处理方式:允许状态为空,页面显示“待来源更新”,以后收到同一业务序号的新状态时新增一条记录,不覆盖最初事件。这个行为进入验收样本,不用口头答案改代码。
周衡回来后审完变更,重新跑过空值、重复状态和乱序到达。
凌晨三点十二分,两千四百条事件第一次完整进入隔离环境。总数一致,网关确认位置也到了末尾,可报告里有十七条事件顺序异常。
检查后发现,它们并非程序乱序,而是澜桥的一台模拟节点比标准时间慢了九十多秒。周衡沿用嘉禾项目已经验证过的做法,保留来源时间,另记接收顺序与时钟偏差,不为了报告整齐篡改客户原值。
三点四十分,网络中断、进程重启、重复随机数、错误签名和过期时间戳五组失败用例跑完。兼容层在任何校验不通过时都停止解析,没有一条错误事件进入正式试点记录。
还剩最后两项:由澜桥重新签发一组测试密钥,从空环境独立安装;把完整回放再跑一轮,证明成功不是依赖两个如脑里的缓存。
客户值守人员凌晨四点才能申请新密钥。第二轮完整回放加结果抽检至少需要三个时,十点以前理论上仍有时间。
但兼容层只是刚写出的第一版。按照双方清单,它还要在回放通过后保留一段稳定观察,才能允许第二的旁路联调。把所有环节压到十点前,唯一能省掉的就是观察和复核。
澜桥业务负责人提出一个折中办法:凌晨回放通过后,先把兼容层装到生产旁边,但暂时不向刻度云发送;十点开会时再打开出口。这样页面上看起来仍能按时上线。
丁卓检查后摇头。程序即使不向外发送,也会读取生产事件、维护游标并写本地缓存。它一旦装进去,安装、启动和卸载本身都已经是生产变更,不是“只放着”。更何况新版本还没在一台由客户独立准备的空机器上安装过,运行所需权限是不是最也没有复核。
周衡把拒绝写进工单,没有只在电话里不校他同时给出替代安排:原联调照常由澜桥验证自己的票务主链,刻度科技提供隔离回放结果;兼容层完成验收后,再约独立的旁路观察窗口。这样会失去十点那张刻度云页面,却不会让客户把一个临时程序当成已经核准的生产组件。
对方隔了几分钟才回复:“按隔离方案继续。延期另。”
周衡重新算完时间,没有把那两项删掉。
丁卓盯着还剩几个时的倒计时,手指停在键盘上。
“接单的时候,是我旧接口半夜能搞定。”
“是我签的合同。”周衡,“现在先让客户知道,别到十点才给他一个惊喜。”
他把已经完成的回放发给客户。新签名、重复处理和断点恢复都已经跑通,这几个时做出来的东西,足够替澜桥省下一次等原厂排期的折腾。现在该谈的是完整交付的时间,不是让自己为客户过期的附件买单。
他在交付状态后面写下新的预计时间。
按完整验收条件,交付会跨过原定时点,至少延期一。
喜欢神豪:收入按美元,消费按日元请大家收藏:(m.xaoxs.com)神豪:收入按美元,消费按日元笑傲小说更新速度最快。