4. 自动化冻结闸口架构:整体架构图、核心组件
自动化变更冻结闸口并非单一工具,而是一个由策略引擎、调度器和监控探针三大核心组件构成的闭环系统。该架构负责在蓝绿发布流程中,根据预定义规则自动判断当前是否应进入冻结状态,并在冻结期间拦截非授权变更,同时保障蓝绿环境的流量切换与健康检查不受影响。
4.1 整体架构图
下图展示了自动化冻结闸口在蓝绿发布流水线中的位置及其与周边系统的交互关系。闸口作为变更管道的“阀门”,串联了 CI/CD 流水线、监控告警系统和基础设施层。
架构要点:策略引擎是“大脑”,负责规则解析与决策;调度器是“手脚”,负责执行冻结/解冻动作;监控探针是“感官”,负责采集实时数据并反馈给策略引擎。三者形成“感知-决策-执行”的闭环。
4.2 核心组件详解
4.2.1 策略引擎
策略引擎是冻结闸口的决策中心,负责加载、解析和评估冻结规则。它根据预定义的时间窗口、变更类型、环境标签、业务影响等级等条件,输出“冻结”或“放行”的决策结果。
| 功能模块 | 职责说明 | 技术选型参考 |
|---|---|---|
| 规则加载器 | 从配置中心或 Git 仓库拉取冻结规则(YAML/JSON) | Consul / etcd / GitOps |
| 规则解析器 | 将规则编译为可执行的决策树或 Rego 策略 | OPA (Open Policy Agent) |
| 上下文注入器 | 注入当前时间、变更元数据、环境状态等上下文 | Webhook 请求体解析 |
| 决策输出器 | 返回 allow/deny 结果及原因描述 | JSON 响应 / gRPC |
最佳实践:策略引擎应支持热加载,避免因规则变更而重启服务。建议将冻结规则存储在 Git 仓库中,通过 CI/CD 流水线自动同步到策略引擎,实现规则变更的版本控制和审计追踪。
4.2.2 调度器
调度器是冻结闸口的执行组件,负责接收策略引擎的决策结果,并协调蓝绿发布流程中的具体操作。它管理冻结状态的切换、变更任务的排队与放行,以及超时处理。
- 状态管理:维护全局冻结状态(冻结中 / 解冻中 / 已冻结 / 已解冻),支持分布式锁防止状态冲突。
- 任务队列:将冻结期间到达的变更请求放入阻塞队列,待解冻后按优先级顺序执行。
- 超时熔断:若冻结操作超过预设时间(如 30 秒)未完成,触发熔断并回滚至安全状态。
- 蓝绿协调:在蓝绿切换期间,调度器确保流量切换动作不受冻结策略误拦截,支持白名单机制。
# 调度器状态机示例(伪代码)
state_machine:
initial: UNFROZEN
states:
UNFROZEN:
on_freeze_request: FROZEN
on_deploy: allow
FROZEN:
on_freeze_request: deny
on_deploy: deny
on_unfreeze_request: UNFROZEN
FROZEN_PENDING:
on_timeout: UNFROZEN
on_freeze_success: FROZEN
4.2.3 监控探针
监控探针是冻结闸口的感知层,负责持续采集蓝绿环境的健康指标、变更状态和异常事件,并将数据反馈给策略引擎作为动态决策依据。
| 探针类型 | 采集指标 | 数据用途 |
|---|---|---|
| 健康探针 | Pod 状态、API 响应码、延迟 P99 | 判断蓝绿环境是否可用,避免在异常时冻结 |
| 变更探针 | Deployment 版本、ConfigMap 变更、Ingress 规则 | 检测是否有未授权的变更正在执行 |
| 流量探针 | 蓝绿流量比例、会话保持率、错误率 | 评估蓝绿切换是否完成,辅助解冻决策 |
| 事件探针 | K8s Events、告警通知、审计日志 | 触发紧急冻结或自动解冻 |
注意:监控探针的采集频率不宜过高,建议健康探针 10 秒/次,变更探针 30 秒/次,避免对 API Server 造成过大压力。探针数据应带有时间戳和标签,便于策略引擎进行时序分析。
4.3 组件协作流程
以下 SVG 图展示了在一次蓝绿发布过程中,三大组件如何协同完成“自动冻结 → 变更拦截 → 解冻放行”的完整流程。
关键设计:反馈回路是架构的核心——监控探针不仅采集数据,还将环境状态实时反馈给策略引擎,使冻结决策具备动态调整能力。例如,若蓝环境在冻结期间出现异常,策略引擎可自动提前解冻并回滚流量。