推荐系统技术架构详解
推荐系统是现代互联网产品的核心引擎,广泛应用于电商、内容平台、社交应用等领域。本文将详细介绍一个完整的推荐系统技术架构,从数据采集到推荐结果展示的完整数据流转过程。
架构概览
该架构采用了经典的分层设计,包含六个核心模块:
- 数据源层 - 多源数据采集
- 近线计算层 - 实时数据处理
- 离线计算层 - 批量数据处理与模型训练
- 数据存储层 - 高性能数据存储
- 在线服务层 - 实时推荐服务
- 客户端层 - 多端展示
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)
主要功能:
召回(Recall)
- 多路召回策略(协同过滤、内容相似度、热度等)
- 从候选池中筛选候选物品
排序(Ranking)
- 加载 CTR 预估模型
- 对召回的物品进行打分排序
过滤(Filter)
- 过滤已购买/已浏览的物品
- 过滤库存不足的物品
- 过滤违规内容
打散(Diversify)
- 避免同类物品集中展示
- 提高推荐多样性
- 优化用户体验
分页(Pagination)
- 支持分页加载
- 优化前端性能
内容合并
- 合并多路召回的结果
- 去重处理
5.2 辅助功能
本地 LRU 缓存
- 缓存热点数据
- 减少数据库访问
AB 测试分桶
- 支持多种推荐策略的对比
- 灰度发布新算法
兜底补足
- 超时截断处理
- 热门榜单兜底
- 保证服务可用性
5.3 在线模型服务
TensorFlow Serving
功能:
- 加载 TensorFlow 训练的 CTR 模型
- 提供模型推理接口
- 支持模型版本管理
工作流程:
- 接收在线服务的特征向量
- 调用模型进行预测
- 返回预测得分
- 用于排序决策
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 Boot | Java 微服务框架 |
| 客户端 | Android/iOS/TV/PC | 多端应用 |
架构优势
1. 高可用性
- 多层缓存保证性能
- 兜底机制保证可用性
- 分布式存储保证可靠性
2. 实时性
- 近线计算提供秒级更新
- 实时特征计算
- 热点内容即时推荐
3. 可扩展性
- 所有存储层都支持水平扩展
- 计算层支持分布式计算
- 模型层支持版本管理
4. 可维护性
- 分层架构清晰
- 职责明确
- 易于排查问题
常见优化方向
1. 召回优化
- 增加召回路数
- 优化召回质量
- 引入深度学习召回
2. 排序优化
- 尝试更复杂的模型(DeepFM、DIN 等)
- 增加特征维度
- 多目标优化(点击率、转化率、GMV)
3. 实时性优化
- 优化近线计算延迟
- 增加实时特征
- 引入在线学习
4. 多样性优化
- 优化打散算法
- 探索与利用平衡
- 长尾物品曝光
总结
这个推荐系统架构是一个经典的工业级实现,涵盖了从数据采集到推荐展示的完整流程。通过分层设计和合理的技术选型,实现了高性能、高可用、可扩展的推荐服务。
对于中小型团队,可以根据实际业务需求进行简化:
- 减少召回路数
- 使用更简单的排序模型
- 合并部分存储层
- 使用云服务替代自建集群
关键是理解推荐系统的核心思想,并根据业务场景选择合适的技术栈和架构设计。