Skip to content

推荐系统技术架构详解

推荐系统是现代互联网产品的核心引擎,广泛应用于电商、内容平台、社交应用等领域。本文将详细介绍一个完整的推荐系统技术架构,从数据采集到推荐结果展示的完整数据流转过程。

架构概览

该架构采用了经典的分层设计,包含六个核心模块:

  1. 数据源层 - 多源数据采集
  2. 近线计算层 - 实时数据处理
  3. 离线计算层 - 批量数据处理与模型训练
  4. 数据存储层 - 高性能数据存储
  5. 在线服务层 - 实时推荐服务
  6. 客户端层 - 多端展示

1. 数据源层

数据源是推荐系统的"原材料",质量直接决定推荐效果。

1.1 前端打点日志

通过 Kafka 流式接入用户的实时行为数据,包括:

  • 浏览、点击、收藏、购买等行为
  • 停留时长、滚动深度等交互数据
  • 设备信息、地理位置等上下文数据

1.2 物品内容数据

存储于 MySQL,包含:

  • 商品/内容的元数据(标题、描述、标签)
  • 分类、品牌、价格等结构化信息
  • 内容的文本、图像、视频等富媒体数据

1.3 用户画像数据

存储于 HBase,包括:

  • 用户的基本属性(年龄、性别、地域)
  • 历史行为偏好
  • 兴趣标签向量
  • 社交关系图谱

2. 近线计算层

近线计算负责处理实时数据流,保证推荐的时效性。

2.1 Spark Streaming

核心组件,用于实时流式计算:

输入数据:

  • 行为日志(Kafka 流)

处理逻辑:

  • 实时统计用户的短期兴趣
  • 动态更新物品的热度榜单
  • 生成实时特征向量

输出数据:

  • 特征向量
  • 排序列表
  • 召回索引

应用场景:

  • 用户刚浏览的商品实时推荐
  • 热门内容的即时更新
  • 实时个性化调整

3. 离线计算层

离线计算负责大规模数据的批量处理和模型训练。

3.1 数据存储与建模

HDFS - 分布式文件系统

  • 存储海量原始数据
  • 支持大规模并行计算

Hive - 数据仓库

  • 数据清洗与预处理
  • 特征工程
  • 特征标签构造

3.2 批量计算

Spark Batch - 批量计算引擎

输入数据:

  • 物品内容数据(MySQL)
  • 用户画像数据(HBase)
  • 行为日志(历史数据)

计算任务:

  • 特征向量的批量计算
  • 排序模型的批量预测
  • 多路召回索引的构建
  • 热度榜单的生成

输出数据:

  • 特征向量
  • 排序列表
  • 召回索引
  • 热度榜单
  • 本地/HDFS 文件

3.3 模型训练

TensorFlow 模型训练

目标:

  • 训练 CTR(Click-Through Rate)预估模型
  • 模型评分预测
  • 排序模型优化

输出:

  • CTR 预估模型(TensorFlow 格式)

4. 数据存储层

数据存储层需要同时满足高性能读写和大容量存储的需求。

4.1 Redis - 内存数据库

存储内容:

  • Item 内容数据(热点物品)
  • I2 推荐结果(物品到物品的推荐)
  • Item 特征向量

优势:

  • 毫秒级响应速度
  • 支持高并发访问
  • 丰富的数据结构

应用场景:

  • 热点物品的快速检索
  • 实时推荐结果的缓存
  • 相似物品的快速匹配

4.2 Cassandra - 分布式数据库

存储内容:

  • U2 推荐结果(用户到物品的推荐)
  • User 特征向量

优势:

  • 线性可扩展
  • 高可用性
  • 写入性能优异

应用场景:

  • 用户个性化推荐列表
  • 用户兴趣向量的存储

5. 在线服务层

在线服务层是推荐系统的"大脑",负责实时计算和决策。

5.1 核心服务(Spring Boot)

主要功能:

  1. 召回(Recall)

    • 多路召回策略(协同过滤、内容相似度、热度等)
    • 从候选池中筛选候选物品
  2. 排序(Ranking)

    • 加载 CTR 预估模型
    • 对召回的物品进行打分排序
  3. 过滤(Filter)

    • 过滤已购买/已浏览的物品
    • 过滤库存不足的物品
    • 过滤违规内容
  4. 打散(Diversify)

    • 避免同类物品集中展示
    • 提高推荐多样性
    • 优化用户体验
  5. 分页(Pagination)

    • 支持分页加载
    • 优化前端性能
  6. 内容合并

    • 合并多路召回的结果
    • 去重处理

5.2 辅助功能

本地 LRU 缓存

  • 缓存热点数据
  • 减少数据库访问

AB 测试分桶

  • 支持多种推荐策略的对比
  • 灰度发布新算法

兜底补足

  • 超时截断处理
  • 热门榜单兜底
  • 保证服务可用性

5.3 在线模型服务

TensorFlow Serving

功能:

  • 加载 TensorFlow 训练的 CTR 模型
  • 提供模型推理接口
  • 支持模型版本管理

工作流程:

  1. 接收在线服务的特征向量
  2. 调用模型进行预测
  3. 返回预测得分
  4. 用于排序决策

6. 客户端层

客户端层负责向用户展示推荐结果。

支持平台:

  • Android
  • iOS
  • TV(智能电视)
  • PC(网页端)

功能:

  • 接收推荐结果
  • 展示个性化内容
  • 收集用户反馈(点击、收藏、购买)
  • 上报行为日志

数据流完整路径

实时推荐路径

用户行为 → Kafka → Spark Streaming → 特征计算 → Redis → 在线服务 → 客户端

批量推荐路径

历史数据 → HDFS → Hive → Spark Batch → Cassandra/Redis → 在线服务 → 客户端

模型推理路径

TensorFlow 训练 → 模型文件 → TensorFlow Serving → 在线服务 → 客户端

技术选型总结

层级技术栈用途
数据采集Kafka消息队列,流式数据传输
实时计算Spark Streaming实时流式计算
批量计算Spark Batch大规模批量计算
数据仓库Hive数据存储与查询
模型训练TensorFlow深度学习模型训练
模型推理TensorFlow Serving在线模型推理
内存存储Redis高性能内存数据库
分布式存储Cassandra可扩展的 NoSQL 数据库
在线服务Spring BootJava 微服务框架
客户端Android/iOS/TV/PC多端应用

架构优势

1. 高可用性

  • 多层缓存保证性能
  • 兜底机制保证可用性
  • 分布式存储保证可靠性

2. 实时性

  • 近线计算提供秒级更新
  • 实时特征计算
  • 热点内容即时推荐

3. 可扩展性

  • 所有存储层都支持水平扩展
  • 计算层支持分布式计算
  • 模型层支持版本管理

4. 可维护性

  • 分层架构清晰
  • 职责明确
  • 易于排查问题

常见优化方向

1. 召回优化

  • 增加召回路数
  • 优化召回质量
  • 引入深度学习召回

2. 排序优化

  • 尝试更复杂的模型(DeepFM、DIN 等)
  • 增加特征维度
  • 多目标优化(点击率、转化率、GMV)

3. 实时性优化

  • 优化近线计算延迟
  • 增加实时特征
  • 引入在线学习

4. 多样性优化

  • 优化打散算法
  • 探索与利用平衡
  • 长尾物品曝光

总结

这个推荐系统架构是一个经典的工业级实现,涵盖了从数据采集到推荐展示的完整流程。通过分层设计和合理的技术选型,实现了高性能、高可用、可扩展的推荐服务。

对于中小型团队,可以根据实际业务需求进行简化:

  • 减少召回路数
  • 使用更简单的排序模型
  • 合并部分存储层
  • 使用云服务替代自建集群

关键是理解推荐系统的核心思想,并根据业务场景选择合适的技术栈和架构设计。

参考资料

MIT