fix: 上行分发前统一限速,send 不再单独扣桶

This commit is contained in:
Nixevol
2026-09-30 16:21:05 +08:00
parent f139b9ed9b
commit aa24e974af
7 changed files with 155 additions and 13 deletions
+12 -3
View File
@@ -428,10 +428,10 @@
2. **请求频率突发容量写死为 100**
- 原条款:DEVELOPMENT 6.10 每端每秒 50、突发 100;配置示例仅有 `requests_per_second`。
- 实际做法:`Limits.RequestBurst` 默认 100;`requests_per_second<=0` 时不限速(便于测试)。速率桶挂在 `message.App` 的 `Submit` 入口;`ack`/`receipt_ack` 不计入桶(与 6.10 一致)。
- 实际做法:`Limits.RequestBurst` 默认 100;`requests_per_second<=0` 时不限速(便于测试)。`message.App.AllowRequest` 导出同一令牌桶;`HandleUplink` 在分发前对 ack/receipt_ack 以外的帧调用。`Submit` 不再单独扣桶,避免 send 计两次。
- 原因:配置无独立 burst 字段。
- 备选方案:配置增加 `request_burst`;由连接线在上行统一限流。
- 影响:改 `requests_per_second` 不改突发;正式接线后若 N 线也限流可能双重计数。
- 备选方案:配置增加 `request_burst`。
- 影响:改 `requests_per_second` 不改突发;非 send 请求也受同一桶限制。
3. **未接线 `cmd/nixmsg`**
- 原条款:可替换 T0.4 假实现。
@@ -500,6 +500,15 @@
- 备选方案:在 group/identity 各自补写回执与收尾(继续分叉)。
- 影响:退群/解散/停用后发送方可收到 rejected 回执,配额释放,正文删除。
### 复审修复 C-05
1. **每端请求限速覆盖非 send 帧**
- 原条款:PRD F05 / DEVELOPMENT 6.10:除 ack、receipt_ack 外共用一个桶,默认每秒 50、突发 100。
- 实际做法:message 导出 `AllowRequest`;`cmd/nixmsg/uplink.go` 的 `HandleUplink` 解码后、分发前检查;超限回 `rate_limited`。去掉 `Submit` 内扣桶。不改 uplink 生命周期与 `publishResp`。
- 原因:原先只有 send 限速,unlock/status/目录/群等可打满哈希池与读库。
- 备选方案:把桶挪到 broker 层(B-09 范围)。
- 影响:开放注册后的非 send 请求也计入配额;直接调 `Submit` 的单测不再覆盖限速。
## 身份 I
### I1 2026-09-30