Files
break f6b11eb9ac
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 8m23s
修复
2026-08-10 17:37:55 +08:00

46 lines
2.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## 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恢复旧版本并重新同步其配置缓存。