CHAPTER 048 / 100
第四十八章:企业级项目第一次提测
听这一章
微软云希 · AI 合成朗读 · 14:28
第一次提测那天,测试环境里一共亮着三块屏幕。
前端页面一块,后端日志一块,模型服务的调用记录一块。
我们几个人坐在会议室里,谁都没说什么豪言壮语。小马哥守着前端,伟源拿着测试用例,我抱着电脑盯日志,桌上还放着几杯已经快凉掉的咖啡。那场面不像项目终于做完了,更像几个人把刚组好的机器推上跑道,准备看它第一圈会掉几个零件。
按我们设计的流程,企业账号提交一批音乐生成任务,系统先校验权限和可用额度,再创建批次,把任务送进模型队列。模型返回结果以后,前端再把每一条任务的状态和生成结果展示出来。
纸面上看,一共也没几步。
真正跑起来以后,每一步都能单独给你开一张事故单。
伟源看了眼时间,语气很平。
“开始吧,先走正常流程。”
小马哥点下提交按钮。
页面上的加载图标转了起来。
一秒。
三秒。
五秒。
转到第八秒的时候,小马哥看了我一眼。
“雷子,这个圈再转两秒,我都想替它加油了。”
我没接他的损话,手已经在翻日志了。后端没有报错,权限校验过了,批次也创建了,问题出在后面那段模型调用上。为了让前端一次拿到完整结果,我们把本来应该异步处理的东西又串回了提交接口里。单条任务还看不出来,一批任务一起进来,接口就只能站在原地等模型一个个回话。
第十一秒,页面终于弹出成功提示。
还没等我们松气,伟源把页面刷新了一下。
列表里出现了两个一模一样的批次。
会议室瞬间安静。
小马哥盯着屏幕:“我刚才好像又点了一下。”
“什么叫好像?”我问。
“就是人类在面对一个转了十秒还没反应的按钮时,做出的自然行为。”
我看着那两个批次号,太阳穴已经开始跳了。
接口慢只是难用,重复提交就不只是难用了。同一批任务生成两次,会占两份资源,结果列表也会多出一套。客户不会关心你当时是网络抖了,还是手快了,他只会指着两份一模一样的结果问你:哪份算数?
伟源没跟着开玩笑,只在用例后面打了个叉。
“第一次提测不通过。”
他说得很平静。
平静得像医生把检查单递给你,顺便告诉你别急,后面还有项目。
第一轮问题很快就被拆开了。
慢,是因为提交接口承担得太多。
重复,是因为我们默认用户只会老老实实点一次。
可真实用户从来不配合默认配置。页面多转两秒,他能点三次;再多转两秒,他还能怀疑是不是鼠标坏了。
我把提交链路重新收了一遍。接口只负责校验、落库和返回批次号,模型生成放回异步队列里跑。小马哥去跟前端对状态,提交成功以后不再让页面傻等结果,而是明确显示“已提交”“排队中”“生成中”。
小璇那边也很快回了消息。
“不要只写处理中。”
“用户要知道系统接到了,也要知道还要等。”
她的两句话,把我们原本想偷懒合并的状态又拆开了。
我本来觉得都是等,写一个“处理中”也能用。后来一想,系统知道自己是在排队还是在生成,用户却只能对着三个字猜。企业端最怕这种猜,猜着猜着,信任就被加载图标转没了。
重复提交这块,我加了一层幂等锁。按企业账号和前端生成的请求编号识别同一次提交,在第一笔请求还没处理完时,后面的相同请求不再重复创建任务。
锁加上以后,我还特意把范围缩得很小。
只护住校验和落库,不跟着模型生成一起占着。
不然重复提交是拦住了,正常请求也全被堵在门口,那就不是保护现场,是把整个测试环境反锁了。
折腾完这一轮,已经过了中午。
我们连会议室都没出,随便叫了几份外卖,边吃边等重新部署。小马哥夹着一块已经凉掉的鸡排,看着发布进度说:
“第一轮就加锁,咱们这项目安全感建立得挺快啊。”
伟源抬头看他一眼。
“先别贫,等会儿上并发。”
小马哥嘴里的鸡排停了半秒。
“你们测试说这种话的时候,为什么总像反派准备放大招?”
第二轮开始以后,前半段顺得让人有点不敢相信。
提交接口不到一秒就返回了。
连续点两次,只创建了一份任务。
页面上的状态也从“已提交”切到了“排队中”,再慢慢变成“生成中”。
我看着日志一路往下滚,心里刚冒出一点“这回应该稳了”的念头,伟源就把并发量往上提了。
十个批次。
二十个批次。
更多任务同时挤进模型调用入口。
前几条还在正常返回,后面突然开始连续超时。模型服务的失败记录一条接一条冒出来,有的是响应太慢,有的是直接被限频。前端页面倒没卡死,只是列表里很快铺开一片失败状态。
小马哥看着那片红色,叹了口气。
“前门是通了,后院躺了一地。”
我盯着模型调用记录,没说话。
前面为了让接口快,我们把任务全塞进了异步队列。这个方向没错,可队列只解决了用户不用站在页面上等,不代表模型服务突然就有了无限处理能力。我们这边把压力接住,再一股脑往下游倒,等于自己没被撞倒,转身把合作方撞墙上了。
伟源在第二轮用例后面又打了个叉。
“高并发下失败率超预期,状态不可接受。”
第二次提测,还是没过。
这次我心里那口气明显沉了一截。
第一次失败还能安慰自己是边缘场景没考虑全,第二次再被打回来,就已经不能拿“第一次做企业端”给自己找台阶了。测试环境不会因为你团队刚组起来,就自动开启新手保护。
我下意识想直接给失败请求加重试。
手刚放到键盘上,又停住了。
现在下游已经扛不住,再让所有失败请求原地重来一次,只会把压力翻倍。那不叫重试,叫带着兄弟们二次冲锋,争取一起死得更整齐。
我们重新围着调用链路过了一遍。
这一次先加的不是重试,是限流。
模型调用统一从一个入口出去,控制同时执行的数量;同一个企业短时间提交太多任务,也不能把其他企业的队列全部挤掉。超过阈值的任务继续排队,不直接冲模型。小马哥负责把排队状态和前端轮询节奏重新对齐,伟源补不同并发量下的用例,我盯着模型入口把日志和指标补齐。
忙到傍晚,窗外的光一点点暗下去,会议室里的灯却一直没关。
大家说话越来越少。
不是关系变差了,是每个人的电量都快从绿色掉到红色,连互相损两句都得先评估资源够不够。
第三轮提测是在晚上九点多。
限流生效以后,并发任务没再一窝蜂撞向模型。前面的任务一批批生成,后面的老实待在队列里,页面状态也没乱。
这一次,我们看着进度跑到快结束,谁都没提前说“稳了”。
前两次已经把这种话的风险等级教得很明白了。
伟源等正常流程跑完,没急着点通过。他打开测试环境里提前准备好的异常开关,让其中一条模型请求在返回前主动超时。
那条任务停了几秒。
随后,状态直接变成了“生成失败”。
没有再试。
也没有任何补偿动作。
伟源把电脑转向我。
“模型偶发超时是正常风险。如果一次超时就让客户重新提交整批任务,这版不能提。”
我知道他说得对。
可看到第三个叉落下来的时候,我脑子还是一下堵住了。
不是有很多想法挤在一起的堵。
是什么都不想动的那种堵。
我盯着那条失败记录,手放在键盘上,半天没敲出一个字。会议室空调还在响,小马哥在旁边翻接口记录,伟源低头补测试备注,可那些声音像突然离我很远。
连续三次提测失败。
每次都不是系统彻底崩了,偏偏都是那种你修完一层,下一层才肯露出来的问题。它不一拳把你打倒,只负责每隔几个小时提醒你一次:还差得远。
我心里甚至冒出一个很熟悉的念头。
要不让他们先回去,我自己把这一块收掉算了。
这念头刚出来,我就想起前面一个人扛项目的日子,也想起我们好不容易才把角色分清。真让所有人走了,今晚也许能安静一点,可团队刚建立起来的协作方式,又会被我亲手回滚成单机版。
我把手从键盘上拿开,站起来去外面接了杯水。
回来以后,我没说“问题不大”,也没说“我来搞定”。
我只说了一句:
“先停十分钟,重新拆。”
小马哥抬头看我。
伟源也把笔放下了。
我在白板上重新写了三块。
哪些错误可以重试。
哪些错误重试也没用。
重试以后,怎么保证不多出一份结果。
超时、临时不可用这类问题,可以有限次重试;参数错误、权限错误和明确的业务拒绝,重试十次也只是在浪费大家感情。所有重试必须重新回到限流队列,不能绕过入口直接撞模型;同一条任务沿用同一个请求标识,模型就算晚回来一次,也不能把结果落两遍。
小马哥接走了状态处理,去确认“系统重试中”和最终失败在页面上怎么呈现。
伟源把超时、重复回调和重试耗尽三条场景重新排好。
我负责把重试次数、间隔和结果幂等收进后端链路里。
那一刻我才从刚才那种阻塞里慢慢退出来。
压力没少。
问题也没有因为我们重新分了工就自动消失。
但至少我没有再把整个团队锁在“只有阿雷能修”的错误逻辑里。
晚上十一点四十七分,我们开始了第四轮。
提交接口正常返回。
重复请求没有创建新批次。
并发任务按限流规则进入队列。
那条被故意制造出来的超时请求,在间隔一段时间后重新进入调用队列,第二次拿到了模型结果。页面从“系统重试中”变成“生成成功”,列表里只有一份结果。
伟源又测了一条参数错误。
系统没有傻乎乎重试,直接返回了明确的失败原因。
他来回检查了两遍,终于把测试用例合上。
“这版可以提。”
就五个字。
我听完以后,后背一下靠进椅子里,才发现自己肩膀酸得厉害。小马哥在旁边长出一口气,抬手跟我碰了下拳。
“恭喜雷总,喜提测试环境居住权。”
我笑得没什么力气。
“这只是提测通过,不是项目上线。”
“我知道。”他说,“但人总得先为活过今天庆祝一下。”
我们没真庆祝。
三个人把桌上的咖啡杯收了收,又把今天的问题补进复盘文档。提交接口不能等待模型结果,锁只能保护关键落库区间,限流要同时考虑整体容量和单个企业占用,重试必须区分错误类型,还得跟幂等和状态展示一起设计。
写到最后,我又补了一条:
提测前不能只验证功能能不能跑,还要提前验证系统在慢、重复、拥挤和失败时会怎么活。
这一天最累的地方,不是写了多少代码。
是我们第一次发现,企业级项目的压力不会等到客户出现才来。它会先躲在测试环境里,把每一个你以为“应该没事”的边缘场景都翻出来,让你提前看看自己的系统到底有几斤几两。
好在这一次,扛住它的也不再只有我一个人。
我把复盘文档发进群里,又给小璇发了句:“通过了,准备回家。”
没过几秒,手机亮了。
她发来一个笑脸表情。
“你们团队熬夜比我画设计稿还猛。”