目录文档-技术白皮书07-EFT.WP.Core.Threads v1.0

第7章 流量控制与限流


I. 范围与目标


II. 名词与变量


III. 公设 P77(限流与闭环)


IV. 最小方程 S77(令牌与稳定性)


V. 策略族与适用性

  1. 令牌桶(Token Bucket)
    • 适用:允许受控突发、要求限峰但不强平滑的在线链路。
    • 参数:rps 决定长期吞吐,burst 决定瞬时突发上限,建议 burst in [rps, 2*rps]。
  2. 漏桶(Leaky Bucket)
    • 适用:强平滑需求(音视频、下游严格速率)。
    • 近似:可由令牌桶 + 小 burst 实现,burst -> 0 时趋于常速发送。
  3. AIMD(加性增、乘性减)
    适用:无下游显式度量,需自适应探测可用带宽;与 bp 联动,拥塞时乘性减。
  4. PI 控制(比例–积分)
    适用:目标 q_len* 或 W_q*;以误差 e(t)=q_len - q_len* 调整 rps,避免振荡需限积分与设置回滞。

VI. 拓扑与放置


VII. 实现要点(与 I70-6/I70-3 对齐)

  1. 限流器接口
    • rate_limiter(name:str, rps:float, burst:int) -> LimiterRef
    • limit_acquire(lim:LimiterRef, tokens:int=1, timeout:float|None=None) -> bool
  2. 单调时钟
    令牌补给基于 tau_mono;禁止使用 ts 直接驱动以免回拨。
  3. 公平性
    多生产者共享 LimiterRef 时采用比例公平:share_i = weight_i / ∑ weight。
  4. 批处理
    对 tokens_req = b 的批量发送,b 不得超过 burst;建议 b <= min( burst/2, cap/4 )。
  5. 超时语义
    limit_acquire(..., timeout=t) 失败时返回 False;调用侧进入降级或排队;与第5章 with_timeout 合成上界
    W_retry <= timeout * ( retries + 1 ) + J_total。

VIII. 背压闭环与防振荡

  1. 信号源:q_len、W_q、throttle_ms、P99。
  2. 回滞设计:采用上下阈 q_hi/q_lo,只在越界时调整 rps 与 K_thr,避免频繁抖动。
  3. 调整顺序
    • 先降 rps(整形入口);
    • 再降 K_thr(并发门控);
    • 再提高批量间隔或缩小 batch_size;
    • 最后丢弃低 prio 请求或返回软性 429。
  4. 目标绑定:以 W_q* 或 P99* 为目标,PI 控制更新
    rps_{t+1} = clamp( rps_t - k_p * e_t - k_i * ∑ e , rps_min, rps_max )。

IX. 分布式与一致性

  1. 预算分配
    • 预分配(静态配额):启动时下发 rps_i, burst_i;副本失效时回收。
    • 按需租赁(lease):副本周期性申请令牌租约,避免中心瓶颈。
  2. 近似一致
    允许 epsilon_window 的统计漂移;在 SLA_window 内回归到守恒式 S77-6。
  3. 因果
    广播新配额前记录 eid 并维护 hb;更新生效点以 tau_mono 标注,避免并发版本覆盖。

X. SLO 绑定与可观测性(与 I70-7/I70-8)

  1. SLI
    QPS_admit, QPS_drop, W_q, P99_latency, 429_rate, bp_level。
  2. 预算模型
    延迟预算分解:P99_total <= P99_queue + P99_service;整形目标为限制 P99_queue。
  3. 告警门限
    • rho > 1 - headroom 持续 ≥ SLA_window/10 告警;
    • 429_rate > 1% 且 bp_level > 0.5 触发限流加严与回溯分析。

XI. 合同断言与测试样例

  1. 合同条目(示例)
    • {"type":"rate_envelope","rps":1000,"burst":2000}
    • {"type":"queue_bound","q_len_le":cap*0.8}
    • {"type":"stability","rho_le":1-headroom}
    • {"type":"fair_share","weights":{"A":2,"B":1},"share_tol":0.1}
    • {"type":"retry_budget","max_retries":2,"window_sec":60}
  2. 期望输出
    通过/失败、最坏窗口内 N_admit、429_rate、P99 变化与 bp 时间序列。

XII. 参数化建议(经验区间)


XIII. 运行流程 Mx-6(上线与调优)


XIV. 接口绑定与示例(与 I70-6/I70-3)

  1. 配置
    lim = rate_limiter(name="ingress.api", rps=1200.0, burst=1800)
  2. 获取与背压
    • 发送侧循环:ok = limit_acquire(lim, tokens=1, timeout=5e-3);若 !ok,则 sleep(jitter) 或降级。
    • 消费侧发布:bp = f(q_len, cap, W_q);发送侧更新 rps_new = rps_base * (1 - bp)。
  3. 分层
    tenant.lim、service.lim、endpoint.lim 依次检验;任一失败即拒绝。

XV. 与相邻章节的协同


XVI. 交付件与验收


版权与许可(CC BY 4.0)

版权声明:除另有说明外,《能量丝理论》(含文本、图表、插图、符号与公式)的著作权由作者(“屠广林”先生)享有。
许可方式:本作品采用 Creative Commons 署名 4.0 国际许可协议(CC BY 4.0)进行许可;在注明作者与来源的前提下,允许为商业或非商业目的进行复制、转载、节选、改编与再分发。
署名格式(建议):作者:“屠广林”;作品:《能量丝理论》;来源:energyfilament.org;许可证:CC BY 4.0。

首次发布: 2025-11-11|当前版本:v5.1
协议链接:https://creativecommons.org/licenses/by/4.0/