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 或消息队列进行通信。

Policy Check 与 SLI 口径集成分层架构 第1层:规则定义层(Policy Check 规则库) 职责:规则 CRUD、版本管理、条件组合、阈值定义 核心组件:规则编辑器、规则版本控制器、规则缓存 输出:SLI 口径契约(metric_name, aggregation, filter, window) 第2层:口径调度层(SLI 口径调度器) 职责:任务解析、查询生成、数据源路由、超时熔断 核心组件:查询构造器、数据源连接池、任务队列 输出:具体数据源查询语句(PromQL / SQL / LogQL) 第3层:口径计算层(SLI 计算引擎) 职责:聚合计算、降噪处理、窗口对齐、异常值过滤 核心组件:流式计算引擎、批处理聚合器、缓存层 输出:带时间戳的 SLI 指标值(如 P99, error_rate, throughput) 第4层:规则评估层(Policy Check 评估器) 职责:阈值比较、多规则组合评估、状态判定、事件触发 核心组件:规则评估引擎、状态机、告警分发器 输出:规则状态(Pass / Warn / Fail)及关联的 SLI 证据
架构要点:
  • 第1层与第4层同属 Policy Check 域,但职责分离:第1层负责“定义”,第4层负责“执行”。
  • 第2层与第3层同属 SLI 口径域,但第2层负责“调度与路由”,第3层负责“实际计算”。
  • 层间通信统一使用异步消息队列(如 Kafka / Pulsar),避免同步阻塞导致级联故障。

4.4 分层架构的横向扩展:数据源适配层

在实际生产环境中,SLI 数据可能来自 Prometheus、Elasticsearch、CloudWatch、自研监控系统等多种数据源。为此,我们在第2层(口径调度层)内部引入数据源适配器模式,使架构具备横向扩展能力。

口径调度层内部:数据源适配器模式 口径调度器 Prometheus 适配器 Elasticsearch 适配器 CloudWatch 适配器 自研系统适配器 Prometheus 集群 ES 集群 AWS CloudWatch 自研 Metrics 服务 每个适配器实现统一的 QueryBuilder 接口,新增数据源只需新增适配器,无需修改调度器核心逻辑
适配器接口契约示例:
// 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 口径的集成架构,通过四层解耦(规则定义层 → 口径调度层 → 口径计算层 → 规则评估层)实现了规则与指标的分离与协同。核心数据流采用异步消息驱动,确保各层独立演进。数据源适配器模式为架构提供了横向扩展能力,而关键质量属性(可扩展性、高可用、低延迟、一致性、可观测性)的保障策略贯穿全层。