Files
junhong_cmp_fiber/openspec/specs/polling-load-control/spec.md
break 370fd3e67f
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 10m49s
update
2026-09-03 09:28:28 +08:00

50 lines
3.1 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.
# 轮询负载控制当前行为
## Purpose
使高频卡轮询在多 Worker、重启积压和渠道延迟场景下保持受控吞吐避免正常无变化观测将数据库写入量放大为不可接受的 I/O 负载。
## Requirements
### Requirement: 轮询全局并发与背压
系统 SHALL 同时对全部轮询任务以及每一种轮询任务应用跨 Worker 实例共享的全局并发上限。达到任一上限的任务 MUST 不调用外部渠道、不创建审计或外部交互记录,并按既有调度语义延后执行。配置的上限 MUST 受安全范围约束,不能以零、负数或不受约束的大值绕过背压。
#### Scenario: 多 Worker 达到同类轮询上限
- **GIVEN** 多个 Worker 正在执行同一种轮询,且该任务的全局并发已达到配置上限
- **WHEN** 又一个该类型轮询任务开始处理
- **THEN** 系统不发起外部调用、不写入 PostgreSQL 观测记录,并将任务延后处理
#### Scenario: 达到全部轮询任务总上限
- **GIVEN** 不同种类的轮询任务合计已达到全局总并发上限
- **WHEN** 任意一种新的轮询任务开始处理
- **THEN** 系统不发起外部调用、不写入 PostgreSQL 观测记录,并将任务延后处理
#### Scenario: 轮询上限配置非法
- **WHEN** 维护者提交超出允许范围或非正数的轮询并发上限
- **THEN** 系统拒绝该配置并保留原有有效上限
### Requirement: 正常无变化观测的低写入处理
系统 SHALL 将“渠道调用成功且未产生业务事实变化”的轮询视为短期运行观测,而非持久化审计事实。该结果 MUST 不创建逐次 Audit Event、Audit Event Resource 或 Integration Log系统仍 MUST 维护下一次调度所需状态,并可保留短期去重或聚合指标。
#### Scenario: 网络状态轮询无变化
- **GIVEN** 一张卡的网络状态轮询成功,且规范化后的状态与当前业务事实一致
- **WHEN** 系统应用该轮询结果
- **THEN** 系统不新增审计事件、审计资源或外部交互日志,并按配置继续后续轮询
#### Scenario: 流量读数无有效增量
- **GIVEN** 一张卡的流量轮询成功,且读数未形成有效流量增量或跨周期业务变化
- **WHEN** 系统应用该轮询结果
- **THEN** 系统不新增审计事件、审计资源或外部交互日志,并保留后续调度能力
### Requirement: 业务变化与轮询异常仍可追溯
系统 SHALL 在轮询产生网络、实名、套餐或有效流量等业务事实变化时持久化必要的业务事实与审计记录。外部调用失败、响应无效或结果未知时,系统 MUST 保留可调查的失败或恢复信息,且不得把失败静默降级为正常无变化观测。
#### Scenario: 轮询产生网络状态变化
- **GIVEN** 渠道返回的网络状态与当前业务事实不同
- **WHEN** 系统成功应用该状态变化
- **THEN** 系统持久化业务状态变化及相应审计事实
#### Scenario: 轮询渠道调用失败
- **WHEN** 轮询调用渠道超时、失败或返回无效响应
- **THEN** 系统保留可调查的失败或恢复信息,并按既有策略安排后续处理