2. Serverless 平台架构基础:核心组件、资源隔离与租户映射

在深入 HPA 接入与容量调优之前,必须建立对 Serverless 平台底层架构的清晰认知。本章聚焦三大基础模块:FaaS 与 BaaS 核心组件、资源隔离模型以及租户与命名空间的映射关系。这些概念直接决定了 HPA 策略的生效范围与配额校准的粒度。

2.1 Serverless 核心组件:FaaS 与 BaaS

Serverless 平台并非单一运行时,而是由两大核心组件协同构成:

组件 全称 职责 典型实现
FaaS Function as a Service 函数计算、事件驱动、自动弹性伸缩 Knative、OpenWhisk、Fission
BaaS Backend as a Service 托管后端服务(数据库、缓存、对象存储、消息队列) 云数据库、Redis、Kafka、对象存储
关键理解: FaaS 负责“计算”的弹性伸缩,BaaS 负责“状态”的持久化与连接。HPA 主要作用于 FaaS 层,但 BaaS 的连接池、并发上限会反向影响 FaaS 的扩容决策。

FaaS 内部通常包含以下子组件:

  • 函数调度器(Function Scheduler):接收事件,决定将函数实例调度到哪个 Worker 节点。
  • 函数运行时(Function Runtime):容器化执行环境,支持多种语言(Python、Node.js、Go 等)。
  • 弹性伸缩控制器(AutoScaler):基于并发请求数、CPU/内存指标、自定义指标驱动扩缩容。
  • 网关层(Gateway):统一入口,负责鉴权、限流、路由转发。
Serverless 核心组件架构图 Serverless 核心组件架构 用户 / 事件源 API 网关 函数调度器 函数运行时 弹性伸缩控制器 BaaS 服务层 数据库 缓存 消息队列 对象存储 说明 FaaS 负责计算弹性 BaaS 负责状态持久化

2.2 资源隔离模型

Serverless 平台采用多层资源隔离策略,确保不同租户的函数在共享基础设施上互不干扰。隔离粒度从粗到细分为以下层次:

隔离层级 隔离粒度 实现方式 对 HPA 的影响
物理节点 整机 Kubernetes Node 亲和性、Taint/Toleration 节点资源预留影响扩容上限
容器组 Pod Kubernetes Pod、cgroup 资源限制 Pod 资源 Request/Limit 决定 HPA 阈值
函数实例 单函数 容器沙箱(gVisor、Firecracker) 实例并发度影响扩容决策
租户级 命名空间 Kubernetes Namespace + ResourceQuota 租户配额直接约束 HPA 最大副本数
实践要点: 在 Serverless 平台中,租户级隔离是配额校准的核心边界。HPA 扩容时不能突破租户在命名空间级别设置的 ResourceQuota 上限,否则会导致 Pod 创建失败。

2.3 租户与命名空间映射关系

每个租户在平台内部被映射到一个或多个 Kubernetes Namespace。映射模型通常分为两种:

  • 1:1 映射:一个租户独占一个 Namespace,隔离性最强,管理简单,但 Namespace 数量随租户增长线性增加。
  • 1:N 映射:一个租户拥有多个 Namespace(如开发、测试、生产环境),适用于大型企业租户,需要额外的标签或注解来标识归属。

映射关系通过平台元数据服务维护,典型的数据结构如下:

# 租户与命名空间映射示例(YAML)
apiVersion: serverless.platform.io/v1
kind: TenantMapping
metadata:
  name: tenant-abc-prod
spec:
  tenantID: "tenant-abc"
  tenantName: "ABC 科技有限公司"
  namespaces:
    - name: "ns-abc-prod"
      role: "production"
      resourceQuota:
        cpu: "32"
        memory: "128Gi"
        pods: "200"
    - name: "ns-abc-staging"
      role: "staging"
      resourceQuota:
        cpu: "8"
        memory: "32Gi"
        pods: "50"
  defaultNamespace: "ns-abc-prod"
租户与命名空间映射关系图 租户与命名空间映射关系 租户 A tenantID: tenant-abc 映射服务 ns-abc-prod (生产) ns-abc-staging (预发) ns-abc-dev (开发) 命名空间配额约束 每个 Namespace 独立设置 ResourceQuota:CPU、内存、Pod 数量上限 HPA 扩容时,副本数不能超过 Namespace 的 Pod 配额上限

2.4 映射关系在 HPA 配额校准中的角色

当 HPA 接入 Serverless 平台后,配额校准流程必须依赖租户-命名空间映射关系:

  1. 识别租户归属:通过函数所属 Namespace 反查租户 ID。
  2. 读取配额上限:从映射服务获取该 Namespace 的 ResourceQuota 中的 Pod 数量上限。
  3. 计算可用容量:当前已运行 Pod 数 + HPA 期望扩容数 ≤ 配额上限。
  4. 执行校准:若超出配额,HPA 将扩容请求截断或触发告警。
常见陷阱: 如果映射关系维护不及时(如租户迁移 Namespace 后未更新映射表),HPA 可能读取到错误的配额数据,导致扩容失败或超配额。建议在映射服务中引入版本号或事件通知机制,确保配额数据实时同步。

本章内容为后续 HPA 接入策略与容量调优提供了架构基础。理解 FaaS/BaaS 分工、隔离模型层次以及租户映射机制,是正确设计配额校准逻辑的前提。