2. 归因特征服务架构设计:整体架构分层与核心组件

归因特征服务作为归因分析系统的核心数据供给层,其架构设计直接决定了特征计算的时效性、稳定性和可扩展性。本章将详细阐述归因特征服务的整体架构分层、核心组件、数据流与依赖关系,帮助读者建立从数据接入到特征输出的完整架构视图。

2.1 整体架构分层

归因特征服务采用经典的三层架构设计:接入层、计算层和存储层。每一层职责清晰,通过标准接口进行通信,便于独立扩展和运维。

架构层 核心职责 关键组件 稳定性关注点
接入层 统一入口、协议转换、请求路由、限流熔断 API Gateway、负载均衡器、请求校验模块 高并发下的限流策略、超时控制、降级开关
计算层 特征逻辑编排、归因规则执行、实时/离线计算 特征计算引擎、规则引擎、任务调度器 计算资源隔离、任务超时重试、数据一致性
存储层 特征数据持久化、缓存加速、元数据管理 在线 KV 存储、离线数仓、缓存集群、元数据库 缓存穿透/雪崩、数据冷热分层、备份恢复
架构设计原则:每一层都具备独立的水平扩展能力,层与层之间通过异步消息队列或 RPC 接口解耦,避免单点故障扩散。

2.2 核心组件介绍

2.2.1 接入层组件

  • API Gateway:统一对外暴露 HTTP/HTTPS 接口,负责请求鉴权、参数校验、协议转换(如 ProtoBuf 转 JSON)。
  • 限流熔断器:基于令牌桶或滑动窗口算法,对突发流量进行削峰;当下游计算层响应超时或错误率超过阈值时,自动熔断并返回降级特征。
  • 请求路由:根据特征 ID 或业务线标识,将请求分发到对应的计算节点,支持灰度发布和流量染色。

2.2.2 计算层组件

  • 特征计算引擎:核心计算单元,负责执行特征逻辑(如用户最近 7 天点击次数、归因窗口期内的转化率)。支持 Groovy/Java 动态脚本热加载。
  • 规则引擎:管理归因规则(如首次点击归因、末次点击归因、线性归因),支持规则版本管理和在线切换。
  • 任务调度器:管理离线批量特征计算任务,支持依赖编排、失败重试、任务优先级调度。

2.2.3 存储层组件

  • 在线 KV 存储:使用 Redis 或自研 KV 引擎,存储高频访问的实时特征,TTL 策略按特征冷热程度差异化设置。
  • 离线数仓:基于 Hive/Iceberg 存储全量历史特征数据,用于回溯分析和模型训练。
  • 元数据库:记录特征定义、版本、依赖关系、数据源映射等元信息,是特征治理的基础。

2.3 数据流与依赖关系

归因特征服务的数据流分为实时链路和离线链路两条主线,两条链路在存储层汇聚,共同支撑特征服务。

2.3.1 实时数据流

  1. 事件采集:客户端/服务端上报行为事件(如曝光、点击、转化)到消息队列(Kafka)。
  2. 实时消费:计算层实时消费事件流,通过 Flink/Spark Streaming 进行窗口聚合,生成实时特征。
  3. 特征写入:实时特征写入在线 KV 存储,同时异步写入离线数仓。
  4. 在线查询:接入层收到特征查询请求后,从在线 KV 存储读取特征并返回。

2.3.2 离线数据流

  1. 数据同步:离线数仓从 Kafka 或业务 DB 同步全量事件数据。
  2. 批量计算:任务调度器触发离线特征计算任务(如 T-1 全量特征回溯),计算结果写入离线数仓。
  3. 特征导出:离线特征定期导出到在线 KV 存储,用于补充实时特征未覆盖的场景。
依赖关系管理:特征服务对外依赖包括消息队列(Kafka)、在线 KV 存储(Redis)、离线数仓(Hive)和元数据库。建议为每个依赖配置独立的连接池和超时阈值,避免单一依赖故障影响全局。

2.4 架构总览图

下图展示了归因特征服务的整体架构分层、核心组件以及实时/离线数据流走向。

归因特征服务整体架构图 归因特征服务整体架构图 接入层 API Gateway 限流熔断器 请求路由 计算层 特征计算引擎 规则引擎 任务调度器 存储层 在线 KV 存储 离线数仓 元数据库 数据流说明: 实时链路:事件采集 → 消息队列 → 实时消费 → 在线 KV 存储 → 在线查询 离线链路:数据同步 → 批量计算 → 离线数仓 → 特征导出 → 在线 KV 存储

2.5 依赖关系矩阵

特征服务对外部组件的依赖关系直接影响稳定性巡检策略的制定。下表列出了核心依赖及其关键指标:

依赖组件 依赖类型 关键指标 故障影响
Kafka 强依赖 消息堆积量、消费延迟 实时特征更新停滞
Redis 强依赖 缓存命中率、连接数、内存使用率 在线查询超时或降级
Hive/Iceberg 弱依赖(离线) 任务完成率、数据产出延迟 离线特征缺失,不影响在线
元数据库 强依赖(管理面) 读写延迟、连接池状态 特征发布/变更失败
稳定性巡检重点:实时链路中 Kafka 消费延迟和 Redis 缓存命中率是最高优先级的巡检指标。建议设置多级告警阈值(Warning / Critical),并配置自动降级策略(如缓存穿透时返回默认特征)。

2.6 架构设计要点总结

  • 分层解耦:接入层、计算层、存储层职责分离,每层可独立扩缩容,避免单层故障扩散。
  • 实时/离线双链路:实时链路保障低延迟特征查询,离线链路提供全量历史特征,两条链路在存储层汇聚。
  • 依赖治理:明确强弱依赖关系,为强依赖组件配置熔断降级和限流策略,为弱依赖组件设置异步补偿机制。
  • 可观测性:每层组件暴露核心指标(延迟、吞吐、错误率),支持链路追踪和日志聚合,便于快速定位故障。