系统设计 Lab
推荐系统是一个 funnel:廉价的 retrieval 把数百万 item 收窄到几百个,然后一个昂贵的 ranker 给幸存者打分。
调节用户数、catalog 大小、请求速率、每请求 retrieve 的 candidate 数、ranking 模型延迟、embedding 维度和 feature 数量。设计会从一个 popularity list,走到 collaborative filtering,再到带 ANN retrieval 的 two-tower embedding,然后是由 feature store 支撑的 ranking model,最后到 real-time feature 和规模化的完整 multi-stage serving。
分步讲解
一步一步把它想清楚
要点
常规演进场景
从左到右点击,就是预设的演示路径。每张卡片都会改变 workload 输入。
推荐形态
瓶颈
为什么会变
决策权衡
有出处支撑的规则
这些是模型背后那些经得起时间考验的 system design 论断。而 slider 的具体阈值,则被刻意标注为教学用的假设。
Sampling-Bias-Corrected Neural Modeling (Yi et al., 2019)
分开的 user tower 和 item tower 产出 embedding,其点积近似相关性,于是 retrieval 就变成在预计算好的 item 向量上做 nearest-neighbor 搜索。
Google ResearchANN 搜索让 nearest-neighbor retrieval 扩展到数十亿向量
approximate nearest neighbor 库(ScaNN、FAISS)和 vector database 用一点点 recall 换来快几个数量级的相似度搜索,正是这点让 retrieval 能在毫秒内扫过一个巨大的 catalog。
ScaNN (Google Research)feature store 在 online 和 offline 提供同一套 feature
feature store 为 serving 提供低延迟的 online feature lookup,为训练提供一致的历史 feature,从而避免 training/serving skew。
Feast大规模推荐是分阶段的:先 candidate generation 再 ranking
经典模式是先用一个廉价的 retrieval 阶段把巨大的 item 集合收窄,再让更昂贵的 ranking 阶段给幸存者打分,于是重型计算只触及几百个 item。
System Design Primer教学用假设
- retrieval 成本被建模成一次 per-request 扫描,ANN 把它从随 catalog 大小线性变成大致对数级,所以 brute force 只在小 catalog 上还活得下去。
- 每台 server 的 ranking throughput 会随模型延迟和 feature 数量下降;这些数字是保守的教学预算,不是厂商 benchmark。
- feature-store 负载按每请求每 candidate 每 feature 一次 lookup 来算,是 batching 和 caching 之前的最坏情况。