2. Serverless 控制面蓝图基础:蓝图定义、组件构成
在生产窗口内执行 Scale-to-Zero 回滚验证之前,必须首先理解 Serverless 控制面蓝图的定义与核心组件。蓝图是平台控制面的“架构宪法”,它规定了 API 入口、业务逻辑调度与状态持久化三者之间的协作关系。本章将拆解蓝图定义,并逐一分析 API Gateway、Function Controller 与 State Store 三个基础组件。
2.1 蓝图定义
Serverless 控制面蓝图是一组描述平台运行时行为的抽象模型,它定义了控制面组件之间的通信协议、状态转换规则与扩展策略。在生产环境中,蓝图通常以声明式配置(如 YAML 或 CRD)的形式存在,并被控制面控制器持续调谐。
| 蓝图属性 | 说明 | 生产窗口影响 |
|---|---|---|
| 组件拓扑 | API Gateway、Controller、State Store 的部署关系 | 决定回滚时组件依赖顺序 |
| 状态机定义 | 函数实例从 Active → Scale-to-Zero → 恢复的转换规则 | 回滚验证的核心校验对象 |
| 扩展策略 | 基于指标(请求数、CPU、内存)的扩缩容阈值 | Scale-to-Zero 触发条件与回滚边界 |
| 一致性契约 | State Store 中实例状态的读写一致性级别 | 回滚期间状态回退的可靠性 |
2.2 组件构成与职责
控制面蓝图由三个核心组件构成,它们各自承担独立的职责,并通过定义良好的接口进行交互。下图展示了三组件在控制面中的位置与数据流关系。
2.3 组件详解
2.3.1 API Gateway
API Gateway 是控制面的统一入口,负责接收外部请求并路由至对应的函数实例。在生产窗口中,API Gateway 还承担着流量切换与灰度发布的关键职责。
- 路由管理: 根据函数名称、版本、别名将请求分发至正确的后端。
- 认证与限流: 在入口层拦截非法请求,防止回滚期间异常流量冲击控制面。
- 协议转换: 将 HTTP/gRPC 请求转换为控制面内部事件格式。
- 回滚感知: 当 Controller 触发回滚时,API Gateway 需快速切换路由表至上一版本。
2.3.2 Function Controller
Function Controller 是控制面的“大脑”,负责实例的生命周期管理、扩缩容决策与回滚执行。它是 Scale-to-Zero 回滚验证中最核心的组件。
| Controller 子模块 | 职责 | 回滚验证关注点 |
|---|---|---|
| 调度器 | 将函数实例分配到计算节点 | 回滚后实例分布是否与上一版本一致 |
| 扩缩容引擎 | 基于指标驱动实例数变化 | Scale-to-Zero 触发阈值是否被正确回退 |
| 状态机 | 维护实例状态转换(Active→Idle→Zero) | 回滚后状态机是否回到上一版本定义 |
| 回滚协调器 | 执行多组件协同回滚 | 回滚顺序与依赖关系是否正确 |
2.3.3 State Store
State Store 是控制面的持久化层,存储函数实例状态、蓝图版本、扩缩容历史等关键数据。在回滚验证中,State Store 的数据一致性直接决定回滚的可靠性。
- 状态持久化: 记录每个函数实例的当前状态(Active、Idle、Scale-to-Zero)。
- 版本管理: 存储蓝图的版本历史,支持按版本号回退。
- 一致性保证: 生产环境通常使用强一致性(Linearizability)或读己之写(Read-Your-Writes)级别。
- 故障恢复: 当 Controller 重启或回滚中断时,State Store 提供断点续传能力。
2.4 组件协作流程
下图展示了在正常生产窗口中,三个组件如何协作完成一次函数调用与 Scale-to-Zero 状态转换。该流程是回滚验证的基线行为。
2.5 蓝图版本化与回滚基础
控制面蓝图本身需要版本化管理。每次生产窗口变更(包括 Scale-to-Zero 策略调整)都会生成一个新的蓝图版本。回滚操作的本质是将控制面组件调谐到上一个版本的蓝图定义。
# 蓝图版本示例:v2.3.1 中的 Scale-to-Zero 策略片段
apiVersion: controlplane.example.com/v1
kind: Blueprint
metadata:
name: prod-blueprint
version: "2.3.1"
spec:
scaleToZero:
enabled: true
idleThreshold: 300s # 空闲 5 分钟后缩容
cooldownPeriod: 60s # 冷却期 60 秒
minInstances: 0
components:
apiGateway:
routingTableVersion: "v23"
functionController:
stateMachineVersion: "v4"
stateStore:
consistencyLevel: "read-your-writes"