目录 / 文档-技术白皮书 / 07-EFT.WP.Core.Threads v1.0
I. 范围与目标
- 建立统一的可观测性与 SLO 规范,覆盖 metric_emit、trace_span、trace_link、结构化日志与告警闸门,服务于并发执行图 G=(V,E) 的性能与可靠性评估。
- 定义公设 P78-*、最小方程 S78-*、运行流程 Mx-7,与 I70-7、I70-8 直接对齐,并与第3/5/7章的 chan/bp、timeout/retry、rate_limiter 协同。
- 将 SLO 映射到误差预算与回滚闸门,要求在 SLA_window 内确保 rho < 1 approx stability、P99 与 ErrRate 达标。
II. 名词与度量族
- 指标家族:SLI(service level indicator),SLO(target),SLA_window(评估窗口),EB(error budget)。
- 事件标识:eid、pid_thr、gid、chan、idemp_key;时钟 tau_mono(运行度量)、ts(审计)。
- 主要 SLI 维度
- 可用性:SLI_avail = Good / Total。
- 时延:P50/P90/P99、W、W_q、W_service。
- 质量/错误:ErrRate = 1 - SLI_avail;语义成功率 SemOK/Total。
- 吞吐与饱和:QPS、q_len、cap、bp、rho = lambda / mu。
III. 公设 P78(仪表、标签与时间)
- P78-1(单调计时):延迟、分位数、队列与限流一律以 tau_mono 统计;对外报表与审计使用 ts 记录。
- P78-2(标签控度):指标标签集限制为 {gid, pid_thr, chan, endpoint, prio};禁止高基数自由文本;日志携带 eid 且可回链 trace_span。
- P78-3(直方图一致):延迟直方图桶边界固定,升级不破坏可比性;Pxx 统一由同一桶族计算。
- P78-4(Good 定义前置):Good 必显式声明语义成功条件(如 2xx and sem_ok and hb respected and no dedup_fail)。
- P78-5(分层守恒):聚合指标满足 sum(child) <= parent + epsilon_window;窗口差由采样与时钟漂移 epsilon_window 覆盖。
- P78-6(因果保序):跨线程/通道的指标与 trace 通过 trace_link(span, eid) 建立 hb;禁止并发覆盖同一 eid 的最终状态。
- P78-7(最少惊扰):观测系统自身的资源上限纳入 R_cpu/R_mem/R_io,指标采样率与日志采样率受配额控制,避免观测反压。
IV. 最小方程 S78(SLO 与预算)
- S78-1(可用性 SLI):SLI_avail = Good / Total,其中 Good 由 P78-4 定义。
- S78-2(延迟 SLI):设目标阈值 L_obj,SLI_lat = count( latency <= L_obj ) / Total。
- S78-3(错误预算):SLO = 1 - e_target,EB = e_target;观测误差率 e_obs = 1 - SLI_avail。
- S78-4(预算消耗与燃尽率):Burn = e_obs / EB;Burn_rate = ( e_obs / window ) / ( EB / SLA_window )。
- S78-5(多窗口保护):短窗 w1 与长窗 w2 同时满足 Burn_rate(w1) < b1 且 Burn_rate(w2) < b2 才允许放量或发布。
- S78-6(路径可用性近似):对关键路径 crit(G),独立近似下 A_path approx ∏ A_i (i in crit(G))。
- S78-7(分流加权):按流量类 k 权重 w_k 聚合 SLI* = ∑ w_k * SLI*_k,∑ w_k = 1。
V. 指标设计(度量命名与示例)
- 计数器
- threads.qps{endpoint,prio},threads.req_total{...},threads.good_total{...}。
- chan.admit_total{chan},chan.drop_total{chan,reason}。
- 直方图
- threads.latency_ms_bucket{endpoint}(固定桶),由其导出 P50/P90/P99。
- chan.wait_ms_bucket{chan}(排队等待)。
- 量表
chan.q_len{chan},bp.level{chan},lim.tokens{lim},rho{service}。 - 质量
threads.err_total{code,reason},sem.ok_total{rule}。
VI. 追踪与关联(与 I70-7)
- 基本做法
- 为每个请求创建根 span:span = trace_span("req", attrs={gid,pid_thr,endpoint})。
- 线程切换或通道传递时 trace_link(span, eid);ACK 时记 attrs={"ack":true}。
- 关键事件
入队:eid_in;出队:eid_out;重试:eid_retry(带 attempt);幂等命中:idemp_key。 - 采样策略
基线采样率 p_sample;若 latency > L_obj 或 error,则强制保留;对第7章限流被拒的请求采样提升。
VII. 日志(结构化与隐私)
- 结构化格式:{"ts":ts,"eid":eid,"gid":gid,"pid_thr":pid_thr,"event":"...","fields":{...}}。
- 红线字段通过《Core.DataSpec》之 mask_fields 与 anonymize 实施;日志内禁止原始敏感标识。
- 采样与保留:按 SLA_window 与审计等级设定留存;高频噪声事件使用抖动采样。
VIII. 告警与回滚闸门
- 多窗口燃尽
- 建议阈值:b1 in [2,6](短窗高灵敏),b2 in [1,2](长窗稳健)。
- 触发条件:Burn_rate(w1) >= b1 或 Burn_rate(w2) >= b2。
- 延迟门限
P99 > L_obj*(1+alpha) 持续 >= w1/2 触发限流加严与降级;alpha in [0.1,0.3]。 - 升级顺序
降 rps(第7章) → 降 K_thr(第6章) → 启用 fallback → 回滚发布 → 进入变更冻结。 - 复位条件
连续 w2 内 Burn_rate(w2) < 0.5 且 P99 <= L_obj,方可解除加严。
IX. 合同断言模板(与 I70-8)
- 可用性合同
{"type":"slo_avail","target":0.999,"window":"30d"} - 延迟合同
{"type":"slo_latency","threshold_ms":200,"quantile":0.99,"window":"7d"} - 预算燃尽
{"type":"burn_guard","w1":"5m","w2":"1h","b1":4.0,"b2":1.5} - 通道稳定
{"type":"queue_bound","chan":"ingress","q_hi_frac":0.8}
X. 与执行图的结合(第2章对齐)
- 节点级 SLI:对每个 v ∈ V 暴露 w(v) 采样与 P99(v);边 e 暴露传输延时 c(e) 与重试率。
- 关键路径报表:T_make(G) approx ∑(P50(w) on crit(G)) + ∑(P50(c) on crit(G));额外输出 P90/P99 以评估尾部风险。
- 路径可用性:以 S78-6 估算 A_path 并与目标对比。
XI. SLO 参数建议(基线区间)
- 在线接口
SLO_avail in [0.999, 0.9999],L_obj in [150ms, 300ms],SLA_window in {"7d","30d"}。 - 事件流
SLO_avail in [0.995, 0.999],批量确认时以 W_q 为侧目标:P99(W_q) <= 1s。 - 批处理
以成批完成率为主:SLI_batch = succeeded_jobs / total_jobs,并设置 deadline 达标率目标。
XII. 运行流程 Mx-7(上线与治理)
- 明确 Good 定义与 L_obj/SLO,固化到合同与代码注释。
- 部署直方图与计数器,校验标签集与桶边界,启用 trace_span 与 trace_link。
- 建立多窗口燃尽守护:w1、w2 与 b1、b2;将告警与回滚脚本入口化。
- 灰度期采用影子观测:对照 QPS/P99/ErrRate/rho/bp.level 与基线。
- 打开闸门并执行发布;若触发闸门,按 VIII 的升级顺序执行;发布结束后生成 SLA_window 报告。
- 周期回顾:复核 epsilon_window、卡方检验直方图漂移、优化桶界与采样率。
XIII. 实现绑定(与 I70-7/I70-8)
- 指标上报
- metric_emit("threads.req_total", 1, {endpoint,prio})
- metric_emit("threads.good_total", 1, {endpoint})
- metric_emit("chan.q_len", q_len, {chan})
- 追踪
- span = trace_span("svc.handle", attrs={gid,pid_thr,endpoint})
- trace_link(span, eid)
- 合同计算
- sli_slo_compute({"type":"latency","quantile":0.99,"threshold_ms":200}, window="7d")
- assert_thread_contract(G, tests=[...])
XIV. 跨卷锚点与时间校准
delta_form = | ( 1 / c_ref ) * ( ∫ n_eff d ell ) - ( ∫ ( n_eff / c_ref ) d ell ) |,作为时序校正不确定度。T_arr = ( 1 / c_ref ) * ( ∫ n_eff d ell ) 与 T_arr = ( ∫ ( n_eff / c_ref ) d ell ) 并计算差异
当 SLI 涉及跨域链路时,可引入 T_arr 作为同步锚点;需提供路径 gamma(ell) 与测度 d ell,两口径
XV. 交付物与验收清单
- 指标字典与桶配置;标签白名单;Good 判定规则。
- SLO 合同与误差预算策略;多窗口燃尽告警配置。
- 追踪采样与保留策略;日志结构与隐私掩码策略。
- 基线报表:QPS/P99/ErrRate/W_q/rho/bp.level 与 A_path;告警演练记录与回滚成功证据。
版权与许可(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/