考fanout设计、大V处理、排序、缓存——高级系统设计经典。
两种核心方式:推(写扩散:A发推时写入每个粉丝的时间线)vs 拉(读扩散:读时合并所有关注的最新推文)。
推:读便宜(一次顺序读);写被粉丝数放大。普通用户合适、大V灾难。
拉:读贵(合并N个feed);写便宜。适合低读频,高QPS读扛不住。
混合:普通用户推、大V帖子读时拉合并。行业标准。
排序:按时间→机器学习打分。特征存储喂模型,对候选排序。保留最近N小时可排序窗口。
纯推死在大V——5000万粉丝的人发一条就是5000万次写。纯拉死在读QPS——每读合并N个feed太慢。答案是混合:普通用户推进他们预算的时间线,某些用户标为"大V"写时不全量fan out;读时把大V最新推文合并进预算时间线。排序加特征存储和ML ranker——近期推来的候选+拉来的大V候选过模型打分预测互动概率。媒体存对象存储(S3)+CDN;时间线条目只存ID不存内容。缓存:Redis存热时间线、分钟级TTL、新帖write-through。有趣追问:取关(下次读时lazy清)、编辑/删除(墓碑读时过滤)。
预算时间线是吞吐优化;实时排序加延迟——挑好位置。
大V阈值(如10万粉丝)要按存储成本vs时延曲线实证调优。
即答侠用具体数字讲"大V问题"——面试官能看出你真懂trade-off。
写路径打墓碑、读路径过滤。墓碑出了活跃窗口之后再GC。
按时间调试容易、有用户明确要。算法排序互动指标更好。多数平台两种都提供。