All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 8m23s
2.9 KiB
2.9 KiB
Context
现有配置表保存短任务类型,Worker 使用 polling:<type> 作为当前计数键;配置缓存仍使用短类型。当前数据缺少两个已运行的任务、保留一个无执行器任务,且管理服务的展示名称匹配了错误的完整任务类型。详见 proposal.md 与轮询运营 delta spec。
Goals / Non-Goals
Goals:
- 让数据库配置、Redis 缓存与五个 Worker 任务类型保持一致。
- 保持
protect与card_status当前回退生效的 300 上限不变。 - 在共享释放点消除负信号量。
Non-Goals:
- 不调整既有
realname、carddata、package的最大并发数。 - 不依据资产数量自动计算或提高并发,也不更改队列、Worker 数量或第三方请求策略。
- 不修改历史迁移。
Decisions
以数据迁移校正配置集合
新增成对迁移使用幂等插入补齐 protect、card_status,初始值均为 300;删除 stop_start。300 是两类任务当前 Redis 配置缺失时 Worker 已采用的回退值,迁移后可观测、可维护而不改变即时压力。回滚恢复遗留 stop_start 的默认记录并移除两项新增记录。
备选方案是把两项直接设为 5000;这会把实际请求上限从当前回退值提高,超出本次配置一致性修复范围。
以短任务类型作为管理面唯一标识
管理配置表、路由参数与 Redis 配置缓存继续使用短类型;仅当前占用计数键在服务内部转换为完整任务类型。名称映射按短类型覆盖全部五项,避免接口将内部键回显给运营者。
释放脚本钳制最小值
共享 releaseConcurrency 改用 Lua 原子操作:仅当当前值大于零时递减,否则将计数保持或归零。这样重置、TTL 到期与重复释放均不会产生负数,且不需在每个 Handler 添加分支。
移除无效上限校验
最大并发仍必须为正整数,移除与已有 5000 配置冲突的 1000 上限。数据库的整数类型继续承担存储边界;本变更不引入新的容量策略。
Risks / Trade-offs
- [回滚无法保留历史
stop_start的人工修改值] → 该任务没有执行器,回滚仅恢复默认遗留记录;上线前记录现有值。 - [Redis 中可能残留
stop_start缓存键] → 部署初始化仅同步有效数据库配置;实施时显式删除该遗留缓存键。 - [释放与获取并发] → 释放脚本是单键原子操作,不改变获取脚本或任务重入队语义。
Migration Plan
- 发布包含新迁移与服务/Worker 修复的版本。
- 执行迁移,补齐两项 300 配置并删除
stop_start。 - 服务启动同步五项配置到 Redis,并清理遗留
stop_start缓存键。 - 通过管理接口确认五项任务、中文名称和非负计数;在重置后完成一个运行中任务,确认计数不低于零。
- 若必须回滚,先停止新版本,再执行 down migration,恢复旧版本并重新同步其配置缓存。