目录 / 文档-技术白皮书 / 07-EFT.WP.Core.Threads v1.0
I. 范围与目标
- 给出限流与流量整形的统一模型,覆盖 rate_limiter、leaky_bucket、backpressure 闭环与分层配额,保障 rho < 1 approx stability 且满足 SLO。
- 定义公设 P77-*、最小方程 S77-*、运行流程 Mx-6,并与 I70-6、I70-3、I70-5、I70-8 协同。
- 在有重试与抖动时保持因果一致(hb)与可预见性,避免请求风暴与级联退化。
II. 名词与变量
- 限流器:rps(tokens/sec)、burst(最大瞬时令牌)、tokens_req(每请求消耗,默认为 1)、tau_mono(单调时钟)。
- 队列与速率:lambda(到达率)、mu(服务率)、rho = lambda / mu、q_len、W_q、cap。
- 背压信号:bp ∈ [0,1],bp = f(q_len, cap, W_q);K_thr(并发上限)。
- 窗口与抖动:SLA_window、J(抖动)、Delta_t(观测窗口)。
- 分层与域:lim_dom(tenant|service|endpoint|chan),gid,thr,prio。
III. 公设 P77(限流与闭环)
- P77-1(整形优先):入口默认“整形”(admission control)而非“事后丢弃”;只有在 rho 失稳或 deadline 逼近时才执行策略性拒绝。
- P77-2(单调计时):限流器与队列度量一律以 tau_mono 计时;审计以 ts 记录。
- P77-3(分层守恒):分层限流满足 sum(child.rps) <= parent.rps 与 sum(child.burst) <= parent.burst。
- P77-4(闭环保序):bp 的发布与消费遵循 hb;同一 chan 禁止并发更新互相覆盖。
- P77-5(稳定性护栏):在控制环内始终维持 lambda_hat <= mu * (1 - headroom),headroom ∈ (0,0.3]。
- P77-6(重试有界):重试预算受 rate_budget 限制,避免 p_retry 放大为风暴;与第5章重试策略合成。
- P77-7(优先级不反转):低 prio 流量不得通过较大 burst 突破高 prio 保留带宽。
- P77-8(观测先行):任何门限或参数变更须先以只读模式押注(shadow),确认 P99 与 ErrRate 不恶化后再切换。
IV. 最小方程 S77(令牌与稳定性)
- S77-1(令牌桶约束):任意区间 [t1,t2] 内的准入数 N_admit 满足
N_admit <= rps * ( t2 - t1 ) + burst。 - S77-2(瞬时借放):单请求准入条件为 tokens >= tokens_req;否则等待时间下界
T_wait >= ( tokens_req - tokens ) / rps。 - S77-3(整形后到达率):lambda_hat <= rps,若开启批处理 batch_size = b,则 lambda_hat_eff <= min( rps, K_thr / E[S] ),其中 E[S] 为单请求平均服务时长。
- S77-4(稳态等待时间近似):W_q approx rho / ( mu - lambda_hat )(rho < 1 条件下),用于容量粗估。
- S77-5(背压映射):设阈值 q_lo < q_hi,则
bp = clamp( ( q_len - q_lo ) / ( q_hi - q_lo ), 0, 1 );发送侧整形为 rps_new = rps_base * ( 1 - bp )。 - S77-6(分层守恒):父域在窗口 Delta_t 内的放行量 A_parent 与子域总和 A_children 满足
A_children <= A_parent + epsilon_window(统计误差 epsilon_window 来自时钟偏差与采样)。
V. 策略族与适用性
- 令牌桶(Token Bucket)
- 适用:允许受控突发、要求限峰但不强平滑的在线链路。
- 参数:rps 决定长期吞吐,burst 决定瞬时突发上限,建议 burst in [rps, 2*rps]。
- 漏桶(Leaky Bucket)
- 适用:强平滑需求(音视频、下游严格速率)。
- 近似:可由令牌桶 + 小 burst 实现,burst -> 0 时趋于常速发送。
- AIMD(加性增、乘性减)
适用:无下游显式度量,需自适应探测可用带宽;与 bp 联动,拥塞时乘性减。 - PI 控制(比例–积分)
适用:目标 q_len* 或 W_q*;以误差 e(t)=q_len - q_len* 调整 rps,避免振荡需限积分与设置回滞。
VI. 拓扑与放置
- 入口限流:lim_dom(tenant)、lim_dom(service);防止跨租户争用。
- 通道限流:lim_dom(chan);抑制局部热点,结合第3章通道 cap。
- 出口整形:下游 mu 小于上游时,以 rps <= mu * (1 - headroom) 为准。
- 分布式聚合:多副本采用分配预算 rps_i = rps_total * w_i / ∑ w,w_i 可取为副本健康度或历史吞吐。
VII. 实现要点(与 I70-6/I70-3 对齐)
- 限流器接口
- rate_limiter(name:str, rps:float, burst:int) -> LimiterRef
- limit_acquire(lim:LimiterRef, tokens:int=1, timeout:float|None=None) -> bool
- 单调时钟
令牌补给基于 tau_mono;禁止使用 ts 直接驱动以免回拨。 - 公平性
多生产者共享 LimiterRef 时采用比例公平:share_i = weight_i / ∑ weight。 - 批处理
对 tokens_req = b 的批量发送,b 不得超过 burst;建议 b <= min( burst/2, cap/4 )。 - 超时语义
limit_acquire(..., timeout=t) 失败时返回 False;调用侧进入降级或排队;与第5章 with_timeout 合成上界
W_retry <= timeout * ( retries + 1 ) + J_total。
VIII. 背压闭环与防振荡
- 信号源:q_len、W_q、throttle_ms、P99。
- 回滞设计:采用上下阈 q_hi/q_lo,只在越界时调整 rps 与 K_thr,避免频繁抖动。
- 调整顺序
- 先降 rps(整形入口);
- 再降 K_thr(并发门控);
- 再提高批量间隔或缩小 batch_size;
- 最后丢弃低 prio 请求或返回软性 429。
- 目标绑定:以 W_q* 或 P99* 为目标,PI 控制更新
rps_{t+1} = clamp( rps_t - k_p * e_t - k_i * ∑ e , rps_min, rps_max )。
IX. 分布式与一致性
- 预算分配
- 预分配(静态配额):启动时下发 rps_i, burst_i;副本失效时回收。
- 按需租赁(lease):副本周期性申请令牌租约,避免中心瓶颈。
- 近似一致
允许 epsilon_window 的统计漂移;在 SLA_window 内回归到守恒式 S77-6。 - 因果
广播新配额前记录 eid 并维护 hb;更新生效点以 tau_mono 标注,避免并发版本覆盖。
X. SLO 绑定与可观测性(与 I70-7/I70-8)
- SLI
QPS_admit, QPS_drop, W_q, P99_latency, 429_rate, bp_level。 - 预算模型
延迟预算分解:P99_total <= P99_queue + P99_service;整形目标为限制 P99_queue。 - 告警门限
- rho > 1 - headroom 持续 ≥ SLA_window/10 告警;
- 429_rate > 1% 且 bp_level > 0.5 触发限流加严与回溯分析。
XI. 合同断言与测试样例
- 合同条目(示例)
- {"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}
- 期望输出
通过/失败、最坏窗口内 N_admit、429_rate、P99 变化与 bp 时间序列。
XII. 参数化建议(经验区间)
- 在线接口:headroom in [0.1,0.2],burst in [rps, 2*rps],q_hi = 0.8*cap,q_lo = 0.5*cap。
- 事件流:rps 以下游 mu 的 0.7~0.85 设定;批量 b in [100, 1000],以 W_q 约束上限。
- 批处理:优先以 K_thr 控制并发,rps 只作入口闸门;burst 可取 0.5*cap。
XIII. 运行流程 Mx-6(上线与调优)
- 采样 mu 与 E[S],估算基线 rps_base = mu * ( 1 - headroom ),设定 burst 与 q_lo/q_hi。
- 在灰度域创建 LimiterRef(rate_limiter)并以影子模式注入,监测 P99 与 q_len。
- 启用 limit_acquire,将失败分流到降级路径或软 429;开启 bp 上报。
- 观测一个 SLA_window,按 S77-5 调整 rps/K_thr;必要时切换到 AIMD 或 PI。
- 固化配置并写入合同测试;触发 assert_thread_contract 与回归基线。
- 持续巡检 rho、429_rate、bp_level;当出现振荡,增加回滞或收紧 burst。
XIV. 接口绑定与示例(与 I70-6/I70-3)
- 配置
lim = rate_limiter(name="ingress.api", rps=1200.0, burst=1800) - 获取与背压
- 发送侧循环: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)。
- 分层
tenant.lim、service.lim、endpoint.lim 依次检验;任一失败即拒绝。
XV. 与相邻章节的协同
- 与第3章:q_len/cap/bp 的定义与通道溢出策略一致。
- 与第5章:timeout/retry/jitter 的合成上界采用 W_retry <= timeout * (retries + 1) + J_total。
- 与第6章:当 rho_* 逼近上限时按照“撤销 burst → 降 K_thr → 限流”的退化顺序执行。
XVI. 交付件与验收
- 限流与背压的参数集(rps、burst、q_lo/q_hi、headroom、K_thr)。
- 影子期观测报告(P99、W_q、rho、429_rate、bp)。
- 合同断言结果与回放脚本。
- 分层限流守恒性审计与漂移 epsilon_window 分析。
版权与许可(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/