2. 核心概念:弹性伸缩、运营任务与编排
在构建标准化运营任务编排 API 之前,必须统一团队对三个核心概念的认知:弹性伸缩(资源维度)、运营任务(操作维度)和编排(流程维度)。三者共同构成了平台工程中“自动化运维”的语义基础。
2.1 弹性伸缩:水平 vs 垂直
弹性伸缩是平台应对负载变化的核心能力,分为两种基本模式:
| 维度 | 水平伸缩(Scale Out/In) | 垂直伸缩(Scale Up/Down) |
|---|---|---|
| 操作对象 | 实例数量(Pod / 虚拟机 / 容器) | 单实例资源配置(CPU / 内存 / 磁盘) |
| 典型场景 | Web 服务应对突发流量 | 数据库或中间件性能升级 |
| 生效速度 | 秒级(新增实例启动) | 分钟级(需重启实例) |
| 资源粒度 | 整机/整容器 | 单机资源上限调整 |
| API 语义 | replicas: 5 → 10 |
resources.limits.cpu: 2 → 4 |
| 常见限制 | 需无状态设计、会话保持 | 受宿主机物理上限约束 |
平台工程要点:标准化 API 应同时暴露两种伸缩模式的参数,并在编排层通过策略决定使用哪种模式。例如:CPU 利用率 > 80% 时优先水平扩容,内存接近上限时触发垂直扩容。
2.2 运营任务:部署、回滚与扩缩容
运营任务是平台对外暴露的最小可执行操作单元。在标准化 API 设计中,每个任务都应具备幂等性、可观测性和可中断性。以下是三类核心运营任务的定义:
- 部署(Deploy):将指定版本的应用制品发布到目标环境。包含镜像拉取、配置注入、健康检查等子步骤。
- 回滚(Rollback):将应用恢复到上一个已知的稳定版本。必须保留至少 N 个版本的发布历史。
- 扩缩容(Scaling):调整目标服务的副本数或资源规格。支持水平(replicas)和垂直(resources)两种模式。
API 设计建议:将每个运营任务建模为
Task 资源,包含 type(deploy/rollback/scale)、params(版本号、副本数等)、status(pending/running/succeeded/failed)三个核心字段。
2.3 编排:工作流 vs 状态机
编排是将多个运营任务组合成自动化流程的机制。平台工程中主要采用两种编排模型:
| 特性 | 工作流(Workflow) | 状态机(State Machine) |
|---|---|---|
| 流程结构 | 有向无环图(DAG),任务按依赖顺序执行 | 有限状态集合,通过事件驱动状态迁移 |
| 适用场景 | CI/CD 流水线、批量发布 | 故障恢复、滚动升级、金丝雀发布 |
| 状态管理 | 隐式,由 DAG 执行引擎维护 | 显式,每个状态对应一组允许的操作 |
| 错误处理 | 重试、跳过、终止整个工作流 | 定义错误状态及转移规则 |
| API 示例 | POST /workflows 提交 DAG 定义 |
POST /statemachines/{id}/transition |
常见误区:不要将工作流和状态机对立。实际平台中,一个运营任务编排往往同时使用两者——工作流定义任务执行顺序,状态机管理单个任务的内部生命周期。
2.4 三者的关系与标准化 API 映射
弹性伸缩、运营任务和编排在平台工程中并非孤立概念,而是层层递进的关系:
- 弹性伸缩定义了“做什么”(资源调整的语义);
- 运营任务定义了“怎么做”(具体的操作单元);
- 编排定义了“何时做、按什么顺序做”(流程与状态管理)。
标准化 API 的设计目标,就是将这三层语义统一到一套资源模型中:
// 运营任务编排 API 核心资源模型(简化示例)
{
"apiVersion": "platform.io/v1",
"kind": "OperationPipeline",
"spec": {
"tasks": [
{
"name": "scale-out-web",
"type": "Scale",
"params": {
"mode": "horizontal",
"targetReplicas": 10
}
},
{
"name": "health-check",
"type": "Deploy",
"params": {
"action": "check",
"timeoutSeconds": 120
}
}
],
"workflow": {
"edges": [
{"from": "scale-out-web", "to": "health-check"}
]
},
"stateMachine": {
"initial": "pending",
"states": {
"pending": {"on": "start", "to": "running"},
"running": {"on": "success", "to": "succeeded"},
"running": {"on": "failure", "to": "failed"}
}
}
}
}
课程关键结论:标准化 API 的核心价值在于将弹性伸缩、运营任务和编排三者解耦后重新组合。平台使用者只需声明“我要什么”(伸缩目标),而不必关心“如何实现”(底层编排细节)。