SWE / Applied Scientist · System Design / OOD

Amazon YouTube TopK:时间窗计数、重放与热点

定义排名指标和窗口,比较精确聚合、候选筛选及近似TopK。

题目重点:定义排名指标和窗口,比较精确聚合、候选筛选及近似TopK。

题意与假设

这道练习题保留了面经中值得训练的核心约束,并将需要澄清的条件单独列出。现场拿到变体时,先和面试官确认这些条件。

  • 只有YouTube Top-K系统设计方向。练习按有效播放事件、最近一小时滚动窗口、全局TopK;榜单新鲜度允许分钟级,不宣称这是披露的指标。
  • 同一eventId不重复计数,播放有效性与bot过滤由规则版本决定;浏览量、观看时长、点赞各是不同榜,不能混合分母。

解题路线

  1. 事件包含eventId/videoId/eventTime,写持久流后按video分区去重和计数。滚动窗口分成分钟bucket,进入新分钟加新桶,退出旧桶减旧贡献;watermark与允许迟到时限明确。
  2. 精确结果可保存所有窗口内video count,并维护排名结构/周期计算。分区按同key完整计数再取各分区TopK,候选并集可得到精确全局TopK;若每分区只统计该video的部分贡献,局部TopK可能丢全局赢家。
  3. 热video可用salt分散写,但恢复TopK前必须归并它所有salt。重复、回放与late correction带版本,不能直接对缓存incr后再消费一次流重复累计。
  4. 用户地区/类别榜会增加维度状态;先从全局和少数固定维度做容量,避免每用户一榜无限组合。近似sketch可减少空间,但应给误差及候选复核合同,不能声称所有排序都精确。

手动走一遍

两分区若A被分散为60+60,而各分区有本地B/C各100,局部Top1漏掉真实A120;按video完整聚合后再选局部TopK则不会出现此问题。迟到播放重算后榜单版本提升,客户端不拿旧缓存覆盖。

规模与取舍

窗口bucket状态约O(V×B),V为活跃video、B桶数;周期精确排序O(V log V),堆取K约O(V log K)。假设1亿事件/日平均1157/s,峰值和每事件字节另算,不能把平均当峰值。

易错点与追问

容易失分的边界

  • 未定义TopK依据及时间窗口。
  • 分散同video计数后直接局部TopK,错漏赢家。
  • 回放流重复加缓存,榜单无限膨胀。

继续深挖

  • 窗口结束后迟到事件要改旧榜还是只更新当前榜?
  • 分数相同如何稳定分页并处理刷新?
✓已复制微信号!