2、租户配额管理基础:多租户模型、配额定义、配额类型(CPU/内存/请求数)
在服务网格治理回滚护栏场景中,租户配额校准是保障多租户隔离与资源公平性的核心机制。本章从多租户模型出发,系统阐述配额的定义、分类与计量方式,为后续 Envoy 动态配额校准奠定理论基础。
2.1 多租户模型
服务网格中的多租户模型通常采用 层级命名空间 与 标签选择器 相结合的方式实现逻辑隔离。每个租户对应一组工作负载(Deployment、Service、Pod),并通过 Envoy 的 Cluster 与 Listener 资源进行流量治理。
核心租户模型对比
| 模型类型 | 隔离粒度 | 配额作用域 | Envoy 映射方式 |
|---|---|---|---|
| 扁平命名空间 | Namespace 级别 | 每个 Namespace 独立配额 | 通过 envoy.filters.http.rbac 按 Namespace 过滤 |
| 层级命名空间 | Namespace + 标签 | 父租户可下放子配额 | 通过 envoy.config.route.v3.Route 的 metadata 匹配 |
| 网格级租户 | 全局 ServiceAccount | 跨 Namespace 共享配额池 | 通过 envoy.filters.network.http_connection_manager 的 stat_prefix 区分 |
在回滚护栏场景中,推荐使用 层级命名空间 模型,因为它支持配额下放与递归校准,便于在回滚时快速恢复父租户的配额基线。
2.2 配额定义与结构
配额(Quota)是对租户在单位时间内可消耗的资源上限的声明式约束。在 Envoy 网格中,配额定义通常以 CRD(Custom Resource Definition) 或 ConfigMap 形式存储,并通过 Rate Limit 过滤器或 Quota 插件动态加载。
配额定义三要素: 作用域(Scope)、资源类型(Resource Type)、阈值(Threshold)。缺少任一要素,配额校准将无法在回滚时正确恢复。
以下是一个典型的租户配额定义 YAML 示例:
apiVersion: mesh.quota/v1
kind: TenantQuota
metadata:
name: tenant-a-quota
namespace: mesh-system
spec:
tenant: "Tenant-A"
scope:
type: "Namespace"
value: "ns-tenant-a"
resources:
cpu:
limit: "2000m"
burst: "2500m"
memory:
limit: "4Gi"
burst: "5Gi"
requests:
limit: 10000
burst: 12000
window: "1s"
2.3 配额类型详解
根据资源维度,配额分为三大类:CPU 配额、内存配额 和 请求数配额。在回滚护栏场景中,三类配额需要独立校准,但共享同一个租户 ID 映射表。
| 配额类型 | 计量单位 | Envoy 指标来源 | 回滚校准策略 |
|---|---|---|---|
| CPU | millicores (m) | envoy_cluster_upstream_rq_time + 容器 CPU 监控 |
按历史基线比例回退 |
| 内存 | Gi / Mi | envoy_cluster_memory_allocated |
按租户权重重新分配 |
| 请求数 | QPS / RPS | envoy_cluster_upstream_rq_total |
按滑动窗口降级 |
2.4 配额类型交互流程
在 Envoy 网格中,三类配额并非独立运行,而是通过 配额仲裁器(Quota Arbiter) 协同工作。当请求到达时,仲裁器依次检查 CPU、内存和请求数配额,任一维度超限即触发回滚护栏。
2.5 配额校准的关键指标
在回滚护栏场景中,配额校准需要依赖以下实时指标:
- CPU 使用率:通过 Envoy 的
upstream_rq_time与容器 CPU 监控联合计算,单位 millicores。 - 内存占用:Envoy 的
memory_allocated指标,结合 Pod 的container_memory_working_set_bytes。 - 请求速率:Envoy 的
upstream_rq_total按 1s 窗口统计,单位 QPS。 - 租户权重:预定义的租户优先级权重,用于回滚时重新分配配额。
注意: 在回滚护栏触发时,CPU 和内存配额应优先降级(burst 归零),请求数配额应平滑降级(按比例减少),避免瞬时流量冲击导致雪崩。
2.6 配额类型与 Envoy 过滤器映射
Envoy 通过不同的过滤器实现三类配额的动态管控:
| 配额类型 | Envoy 过滤器 | 配置路径 | 校准方式 |
|---|---|---|---|
| CPU | envoy.filters.http.router + 外部 CPU 监控 |
通过 typed_metadata 传递 CPU 阈值 |
动态调整路由权重 |
| 内存 | envoy.filters.http.buffer + 内存限制 |
通过 max_request_bytes 控制 |
调整 buffer 大小 |
| 请求数 | envoy.filters.http.rate_limit |
通过 rate_limits 配置 |
动态更新限流规则 |
通过上述映射,Envoy 可以在不重启 Pod 的情况下,通过 xDS 动态更新配额阈值,实现回滚护栏的秒级校准。