3. 资源配额模型定义:分配策略与模型设计

云原生网关的资源配额模型是保障多租户隔离、服务质量(QoS)和成本可观测性的核心。资源配额不仅定义了单个网关实例或租户可使用的上限,还决定了在资源争抢时的调度行为。本节从配额维度、分配策略和模型数据结构三个层面展开。

3.1 核心配额维度与语义

网关资源配额通常围绕四个关键指标建模,每个指标对应不同的限流与调度语义:

配额维度 单位 语义说明 典型上限(参考)
CPU mCores(毫核) 网关 worker 进程可使用的 CPU 时间片上限,影响 TLS 握手、路由匹配、请求反序列化等计算密集型操作。 2000m ~ 8000m
内存 MiB / GiB 网关进程堆外内存、连接池、缓存(如路由表、JWT 公钥)的总占用上限。 512Mi ~ 4Gi
连接数 个 网关同时维持的 TCP 连接数(包括客户端侧与上游侧),直接影响文件描述符消耗与内存开销。 1000 ~ 50000
QPS 请求/秒 网关每秒可处理的请求速率,通常基于令牌桶或漏桶算法实现软限或硬限。 1000 ~ 100000
设计要点:CPU 与内存配额通常绑定到 Pod/容器资源限制(如 Kubernetes ResourceQuota),而连接数与 QPS 配额则属于应用层配额,需在网关配置中心(如控制面 xDS)中独立建模。

3.2 分配策略:静态预留 + 动态弹性

资源配额分配策略采用两层模型:

  1. 静态基线(Static Base):为每个租户或网关组分配固定的最小保障资源,确保基础流量不因争抢而饥饿。
  2. 动态弹性(Dynamic Burst):在全局资源池有余量时,允许租户临时突破静态配额,但受限于全局共享池上限。

分配公式如下:

有效配额 = 静态基线 + min(动态弹性请求, 全局共享池剩余量 × 权重因子)

其中权重因子由租户的优先级(critical / high / medium / low)决定,优先级越高,在共享池争抢时获得的比例越大。

漂移告警触发条件:当实际使用量持续超过静态基线 + 动态弹性上限的 90% 且持续时间超过 5 分钟,系统判定为“资源配额模型漂移”,触发告警并进入复测流程。

3.3 模型数据结构设计

资源配额模型在控制面中以 YAML/JSON 结构存储,并通过 xDS 协议下发给数据面。以下是一个简化但完整的模型定义:

{
  "resourceQuota": {
    "tenantId": "tenant-abc-123",
    "gatewayGroup": "prod-gw-east",
    "staticBase": {
      "cpu": "2000m",
      "memory": "1024Mi",
      "connections": 5000,
      "qps": 10000
    },
    "dynamicBurst": {
      "cpu": "1000m",
      "memory": "512Mi",
      "connections": 2000,
      "qps": 5000
    },
    "priority": "high",
    "quotaScope": "namespace",
    "validSince": "2025-01-01T00:00:00Z",
    "validUntil": "2025-12-31T23:59:59Z"
  }
}

模型字段说明:

  • staticBase:硬保障资源,即使全局资源紧张也不允许被抢占。
  • dynamicBurst:弹性资源上限,实际可突发量受全局共享池约束。
  • priority:参与共享池分配时的权重等级。
  • quotaScope:配额作用域(namespace / cluster / global),决定隔离粒度。
  • validSince / validUntil:配额有效期,用于自动过期与回收。

3.4 配额模型架构关系

下图展示了资源配额模型在网关控制面与数据面之间的流转关系:

资源配额模型架构关系图 控制面 配额模型定义 + 策略引擎 配置中心 xDS 下发配额配置 数据面 执行限流 + 上报用量 推送模型 xDS 下发 监控与告警 用量采集 + 漂移检测 复测流程 模型校准 + 回归验证 用量上报 触发告警 模型更新 说明: 1. 控制面定义配额模型并推送至配置中心,配置中心通过 xDS 协议下发至数据面。 2. 数据面执行限流并周期性上报用量,监控系统检测到漂移后触发复测流程。 3. 复测流程校准后的模型回写至控制面,形成闭环。

3.5 配额漂移的典型场景

资源配额模型漂移通常由以下原因引起:

  • 流量突增:业务促销或攻击流量导致 QPS 和连接数远超静态基线 + 弹性上限。
  • 配置变更未同步:控制面更新了配额模型,但数据面因 xDS 推送延迟或失败仍使用旧配置。
  • 资源泄漏:网关连接池或内存缓存未及时释放,导致实际用量持续高于配额。
  • 多租户干扰:高优先级租户抢占共享池资源,导致低优先级租户的有效配额被压缩。
注意:当检测到配额漂移时,不应立即调整模型,而应先通过复测流程确认漂移是临时峰值还是长期趋势。临时峰值可通过动态弹性吸收,长期趋势才需要修改静态基线。

3.6 模型设计的可观测性要求

为支持漂移告警与复测,配额模型必须暴露以下指标:

指标名称 类型 用途
quota_cpu_usage_ratio Gauge CPU 使用量 / CPU 配额,用于判断 CPU 是否接近上限。
quota_memory_usage_ratio Gauge 内存使用量 / 内存配额,用于判断内存是否接近上限。
quota_connections_usage Gauge 当前活跃连接数,用于判断连接数是否接近配额。
quota_qps_current Gauge 当前 QPS 速率,用于判断是否接近 QPS 配额。
quota_burst_remaining Gauge 动态弹性剩余量,用于判断弹性池是否耗尽。