4. 集成架构总览:Policy Check与SLI口径的集成逻辑、数据流与分层架构图
Policy Check 规则库与 SLI 口径的集成,本质上是将“规则定义层”与“指标计算层”通过标准化的数据流和接口进行解耦与联动。本章从全局视角出发,阐述两者的集成逻辑、核心数据流以及分层架构设计,帮助读者建立完整的架构认知。
4.1 集成逻辑:规则驱动口径,口径反馈规则
Policy Check 与 SLI 口径并非简单的“调用-返回”关系,而是形成闭环的双向驱动逻辑:
- 正向驱动(规则 → 口径):Policy Check 规则库中的每条规则(如“P99 延迟 ≤ 200ms”)定义了 SLI 的阈值条件和计算窗口。口径引擎根据规则中的
metric_name、aggregation、filter等字段,动态生成对应的 SLI 查询语句。 - 反向反馈(口径 → 规则):SLI 口径计算出的实际指标值(如当前 P99 = 180ms)会回写到 Policy Check 的评估上下文,触发规则引擎进行合规性判定(Pass / Warn / Fail)。判定结果进一步影响规则库的动态调优(如自动调整阈值)。
关键设计原则:规则库只定义“做什么”和“什么条件下做”,口径引擎只负责“如何算”和“算多准”。两者通过统一的 SLI 口径契约(Schema)进行交互,避免逻辑耦合。
4.2 核心数据流:从规则下发到指标回写
一次完整的 Policy Check 与 SLI 口径集成流程包含以下 5 个步骤:
| 步骤 | 数据流向 | 关键操作 | 产出物 |
|---|---|---|---|
| 1 | 规则库 → 口径调度器 | 规则引擎将待评估的规则列表(含口径参数)推送给口径调度器 | 口径计算任务清单 |
| 2 | 口径调度器 → 数据源 | 调度器根据规则中的 data_source 和 query_template 生成具体查询 |
时序/日志查询请求 |
| 3 | 数据源 → 口径计算引擎 | 数据源返回原始指标数据,计算引擎执行聚合、降噪、窗口计算 | SLI 原始值(如 P99 = 185ms) |
| 4 | 口径计算引擎 → 规则评估器 | 将计算后的 SLI 值按规则 ID 回传给规则评估器 | 带 rule_id 的指标结果 |
| 5 | 规则评估器 → 规则库 | 评估器执行阈值比较,更新规则状态(健康/告警/故障) | 规则状态变更事件 |
数据流避坑:步骤 2 和步骤 4 之间必须设计超时熔断机制。若口径计算超过规则设定的
eval_timeout(默认 30s),调度器应直接返回“数据不可用”状态,避免阻塞规则评估链路。
4.3 分层架构图:四层模型与职责边界
为了实现上述集成逻辑与数据流,我们采用四层分层架构。每一层只关注自身职责,通过 API 或消息队列进行通信。
架构要点:
- 第1层与第4层同属 Policy Check 域,但职责分离:第1层负责“定义”,第4层负责“执行”。
- 第2层与第3层同属 SLI 口径域,但第2层负责“调度与路由”,第3层负责“实际计算”。
- 层间通信统一使用异步消息队列(如 Kafka / Pulsar),避免同步阻塞导致级联故障。
4.4 分层架构的横向扩展:数据源适配层
在实际生产环境中,SLI 数据可能来自 Prometheus、Elasticsearch、CloudWatch、自研监控系统等多种数据源。为此,我们在第2层(口径调度层)内部引入数据源适配器模式,使架构具备横向扩展能力。
适配器接口契约示例:
// QueryBuilder 接口定义
type QueryBuilder interface {
BuildQuery(metric string, aggregation string,
filter map[string]string, window time.Duration) (string, error)
ParseResult(raw []byte) (float64, error)
}
新增数据源时,只需实现该接口并注册到调度器的适配器工厂,即可无缝接入现有集成架构。
4.5 集成架构的关键质量属性
| 质量属性 | 实现策略 | 对应架构层 |
|---|---|---|
| 可扩展性 | 数据源适配器模式 + 口径计算引擎无状态化 | 第2层、第3层 |
| 高可用 | 规则库主从复制 + 口径调度器多副本 + 计算引擎故障转移 | 第1层、第2层、第3层 |
| 低延迟 | 规则缓存 + 口径结果缓存 + 预计算窗口 | 第1层、第3层 |
| 一致性 | 规则版本号驱动口径重新计算 + 幂等性设计 | 第1层、第4层 |
| 可观测性 | 每层暴露 metrics(请求量、延迟、错误率)+ 分布式追踪 | 全层 |
常见集成陷阱:
- 口径计算超时未处理:规则评估器长时间等待口径结果,导致规则评估链路阻塞。解决方案:为每个口径任务设置独立超时,超时后返回“数据缺失”状态。
- 规则与口径版本不一致:规则更新后,口径引擎仍使用旧参数计算。解决方案:在口径契约中携带
rule_version字段,调度器校验版本一致性。 - 数据源抖动导致 SLI 毛刺:单次数据源异常导致规则误告警。解决方案:在口径计算层引入“连续 N 个窗口异常才判定为故障”的降噪逻辑。
4.6 小结:集成架构全景
Policy Check 规则库与 SLI 口径的集成架构,通过四层解耦(规则定义层 → 口径调度层 → 口径计算层 → 规则评估层)实现了规则与指标的分离与协同。核心数据流采用异步消息驱动,确保各层独立演进。数据源适配器模式为架构提供了横向扩展能力,而关键质量属性(可扩展性、高可用、低延迟、一致性、可观测性)的保障策略贯穿全层。