Target Version
3.0-dev。复核基于 origin/3.0-dev 提交 a75fc8721b99e5c0b4421d0c58b5618bbe71ff31(PR #57 )。Redis 限流故障已有本地有界兜底,但 MQ、入口与慢 WebSocket 的全链路容量边界仍缺失。
Evidence
common/utils/local_rate_limiter.hpp 已实现有容量上限的本地 token bucket;common/dao/data_redis.hpp:1594-1665 在 Redis breaker/异常时使用本地 fallback,并记录 fallback/rejected 指标。
tests/reliability/redis_failover_test.go 已验证 Redis 停止期间仍出现受控 rate limited 响应。
common/mq/rabbitmq.hpp:303-320,378 仍使用无界 std::queue<std::function<void()>>,post_task 始终入队。
Reliable publisher 仍无明确 in-flight confirm 上限;consumer 固定 prefetch=64,未与 DB pool、处理延迟或积压联动。
transmite/source/transmite_server.h 只有用户/会话限流,没有基于 MQ/DB/Push 饱和度的 admission control。
push/source/push_server.h:721 后的 _local_send 没有每连接待发送消息/字节预算和慢客户端隔离契约。
Problem or Goal
让过载以有界队列、明确拒绝和可恢复退避表现,保护已承诺工作,避免内存增长、尾延迟雪崩、连接池耗尽和级联故障。PR #57 已完成 Redis 限流故障兜底,本 Issue 聚焦跨阶段容量边界。
Scope
为 Gateway/Transmite admission、MQ task/in-flight、consumer work、Outbox dispatch 和 Push per-connection 队列设置硬上限与高低水位。
定义 overload 信号传播、稳定错误码、Retry-After/jitter 与恢复 hysteresis。
隔离慢 WebSocket 与热点 conversation。
将 prefetch、DB/Redis pool、batch 与实例容量建立可校验预算。
暴露 depth、in-flight、shed、timeout、slow consumer 与恢复指标。
保留并回归 PR feat(cache): harden Redis resilience and multilevel caching #57 的本地限流 fallback,不重复实现 Redis breaker。
Non-goals
不修改消息持久化、DLX 或 Outbox 可靠性语义。
不依赖无限扩容代替容量边界。
不把所有通知提升为相同优先级。
不重做 Redis 熔断和本地 token bucket。
Acceptance Criteria
Test-first Plan
先增加 BenchmarkMessagePipelineOverload 和慢连接 Scenario,运行:
cd tests && go test -tags=perf ./perf/... -run '^$' -bench BenchmarkMessagePipelineOverload -benchmem -count=1 -benchtime=30s
预期 RED 是 MQ task/in-flight 或 Push 慢连接状态无上限,内存/延迟持续增长且无受控拒绝。最小 GREEN 先覆盖入口、publisher 与 per-connection 三个关键边界;随后运行 RL-Redis fallback、正确性 Scenario、完整 Performance 与 BVT。
Risk and Security
上限过紧降低可用吞吐,过松无法保护资源,必须用 #76 容量基线校准。热点会话和慢连接可被用于 DoS;隔离状态本身也需有界,错误响应不得泄露内部容量细节。
Architecture Impact
Yes。新增跨 Gateway、Transmite、MQ、Message 与 Push 的 overload/admission contract,不改变业务所有权。
Core-flow Impact
Yes。改变请求接受、发布排队、消费并发、慢客户端处理和过载恢复。
Required Skill Updates
更新 technology stack,登记容量配置与 overload 信号。
更新 repository map,登记各阶段预算和配置所有权。
更新 core flows,补充 admission、shed、已承诺工作保护和恢复。
更新 testing case catalog,登记 Performance/Reliability 过载用例。
更新运维容量调优、告警、扩容和回滚文档。
Target Version
3.0-dev。复核基于
origin/3.0-dev提交a75fc8721b99e5c0b4421d0c58b5618bbe71ff31(PR #57)。Redis 限流故障已有本地有界兜底,但 MQ、入口与慢 WebSocket 的全链路容量边界仍缺失。Evidence
common/utils/local_rate_limiter.hpp已实现有容量上限的本地 token bucket;common/dao/data_redis.hpp:1594-1665在 Redis breaker/异常时使用本地 fallback,并记录 fallback/rejected 指标。tests/reliability/redis_failover_test.go已验证 Redis 停止期间仍出现受控 rate limited 响应。common/mq/rabbitmq.hpp:303-320,378仍使用无界std::queue<std::function<void()>>,post_task始终入队。transmite/source/transmite_server.h只有用户/会话限流,没有基于 MQ/DB/Push 饱和度的 admission control。push/source/push_server.h:721后的_local_send没有每连接待发送消息/字节预算和慢客户端隔离契约。Problem or Goal
让过载以有界队列、明确拒绝和可恢复退避表现,保护已承诺工作,避免内存增长、尾延迟雪崩、连接池耗尽和级联故障。PR #57 已完成 Redis 限流故障兜底,本 Issue 聚焦跨阶段容量边界。
Scope
Non-goals
Acceptance Criteria
Test-first Plan
先增加
BenchmarkMessagePipelineOverload和慢连接 Scenario,运行:cd tests && go test -tags=perf ./perf/... -run '^$' -bench BenchmarkMessagePipelineOverload -benchmem -count=1 -benchtime=30s预期 RED 是 MQ task/in-flight 或 Push 慢连接状态无上限,内存/延迟持续增长且无受控拒绝。最小 GREEN 先覆盖入口、publisher 与 per-connection 三个关键边界;随后运行 RL-Redis fallback、正确性 Scenario、完整 Performance 与 BVT。
Risk and Security
上限过紧降低可用吞吐,过松无法保护资源,必须用 #76 容量基线校准。热点会话和慢连接可被用于 DoS;隔离状态本身也需有界,错误响应不得泄露内部容量细节。
Architecture Impact
Yes。新增跨 Gateway、Transmite、MQ、Message 与 Push 的 overload/admission contract,不改变业务所有权。
Core-flow Impact
Yes。改变请求接受、发布排队、消费并发、慢客户端处理和过载恢复。
Required Skill Updates