设计一个实时推荐系统
这是一个经典的开放设计题。请设计一个支持千万级DAU的实时推荐系统,要求:1)架构分层(接入层/计算层/存储层/服务层);2)实时特征计算框架选型;3)推荐算法模型(召回/排序/重排)分别在离线和实时链路如何实现;4)如何保证系统在双11等大流量下的低延迟和高可用。
回答
小字辈
实时推荐系统设计
架构分层:
- 接入层:Nginx → Kafka(用户行为日志)
- 实时特征层:Flink消费Kafka,实时计算用户行为特征(点击/收藏/购买)
- 模型推理层:Triton Inference Server / TorchServe 部署深度学习模型
- 存储层:Redis(用户画像实时更新)+ Faiss(向量检索召回)+ HBase(离线特征)
- 服务层:推荐编排服务,调用召回→排序→重排→混排→输出
算法链路:
- 离线训练:Spark ML训练DeepFM/DIN模型,每天更新
- 实时召回:Flink实时计算协同过滤相似度 + 向量召回
- 实时排序:LightGBM/Ranker在线打分,Flink实时更新模型权重
- 重排:多样性控制(MMR算法)+ 业务规则过滤
高可用方案:
- 多层缓存(Nginx本地Cache → Redis → 特征Cache)
- 降级策略:模型降级为LR,召回降级为热门推荐
- 弹性扩容:K8s HPA基于请求QPS自动扩缩容
大流量兜底:提前压测 + 预热缓存 + 限流熔断