背景介绍
Feed是一种承载信息的单元,feed系统就是信息分发系统。
Feed系统通常有两个要素,召回和排序,召回决定有哪些feed应该分发给哪些用户,并且由于用户的屏幕有限,需要设定优先级,因此就有了排序规则。根据这两点的不同,通常可以分为Timeline Feed和Top K Feed
TimelineFeed指的是根据用户与用户之间的关注关系来召回Feed,然后基于发布时间排序的简单信息流系统。 Top K Feed指的是根据某些召回策略,召回feed,然后基于推荐模型排序的复杂推荐系统。
目标接口的设计
- 用户发布一篇Feed 可以是 视频/文章/推文/微博/朋友圈等
- 用户关注其他用户/取消关注的用户
- 用户查看订阅频道,可以看到关注的用户发布的Feed,以发布时间排序
- 用户可以点击某个feed,进入到当前feed的详情页面。
- 用户可以点击某个用户头像,进入到该用户主页面,展示他曾经发布的Feed
- 用户可以点赞,评论,转发一篇Feed,用户的feed上也会展示标题/封面/点赞/评论/浏览数信息
- 用户可以看到自己的收藏/点赞/浏览记录列表,并设置是否公开的权限
- 合规安全性,不能放出非法内容,需要有审核机制。
评估接口健壮的标准
假设有5亿的日活
接口 | 延迟p99上限 | 吞吐量平均值 | 吞吐量峰值 | 可用性 |
---|---|---|---|---|
Feed列表接口 | <=200ms | 60k QPS | 90k QPS | 5个9 |
用户发布视频接口 | <=500ms | 6k QPS | 12k QPS | 5个9 |
用户访问视频详情页&个人主页 | <=200ms | 2k QPS | 3k QPS | 4个9 |
用户关注/点赞/转发 | <=50ms | 6k QPS | 12k QPS | 4个9 |
用户发布评论接口 | <=300ms | 2k QPS | 5k QPS | 3个9 |
用户读取评论列表 | <=200ms | 10k QPS | 20k QPS | 3个9 |
用户访问收藏/点赞/浏览记录列表 | <=200ms | 1k QPS | 1.5k QPS | 3个9 |
存储容量
假设一篇feed视频大小2MB,则一天存储增量2MB * 6K * 24 * 60 * 60约等于1000TB存储。
网络带宽
网络请求的带宽可以忽略不计,但是视频CDN的带宽是巨大的,这里近似等于视频的大小2M 用户一刷10条Feed,小视频形式每刷都会点击,所以CDN消耗近似等于视频分发的量级 10items * 60K * 2M * 24H * 60min * 60sec ≈ 100PB。
负载特性
Feed系统是一个典型的读多写少负载场景,通常为100:1,一个用户发feed,有100个用户会阅 读此feed。