串级控制 = 嵌套的多级反馈
一、控制论本质
串级控制是闭环反馈的嵌套结构:内环是"快变量",外环是"慢变量"。内环目标由外环动态设定。
┌──────────────────────────┐
r_外 ──→ e_外 ─┤ 外环 C_外(s) │
│ ↓ r_内 │
│ ┌─────────────────┐ │
│ │ 内环 C_内(s) │ │
│ │ u_内 → G_内(s) → y_内 │
│ │ ↑ │ │
│ │ └─ 反馈 ────┘ │
│ └─────────┬──────────┘ │
│ ↓ │
└────────── y_外 ────────────┘
↓ (内环是外环的被控对象一部分)关键属性:
- 两个反馈环:内环 + 外环
- 内环调节快变量(如 CPU、QPS)
- 外环调节慢变量(如业务指标、SLO)
- 时间常数比:内环响应时间 ≪ 外环响应时间(典型 3-5 倍)
为什么有效:
- 内环抑制快扰动(如突发的 QPS 尖刺)
- 外环调节慢目标(如业务指标偏离)
- 内外环分工,各自优化
二、钱学森原话
钱学森 Ch 5 §5.2: "串级控制系统是工程实践中常用的一种结构。 它由两个或两个以上的反馈回路套在一起组成。 内环的输出作为外环被控对象的一部分, 内环的目标值由外环的控制器给出。"
钱学森 Ch 5 §5.2: "设计串级控制系统的关键是: 使内环的响应速度远大于外环, 这样内环可以看作外环被控对象的'快速随动系统'。"
三、软件工程对位
| 串级控制场景 | 软件工程实例 |
|---|---|
| 多级 SLO | 业务 SLO(外)→ 服务 SLO(中)→ 资源 SLO(内) |
| 链路追踪 | 业务链路(外)→ 服务调用(中)→ 方法调用(内) |
| K8s 调度 | 应用副本数(外)→ 节点资源(内) |
| 缓存分层 | 业务命中率(外)→ L1 缓存(内)→ L2 缓存(次内) |
| 监控分级 | 业务告警(外)→ 服务告警(中)→ 资源告警(内) |
| 数据库分层 | 业务 QPS(外)→ 库 QPS(中)→ 连接池(内) |
| 前端性能 | 业务转化率(外)→ 页面加载(中)→ 资源加载(内) |
共同特征:
- 多级指标
- 时间常数有差异
- 内环自动响应外环目标
四、调用的 L 层方法论
| 方法论 | 在串级中的角色 |
|---|---|
| closed-loop(闭环反馈) | 串级 = 多个闭环的嵌套 |
| slo(服务等级目标) | 串级的目标分解 |
| log-metric-trace(日志/指标/链路) | 串级的多级测量 |
五、实战案例
案例 1:多级 SLO 监控
串级结构:
外环目标:业务可用性 ≥ 99.95%
外环控制:调整服务 SLO 目标
内环目标:服务 P99 延迟 ≤ 200ms
内环控制:调整资源/限流阈值
业务 SLO(99.95%) ← 外环(慢)
↓
服务 SLO(P99<200ms) ← 中环
↓
资源 SLO(CPU<70%) ← 内环(快)时间常数:
- 业务 SLO:小时级(统计窗口大)
- 服务 SLO:分钟级
- 资源 SLO:秒级
案例 2:分布式追踪的层级
串级结构:
外环:业务请求 trace(root span)
中环:服务调用 span
内环:方法调用 span
Trace ID ──→ root span
↓ parent_id
service span
↓ parent_id
method span案例 3:数据库连接池分层
串级结构:
外环:业务 QPS 调节
中环:数据库连接池调节
内环:SQL 执行时间调节
业务 QPS ↑ ← 外环(分钟级)
↓
池大小 ↑ ← 中环(秒级)
↓
SQL 超时 ↑ ← 内环(毫秒级)六、设计原则
原则 1:时间常数分离
τ_内 ≪ τ_外
典型比例:3-5 倍
过近:内外环互相干扰(震荡)
过远:内环失去意义(响应太慢)原则 2:内环目标由外环动态设定
r_内(t) = C_外(e_外(t))
内环不独立设目标(除非应急)原则 3:内环必须先稳
设计顺序:
1. 内环先闭环(自己稳定)
2. 外环再闭环(在内环基础上)
3. 验证整体稳定七、反模式
| 反模式 | 症状 | 应该改用 |
|---|---|---|
| 时间常数接近 | 内外环互相震荡 | 重新分层(3-5 倍分离) |
| 内环自己不稳 | 整个系统震荡 | 先稳内环 |
| 内外环目标冲突 | 调节矛盾 | 重新分解目标 |
| 内环无独立应急 | 外环失效内环也停 | 内环加 fallback |
八、何时升级到其他结构
升级到协调控制:
- 串级只有 2-3 层
- 复杂系统需要 4 层以上(如云原生多级)
降级到单闭环:
- 内外环耦合过强
- 简单系统不需要分层
九、控制结构对位(供业务主题引用)
本结构被调用:
themes/observability:日志/指标/链路 = 串级themes/system-stability:多级 SLO = 串级
本结构调用:
closed-loop:每级都是闭环slo:目标分解log-metric-trace:多级测量
总结
串级控制 = 多级目标 + 分层响应。当业务场景是:
- 多个时间尺度的目标
- 内外响应时间差 3-5 倍
- 需要局部自治 + 全局协调
用串级:每一层独立优化,整体协调。
当串级层数过多(> 4 层),升级到协调控制(多级分散)。