2. 监控系统架构总览:分层架构设计

工业级模型漂移监控系统需要处理高吞吐、多模态的推理数据,同时保证实时性与历史回溯能力。采用分层架构将数据流、计算逻辑与展示解耦,是生产环境中最成熟的实践模式。本章定义四层核心架构,并给出技术选型原则。

2.1 四层架构总览

系统从下至上分为:数据采集层 → 特征存储层 → 检测计算层 → 告警与可视化层。每层职责独立,通过标准接口通信,便于独立扩缩容与升级。

工业级模型漂移监控系统 — 四层架构总览 数据采集层 推理日志采集 · 特征提取 · 消息队列缓冲 特征存储层 实时特征窗口 · 离线特征仓库 · 双存储引擎 检测计算层 统计检验 · 分布距离计算 · 滑动窗口调度 告警与可视化层 多级告警路由 · 仪表盘 · 漂移报告 L1 L2 L3 L4

2.2 各层职责与关键组件

层级 核心职责 关键组件 / 技术 数据形态
数据采集层 从推理服务实时拉取请求/响应日志,提取模型输入、输出、置信度等原始特征 Filebeat / Fluentd · Kafka / Pulsar · 轻量特征提取 SDK 原始 JSON 日志 → 结构化特征事件
特征存储层 保存近期滑动窗口特征与长期历史特征,支持快速读取与批量分析 Redis / Aerospike(实时) · ClickHouse / Parquet(离线) 特征向量 + 时间戳 + 模型版本标签
检测计算层 按调度周期对比参考分布与当前分布,计算漂移指标 Spark Streaming / Flink · PSI / KS / 马氏距离 计算库 分布统计量 → 漂移分数
告警与可视化层 根据阈值触发告警,提供交互式仪表盘与定期报告 Prometheus + Alertmanager · Grafana · 飞书/钉钉 Webhook 漂移事件 → 通知 / 图表
实践建议: 数据采集层与特征存储层之间务必引入消息队列(如 Kafka),实现生产端与消费端的流量削峰与解耦。生产环境中,推理日志的峰值 QPS 可能达到数万,直接写入数据库会导致连接打满。

2.3 技术选型三大原则

技术选型直接影响系统能否在 99.9% 可用性要求下稳定运行。以下三条原则是架构评审的核心依据:

  • 可扩展性(Scalability):每一层都应支持水平扩展。数据采集层通过增加消费者组分区数提升吞吐;特征存储层使用分片集群;检测计算层采用无状态计算节点,通过 K8s HPA 自动扩缩。
  • 低延迟(Low Latency):从推理日志产生到漂移检测结果可见,端到端延迟应控制在 1 分钟以内(滑动窗口 10 分钟场景)。关键路径避免串行写库,采用内存计算 + 异步持久化。
  • 容错性(Fault Tolerance):任何单点故障不应导致数据丢失或检测中断。消息队列开启副本机制;特征存储层主从切换;检测计算层支持 checkpoint 与 exactly-once 语义。
技术选型三大原则 可扩展性 水平扩缩容 无状态设计 分区与分片 K8s HPA 自动扩缩 低延迟 端到端 < 1 分钟 内存计算优先 异步持久化 避免串行写库 容错性 副本与主从切换 Checkpoint 机制 Exactly-once 语义 故障自动恢复 三条原则共同决定系统 SLA,缺一不可

2.4 分层架构的典型数据流

一次完整的漂移检测请求经历以下步骤:

  1. 采集:推理服务将请求/响应日志以 JSON 格式写入本地文件,Filebeat 实时采集并推送至 Kafka Topic model-inference-log。
  2. 特征提取:Flink 作业消费 Kafka 消息,解析出模型输入特征分布、预测类别、置信度等字段,写入 Redis 实时窗口(最近 10 分钟)与 ClickHouse 离线表。
  3. 检测计算:定时任务(每 5 分钟)从 Redis 读取当前窗口特征,从 ClickHouse 读取参考分布(上一周数据),计算 PSI 或 KS 统计量。
  4. 告警与展示:若漂移分数超过阈值(如 PSI > 0.2),Prometheus 记录指标并触发 Alertmanager 发送告警至飞书群;Grafana 仪表盘实时更新漂移趋势曲线。
关键指标参考: 在日均 1000 万次推理的生产环境中,上述架构可实现:采集延迟 < 2 秒,特征写入延迟 < 500 毫秒,检测计算延迟 < 30 秒,端到端总延迟 < 1 分钟。单层故障不影响其他层数据持久化。

2.5 架构决策记录(示例)

决策编号 决策内容 备选方案 选择理由
ADR-001 数据采集层使用 Kafka 作为消息中间件 RabbitMQ、Pulsar Kafka 在日志采集场景吞吐量最高,社区成熟,与 Flink 集成最佳
ADR-002 实时特征存储使用 Redis Cluster Memcached、Aerospike Redis 支持丰富的数据结构(Sorted Set 用于时间窗口),且运维成本低
ADR-003 检测计算层采用 Flink 流处理 + 定时窗口触发 Spark Streaming、纯批处理 Flink 原生支持事件时间与精确一次语义,适合滑动窗口漂移计算
ADR-004 告警使用 Prometheus + Alertmanager Zabbix、自研告警模块 Prometheus 生态与 K8s 深度集成,Alertmanager 支持告警分组与静默
避坑提醒: 不要将所有特征数据都写入同一张 ClickHouse 表。建议按模型名称和时间分区,避免单表数据量过大导致查询性能劣化。实时窗口数据(Redis)与离线数据(ClickHouse)的 TTL 策略必须分开设置,防止存储爆炸。