核心概念:Serverless 架构原理、冷启动与热启动、弹性伸缩模型、配额与限制
在深入 PromServerless 平台的容量调优与配额校准之前,必须建立对 Serverless 核心概念的精确理解。这些概念不仅是架构设计的基石,更是后续所有调优动作的决策依据。本节将逐一拆解四个关键领域:架构原理、启动模型、伸缩机制以及配额与限制体系。
2.1 Serverless 架构原理
Serverless 并非“没有服务器”,而是将服务器的管理、运维、容量规划完全抽象化,由平台负责。开发者只需关注业务代码(函数),平台负责执行环境的创建、调度、扩缩容与计费。
PromServerless 平台基于事件驱动架构,核心组件包括:
- 函数(Function):最小的部署与计费单元,包含代码、运行时依赖与配置。
- 触发器(Trigger):事件源,如 HTTP 请求、消息队列、定时任务、对象存储事件等。
- 调度器(Scheduler):负责将事件路由到函数实例,并管理实例的生命周期。
- 工作节点(Worker Node):实际运行函数容器的计算资源池。
- 元数据服务(Metadata Service):存储函数配置、版本、别名及调用记录。
架构要点: 平台通过控制面(Control Plane)与数据面(Data Plane)分离实现高弹性。控制面处理函数注册、版本管理与调度决策;数据面专注于函数代码的快速执行与资源隔离。
2.2 冷启动与热启动
启动模式直接影响函数调用的延迟,是容量调优的核心关注点之一。PromServerless 平台通过实例复用机制来优化启动性能。
| 启动类型 | 定义 | 典型延迟 | 触发条件 | 资源消耗 |
|---|---|---|---|---|
| 冷启动 | 平台没有可用实例,需要从零开始:下载代码包 → 初始化运行时 → 执行初始化代码 → 处理请求 | 500ms ~ 5s(取决于代码包大小与依赖) | 首次调用、实例被回收后、大规模突发流量 | 高(CPU + 网络 I/O + 磁盘 I/O) |
| 热启动 | 平台有已初始化完成的空闲实例,直接复用执行环境处理请求 | 1ms ~ 10ms | 实例保持活跃、请求间隔小于空闲超时时间 | 极低(仅计算逻辑) |
| 温启动 | 实例进程仍在,但部分连接(如数据库连接池)需要重建 | 50ms ~ 200ms | 实例空闲但未完全回收,部分资源被释放 | 中等 |
容量调优警示: 冷启动是延迟抖动的最大来源。在配额校准中,必须为关键业务函数预留足够的“预置并发”或“最小实例数”,以维持热启动比例在 95% 以上。监控指标
cold_start_ratio 应作为 SLO 的核心输入。
2.3 弹性伸缩模型
PromServerless 平台采用基于请求数的自动伸缩模型,核心目标是“在保证延迟 SLO 的前提下,最小化运行实例数”。伸缩决策由调度器根据实时指标做出。
2.3.1 伸缩决策指标
- 并发请求数(In-Flight Requests):当前正在被处理的请求数量,是伸缩的主要依据。
- 实例利用率(Instance Utilization):每个实例的 CPU/内存使用率,用于判断是否需要扩容。
- 请求排队深度(Queue Depth):等待被调度的请求数量,深度增加触发快速扩容。
- 冷启动率(Cold Start Ratio):过去 1 分钟内冷启动次数占总调用次数的比例,过高时触发预置实例调整。
2.3.2 伸缩策略对比
| 策略类型 | 触发条件 | 扩容速度 | 适用场景 | 风险 |
|---|---|---|---|---|
| 快速扩容 | 并发请求数 > 当前实例数 × 阈值(如 80%) | 秒级(1~5s) | 突发流量、秒杀活动 | 可能过度扩容导致资源浪费 |
| 稳定扩容 | 排队深度持续增长超过 3 个周期 | 10~30s | 平稳增长的业务 | 扩容滞后可能导致请求超时 |
| 缩容 | 实例空闲时间超过空闲超时(默认 5 分钟) | 分钟级 | 低峰期节省成本 | 缩容过快导致后续请求冷启动 |
最佳实践: 对于延迟敏感型函数,建议设置
min_instance = 2 和 reserved_concurrency = 10,确保始终有热实例可用。对于批处理型函数,可以允许缩容到 0,以最大化成本效率。
2.4 配额(Quota)与限制(Limit)的定义
配额与限制是平台资源治理的核心工具,也是容量调优的直接操作对象。理解两者的区别是校准工作的前提。
| 维度 | 配额(Quota) | 限制(Limit) |
|---|---|---|
| 定义 | 资源使用的“上限”,由平台管理员或系统预设,用于防止单个函数或租户耗尽集群资源 | 函数实例在运行时能够使用的“资源边界”,由函数配置定义 |
| 作用范围 | 租户级别、命名空间级别或集群级别 | 函数实例级别(每个实例) |
| 典型参数 | 最大并发实例数、总内存使用量、每秒请求数(RPS) | CPU 上限、内存上限、临时磁盘大小、最大执行时间 |
| 超出后果 | 请求被拒绝(429 Too Many Requests)或排队等待 | 实例被 OOM Kill、CPU 被节流(Throttle)、执行超时 |
| 调优目标 | 校准配额使其接近实际峰值需求,避免浪费或拒绝 | 校准限制使其匹配函数实际资源需求,避免资源浪费或性能瓶颈 |
2.4.1 PromServerless 平台关键配额与限制参数
- 函数级配额:
max_concurrent_executions:函数最大并发执行数,默认 100,可调整。reserved_concurrency:预留给该函数的并发数,确保关键业务不被其他函数抢占。provisioned_concurrency:预置实例数,用于消除冷启动。
- 实例级限制:
memory_limit:每个实例最大内存,范围 128MB ~ 10GB,步长 1MB。cpu_limit:与内存绑定,默认 1 vCPU 对应 1GB 内存。timeout:函数最大执行时间,默认 60s,最大 900s。ephemeral_storage:临时磁盘空间,默认 512MB,最大 10GB。
- 租户级配额:
total_memory_quota:租户下所有函数实例的总内存上限。total_concurrent_executions:租户下所有函数的并发执行总数上限。
校准核心公式: 配额校准的本质是找到“资源供给”与“业务需求”之间的平衡点。校准后的配额应满足:
配额 ≥ 峰值并发 × 实例限制,同时 配额 ≤ 集群剩余容量 × 安全系数(通常 0.8)。