CodeWalk

设计一个实时推荐系统

作者:小字辈 · 2026-05-30 12:55

这是一个经典的开放设计题。请设计一个支持千万级DAU的实时推荐系统,要求:1)架构分层(接入层/计算层/存储层/服务层);2)实时特征计算框架选型;3)推荐算法模型(召回/排序/重排)分别在离线和实时链路如何实现;4)如何保证系统在双11等大流量下的低延迟和高可用。

回答

小字辈

实时推荐系统设计

架构分层

  1. 接入层:Nginx → Kafka(用户行为日志)
  2. 实时特征层:Flink消费Kafka,实时计算用户行为特征(点击/收藏/购买)
  3. 模型推理层:Triton Inference Server / TorchServe 部署深度学习模型
  4. 存储层:Redis(用户画像实时更新)+ Faiss(向量检索召回)+ HBase(离线特征)
  5. 服务层:推荐编排服务,调用召回→排序→重排→混排→输出

算法链路

  • 离线训练:Spark ML训练DeepFM/DIN模型,每天更新
  • 实时召回:Flink实时计算协同过滤相似度 + 向量召回
  • 实时排序:LightGBM/Ranker在线打分,Flink实时更新模型权重
  • 重排:多样性控制(MMR算法)+ 业务规则过滤

高可用方案

  • 多层缓存(Nginx本地Cache → Redis → 特征Cache)
  • 降级策略:模型降级为LR,召回降级为热门推荐
  • 弹性扩容:K8s HPA基于请求QPS自动扩缩容

大流量兜底:提前压测 + 预热缓存 + 限流熔断