2026 年 10 月 15 日,讯果 v5.1.0 正式把礼品卡余额查询的单批上限从 3,500 张提升到 6,000 张。在标准测试机上,6,000 张卡从导入到出结果用时 4 分 52 秒,峰值每小时完成 138,240 次余额查询,任务排队等待下降 41%,而客户端的内存与 CPU 占用反而比上一版本低 31%。

余额查询是讯果使用频率最高的功能,占比约 68%。批发商通常在一次入库后集中查询整批卡片,过去受单批上限限制,只能拆成两到三个任务分别执行,再手工合并报表。技术团队在 8 月的用户访谈中统计到,平均每位批发商每天要额外花 22 分钟做拆分与合并,这部分重复劳动成为本次扩容的主要目标。

640 线程如何排班:队列、分片与回压

调度内核把一次 6,000 张的任务拆成 30 个分片,每片 200 张,分片进入同一个无锁队列。640 个线程以“取片—执行—回写”的循环工作,单片的 200 张里如果有部分返回慢,线程会先把已完成的写回结果,再处理下一个分片,不会因为一张卡卡住整片。

为了避免瞬间把出口打满,内核加入了两级回压:当某条线路的失败率连续 30 秒超过 3%,该线路的取片权重自动减半;当队列积压超过 8,000 张,导入端会暂停接收新任务并提示等待。技术负责人何嘉解释:“吞吐不是把线程数调大就行,真正决定速度的是队列是否顺畅。我们把 640 线程当成 640 个工位,工位之间的传递成本必须接近零。”

实测数据显示,6,000 张任务的前 200 张平均耗时 0.71 秒,进入稳定期后降到 0.58 秒,最后 200 张因为收尾校验略回升到 0.64 秒。整批的耗时曲线比旧版本平缓得多,旧版本在 3,000 张之后会出现明显的速度下滑,主要原因是结果集变大后每次回写都要重排内存索引,新版本改为追加写入加异步索引,这个瓶颈随之消失。

讯果礼品卡余额查询任务调度的代码实现
分片队列与两级回压逻辑,避免大批量任务把出口打满

压测数据:4 分 52 秒与 138,240 次每小时

本次压测使用一台 8 核 16GB 的办公主机与一台 4 核 8GB 的轻薄本,各跑 5 轮 6,000 张任务。办公主机的中位耗时 4 分 52 秒,最快 4 分 41 秒,最慢 5 分 08 秒;轻薄本中位耗时 6 分 26 秒,最慢 7 分 02 秒,整个过程没有出现客户端假死。按办公主机的成绩折算,每小时可完成 138,240 次查询,比旧版本的 96,000 次提升 44%。

资源占用方面,办公主机在峰值时 CPU 占用 62%、内存 1.9GB,旧版本同规模任务分别为 78% 与 2.8GB。轻薄本的峰值内存为 1.4GB,风扇噪音明显低于旧版。测试组还记录了磁盘写入量:6,000 张任务共写入 41MB,平均每张 7KB,比旧版减少 38%,这得益于结果表结构的精简。

稳定性上,5 轮压测中有 1 轮遇到线路抖动,13 张卡返回超时后自动进入重试队列,第二轮全部成功,最终 6,000 张全部有明确结果。何嘉在评审时给出一组对比:“旧版遇到同样情况会整批暂停等人工确认,新版把这 13 张隔离出来,其余 5,987 张照常出结果。对赶着入库的团队来说,这个差别比快几十秒更重要。”

低配机器与夜间定时任务

扩容并没有以提高硬件门槛为代价。客户端新增了“性能模式”开关,默认按机器核数自动分配线程:4 核以下建议 320 线程,6 核建议 480 线程,8 核及以上才开放 640 线程。用户在设置页可以看到当前线程的实际利用率,如果长期低于 60%,系统会提示下调线程数,减少无谓的上下文切换。

对于习惯夜间跑量的团队,定时任务现在支持把 6,000 张的大批次自动切成两个 3,000 张的子任务,中间间隔 90 秒,避免与白天遗留的报表导出撞在一起。产品运营沈璐在客户回访中记录了一位回收商的用法:他把每天的收卡清单设为 23:30 自动执行,第二天早上 7 点直接看汇总表,三个月里只有两天因为网络维护延后了 20 分钟。

v5.1.0 已向全部授权用户推送,标准版单批上限为 3,000 张,专业版与团队版开放 6,000 张。升级后旧任务模板会自动套用新的分片策略,无需重建。需要评估实际吞吐的团队,可以在下载页获取客户端,用一批 1,000 张左右的真实数据先跑一轮,再决定是否调整套餐。