All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 8m23s
46 lines
2.9 KiB
Markdown
46 lines
2.9 KiB
Markdown
## 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
|
||
|
||
1. 发布包含新迁移与服务/Worker 修复的版本。
|
||
2. 执行迁移,补齐两项 300 配置并删除 `stop_start`。
|
||
3. 服务启动同步五项配置到 Redis,并清理遗留 `stop_start` 缓存键。
|
||
4. 通过管理接口确认五项任务、中文名称和非负计数;在重置后完成一个运行中任务,确认计数不低于零。
|
||
5. 若必须回滚,先停止新版本,再执行 down migration,恢复旧版本并重新同步其配置缓存。
|